单元五 Docker 发布与部署 · 第 21 课

正式部署:让它一直运行

第 19 课的容器关掉终端就停了。这一课把运行方式写进一个配置文件,让周报助手在后台一直运行,服务器重启后也能自动恢复。

本课目标

  • 理解 Docker Compose 的作用,写好 compose.yaml。
  • 用 Compose 在后台运行周报助手,学会查看状态和日志。
  • 验证服务器重启后服务会自动恢复。

先懂概念:把命令写成配置

第 19 课的 docker run 命令又长又容易打错,而且每次都要重新输入。Docker Compose 把这些参数写进一个 compose.yaml 文件,以后只需要:

docker compose up -d

文件就是部署的“说明书”:用哪个镜像、读哪个 .env、映射哪个端口、挂了要不要自动重启,一目了然。以后再加 HTTPS 等服务,也只是在这个文件里多写一段。

YAML 格式靠缩进表示层级,必须用空格,不能用 Tab 键,同一层级的缩进要对齐。

跟着做

以下命令都在服务器上运行。

1. 写 compose.yaml

cd ~/apps/weekly-report
cat > compose.yaml <<'EOF'
services:
  app:
    image: 你的用户名/weekly-report:v1
    env_file: .env
    restart: unless-stopped
    ports:
      - "127.0.0.1:3000:3000"
EOF

粘贴前把 你的用户名 改成你的 Docker Hub 用户名。也可以用 vim compose.yaml 手动输入,正好练习上一单元的 Vim。

配置意思
services要运行的服务清单,这里只有一个叫 app 的服务
image用仓库里的哪个镜像、哪个版本
env_file从同一文件夹的 .env 读取环境变量
restart: unless-stopped程序崩溃或服务器重启后自动拉起来,除非你手动停止
ports只在服务器本机开放 3000 端口,外网访问不到

检查配置有没有写错:

docker compose config --quiet && echo 配置正确

2. 启动

docker compose up -d

-d 表示在后台运行,命令执行完终端就还给你了。

3. 查看状态和日志

docker compose ps

STATUS 一列显示 Up 表示正在运行。

docker compose logs -f app

实时查看日志,按 Ctrl + C 停止查看。这只是停止查看,服务本身仍在运行。

4. 访问

和第 19 课一样,在自己电脑上建立隧道:

ssh -L 3000:127.0.0.1:3000 ai-server

浏览器打开 http://localhost:3000。这次即使你退出 SSH,周报助手也在服务器上照常运行。

5. 重启服务器试试

sudo reboot

SSH 连接会断开。等一分钟后重新登录:

ssh ai-server

看到服务器的提示符后,再运行:

cd ~/apps/weekly-report
docker compose ps

周报助手已经自动恢复运行了。

常用命令

都要在 compose.yaml 所在的文件夹里运行:

命令作用
docker compose up -d按配置启动;配置改了再运行一次就会按新配置重建
docker compose ps查看状态
docker compose logs -f app实时日志
docker compose restart app重启服务
docker compose down停止并删除容器(镜像和 .env 都还在)
docker compose pull从仓库拉取配置里写的镜像

你应该看到

  • docker compose ps 显示 app 服务 Up。
  • 通过隧道能正常使用周报助手。
  • 重启服务器后,服务自动恢复。

常见问题

yaml: line X: ... 之类的报错? 缩进有问题。检查有没有用 Tab、同一层级是否对齐、冒号后面有没有空格。

pull access denied? image 里的镜像名写错了,或者仓库是私有的但没有登录。和 Docker Hub 网页上的名字对照一下。

docker compose ps 显示 Restarting,一直在重启? 程序启动就出错了,用 docker compose logs app 看报错。

提示 3000 端口已被占用? 第 19 课的测试容器可能还在运行,docker ps 找到它并 docker stop。

自检

  • 我能说出 compose.yaml 里每一项的作用。
  • 周报助手在后台运行,docker compose ps 显示 Up。
  • 我知道 logs -f 按 Ctrl + C 只是停止查看。
  • 重启服务器后服务自动恢复。