Docker 使用指南及日常命令集锦

导读

本文是一份全面的 Docker 技术指南,涵盖了从基础概念到高级实践的完整知识体系。文档系统性地介绍了 Docker 的核心技术、安装配置、日常操作、网络与存储管理、安全实践以及生产环境部署等关键内容。

主要特点:

  1. 全面性:包含 Docker 全栈技术栈,从入门到进阶
  2. 实践性:提供大量可直接运行的命令示例和配置片段
  3. 专业性:涵盖企业级应用场景和安全最佳实践
  4. 系统性:按照技术逻辑组织内容,便于循序渐进学习

适用读者:

  • 开发人员:快速掌握容器化开发技能
  • 运维工程师:学习容器编排和集群管理
  • 架构师:设计基于容器的分布式系统
  • 安全工程师:实施容器安全防护措施

详细目录

第一部分:基础篇

  1. Docker 简介

    • 核心概念:镜像/容器/仓库
    • 镜像分层结构与传输
    • 私有仓库搭建与管理
  2. 安装 Docker

    • Linux系统安装指南
    • Windows/Mac安装方法
    • 环境验证与配置

第二部分:操作篇

  1. 常用命令

    • 镜像操作:拉取/查看/删除
    • 容器操作:运行/监控/管理
    • 资源限制与性能分析
  2. 实际应用场景

    • 开发环境容器配置
    • 数据库容器部署
    • 调试工具与批处理任务

第三部分:进阶篇

  1. Dockerfile 编写

    • 基础语法与指令
    • 多阶段构建实战
    • 安全加固与优化技巧
  2. 容器网络

    • 网络模式比较
    • 自定义网络配置
    • 跨主机网络方案
  3. 数据管理

    • 数据卷操作
    • 分布式存储方案
    • 备份恢复策略

第四部分:生产实践篇

  1. 最佳实践

    • 安全性建议
    • 性能优化指南
    • 编排工具选择
  2. 安全实践详解

    • 容器安全加固
    • 镜像漏洞扫描
    • 运行时保护方案
  3. 监控与日志

    • 容器监控方案
    • Prometheus集成
    • 企业级日志架构

第五部分:扩展篇

  1. CI/CD集成

    • Jenkins/GitLab集成
    • 自动化构建流程
    • 部署策略
  2. 生产环境部署

    • Kubernetes编排
    • Docker Swarm集群
    • 高可用策略
  3. 性能调优

    • 资源限制配置
    • 存储驱动选择
    • 内核参数优化
  4. 高级技巧

    • 容器调试方法
    • 批量操作命令
    • 导入导出技巧

附录

  1. 常见问题排查

    • 启动失败分析
    • 网络连接问题
    • 性能瓶颈诊断
  2. 进阶主题

    • 多阶段构建详解
    • Docker Compose配置

1. Docker 简介

Docker 是一个开源的应用容器引擎,基于 Go 语言开发。它允许开发者将应用及其依赖打包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器或 Windows 机器上。

核心概念

  • 镜像(Image):Docker 镜像是一个只读模板,包含创建 Docker 容器的说明。镜像采用分层存储结构,每一层代表Dockerfile中的一条指令。例如:
    以下命令用于管理Docker镜像的分层结构和传输:
  1. docker history 查看镜像的构建历史和各层信息
  2. docker save 将镜像导出为tar归档文件,便于传输或备份
  3. docker load 从tar文件加载镜像到本地仓库
# 查看镜像分层结构
docker history <image_name>

# 导出镜像为tar文件
docker save -o myimage.tar <image_name>

# 从tar文件加载镜像
docker load -i myimage.tar
  • 容器(Container):容器是镜像的可运行实例。容器与镜像的关系类似于面向对象编程中对象与类的关系。容器具有以下特点:

    • 轻量级:共享主机系统内核
    • 可移植:包含应用及其所有依赖
    • 隔离性:使用命名空间和控制组实现资源隔离
    • 临时性:默认情况下容器停止后数据不会持久化

    实际案例:某电商平台使用容器处理黑色星期五流量高峰,可快速扩展至5000个容器实例。

  • 仓库(Registry):用于存放镜像的地方,如 Docker Hub。企业级应用场景:

    • 私有仓库搭建:使用Docker Registry或Harbor
      私有仓库操作命令说明:
  1. docker run 启动一个本地registry容器作为私有仓库
  2. docker tag 为镜像打上私有仓库地址的标签
  3. docker push 将镜像推送到私有仓库

注意:默认情况下私有仓库没有认证,生产环境需要配置HTTPS和认证

# 启动私有仓库
docker run -d -p 5000:5000 --name registry registry:2

# 推送镜像到私有仓库
docker tag myimage localhost:5000/myimage
docker push localhost:5000/myimage
  • 镜像同步策略:定期从公有仓库同步基础镜像
  • 访问控制:基于角色的权限管理

2. 安装 Docker

Linux 系统

Docker在不同Linux发行版上的安装命令:

  1. Ubuntu/Debian系统使用apt-get安装
  2. CentOS/RHEL系统使用yum安装
  3. 安装前需要更新软件包索引
  4. 安装后需要启动docker服务:sudo systemctl start docker
# Ubuntu/Debian
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io

# CentOS/RHEL
sudo yum install -y yum-utils
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
sudo yum install docker-ce docker-ce-cli containerd.io

Windows/Mac

从 Docker 官网下载 Docker Desktop 安装包:
https://www.docker.com/products/docker-desktop

3. 常用命令

镜像操作

镜像基本操作命令说明:

  1. docker pull 从仓库下载镜像到本地
  2. docker images 列出本地已下载的镜像
  3. docker rmi 删除本地镜像,释放磁盘空间

注意:删除镜像前需确保没有容器在使用该镜像

# 拉取镜像
docker pull ubuntu:20.04

# 列出本地镜像
docker images

# 删除镜像
docker rmi <image_id>

容器操作

容器操作命令详解:

  1. 容器运行

    • docker run 创建并启动容器
    • --cpus 限制CPU核心数
    • --memory 限制内存使用量
    • -it 以交互模式运行
  2. 容器查看

    • docker ps 查看容器状态
    • --format 自定义输出格式
    • -a 显示所有容器
    • -s 显示容器大小
  3. 容器管理

    • docker stop 优雅停止容器
    • docker rm 删除容器
    • -f 强制操作运行中的容器
  4. 资源监控

    • docker stats 实时查看资源使用
    • docker exec 在容器内执行命令
    • top/free/df 查看进程/内存/磁盘
  5. 文件操作

    • docker cp 容器与主机间文件传输
  6. 日志查看

    • docker logs 查看容器日志
    • -f 跟踪日志输出
    • -t 显示时间戳
  7. 高级功能

    • docker update 动态调整资源限制
    • --restart 配置重启策略
    • docker inspect 检查容器健康状态
# 运行容器(带资源限制)
docker run -it --cpus=2 --memory=1g --name myapp ubuntu:20.04 /bin/bash

# 列出运行中的容器(自定义格式)
docker ps --format "table {{.ID}}\t{{.Names}}\t{{.Status}}\t{{.Ports}}"

# 列出所有容器(包括大小信息)
docker ps -as

# 停止容器(优雅停止)
docker stop -t 30 <container_id> # 30秒超时

# 删除容器(强制删除运行中的容器)
docker rm -f <container_id>

# 容器资源使用统计
docker stats --no-stream

# 容器性能分析
docker exec <container> top
docker exec <container> free -m
docker exec <container> df -h

# 容器与主机文件互传
docker cp <container_id>:/path/to/file /host/path
docker cp /host/path <container_id>:/container/path

# 容器日志查看(带时间戳和跟踪)
docker logs -ft <container_id>

# 容器资源限制更新
docker update --cpus=2 --memory=2g <container_id>

# 容器重启策略配置
docker run --restart unless-stopped -d myapp

# 容器健康检查
docker inspect --format='{{json .State.Health}}' <container_id>

实际应用场景示例

  1. 开发环境
    实际应用场景示例说明:

  2. 开发环境容器

    • -v 挂载主机目录到容器
    • -p 映射主机端口到容器
    • 适合本地开发调试
# 启动开发容器(挂载代码目录)
docker run -it -v $(pwd):/app -p 3000:3000 node:14 bash
  1. 数据库容器
    • -v 使用命名卷持久化数据
    • -e 设置环境变量
    • -d 后台运行
    • 适合数据库服务部署
# 启动MySQL容器(持久化数据)
docker run -d --name mysql -v mysql_data:/var/lib/mysql \
  -e MYSQL_ROOT_PASSWORD=secret -p 3306:3306 mysql:5.7
  1. 临时调试工具
    • --rm 运行后自动删除容器
    • 适合一次性任务
    • 使用官方工具镜像
# 使用curl容器测试API
docker run --rm curlimages/curl https://api.example.com
  1. 批处理任务
    • 直接执行命令不进入交互
    • 适合自动化脚本
    • 资源自动回收
# 运行一次性任务容器
docker run --rm python:3 python -c "print('Hello World')"
  1. 网络诊断
    • --network=host 使用主机网络
    • 专用网络工具镜像
    • 适合网络问题排查
# 使用网络工具容器诊断
docker run --network=host --rm nicolaka/netshoot \
  ping google.com

4. Dockerfile 编写

基础示例

FROM ubuntu:20.04
RUN apt-get update && apt-get install -y python3
COPY . /app
WORKDIR /app
CMD ["python3", "app.py"]

高级技巧与最佳实践

1. 多阶段构建实战
# 第一阶段:构建环境
FROM golang:1.16 AS builder
WORKDIR /src
COPY . .
RUN go build -o /app/myapp .

# 第二阶段:运行环境
FROM alpine:3.13
WORKDIR /app
COPY --from=builder /app/myapp .
COPY --from=builder /src/config.yaml .
RUN chmod +x myapp
USER nobody
CMD ["./myapp"]
2. 构建参数与动态配置
ARG APP_VERSION=1.0.0
ENV APP_VERSION=${APP_VERSION}

# 构建时传递参数
# docker build --build-arg APP_VERSION=2.0.0 -t myapp .
3. 安全加固措施
# 使用非root用户
RUN groupadd -r appuser && useradd -r -g appuser appuser
USER appuser

# 最小化权限
RUN chmod -R 755 /app && \
    chown -R appuser:appuser /app

# 移除不必要的工具
RUN apt-get purge -y curl && \
    apt-get autoremove -y && \
    rm -rf /var/lib/apt/lists/*
4. 构建优化技巧
# 合理利用缓存层
COPY package.json .
RUN npm install
COPY . .

# 合并RUN命令
RUN apt-get update && \
    apt-get install -y \
    python3 \
    python3-pip && \
    pip install --no-cache-dir -r requirements.txt && \
    rm -rf /var/lib/apt/lists/*

# 使用.dockerignore
# 示例内容:
.git
node_modules
*.log
*.md
5. 企业级Dockerfile示例
# 第一阶段:依赖安装
FROM node:14 as dependencies
WORKDIR /app
COPY package*.json ./
RUN npm ci --only=production

# 第二阶段:构建应用
FROM node:14 as builder
WORKDIR /app
COPY . .
COPY --from=dependencies /app/node_modules ./node_modules
RUN npm run build

# 第三阶段:生产镜像
FROM node:14-alpine
WORKDIR /app
ENV NODE_ENV=production
COPY --from=builder /app/dist ./dist
COPY --from=builder /app/node_modules ./node_modules
COPY --from=builder /app/package.json ./
EXPOSE 3000
CMD ["node", "dist/main.js"]
6. 调试技巧
# 查看构建过程
docker history <image>

# 调试构建失败
docker run -it <failed_image_id> sh

# 分析镜像大小
docker image ls --format "table {{.Repository}}\t{{.Tag}}\t{{.Size}}"

5. 容器网络

容器网络管理命令说明:

  1. 网络模式

    • bridge:默认NAT模式,适合单机容器通信
    • host:直接使用主机网络,性能最佳
    • none:无网络连接,安全隔离
    • overlay:多主机网络,适合集群
    • macvlan:MAC直通,直接暴露到物理网络
  2. 网络管理

    • docker network create 创建自定义网络
    • docker network connect 连接容器到网络
    • docker network inspect 查看网络详情
    • docker network prune 清理未使用网络

最佳实践:

  • 生产环境建议使用自定义网络隔离服务
  • 高性能场景考虑host或macvlan模式
  • 集群环境使用overlay网络

网络模式详解

1. 网络驱动比较
网络模式特点适用场景
bridge默认模式,NAT转发单机容器通信
host直接使用主机网络栈高性能需求
none无网络连接安全隔离场景
overlay多主机网络Swarm/K8s集群
macvlanMAC地址直通需要直接暴露到物理网络
2. 自定义网络高级配置
# 创建带子网和网关的网络
docker network create \
  --driver=bridge \
  --subnet=172.28.0.0/16 \
  --gateway=172.28.0.1 \
  --ip-range=172.28.5.0/24 \
  my-network

# 指定静态IP运行容器
docker run --network=my-network --ip=172.28.5.10 -d nginx

# 连接多个网络
docker network connect other-network my-container
3. 跨主机网络解决方案
  1. Overlay网络 (Docker Swarm):
# 初始化Swarm集群
docker swarm init

# 创建Overlay网络
docker network create --driver=overlay my-overlay

# 跨节点服务部署
docker service create --network=my-overlay --name web -p 80:80 nginx
  1. Macvlan网络:
# 创建Macvlan网络
docker network create -d macvlan \
  --subnet=192.168.1.0/24 \
  --gateway=192.168.1.1 \
  -o parent=eth0 \
  my-macvlan
4. 网络性能优化
# 查看网络吞吐量
docker run --rm --net=host nicolaka/netshoot \
  iperf3 -s # 服务端

docker run --rm --net=host nicolaka/netshoot \
  iperf3 -c host-ip # 客户端

# 网络QoS限制
docker run --network=my-network \
  --blkio-weight=300 \
  -d nginx
5. 网络诊断工具
# 检查容器网络配置
docker exec -it my-container ip addr

# 网络连通性测试
docker run --rm --net=container:my-container \
  nicolaka/netshoot ping google.com

# 抓包分析
docker run --rm --net=container:my-container \
  nicolaka/netshoot tcpdump -i eth0 -w capture.pcap
6. 实际案例
  1. 微服务架构:
# 为每个服务创建独立网络
docker network create product-network
docker network create order-network

# 通过网关容器实现网络隔离
docker run -d --name gateway --network=product-network nginx
docker network connect order-network gateway
  1. CI/CD流水线:
# 为每个构建创建临时网络
docker network create build-${BUILD_ID}
docker run --network=build-${BUILD_ID} -d test-db
docker run --network=build-${BUILD_ID} test-runner

6. 数据管理

数据管理命令说明:

  1. 数据卷操作

    • docker volume create 创建持久化数据卷
    • docker volume inspect 查看卷详情
    • docker volume prune 清理未使用的卷
    • docker run -v 挂载数据卷到容器
  2. 备份恢复

    • 使用临时容器执行备份命令
    • 支持多种存储后端(NFS, Ceph等)
    • 可设置定期备份策略

最佳实践:

  • 重要数据必须使用命名卷持久化
  • 定期测试备份恢复流程
  • 生产环境使用分布式存储方案

数据管理高级指南

1. 数据卷高级用法
# 创建带驱动选项的数据卷
docker volume create \
  --driver local \
  --opt type=nfs \
  --opt device=:/nfs/share \
  --opt o=addr=10.0.0.1,rw \
  nfs-volume

# 查看数据卷详情
docker volume inspect my-vol

# 清理未使用的数据卷
docker volume prune

# 数据卷备份
docker run --rm -v my-vol:/data -v $(pwd):/backup \
  ubuntu tar cvf /backup/backup.tar /data
2. 分布式存储方案
  1. NFS共享存储:
docker run -d \
  --mount 'type=volume,src=nfs-vol,dst=/app,volume-driver=local,volume-opt=type=nfs,volume-opt=device=:/nfs/share,"volume-opt=o=addr=10.0.0.1,rw"' \
  nginx
  1. Ceph分布式存储:
docker plugin install --alias ceph \
  --grant-all-permissions \
  ceph/plugin:latest

docker volume create --driver ceph \
  --name my-ceph-volume \
  -o size=10GB
3. 备份与恢复策略
  1. 数据库备份:
# MySQL备份
docker exec mysql sh -c 'exec mysqldump --all-databases -uroot -p"$MYSQL_ROOT_PASSWORD"' > backup.sql

# PostgreSQL备份
docker exec postgres pg_dumpall -U postgres > backup.sql
  1. 容器数据迁移:
# 导出容器文件系统
docker export <container> > container.tar

# 导入为镜像
cat container.tar | docker import - migrated-image
4. 性能优化技巧
# 使用本地SSD存储
docker run -v /mnt/ssd:/data --mount type=tmpfs,destination=/tmp \
  myapp

# 存储驱动选择
# 修改/etc/docker/daemon.json
{
  "storage-driver": "overlay2",
  "storage-opts": [
    "overlay2.override_kernel_check=true"
  ]
}
5. 企业级存储方案
  1. 多主机数据共享:
# GlusterFS配置示例
docker volume create \
  --driver=local \
  --opt type=glusterfs \
  --opt device=10.0.0.1:/gvol \
  --opt o=log-level=DEBUG \
  gluster-vol
  1. 云存储集成:
# AWS EBS卷
docker volume create \
  --driver=rexray/ebs \
  --name=ebs-vol \
  --opt=size=50
6. 数据安全实践
# 加密数据卷
docker volume create \
  --driver=local \
  --opt type=encrypted \
  --opt key=my-secret-key \
  secure-vol

# 只读挂载
docker run -v /data:/app:ro \
  myapp
7. 监控与维护
# 查看存储使用情况
docker system df

# 分析容器存储
docker diff <container>

# 清理无用数据
docker system prune --volumes

7. 最佳实践

  1. 安全性

    • 不要以 root 用户运行容器
    • 定期更新基础镜像
    • 扫描镜像中的漏洞
  2. 性能优化

    • 使用多阶段构建
    • 合理使用缓存
    • 精简镜像大小
  3. 编排工具

    • Docker Compose:单机编排
    • Kubernetes:生产级编排
    • Swarm:Docker 原生集群
  4. 日志管理

    • 使用日志驱动
    • 集中式日志收集
    • 合理的日志轮转策略

8. 进阶主题

多阶段构建

FROM golang:1.16 AS builder
WORKDIR /app
COPY . .
RUN go build -o myapp .

FROM alpine:latest  
WORKDIR /root/
COPY --from=builder /app/myapp .
CMD ["./myapp"]

Docker Compose

version: '3'
services:
  web:
    image: nginx
    ports:
      - "80:80"
  db:
    image: postgres
    environment:
      POSTGRES_PASSWORD: example

9. 常见问题排查

  1. 容器启动失败

    • 检查日志:docker logs <container_id>
    • 交互式调试:docker run -it --entrypoint /bin/sh <image>
    • 检查端口冲突:netstat -tulnp | grep <port>
    • 检查资源限制:docker inspect <container> | grep -i memory
  2. 网络连接问题

    • 检查网络配置:docker network inspect <network_name>
    • 测试连接:docker exec <container> ping <target>
    • 检查DNS配置:docker exec <container> cat /etc/resolv.conf
    • 检查防火墙规则:iptables -L -n
  3. 性能问题

    • 监控资源使用:docker stats
    • 限制资源:--memory, --cpus 参数
    • 分析性能瓶颈:docker exec <container> top
    • 优化存储驱动:docker info | grep "Storage Driver"

10. 安全实践详解

容器安全深度防护指南

1. 容器安全加固
# 使用非root用户运行容器
docker run -u 1000:1000 myapp

# 限制内核能力
docker run --cap-drop ALL --cap-add NET_BIND_SERVICE nginx

# 资源限制
docker run --memory 512m --cpus 1 --pids-limit 100 myapp

# 只读文件系统
docker run --read-only --tmpfs /tmp:rw,size=50m myapp

# 安全配置文件
docker run --security-opt no-new-privileges \
  --security-opt seccomp=unconfined \
  --security-opt apparmor=docker-default \
  myapp
2. 镜像安全扫描
# 使用Snyk扫描镜像
docker scan --file Dockerfile myimage

# 漏洞数据库更新
docker scout cves myimage

# 镜像签名验证
docker trust inspect --pretty myimage

# 构建时扫描
docker build --secret id=mysecret,src=secret.txt \
  --no-cache -t myimage .
3. 运行时安全监控
# 运行时行为监控
docker run --security-opt apparmor=my-profile \
  --security-opt seccomp=my-seccomp.json \
  myapp

# 审计日志
docker events --filter 'event=container' --since 1h

# 运行时检查
docker container checkpoint create \
  --leave-running mycontainer checkpoint1
4. 网络安全防护
# 网络策略限制
docker network create --internal secure-net

# 容器间TLS加密
docker run --network secure-net \
  -e SSL_CERT=/certs/cert.pem \
  -e SSL_KEY=/certs/key.pem \
  myapp

# 防火墙规则
docker run --network host --cap-add NET_ADMIN \
  nicolaka/netshoot iptables -A INPUT -p tcp --dport 80 -j DROP
5. 企业级安全方案
  1. 内容信任:
# 启用Docker内容信任
export DOCKER_CONTENT_TRUST=1
docker push myrepo/myimage
  1. 安全基准检查:
# 使用CIS基准检查
docker run -it --net host --pid host --userns host --cap-add audit_control \
  -v /etc:/etc:ro \
  -v /usr/bin/containerd:/usr/bin/containerd:ro \
  -v /usr/bin/runc:/usr/bin/runc:ro \
  aquasec/kube-bench:latest
  1. 运行时保护:
# Falco实时监控
docker run -d --name falco \
  --privileged \
  -v /var/run/docker.sock:/host/var/run/docker.sock \
  -v /dev:/host/dev \
  -v /proc:/host/proc:ro \
  -v /boot:/host/boot:ro \
  -v /lib/modules:/host/lib/modules:ro \
  -v /usr:/host/usr:ro \
  falcosecurity/falco
6. 安全最佳实践清单
  1. 镜像构建:

    • 使用最小化基础镜像 (Alpine, Distroless)
    • 多阶段构建减少攻击面
    • 定期更新基础镜像
    • 扫描第三方依赖
  2. 运行时:

    • 禁用特权模式
    • 限制资源使用
    • 启用只读根文件系统
    • 使用用户命名空间隔离
  3. 网络:

    • 限制容器网络访问
    • 使用网络策略
    • 加密敏感通信
    • 监控网络流量
  4. 监控:

    • 集中式日志收集
    • 实时异常检测
    • 定期安全审计
    • 漏洞扫描计划

11. 监控与日志

全面监控与日志管理指南

1. 容器监控深度解析
# 实时监控容器资源
docker stats --format "table {{.Name}}\t{{.CPUPerc}}\t{{.MemUsage}}\t{{.NetIO}}"

# 获取容器指标API
curl --unix-socket /var/run/docker.sock \
  http://localhost/containers/<container_id>/stats?stream=false

# 使用cAdvisor收集指标
docker run -d \
  --name=cadvisor \
  --volume=/:/rootfs:ro \
  --volume=/var/run:/var/run:ro \
  --volume=/sys:/sys:ro \
  --volume=/var/lib/docker/:/var/lib/docker:ro \
  --publish=8080:8080 \
  gcr.io/cadvisor/cadvisor:v0.47.0
2. Prometheus监控方案
  1. 配置示例:
# prometheus.yml
scrape_configs:
  - job_name: 'docker'
    static_configs:
      - targets: ['localhost:9323']
  - job_name: 'cadvisor'
    static_configs:
      - targets: ['cadvisor:8080']
  1. 关键监控指标:
  • 容器CPU使用率: container_cpu_usage_seconds_total
  • 容器内存使用: container_memory_usage_bytes
  • 网络流量: container_network_receive_bytes_total
  • 磁盘IO: container_fs_writes_bytes_total
3. 企业级日志架构
  1. Fluentd配置示例:
<source>
  @type forward
  port 24224
</source>

<match docker.**>
  @type elasticsearch
  host elasticsearch
  port 9200
  logstash_format true
</match>
  1. 日志收集命令:
# 使用Fluentd驱动
docker run --log-driver=fluentd \
  --log-opt fluentd-address=fluentd:24224 \
  --log-opt tag="docker.{{.Name}}" \
  nginx
4. 告警与事件响应
  1. 告警规则示例 (Prometheus):
groups:
- name: docker-alerts
  rules:
  - alert: HighMemoryUsage
    expr: container_memory_usage_bytes{name!=""} / container_spec_memory_limit_bytes > 0.8
    for: 5m
    labels:
      severity: warning
    annotations:
      summary: "High memory usage on {{ $labels.name }}"
  1. 事件响应流程:
  • 实时事件监控: docker events --filter 'event=die'
  • 自动重启策略: docker run --restart unless-stopped myapp
  • 事件触发脚本:
docker events --format '{{json .}}' | while read event; do
  echo "Event: $event"
  # 触发自定义处理逻辑
done
5. 性能瓶颈分析
  1. 性能分析工具:
# 使用perf分析容器性能
docker run --privileged --pid=host -it \
  brendangregg/perf stat -a

# 火焰图生成
docker run --privileged --pid=host -it \
  brendangregg/perf record -F 99 -a -g -- sleep 30
  1. 常见瓶颈指标:
  • CPU限制: Throttled CPU Time
  • 内存压力: OOM Kill Count
  • 磁盘IO等待: I/O Wait Percentage
  • 网络丢包: Packet Drop Rate
6. 日志最佳实践
  1. 结构化日志:
{
  "timestamp": "2023-01-01T12:00:00Z",
  "level": "ERROR",
  "message": "Failed to connect",
  "container": "webapp",
  "trace_id": "abc123"
}
  1. 日志轮转策略:
# 配置日志轮转
docker run --log-driver=json-file \
  --log-opt max-size=10m \
  --log-opt max-file=3 \
  nginx
  1. 敏感信息过滤:
# 使用log-driver过滤敏感数据
docker run --log-driver=syslog \
  --log-opt syslog-format=rfc5424 \
  --log-opt tag="{{.ImageName}}/{{.Name}}" \
  --log-opt env=SECRET_KEY \
  myapp

12. CI/CD集成

基本流程

  1. 代码提交触发构建
  2. 运行测试容器
  3. 构建生产镜像
  4. 部署到测试环境
  5. 自动化测试
  6. 部署到生产环境

工具集成

  1. Jenkins

    • 使用Docker Agent
    • 构建管道示例
  2. GitLab CI

    • .gitlab-ci.yml 配置
    • 使用Docker-in-Docker
  3. GitHub Actions

    • 使用container jobs
    • 缓存优化

13. 生产环境部署

编排选择

  1. Kubernetes

    • 架构概述
    • 部署策略(滚动更新、蓝绿部署)
  2. Docker Swarm

    • 集群搭建
    • 服务扩展
  3. ECS

    • AWS托管方案
    • Fargate无服务器容器

高可用策略

  • 多节点部署
  • 健康检查配置
  • 自动恢复机制

14. 性能调优

容器层面

  1. 资源限制

    • CPU份额:--cpu-shares
    • 内存限制:--memory
    • IO限制:--blkio-weight
  2. 配置优化

    • 选择合适的存储驱动
    • 调整ulimit
    • 内核参数调优

镜像层面

  • 使用Alpine基础镜像
  • 多阶段构建
  • 合并RUN指令减少层数

15. 高级技巧

调试技巧

  1. 进入运行中容器

    docker exec -it <container> /bin/bash
    
  2. 检查容器进程

    docker top <container>
    
  3. 分析镜像历史

    docker history <image>
    

实用命令

  1. 批量操作

    # 停止所有容器
    docker stop $(docker ps -aq)
    
    # 删除所有容器
    docker rm $(docker ps -aq)
    
    # 删除所有镜像
    docker rmi $(docker images -q)
    
  2. 导出/导入

    # 导出容器
    docker export <container> > container.tar
    
    # 导入为镜像
    cat container.tar | docker import - new-image
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值