← 返回文章归档

Docker 学习笔记:镜像、容器与端口

从博客部署出发,理清镜像、容器、端口映射与持久化数据之间的关系。

镜像像配方,容器像做好的那一份

镜像包含运行程序需要的文件。容器是使用这份镜像启动的一个实例。同一个镜像可以启动多个独立的容器。

修改源码不会自动改变已经构建好的镜像。这个博客里的初始 Markdown 文章、页面代码和构建地址变化后,需要重新构建镜像并更新容器;在线后台保存的文章写入独立数据目录,会立即显示,不需要每次重建。

一个端口映射怎么读

127.0.0.1:8080 -> 容器内的 80

这表示服务器本机的 8080 端口会转发到容器里的 80 端口。两个容器都可以在内部监听 80,但它们不能同时绑定宿主机同一个地址的同一个端口。

为什么监听 127.0.0.1

让博客只接受服务器本机连接,公网请求由宿主机 Nginx 统一处理。需要预览时,还可以通过 SSH 隧道访问。

先看状态,再看日志

在项目目录下运行:

docker compose ps
docker compose logs --tail=60 blog
curl -f http://127.0.0.1:8080/healthz

容器处于运行状态,不代表里面的网站一定能够响应。健康检查能帮助发现“进程还在,但服务没有正常工作”的情况。

容器可以替换,文章数据要另外保存

当前博客使用命名卷保存在线文章和上传图片。替换容器或回滚镜像不会自动回滚这份数据,备份时需要同时考虑文章文件和环境配置。

docker compose down 与 docker compose down -v 的效果不同:后者会删除 Compose 管理的命名卷。还需要保留的数据,不能随着一次重建被清空。平时先用 docker compose ps 和卷配置确认数据实际保存在哪里。

镜像版本解释的是运行哪一份程序,数据备份解释的是能够恢复哪一时刻的内容。把两者分开记录,恢复时才能知道自己要换程序,还是要恢复文章。

留下一个可重复的过程

把端口、构建地址和启动方式写入项目配置,下一次部署时就不必依赖记忆。这也是学习工具时很有用的习惯:解决问题之后,把步骤留给未来的自己。

✳

感谢阅读,下一篇再见。

回到文章开头 ↑