Docker 核心操作速查¶
用途:供 AI 助手快速查阅并指导/执行 Docker 操作。目标环境:Ubuntu 22.04(Hyper-V 虚拟机内)。 版本基线:Docker Engine 29.9.3 / Compose v5.7.0(核对日期 2026-11-11,来源:官网 docs.docker.com) 更新日期:2026-11-11
1. 安装与配置¶
# 官方脚本安装(实验机推荐)
curl -fsSL https://get.docker.com | sh
sudo usermod -aG docker $USER && newgrp docker # 免 sudo
# Engine 29.x 起(2025-11):cgroup v1 已弃用(官方支持至 2029-05),全新安装默认 containerd 镜像存储
# 自检:docker info | grep -E "Cgroup Version|Storage Driver" # 期望 Cgroup Version: 2
# 国内镜像加速(/etc/docker/daemon.json)
# 注意:以下均为社区/第三方加速地址,Docker 官方不背书。2025-2026 年国内公共镜像源大量关停或限流,
# 地址可用性需验证(配好先 docker pull alpine 实测;失效源立即删除,否则首个源超时会拖慢每次拉取)
# dockerproxy.com 自 2025 年起多次失效,建议换成云厂商账号专属地址(阿里云/腾讯云控制台领取,形如 https://<id>.mirror.aliyuncs.com)
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<'EOF'
{
"registry-mirrors": [
"https://docker.m.daocloud.io",
"https://dockerproxy.com"
],
"log-driver": "json-file",
"log-opts": { "max-size": "10m", "max-file": "3" }
}
EOF
sudo systemctl daemon-reload && sudo systemctl restart docker
systemctl status docker # 服务状态
docker version / docker info # 版本与运行时信息
2. 镜像操作¶
docker search nginx # 搜索
docker pull nginx:1.27-alpine # 拉取(alpine 版更小)
docker images # 本地镜像列表
docker rmi <镜像ID> # 删除镜像
docker tag nginx:1.27 myrepo/nginx:v1 # 打标签
docker push myrepo/nginx:v1 # 推送(需 docker login)
docker save -o nginx.tar nginx:1.27 # 导出(离线传输)
docker load -i nginx.tar # 导入
docker history nginx:1.27 # 查看构建层
docker image prune -a # 清理无用镜像(-a 含未使用)
docker build -t myapp:1.0 . # 构建镜像(23.0+ 由 BuildKit/buildx 执行,等同 docker buildx build)
docker build --no-cache -t myapp:1.0 . # 不用缓存重建
docker buildx build --platform linux/amd64,linux/arm64 -t myapp:1.0 --push . # 多架构构建并推送
3. 容器生命周期¶
docker run -d --name web -p 8080:80 nginx:1.27-alpine
# -d 后台 | --name 命名 | -p 端口映射 | -v 挂载卷 | --restart=always 开机自启
# -e KEY=val 环境变量 | --network xxx 指定网络 | -it 交互式
docker ps # 运行中容器
docker ps -a # 全部容器(含退出)
docker stop/start/restart web
docker rm web # 删除(运行中需先 stop,或 -f 强删)
docker exec -it web bash # 进入容器排查(sh 更通用)
docker logs -f --tail 100 web # 看日志
docker inspect web # 完整元数据(JSON)
docker stats # 实时资源占用
docker cp file web:/path # 宿主机↔容器复制
docker top web # 容器内进程
docker update --restart=always web # 更新容器配置
docker system prune -a --volumes # 深度清理(危险:含未用卷,先确认)
4. 数据卷与持久化¶
docker volume create mydata
docker volume ls / inspect mydata
docker volume rm mydata / docker volume prune
docker run -d -v mydata:/var/lib/mysql mysql:8 # 命名卷(推荐)
docker run -d -v /host/path:/container/path nginx # bind mount(开发热更)
docker run -d -v /host/path:/container/path:ro nginx # 只读挂载
5. 网络¶
docker network ls
docker network create mynet # 默认 bridge
docker network create --driver bridge mynet
docker network connect mynet web # 运行时接入
docker network inspect mynet # 查看成员与 IP
docker run -d --network mynet --name db postgres:16
# 同一自定义网络内可用容器名互相访问(内置 DNS):web -> db:5432
docker network disconnect mynet web
docker network rm mynet
6. Dockerfile 模板¶
# 多阶段构建:Go 服务示例(小体积、无编译残留)
FROM golang:1.27-alpine AS builder
WORKDIR /src
COPY go.mod go.sum ./
RUN go mod download # 先拷依赖文件,利用缓存
COPY . .
RUN CGO_ENABLED=0 go build -o /app main.go
FROM alpine:3.20
RUN apk add --no-cache ca-certificates
COPY --from=builder /app /app
EXPOSE 8080
USER nobody # 非 root 运行,安全基线
ENTRYPOINT ["/app"]
常用指令要点:COPY 优于 ADD;RUN 合并以减层;.dockerignore 排除 .git、日志、构建产物。
7. Docker Compose(多容器编排)¶
# docker-compose.yml — TTS 服务示例(Compose Spec;顶层 name 为项目名,替代 --project-name)
name: tts-lab
services:
tts:
image: ghcr.io/rhasspy/piper:latest # 示例:piper TTS
ports: ["5000:5000"]
volumes: ["./models:/models"]
restart: unless-stopped
redis:
image: redis:7-alpine
command: redis-server --appendonly yes
volumes: ["redis-data:/data"]
volumes:
redis-data:
docker compose version # 现为 Docker CLI 插件(v5.x);旧的 docker-compose v1(Python 版)2023-07 已 EOL,勿再用
docker compose config # 校验并渲染最终配置(合并 env/override 后),改 YAML 前先跑
docker compose up -d # 启动全套
docker compose ps / logs -f
docker compose exec tts bash
docker compose pull && docker compose up -d # 滚动更新
docker compose down # 停止并删除(加 -v 连卷一起删,慎用)
docker compose down && docker compose up -d --build # 重建
docker compose up -d --watch # 开发模式:改代码自动同步/重建(watch)
8. 排查问题套路(AI 排障顺序)¶
docker ps -a看容器是否退出、退出码(137=OOM/Kill,126/127=命令问题,1=应用错误)docker logs --tail 200 <容器>看报错docker inspect <容器>看 ExitCode、OOMKilled、Mounts、网络docker exec -it <容器> sh进去手动验证- 资源问题:
docker stats、宿主机dmesg | grep -i oom - 网络问题:
docker network inspect、容器内curl/ping、端口是否冲突ss -tlnp
9. AI 助手操作守则¶
- 优先 Compose 管理多容器;单容器也可直接
docker run,但把命令写入文档或脚本留存。 - 破坏性操作(
rm -f、system prune -a --volumes、down -v)必须先列出影响对象并向用户确认。 - 生产/持久化数据一律用命名卷,不用匿名卷。
- 拉镜像指定明确 tag,不依赖
latest(版本不可控)。 - Compose 文件不再写
version:字段(Compose Spec 已废弃该字段,写了只会收到 obsolete 警告)。 - 容器内进程尽量非 root;端口映射避免直接暴露数据库等内部服务到 0.0.0.0。