Docker命令与容器化技术实战指南 1. Docker基础命令速查手册作为容器化技术的核心工具Docker命令的熟练程度直接决定了开发运维效率。我整理了实际工作中最高频的20个基础命令这些命令覆盖了80%的日常使用场景docker version # 查看Docker客户端和服务端版本 docker info # 显示系统级信息容器/镜像数量、存储驱动等镜像操作三板斧docker images # 列出本地镜像含REPOSITORY/TAG/SIZE docker pull nginx:alpine # 拉取指定版本镜像推荐alpine精简版 docker rmi $(docker images -q) # 批量删除所有镜像危险操作容器生命周期管理docker run -d -p 8080:80 --name my_nginx nginx # 启动容器-d后台运行、-p端口映射 docker ps -a # 查看所有容器包括已停止的 docker stop/start/restart my_nginx # 停止/启动/重启容器 docker exec -it my_nginx /bin/sh # 进入运行中容器推荐sh而非bash重要提示生产环境慎用docker rm -f强制删除可能造成数据丢失。建议先stop再rm2. 镜像构建与仓库管理实战2.1 Dockerfile最佳实践通过多年踩坑经验总结出高效Dockerfile的黄金法则多阶段构建减少最终镜像体积# 构建阶段 FROM golang:1.18 as builder WORKDIR /app COPY . . RUN go build -o main . # 运行阶段 FROM alpine:latest COPY --frombuilder /app/main . CMD [./main]合理利用缓存将变动少的指令前置FROM node:16 # 先安装依赖利用缓存 COPY package.json yarn.lock . RUN yarn install # 再拷贝代码频繁变动部分后置 COPY . .2.2 镜像仓库高级操作私有仓库管理技巧docker login registry.example.com # 登录私有仓库 docker tag nginx registry.example.com/myteam/nginx:v1 docker push registry.example.com/myteam/nginx:v1镜像瘦身方法docker history nginx:latest # 查看镜像层历史 docker save nginx nginx.tar # 导出镜像 docker export container nginx-container.tar # 导出容器文件系统3. 容器网络与存储配置3.1 网络模式深度对比通过实测对比四种网络模式性能模式隔离性性能损耗典型场景bridge(默认)中10-15%单机多容器通信host无5%高性能需求overlay高20-25%Swarm集群跨主机通信none完全0%安全敏感型应用创建自定义网络docker network create --driverbridge --subnet172.18.0.0/16 mynet docker run --networkmynet -it alpine3.2 数据持久化方案数据卷使用示例docker volume create db_data # 创建命名卷 docker run -v db_data:/var/lib/mysql mysql # 挂载卷 docker run -v /host/path:/container/path nginx # 绑定挂载经验之谈数据库容器务必使用--mount替代-v支持更详细的参数配置4. 生产环境排错指南4.1 日志分析技巧多维度日志收集方法docker logs --tail 100 -f my_container # 实时追踪最后100行 docker logs --since 2023-01-01 my_container # 按时间筛选 docker inspect --format{{.LogPath}} my_container # 查看日志文件路径4.2 性能问题排查资源监控命令组合拳docker stats # 实时资源监控CPU/MEM/IO docker top my_container # 查看容器内进程 docker system df # 查看磁盘占用内存泄漏诊断docker run -m 512m --memory-swap1g my_app # 限制内存 docker events --filter eventoom # 监听OOM事件5. Docker Compose工业级实践5.1 编排文件优化典型服务定义示例version: 3.8 services: web: image: nginx:alpine deploy: resources: limits: cpus: 0.5 memory: 512M healthcheck: test: [CMD, curl, -f, http://localhost] interval: 30s timeout: 3s5.2 多环境配置管理通过环境变量实现配置分离# docker-compose.prod.yml services: db: environment: - MYSQL_ROOT_PASSWORD${DB_PASSWORD}启动时指定配置docker-compose -f docker-compose.yml -f docker-compose.prod.yml up6. 安全加固方案6.1 最小权限原则安全运行建议docker run --read-only --tmpfs /tmp alpine # 只读文件系统 docker run --user 1000:1000 nginx # 非root用户 docker run --security-optno-new-privileges my_app6.2 漏洞扫描镜像安全检查流程docker scan nginx:latest # Snyk集成扫描 docker trust inspect --pretty nginx # 验证签名7. 高阶技巧与自动化7.1 批量操作脚本清理无用资源#!/bin/bash # 删除所有退出的容器 docker rm $(docker ps -aq -f statusexited) # 删除悬空镜像 docker image prune -f # 清理构建缓存 docker builder prune -f7.2 CI/CD集成GitLab流水线示例stages: - build - deploy build_image: stage: build script: - docker build -t $CI_REGISTRY_IMAGE . - docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY - docker push $CI_REGISTRY_IMAGE8. 常见报错解决方案8.1 Virtualization Support问题Windows/Mac常见错误处理确认BIOS中开启VT-x/AMD-v虚拟化支持对于WSL2用户wsl --set-default-version 2 dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart彻底重置Docker Desktopwsl --unregister docker-desktop-data8.2 端口冲突处理快速查找占用端口# Linux/Mac lsof -i :8080 # Windows netstat -ano | findstr 8080替代方案docker run -p 8081:80 nginx # 更换主机端口 docker run --networkhost nginx # 使用host模式