Docker 容器运维实战:命令、镜像、资源与排错

一、为什么运维要懂 Docker

现在服务几乎都跑在容器里。懂 Docker 不只是”会 docker run”,更是会排查镜像、网络、存储、资源这些线上问题。

二、最常用的排查命令

docker ps -a                 # 看所有容器状态
docker logs -f --tail 100 容器名   # 跟日志
docker stats                 # 实时看 CPU/内存/网络
docker exec -it 容器名 sh     # 进容器排错
docker inspect 容器名         # 看配置/挂载/网络细节

三、镜像瘦身与版本管理

  • 用 多阶段构建,只把产物拷进最终镜像;
  • 基础镜像选 alpine / distroless,别动辄几百 MB;
  • 镜像打语义化 tag(如 v1.3.0),禁止长期用 latest 上线。
FROM golang:1.22 AS build
WORKDIR /app
COPY . .
RUN go build -o svc .

FROM gcr.io/distroless/base-debian12
COPY --from=build /app/svc /svc
ENTRYPOINT ["/svc"]

四、日志与数据持久化

事项 做法
日志 打到 stdout/stderr,交给 docker logs 或采集器,别写容器内部文件
数据 用 volume 挂载,数据库等状态数据绝不丢在容器层
清理 定期 docker system prune 回收悬空镜像/容器

五、资源限制(防单机被拖垮)

docker run -d --name svc 
  --memory=512m --memory-swap=512m 
  --cpus=1.0 
  -p 8080:8080 myapp:v1.3.0

六、docker compose 管理多服务

services:
  web:
    image: myapp:v1.3.0
    ports: ["8080:8080"]
    deploy:
      resources:
        limits: { cpus: "1.0", memory: 512M }
  redis:
    image: redis:7-alpine

七、常见排错清单

  • 起不来先看 docker logs 和 inspect 的 ExitCode;
  • 网络不通查自定义 bridge 与端口映射;
  • 磁盘爆了查 volume 与日志堆积;
  • 性能差先用 docker stats 定位是哪个容器。

把上面这些命令和习惯用熟,容器环境下的日常运维基本能自己扛,不用每次都请人。