containers · build · logs

Docker测试

一个人折腾容器的地方。每次构建、每次挂掉、每次修好,都留在这里。

compose multi-stage healthcheck volume
01

关于

写代码,也修环境

我平时做后端和运维方向的事,日常跟镜像、编排、日志打交道。这里没有产品,也没有账号体系,只放我自己在 Docker 上的实验、踩过的坑和最后落下来的结论。

写下来的理由很实在:同一类问题第二次出现时,翻自己的笔记比重新排查快得多。所以这里的东西偏工程细节——一条命令为什么这么写,一个配置为什么必须放在那个位置。

如果你也在把服务往容器里搬,这里大概能找到一些能直接抄走的东西。

02

我在测什么

三件一直在打磨的事

多阶段构建

把编译链全部留在 builder 阶段,运行时只拷贝产物。同一个服务,镜像从 1.2 GB 压到 190 MB 左右,拉取时间短了一个量级。

Compose 编排

web、api、worker、db 四个服务共用一份 compose 文件起停。网络靠自定义 bridge 隔离,只有 api 能连到数据库。

卷与持久化

数据放命名卷,配置文件用只读挂载。升级时只换镜像不动数据,回滚就是把 tag 换回去。

03

记录

按时间往下走

  • 开发环境整体搬进容器 宿主机只留 Docker 和编辑器,依赖版本冲突的问题从此消失。
  • 容器内时区错乱 日志时间比本地差八小时,最后统一在 compose 里设置 TZ 解决,比逐个改镜像干净。
  • 用健康检查替换手写守护脚本 healthcheck 配合重启策略接管了以前那套 while 循环,容器退出原因也更好查。
  • 镜像里的非 root 用户 补上 USER 指令后,挂载目录的权限问题一次理清,写入位置也不再靠运气。
04

工具台

敲得最多的几条

起停与构建

# 重建并后台启动
docker compose up -d --build

# 只看某个服务日志
docker compose logs -f --tail=100 api

排查与清理

# 一次性资源占用快照
docker stats --no-stream

# 清掉悬空镜像
docker image prune -f
05

联系

聊聊容器,或者指出我写错的地方

hi@liuandle.icu 邮件都会看,回复不一定及时。