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再rm
2. 镜像构建与仓库管理实战
2.1 Dockerfile最佳实践
通过多年踩坑经验,总结出高效Dockerfile的黄金法则:
- 多阶段构建:减少最终镜像体积
# 构建阶段
FROM golang:1.18 as builder
WORKDIR /app
COPY . .
RUN go build -o main .
# 运行阶段
FROM alpine:latest
COPY --from=builder /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 --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常见错误处理:
- 确认BIOS中开启VT-x/AMD-v虚拟化支持
- 对于WSL2用户:
wsl --set-default-version 2
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
- 彻底重置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模式
更多推荐

所有评论(0)