镜像像配方,容器像做好的那一份
镜像包含运行程序需要的文件。容器是使用这份镜像启动的一个实例。同一个镜像可以启动多个独立的容器。
修改源码不会自动改变已经构建好的镜像。这个博客里的初始 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 和卷配置确认数据实际保存在哪里。
镜像版本解释的是运行哪一份程序,数据备份解释的是能够恢复哪一时刻的内容。把两者分开记录,恢复时才能知道自己要换程序,还是要恢复文章。
留下一个可重复的过程
把端口、构建地址和启动方式写入项目配置,下一次部署时就不必依赖记忆。这也是学习工具时很有用的习惯:解决问题之后,把步骤留给未来的自己。