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 再 rm

2. 镜像构建与仓库管理实战

2.1 Dockerfile最佳实践

通过多年踩坑经验,总结出高效Dockerfile的黄金法则:

  1. 多阶段构建:减少最终镜像体积
# 构建阶段
FROM golang:1.18 as builder
WORKDIR /app
COPY . .
RUN go build -o main .

# 运行阶段  
FROM alpine:latest  
COPY --from=builder /app/main .
CMD ["./main"]
  1. 合理利用缓存:将变动少的指令前置
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 --driver=bridge --subnet=172.18.0.0/16 mynet
docker run --network=mynet -it alpine

3.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-swap=1g my_app  # 限制内存
docker events --filter 'event=oom'  # 监听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: 3s

5.2 多环境配置管理

通过环境变量实现配置分离:

# docker-compose.prod.yml
services:
  db:
    environment:
      - MYSQL_ROOT_PASSWORD=${DB_PASSWORD}

启动时指定配置:

docker-compose -f docker-compose.yml -f docker-compose.prod.yml up

6. 安全加固方案

6.1 最小权限原则

安全运行建议:

docker run --read-only --tmpfs /tmp alpine  # 只读文件系统
docker run --user 1000:1000 nginx  # 非root用户
docker run --security-opt=no-new-privileges my_app

6.2 漏洞扫描

镜像安全检查流程:

docker scan nginx:latest  # Snyk集成扫描
docker trust inspect --pretty nginx  # 验证签名

7. 高阶技巧与自动化

7.1 批量操作脚本

清理无用资源:

#!/bin/bash
# 删除所有退出的容器
docker rm $(docker ps -aq -f status=exited)
# 删除悬空镜像
docker image prune -f
# 清理构建缓存
docker builder prune -f

7.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_IMAGE

8. 常见报错解决方案

8.1 Virtualization Support问题

Windows/Mac常见错误处理:

  1. 确认BIOS中开启VT-x/AMD-v虚拟化支持
  2. 对于WSL2用户:
wsl --set-default-version 2
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
  1. 彻底重置Docker Desktop:
wsl --unregister docker-desktop-data

8.2 端口冲突处理

快速查找占用端口:

# Linux/Mac
lsof -i :8080
# Windows
netstat -ano | findstr 8080

替代方案:

docker run -p 8081:80 nginx  # 更换主机端口
docker run --network=host nginx  # 使用host模式

更多推荐