
本文系统梳理Docker架构与核心操作涵盖镜像管理、容器生命周期、数据持久化、网络配置及资源限制等关键模块。强调生产环境应遵循版本标签规范、多阶段构建、非root运行、资源限制与安全加固等最佳实践。通过命令速查与架构哲学总结突出“镜像不可变、容器易逝、数据在外、网络显式”的设计原则助力实现高效、安全的容器化运维。1. Docker 架构与核心概念Docker 采用 C/S 架构主要组件包括Docker Daemon后台守护进程管理镜像、容器、网络和存储卷Docker CLI命令行客户端通过 REST API 与 Daemon 通信Containerd容器运行时负责容器生命周期管理Runc底层 OCI 运行时创建和运行容器Docker 管理四类核心对象对象说明可变性Image只读模板包含应用代码、运行时、库和依赖不可变Container镜像的可写运行实例可变Volume独立于容器生命周期的数据存储可变Network容器间通信的虚拟网络可变命令设计遵循统一模式docker 对象 动作 参数。2. 镜像管理2.1 镜像获取# 从仓库拉取镜像 docker pull nginx:1.27-alpine # 搜索仓库中的镜像 docker search python --filter stars100最佳实践始终指定明确的版本标签避免使用latest标签。latest不具备版本可追溯性在生产环境中可能导致不可预期的部署结果。2.2 镜像构建# 使用默认 Dockerfile 构建 docker build -t myapp:1.0 . # 指定 Dockerfile 路径 docker build -f Dockerfile.prod -t myapp:prod . # 禁用构建缓存 docker build --no-cache -t myapp:1.0 . # 传递构建参数 docker build --build-arg HTTP_PROXYhttp://proxy:8080 -t myapp:1.0 . # 多架构构建 docker build --platform linux/amd64,linux/arm64 -t myapp:1.0 .构建上下文.会递归发送目录内容至 Daemon。.dockerignore文件用于排除不必要的文件减少上下文体积。2.3 多阶段构建# 构建阶段 FROM golang:1.22 AS builder WORKDIR /src COPY . . RUN go build -o /bin/app # 运行阶段 FROM alpine:3.20 COPY --frombuilder /bin/app /bin/app ENTRYPOINT [/bin/app]多阶段构建将构建依赖与运行时环境分离显著减小最终镜像体积。2.4 镜像查看与清理# 列出本地镜像 docker images docker image ls # 查看镜像详细信息 docker inspect nginx:1.27-alpine # 查看镜像构建历史 docker history nginx:1.27-alpine # 删除镜像 docker rmi nginx:1.27-alpine # 强制删除 docker rmi -f nginx:1.27-alpine # 清理悬空镜像无标签的镜像 docker image prune # 清理所有未使用的镜像 docker image prune -a2.5 镜像导出与导入# 导出镜像为 tar 归档 docker save myapp:1.0 -o myapp.tar # 导出多个镜像 docker save myapp:1.0 myapp:latest -o myapp_multi.tar # 从 tar 归档导入镜像 docker load -i myapp.tardocker save/load操作的是完整镜像含历史层和元数据。与之对应的是docker export/import后者操作的是容器文件系统快照会丢失镜像历史、元数据和多层结构仅用于特殊场景。2.6 镜像推送# 标记镜像 docker tag myapp:1.0 registry.example.com/myapp:1.0 # 推送至远程仓库 docker push registry.example.com/myapp:1.03. 容器生命周期管理3.1 创建并启动容器docker run [OPTIONS] IMAGE [COMMAND] [ARG...]核心参数说明参数功能-d, --detach后台运行-i, --interactive保持标准输入打开-t, --tty分配伪终端--name指定容器名称-p, --publish端口映射宿主机:容器-P, --publish-all随机映射所有暴露端口-v, --volume数据卷挂载--rm退出后自动删除容器--restart重启策略--memory内存限制--cpusCPU 配额--env, -e环境变量--network网络模式示例docker run -d \ --name web \ -p 8080:80 \ -v /data/html:/usr/share/nginx/html:ro \ -e TZAsia/Shanghai \ --memory512m \ --cpus1.0 \ --restartunless-stopped \ nginx:1.27-alpine3.2 容器状态查看# 查看运行中的容器 docker ps # 查看所有容器含已停止 docker ps -a # 查看容器状态摘要 docker stats # 查看容器资源占用实时 docker stats web # 查看容器内进程 docker top web容器退出码含义退出码含义0正常退出1应用错误137SIGKILL通常为 OOM139SIGSEGV段错误143SIGTERM3.3 容器启停控制# 启动已停止的容器 docker start web # 停止运行中的容器发送 SIGTERM docker stop web # 强制停止发送 SIGKILL docker kill web # 重启容器 docker restart web # 暂停/恢复容器 docker pause web docker unpause webdocker stop默认等待 10 秒后发送 SIGKILL可通过-t参数调整超时时间。3.4 容器删除# 删除已停止的容器 docker rm web # 强制删除运行中的容器 docker rm -f web # 删除所有已停止的容器 docker container prune # 删除所有容器 docker rm -f $(docker ps -aq)3.5 容器内执行命令# 在运行中的容器内执行命令 docker exec web ls / # 交互式进入容器 docker exec -it web /bin/sh # 以指定用户身份执行 docker exec -u root -it web /bin/shdocker exec在已有容器中创建新进程。docker attach则连接到容器的主进程退出时可能终止容器生产环境慎用。3.6 日志查看# 查看容器日志 docker logs web # 实时跟踪日志 docker logs -f web # 查看最近 100 行 docker logs --tail 100 web # 查看最近 10 分钟的日志 docker logs --since 10m web容器日志驱动由 Daemon 配置决定默认为json-file。生产环境建议配置集中式日志收集如 Fluentd、Loki。3.7 容器信息检查# 查看容器详细信息JSON 格式 docker inspect web # 提取特定字段 docker inspect -f {{.State.Status}} web docker inspect -f {{.NetworkSettings.IPAddress}} web # 查看容器文件系统变更 docker diff web4. 数据持久化4.1 数据卷Volume# 创建数据卷 docker volume create pgdata # 列出数据卷 docker volume ls # 查看数据卷详情 docker volume inspect pgdata # 删除数据卷 docker volume rm pgdata # 清理未使用的数据卷 docker volume prune使用数据卷启动容器docker run -d \ --name postgres \ -v pgdata:/var/lib/postgresql/data \ -e POSTGRES_PASSWORDsecret \ postgres:164.2 绑定挂载Bind Mountdocker run -d \ -v /host/data:/container/data:ro \ nginx:1.27-alpine绑定挂载直接将宿主机目录映射到容器适合开发环境和配置文件挂载。生产环境优先使用命名卷避免宿主机路径依赖。4.3 挂载类型对比特性数据卷绑定挂载tmpfs存储位置Docker 管理区域宿主机任意路径内存生命周期独立于容器依赖宿主机容器停止即消失备份迁移支持依赖宿主机不支持性能高依赖文件系统最高适用场景数据库数据配置文件、代码敏感临时数据5. 网络管理5.1 网络驱动类型驱动说明适用场景bridge默认驱动容器通过虚拟网桥通信单主机容器通信host直接使用宿主机网络栈高性能场景牺牲隔离性none无网络离线计算overlay跨主机容器网络Swarm 集群macvlan为容器分配 MAC 地址需要直接暴露到物理网络5.2 网络操作# 列出网络 docker network ls # 创建桥接网络 docker network create app-net # 创建指定子网的桥接网络 docker network create \ --driver bridge \ --subnet172.28.0.0/16 \ --gateway172.28.0.1 \ app-net # 查看网络详情 docker network inspect app-net # 将运行中的容器连接到网络 docker network connect app-net web # 断开容器与网络的连接 docker network disconnect app-net web # 删除网络 docker network rm app-net # 清理未使用的网络 docker network prune5.3 容器网络配置docker run -d \ --name web \ --network app-net \ --network-alias web-app \ -p 8080:80 \ nginx:1.27-alpine同一自定义网络内的容器可通过容器名或服务名互相访问Docker 内置 DNS 负责解析。6. 资源限制6.1 内存限制docker run -d \ --memory512m \ --memory-swap512m \ --memory-reservation256m \ --oom-kill-disablefalse \ nginx:1.27-alpine参数说明--memory内存使用上限--memory-swap内存 swap 总上限--memory-reservation软限制系统内存紧张时优先回收--oom-kill-disable禁用 OOM Kill不推荐6.2 CPU 限制docker run -d \ --cpus1.5 \ --cpu-shares512 \ --cpuset-cpus0,1 \ nginx:1.27-alpine参数说明--cpus可用 CPU 核心数--cpu-shares相对权重默认 1024--cpuset-cpus绑定到指定 CPU 核心6.3 PID 限制docker run -d \ --pids-limit256 \ nginx:1.27-alpine限制容器内可创建的进程数防止 fork bomb 攻击。7. Docker Compose7.1 基本操作# 启动服务后台 docker compose up -d # 启动并构建镜像 docker compose up -d --build # 查看服务状态 docker compose ps # 查看日志 docker compose logs -f # 停止并删除容器、网络 docker compose down # 停止但不删除容器 docker compose stop # 启动已停止的服务 docker compose start # 构建镜像 docker compose build7.2 单服务操作# 对指定服务执行命令 docker compose exec web /bin/sh # 扩展服务实例数 docker compose up -d --scale web3 # 查看服务资源占用 docker compose top8. 系统运维命令8.1 系统信息# 查看 Docker 系统信息 docker info # 查看 Docker 版本 docker version # 查看磁盘占用 docker system df # 实时事件监控 docker system events8.2 系统清理# 清理所有未使用的对象 docker system prune # 清理包括数据卷在内的所有未使用对象 docker system prune -a --volumes # 清理构建缓存 docker builder prunedocker system prune --volumes会删除所有未被引用的数据卷操作前需确认数据可删除。8.3 调试与诊断# 查看容器文件系统变更 docker diff web # 从容器复制文件到宿主机 docker cp web:/etc/nginx/nginx.conf ./nginx.conf # 从宿主机复制文件到容器 docker cp ./config.conf web:/etc/app/config.conf9. 生产环境命令规范9.1 镜像规范使用明确的版本标签禁止使用latest采用多阶段构建减小镜像体积以非 root 用户运行应用定期扫描镜像漏洞docker scan或第三方工具9.2 容器规范始终设置资源限制内存、CPU、PID配置合理的重启策略--restartunless-stopped数据持久化使用命名卷不依赖容器可写层日志输出到 stdout/stderr由日志驱动统一收集9.3 安全规范禁止使用--privileged模式限制容器能力集--cap-drop,--cap-add只读根文件系统--read-only使用安全加固的底层发行版如 distroless、alpine10. 常用命令速查表场景命令查看运行容器docker ps查看所有容器docker ps -a启动容器docker start name停止容器docker stop name进入容器docker exec -it name /bin/sh查看日志docker logs -f name查看资源docker stats清理容器docker container prune清理镜像docker image prune -a清理卷docker volume prune清理网络docker network prune全量清理docker system prune -a --volumes掌握 Docker 命令的核心在于理解镜像不可变、容器易逝、数据在外、网络显式的设计哲学。命令是工具对架构原则的把握才是区分熟练使用与生产掌控的关键。