1. Docker核心命令全景解析
作为过去五年每天与Docker打交道的运维工程师,我整理了一份真正高频使用的命令手册。不同于官方文档的平铺直叙,这里每个命令都附带真实工作场景中的使用技巧和血泪教训。
2. 容器生命周期管理
2.1 容器启停艺术
docker run -itd --name my_nginx -p 8080:80 -v /host/path:/container/path nginx:latest这条经典命令包含多个关键参数:
-itd组合实现了交互式后台运行(实测比单独用-d更稳定)- 端口映射建议始终显式指定协议如
-p 8080:80/tcp - 数据卷挂载时推荐使用
--mount替代-v(格式更严谨)
重要经验:生产环境务必添加
--restart unless-stopped实现故障自愈
2.2 容器状态管理
docker ps的进阶用法:
# 显示完整容器ID和精确创建时间 docker ps --no-trunc --format "table {{.ID}}\t{{.Image}}\t{{.CreatedAt}}\t{{.Status}}" # 过滤特定状态的容器(Exited/Running) docker ps -f status=exited3. 镜像深度操作指南
3.1 镜像构建的隐藏技巧
docker build的黄金参数组合:
docker build \ --build-arg http_proxy=http://your.proxy \ --no-cache \ --pull \ -t myapp:v1 .--pull强制更新基础镜像(避免本地过期镜像导致安全问题)--no-cache在依赖变更时必需使用(曾因此浪费3小时排查构建问题)
3.2 镜像瘦身实战
多阶段构建的典型模式:
FROM golang:1.18 as builder WORKDIR /app COPY . . RUN go build -o main . FROM alpine:latest COPY --from=builder /app/main / CMD ["/main"]通过此方法成功将Java应用镜像从1.2GB压缩到215MB
4. 网络与存储精要
4.1 网络诊断三板斧
# 查看容器网络详情(比docker inspect更直观) docker network inspect bridge --verbose # 模拟网络延迟(测试应用容错能力) docker run --rm --net container:target_container alpine sh -c "tc qdisc add dev eth0 root netem delay 100ms" # 跨主机通信方案 docker network create --driver overlay my_net4.2 存储卷管理秘籍
# 查看卷空间占用(发现某个卷占用50GB的瞬间血压升高) docker system df -v # 安全备份卷数据(比直接cp更可靠) docker run --rm -v source_vol:/source -v /backup:/backup alpine \ tar czf /backup/backup.tar.gz -C /source .5. 生产环境救命命令
5.1 故障排查组合拳
# 实时日志带时间戳(关键bug定位神器) docker logs -f --tail=100 --timestamps app_container # 进入容器的最佳姿势(比docker attach安全) docker exec -it mysql bash -c "mysql -uroot -p$MYSQL_ROOT_PASSWORD" # 系统级监控(发现某容器占用100%CPU的元凶) docker stats --format "table {{.Name}}\t{{.CPUPerc}}\t{{.MemUsage}}"5.2 安全加固要点
# 限制容器资源(避免一个容器拖垮整个主机) docker run -it --cpus=2 --memory=1g --pids-limit=100 my_app # 只读文件系统(防御勒索软件攻击) docker run --read-only -v /tmp:/tmp:rw alpine6. 高效工作流技巧
6.1 批量操作模板
# 停止所有运行中的容器(慎用!) docker stop $(docker ps -q) # 清理所有悬空资源(每月节省20GB磁盘空间) docker system prune -af --volumes # 批量打标签推镜像(CI/CD常用) docker images | grep 'myrepo/' | awk '{print $1":"$2}' | xargs -I{} docker tag {} newrepo/{} docker push newrepo/*6.2 可视化辅助工具
# 生成镜像依赖树(理解复杂镜像结构的利器) docker image inspect --format='{{.RootFS.Layers}}' nginx:latest | tr ' ' '\n' # 容器资源使用热力图(发现内存泄漏) docker run -it --rm -v /var/run/docker.sock:/var/run/docker.sock \ aquasec/container-resources-dashboard7. 进阶调试技术
7.1 容器内核调试
# 查看容器内核日志(排查驱动级问题) docker run --privileged --pid=host --rm -it alpine \ nsenter -t 1 -m -u -n -i -- sh -c "dmesg -T" # 使用ebpf监控容器系统调用 docker run --rm --privileged -v /usr/src:/usr/src -v /lib/modules:/lib/modules \ aquasec/tracee --containers7.2 构建缓存优化
# 智能缓存利用模板 FROM node:16 as deps WORKDIR /app COPY package*.json ./ RUN npm ci FROM deps as builder COPY . . RUN npm run build FROM node:16-alpine COPY --from=deps /app/node_modules ./node_modules COPY --from=builder /app/dist ./dist CMD ["node", "dist/main.js"]8. 企业级实践要点
8.1 镜像签名验证
# 启用内容信任(避免供应链攻击) export DOCKER_CONTENT_TRUST=1 docker pull mycompany/web:latest # 手动验证签名 docker trust inspect --pretty mycompany/web:latest8.2 合规性检查
# 使用docker-bench-security检查(通过率<60%要警惕) docker run -it --net host --pid host --cap-add audit_control \ -v /var/lib:/var/lib \ -v /var/run/docker.sock:/var/run/docker.sock \ --label docker_bench_security \ docker/docker-bench-security9. 跨平台实战方案
9.1 多架构构建技巧
# 创建跨平台构建器(ARM/X86通吃) docker buildx create --use --name multiarch-builder # 同时构建多个平台镜像 docker buildx build --platform linux/amd64,linux/arm64 -t myapp:multiarch .9.2 Windows容器特别注意事项
# 处理路径转义问题(避免90%的Windows容器启动失败) docker run -v C:\data:C:\data\:ro microsoft/nanoserver10. 性能调优指南
10.1 存储驱动选择
# 查看当前存储驱动(overlay2最佳) docker info | grep "Storage Driver" # 切换存储驱动(需修改/etc/docker/daemon.json) { "storage-driver": "overlay2", "storage-opts": [ "overlay2.override_kernel_check=true" ] }10.2 网络性能优化
# 启用IPv6(现代应用必需) docker network create --ipv6 --subnet=2001:db8::/64 ipv6_net # 使用macvlan获得原生性能 docker network create -d macvlan \ --subnet=192.168.1.0/24 \ --gateway=192.168.1.1 \ -o parent=eth0 my_macvlan