导读
本文是一份全面的 Docker 技术指南,涵盖了从基础概念到高级实践的完整知识体系。文档系统性地介绍了 Docker 的核心技术、安装配置、日常操作、网络与存储管理、安全实践以及生产环境部署等关键内容。
主要特点:
- 全面性:包含 Docker 全栈技术栈,从入门到进阶
- 实践性:提供大量可直接运行的命令示例和配置片段
- 专业性:涵盖企业级应用场景和安全最佳实践
- 系统性:按照技术逻辑组织内容,便于循序渐进学习
适用读者:
- 开发人员:快速掌握容器化开发技能
- 运维工程师:学习容器编排和集群管理
- 架构师:设计基于容器的分布式系统
- 安全工程师:实施容器安全防护措施
详细目录
第一部分:基础篇
第二部分:操作篇
第三部分:进阶篇
-
- 基础语法与指令
- 多阶段构建实战
- 安全加固与优化技巧
-
- 网络模式比较
- 自定义网络配置
- 跨主机网络方案
-
- 数据卷操作
- 分布式存储方案
- 备份恢复策略
第四部分:生产实践篇
第五部分:扩展篇
-
- Jenkins/GitLab集成
- 自动化构建流程
- 部署策略
-
- Kubernetes编排
- Docker Swarm集群
- 高可用策略
-
- 资源限制配置
- 存储驱动选择
- 内核参数优化
-
- 容器调试方法
- 批量操作命令
- 导入导出技巧
附录
1. Docker 简介
Docker 是一个开源的应用容器引擎,基于 Go 语言开发。它允许开发者将应用及其依赖打包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器或 Windows 机器上。
核心概念
- 镜像(Image):Docker 镜像是一个只读模板,包含创建 Docker 容器的说明。镜像采用分层存储结构,每一层代表Dockerfile中的一条指令。例如:
以下命令用于管理Docker镜像的分层结构和传输:
docker history
查看镜像的构建历史和各层信息docker save
将镜像导出为tar归档文件,便于传输或备份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
私有仓库操作命令说明:
- 私有仓库搭建:使用Docker Registry或Harbor
docker run
启动一个本地registry容器作为私有仓库docker tag
为镜像打上私有仓库地址的标签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发行版上的安装命令:
- Ubuntu/Debian系统使用apt-get安装
- CentOS/RHEL系统使用yum安装
- 安装前需要更新软件包索引
- 安装后需要启动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. 常用命令
镜像操作
镜像基本操作命令说明:
docker pull
从仓库下载镜像到本地docker images
列出本地已下载的镜像docker rmi
删除本地镜像,释放磁盘空间
注意:删除镜像前需确保没有容器在使用该镜像
# 拉取镜像
docker pull ubuntu:20.04
# 列出本地镜像
docker images
# 删除镜像
docker rmi <image_id>
容器操作
容器操作命令详解:
-
容器运行:
docker run
创建并启动容器--cpus
限制CPU核心数--memory
限制内存使用量-it
以交互模式运行
-
容器查看:
docker ps
查看容器状态--format
自定义输出格式-a
显示所有容器-s
显示容器大小
-
容器管理:
docker stop
优雅停止容器docker rm
删除容器-f
强制操作运行中的容器
-
资源监控:
docker stats
实时查看资源使用docker exec
在容器内执行命令top/free/df
查看进程/内存/磁盘
-
文件操作:
docker cp
容器与主机间文件传输
-
日志查看:
docker logs
查看容器日志-f
跟踪日志输出-t
显示时间戳
-
高级功能:
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>
实际应用场景示例
-
开发环境:
实际应用场景示例说明: -
开发环境容器:
-v
挂载主机目录到容器-p
映射主机端口到容器- 适合本地开发调试
# 启动开发容器(挂载代码目录)
docker run -it -v $(pwd):/app -p 3000:3000 node:14 bash
- 数据库容器:
-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
- 临时调试工具:
--rm
运行后自动删除容器- 适合一次性任务
- 使用官方工具镜像
# 使用curl容器测试API
docker run --rm curlimages/curl https://api.example.com
- 批处理任务:
- 直接执行命令不进入交互
- 适合自动化脚本
- 资源自动回收
# 运行一次性任务容器
docker run --rm python:3 python -c "print('Hello World')"
- 网络诊断:
--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. 容器网络
容器网络管理命令说明:
-
网络模式:
bridge
:默认NAT模式,适合单机容器通信host
:直接使用主机网络,性能最佳none
:无网络连接,安全隔离overlay
:多主机网络,适合集群macvlan
:MAC直通,直接暴露到物理网络
-
网络管理:
docker network create
创建自定义网络docker network connect
连接容器到网络docker network inspect
查看网络详情docker network prune
清理未使用网络
最佳实践:
- 生产环境建议使用自定义网络隔离服务
- 高性能场景考虑host或macvlan模式
- 集群环境使用overlay网络
网络模式详解
1. 网络驱动比较
网络模式 | 特点 | 适用场景 |
---|---|---|
bridge | 默认模式,NAT转发 | 单机容器通信 |
host | 直接使用主机网络栈 | 高性能需求 |
none | 无网络连接 | 安全隔离场景 |
overlay | 多主机网络 | Swarm/K8s集群 |
macvlan | MAC地址直通 | 需要直接暴露到物理网络 |
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. 跨主机网络解决方案
- 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
- 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. 实际案例
- 微服务架构:
# 为每个服务创建独立网络
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
- 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. 数据管理
数据管理命令说明:
-
数据卷操作:
docker volume create
创建持久化数据卷docker volume inspect
查看卷详情docker volume prune
清理未使用的卷docker run -v
挂载数据卷到容器
-
备份恢复:
- 使用临时容器执行备份命令
- 支持多种存储后端(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. 分布式存储方案
- 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
- 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. 备份与恢复策略
- 数据库备份:
# 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
- 容器数据迁移:
# 导出容器文件系统
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. 企业级存储方案
- 多主机数据共享:
# GlusterFS配置示例
docker volume create \
--driver=local \
--opt type=glusterfs \
--opt device=10.0.0.1:/gvol \
--opt o=log-level=DEBUG \
gluster-vol
- 云存储集成:
# 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. 最佳实践
-
安全性:
- 不要以 root 用户运行容器
- 定期更新基础镜像
- 扫描镜像中的漏洞
-
性能优化:
- 使用多阶段构建
- 合理使用缓存
- 精简镜像大小
-
编排工具:
- Docker Compose:单机编排
- Kubernetes:生产级编排
- Swarm:Docker 原生集群
-
日志管理:
- 使用日志驱动
- 集中式日志收集
- 合理的日志轮转策略
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. 常见问题排查
-
容器启动失败:
- 检查日志:
docker logs <container_id>
- 交互式调试:
docker run -it --entrypoint /bin/sh <image>
- 检查端口冲突:
netstat -tulnp | grep <port>
- 检查资源限制:
docker inspect <container> | grep -i memory
- 检查日志:
-
网络连接问题:
- 检查网络配置:
docker network inspect <network_name>
- 测试连接:
docker exec <container> ping <target>
- 检查DNS配置:
docker exec <container> cat /etc/resolv.conf
- 检查防火墙规则:
iptables -L -n
- 检查网络配置:
-
性能问题:
- 监控资源使用:
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. 企业级安全方案
- 内容信任:
# 启用Docker内容信任
export DOCKER_CONTENT_TRUST=1
docker push myrepo/myimage
- 安全基准检查:
# 使用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
- 运行时保护:
# 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. 安全最佳实践清单
-
镜像构建:
- 使用最小化基础镜像 (Alpine, Distroless)
- 多阶段构建减少攻击面
- 定期更新基础镜像
- 扫描第三方依赖
-
运行时:
- 禁用特权模式
- 限制资源使用
- 启用只读根文件系统
- 使用用户命名空间隔离
-
网络:
- 限制容器网络访问
- 使用网络策略
- 加密敏感通信
- 监控网络流量
-
监控:
- 集中式日志收集
- 实时异常检测
- 定期安全审计
- 漏洞扫描计划
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监控方案
- 配置示例:
# prometheus.yml
scrape_configs:
- job_name: 'docker'
static_configs:
- targets: ['localhost:9323']
- job_name: 'cadvisor'
static_configs:
- targets: ['cadvisor:8080']
- 关键监控指标:
- 容器CPU使用率:
container_cpu_usage_seconds_total
- 容器内存使用:
container_memory_usage_bytes
- 网络流量:
container_network_receive_bytes_total
- 磁盘IO:
container_fs_writes_bytes_total
3. 企业级日志架构
- Fluentd配置示例:
<source>
@type forward
port 24224
</source>
<match docker.**>
@type elasticsearch
host elasticsearch
port 9200
logstash_format true
</match>
- 日志收集命令:
# 使用Fluentd驱动
docker run --log-driver=fluentd \
--log-opt fluentd-address=fluentd:24224 \
--log-opt tag="docker.{{.Name}}" \
nginx
4. 告警与事件响应
- 告警规则示例 (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 }}"
- 事件响应流程:
- 实时事件监控:
docker events --filter 'event=die'
- 自动重启策略:
docker run --restart unless-stopped myapp
- 事件触发脚本:
docker events --format '{{json .}}' | while read event; do
echo "Event: $event"
# 触发自定义处理逻辑
done
5. 性能瓶颈分析
- 性能分析工具:
# 使用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
- 常见瓶颈指标:
- CPU限制:
Throttled CPU Time
- 内存压力:
OOM Kill Count
- 磁盘IO等待:
I/O Wait Percentage
- 网络丢包:
Packet Drop Rate
6. 日志最佳实践
- 结构化日志:
{
"timestamp": "2023-01-01T12:00:00Z",
"level": "ERROR",
"message": "Failed to connect",
"container": "webapp",
"trace_id": "abc123"
}
- 日志轮转策略:
# 配置日志轮转
docker run --log-driver=json-file \
--log-opt max-size=10m \
--log-opt max-file=3 \
nginx
- 敏感信息过滤:
# 使用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集成
基本流程
- 代码提交触发构建
- 运行测试容器
- 构建生产镜像
- 部署到测试环境
- 自动化测试
- 部署到生产环境
工具集成
-
Jenkins:
- 使用Docker Agent
- 构建管道示例
-
GitLab CI:
.gitlab-ci.yml
配置- 使用Docker-in-Docker
-
GitHub Actions:
- 使用container jobs
- 缓存优化
13. 生产环境部署
编排选择
-
Kubernetes:
- 架构概述
- 部署策略(滚动更新、蓝绿部署)
-
Docker Swarm:
- 集群搭建
- 服务扩展
-
ECS:
- AWS托管方案
- Fargate无服务器容器
高可用策略
- 多节点部署
- 健康检查配置
- 自动恢复机制
14. 性能调优
容器层面
-
资源限制:
- CPU份额:
--cpu-shares
- 内存限制:
--memory
- IO限制:
--blkio-weight
- CPU份额:
-
配置优化:
- 选择合适的存储驱动
- 调整ulimit
- 内核参数调优
镜像层面
- 使用Alpine基础镜像
- 多阶段构建
- 合并RUN指令减少层数
15. 高级技巧
调试技巧
-
进入运行中容器:
docker exec -it <container> /bin/bash
-
检查容器进程:
docker top <container>
-
分析镜像历史:
docker history <image>
实用命令
-
批量操作:
# 停止所有容器 docker stop $(docker ps -aq) # 删除所有容器 docker rm $(docker ps -aq) # 删除所有镜像 docker rmi $(docker images -q)
-
导出/导入:
# 导出容器 docker export <container> > container.tar # 导入为镜像 cat container.tar | docker import - new-image