1. Docker操作全记录:从入门到生产环境实战
作为容器化技术的核心工具,Docker已经成为现代开发和运维的标配技能。记得我第一次接触Docker时,面对各种命令和概念也是一头雾水。经过多年实战,我整理出这份最常用的Docker操作手册,涵盖从基础操作到生产环境优化的完整工作流。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 基础容器生命周期管理
2.1 镜像操作实战
获取官方镜像时,我习惯添加--platform参数明确指定架构,避免在M1芯片Mac上拉取x86镜像:
bash复制docker pull --platform linux/amd64 nginx:alpine
本地镜像管理有几个实用技巧:
- 使用
docker image prune定期清理悬空镜像 - 通过
docker history查看镜像构建历史 - 用
docker save/load实现离线镜像迁移
2.2 容器启停与交互
启动容器时,这几个参数组合是我的常用配置:
bash复制docker run -dit --name myapp \
-p 8080:80 \
-v /host/path:/container/path \
--restart unless-stopped \
myimage:tag
进入运行中容器推荐使用exec命令:
bash复制# 避免使用已弃用的attach命令
docker exec -it myapp /bin/sh
重要提示:生产环境避免直接操作运行中的容器,所有变更都应通过Dockerfile实现
3. 网络与存储配置详解
3.1 多容器网络互联
创建自定义网络能获得更好的隔离性和DNS支持:
bash复制docker network create --driver bridge my_network
连接容器到网络时,可以指定别名方便服务发现:
bash复制docker network connect --alias db my_network mysql_container
3.2 数据持久化方案
数据卷(volume)是持久化存储的首选方案。我常用的管理命令包括:
bash复制# 创建命名卷
docker volume create app_data
# 查看卷详情
docker volume inspect app_data
# 备份卷数据
docker run --rm -v app_data:/data -v $(pwd):/backup alpine \
tar czf /backup/app_data.tar.gz /data
4. 生产环境最佳实践
4.1 资源限制与监控
为容器设置资源限制防止单容器耗尽主机资源:
bash复制docker run -it --cpus="1.5" --memory="512m" nginx
监控容器资源使用情况:
bash复制docker stats --format "table {{.Name}}\t{{.CPUPerc}}\t{{.MemUsage}}"
4.2 日志管理方案
配置日志驱动和轮转策略:
json复制{
"log-driver": "json-file",
"log-opts": {
"max-size": "10m",
"max-file": "3"
}
}
查看日志时使用--since和--until过滤时间范围:
bash复制docker logs --since 2023-01-01T00:00:00 myapp
5. 高级运维技巧
5.1 容器健康检查
在Dockerfile中定义健康检查:
dockerfile复制HEALTHCHECK --interval=30s --timeout=3s \
CMD curl -f http://localhost/health || exit 1
运行时查看健康状态:
bash复制docker inspect --format='{{json .State.Health}}' myapp
5.2 安全加固措施
使用非root用户运行容器:
dockerfile复制RUN adduser -D myuser && chown -R myuser /app
USER myuser
扫描镜像漏洞:
bash复制docker scan myimage:tag
6. 常用问题排查指南
6.1 容器启动失败排查
查看容器退出码和日志:
bash复制docker inspect --format='{{.State.ExitCode}}' myapp
docker logs myapp
调试启动过程:
bash复制docker run --entrypoint /bin/sh myimage
6.2 网络连接问题
检查容器网络配置:
bash复制docker inspect --format='{{json .NetworkSettings}}' myapp
测试容器间连通性:
bash复制docker exec -it client_container ping server_container
7. 性能优化实战
7.1 构建优化技巧
利用多阶段构建减小镜像体积:
dockerfile复制FROM golang:1.18 as builder
WORKDIR /app
COPY . .
RUN go build -o myapp
FROM alpine:latest
COPY --from=builder /app/myapp /
CMD ["/myapp"]
7.2 存储驱动选择
根据主机环境选择合适的存储驱动:
bash复制# 查看当前存储驱动
docker info | grep "Storage Driver"
# 修改为overlay2(需重启docker服务)
{
"storage-driver": "overlay2"
}
8. 编排工具基础集成
8.1 Docker Compose应用
典型docker-compose.yml结构:
yaml复制version: '3.8'
services:
web:
image: nginx:alpine
ports:
- "8080:80"
depends_on:
- db
db:
image: postgres:13
environment:
POSTGRES_PASSWORD: example
常用操作命令:
bash复制# 后台启动所有服务
docker-compose up -d
# 查看服务日志
docker-compose logs -f web
# 重建单个服务
docker-compose up -d --no-deps --build web
8.2 与Kubernetes基础对接
生成Kubernetes部署模板:
bash复制docker-compose convert -o k8s.yaml
从镜像创建k8s部署:
bash复制kubectl create deployment myapp --image=myimage:tag
9. 企业级镜像仓库管理
9.1 私有仓库搭建
快速启动Registry容器:
bash复制docker run -d -p 5000:5000 \
-v registry_data:/var/lib/registry \
--restart always \
--name registry registry:2
推送镜像到私有仓库:
bash复制docker tag myimage localhost:5000/myimage
docker push localhost:5000/myimage
9.2 Harbor高级功能
使用Harbor实现的企业级功能:
- 镜像漏洞扫描
- 基于角色的访问控制
- 镜像复制策略
- 存储配额管理
10. 持续集成流水线集成
10.1 Jenkins中的Docker应用
在Jenkinsfile中使用Docker:
groovy复制pipeline {
agent {
docker {
image 'maven:3.8.6-jdk-11'
args '-v $HOME/.m2:/root/.m2'
}
}
stages {
stage('Build') {
steps {
sh 'mvn clean package'
}
}
}
}
10.2 GitLab CI集成
.gitlab-ci.yml示例:
yaml复制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
11. 容器安全扫描与加固
11.1 Trivy漏洞扫描
基础扫描命令:
bash复制docker run --rm \
-v /var/run/docker.sock:/var/run/docker.sock \
aquasec/trivy image myimage:tag
生成HTML报告:
bash复制trivy image --format template --template "@contrib/html.tpl" -o report.html myimage
11.2 安全基线检查
使用docker-bench-security:
bash复制docker run --rm --net host --pid host --userns host --cap-add audit_control \
-v /etc:/etc \
-v /usr/bin/docker:/usr/bin/docker \
-v /usr/lib/systemd:/usr/lib/systemd \
-v /var/lib:/var/lib \
docker/docker-bench-security
12. 跨平台构建方案
12.1 Buildx多架构构建
创建构建器实例:
bash复制docker buildx create --name mybuilder --use
构建多平台镜像:
bash复制docker buildx build --platform linux/amd64,linux/arm64 -t myimage:multiarch .
12.2 与QEMU的集成
注册QEMU模拟器:
bash复制docker run --rm --privileged multiarch/qemu-user-static --reset -p yes
验证架构支持:
bash复制docker run --rm -t arm64v8/ubuntu uname -m
# 应输出aarch64
13. 容器日志集中管理
13.1 ELK方案集成
配置logstash收集容器日志:
conf复制input {
docker {
host => "unix:///var/run/docker.sock"
}
}
13.2 Loki轻量方案
docker-compose配置示例:
yaml复制services:
loki:
image: grafana/loki:latest
ports:
- "3100:3100"
promtail:
image: grafana/promtail:latest
volumes:
- /var/lib/docker/containers:/var/lib/docker/containers
- /var/run/docker.sock:/var/run/docker.sock
14. 容器监控体系搭建
14.1 Prometheus监控
配置docker daemon暴露metrics:
json复制{
"metrics-addr": "0.0.0.0:9323",
"experimental": true
}
Prometheus抓取配置:
yaml复制scrape_configs:
- job_name: 'docker'
static_configs:
- targets: ['docker-host:9323']
14.2 cAdvisor可视化
快速启动cAdvisor:
bash复制docker run \
--volume=/:/rootfs:ro \
--volume=/var/run:/var/run:ro \
--volume=/sys:/sys:ro \
--volume=/var/lib/docker/:/var/lib/docker:ro \
--publish=8080:8080 \
--detach=true \
--name=cadvisor \
gcr.io/cadvisor/cadvisor:v0.47.0
15. 容器化数据库管理
15.1 MySQL容器化要点
生产环境推荐配置:
bash复制docker run -d \
--name mysql \
-v mysql_data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=complexpassword \
-e MYSQL_USER=appuser \
-e MYSQL_PASSWORD=userpass \
--restart unless-stopped \
--memory="2g" \
--cpus="2" \
mysql:8.0 \
--character-set-server=utf8mb4 \
--collation-server=utf8mb4_unicode_ci
15.2 Redis调优实践
关键参数配置:
bash复制docker run -d \
--name redis \
-v redis_data:/data \
--sysctl net.core.somaxconn=1024 \
redis:7.0-alpine \
redis-server \
--maxmemory 1gb \
--maxmemory-policy allkeys-lru \
--save 60 1000
16. 容器化Web服务部署
16.1 Nginx最佳配置
带健康检查的配置:
dockerfile复制FROM nginx:alpine
COPY nginx.conf /etc/nginx/nginx.conf
HEALTHCHECK --interval=30s --timeout=3s \
CMD curl -f http://localhost/ || exit 1
16.2 Node.js应用优化
多阶段构建示例:
dockerfile复制FROM node:18 as builder
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY . .
RUN npm run build
FROM node:18-alpine
WORKDIR /app
COPY --from=builder /app/dist ./dist
COPY --from=builder /app/node_modules ./node_modules
EXPOSE 3000
USER node
CMD ["node", "dist/main.js"]
17. 容器化机器学习环境
17.1 Jupyter Notebook集成
带GPU支持的配置:
bash复制docker run -d \
--gpus all \
-p 8888:8888 \
-v $(pwd):/home/jovyan/work \
jupyter/tensorflow-notebook:latest
17.2 训练环境容器化
典型Dockerfile:
dockerfile复制FROM nvidia/cuda:11.8.0-base
RUN apt-get update && apt-get install -y python3-pip
COPY requirements.txt .
RUN pip install -r requirements.txt
WORKDIR /workspace
COPY . .
CMD ["python", "train.py"]
18. Windows容器特别注意事项
18.1 基础镜像选择
Windows容器镜像类型对比:
| 镜像类型 | 大小 | 适用场景 |
|---|---|---|
| windowsservercore | ~5GB | 传统.NET应用 |
| nanoserver | ~300MB | 现代.NET Core应用 |
| servercore | ~3GB | IIS等服务器角色 |
18.2 网络模式差异
Windows特有网络驱动:
bash复制docker run -d --network=nat mywindowsserverimage
19. 容器化遗留系统迁移
19.1 单体应用容器化
分阶段迁移策略:
- 先作为整体打包进容器
- 逐步拆分出前端/后端
- 提取共享服务为独立容器
- 最终实现微服务架构
19.2 依赖项处理技巧
使用dive分析镜像层:
bash复制docker run --rm -it \
-v /var/run/docker.sock:/var/run/docker.sock \
wagoodman/dive:latest myimage
20. 边缘计算场景实践
20.1 轻量级容器方案
使用alpine基础镜像:
dockerfile复制FROM alpine:3.18
RUN apk add --no-cache python3 py3-pip
COPY . /app
WORKDIR /app
RUN pip install --no-cache-dir -r requirements.txt
CMD ["python3", "app.py"]
20.2 资源受限环境优化
限制内存和CPU使用:
bash复制docker run -d \
--memory="256m" \
--cpus="0.5" \
--blkio-weight=100 \
myedgeapp
