在生产环境中部署Docker需要系统化的规划和严谨的执行。以下是分步骤的详细方案:
一、前期规划阶段 1. 基础设施评估 - 计算需求:根据容器数量预估CPU/内存需求(建议预留20%资源余量) - 存储方案:选择适合的存储驱动(推荐overlay2),规划持久化存储方案 - 网络架构:设计容器网络模型(建议采用bridge+自定义网络)
二、环境准备 1. 主机系统配置
# 所有节点通用配置
sudo tee /etc/modules-load.d/containerd.conf <<EOF
overlay
br_netfilter
EOF
sudo modprobe overlay
sudo modprobe br_netfilter
# 设置内核参数
sudo tee /etc/sysctl.d/99-kubernetes-cri.conf <<EOF
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
net.bridge.bridge-nf-call-ip6tables = 1
EOF
sudo sysctl --system
# 安装Docker CE
sudo apt-get update && sudo apt-get install -y \
apt-transport-https ca-certificates \
curl gnupg lsb-release
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
echo \
"deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update && sudo apt-get install -y docker-ce docker-ce-cli containerd.io
# 生产环境关键配置
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<EOF
{
"exec-opts": ["native.cgroupdriver=systemd"],
"log-driver": "json-file",
"log-opts": {
"max-size": "100m",
"max-file": "3"
},
"storage-driver": "overlay2",
"storage-opts": [
"overlay2.override_kernel_check=true"
],
"live-restore": true,
"default-ulimits": {
"nofile": {
"Name": "nofile",
"Hard": 65536,
"Soft": 65536
}
}
}
EOF
三、集群化部署(生产推荐方案) 1. Swarm模式部署(适合中小规模)
# 初始化Swarm管理节点
docker swarm init --advertise-addr <MANAGER_IP>
# 添加工作节点
docker swarm join --token <TOKEN> <MANAGER_IP>:2377
# 部署可视化监控
docker service create \
--name=viz \
--publish=8080:8080/tcp \
--constraint=node.role==manager \
--mount=type=bind,src=/var/run/docker.sock,dst=/var/run/docker.sock \
dockersamples/visualizer
# 安装kubeadm、kubelet和kubectl
sudo apt-get update && sudo apt-get install -y apt-transport-https curl
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
cat <<EOF | sudo tee /etc/apt/sources.list.d/kubernetes.list
deb https://apt.kubernetes.io/ kubernetes-xenial main
EOF
sudo apt-get update
sudo apt-get install -y kubelet kubeadm kubectl
sudo apt-mark hold kubelet kubeadm kubectl
# 初始化集群(使用Docker作为runtime)
sudo kubeadm init --pod-network-cidr=10.244.0.0/16
四、安全加固措施 1. 访问控制
# 创建专用docker用户组
sudo groupadd dockerprod
sudo usermod -aG dockerprod $USER
# 配置TLS加密通信
openssl genrsa -aes256 -out ca-key.pem 4096
openssl req -new -x509 -days 365 -key ca-key.pem -sha256 -out ca.pem
# 启用用户命名空间隔离
echo "dockremap:165536:65536" | sudo tee -a /etc/subuid
echo "dockremap:165536:65536" | sudo tee -a /etc/subgid
# 配置容器安全策略
sudo apt-get install -y apparmor
sudo aa-enforce /etc/apparmor.d/docker-default
五、监控与维护 1. 监控方案部署
# 使用cAdvisor+Prometheus+Grafana方案
docker run \
--volume=/:/rootfs:ro \
--volume=/var/run:/var/run:ro \
--volume=/sys:/sys:ro \
--volume=/var/lib/docker/:/var/lib/docker:ro \
--volume=/dev/disk/:/dev/disk:ro \
--publish=8080:8080 \
--detach=true \
--name=cadvisor \
--privileged \
--device=/dev/kmsg \
gcr.io/cadvisor/cadvisor:v0.47.0
六、CI/CD集成示例
# GitLab CI示例
stages:
- build
- test
- deploy
build_image:
stage: build
script:
- docker build -t $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA .
- docker push $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA
deploy_prod:
stage: deploy
only:
- master
script:
- docker stack deploy --compose-file docker-compose.prod.yml myapp
关键注意事项: 1. 镜像管理: - 使用私有仓库(Harbor/Nexus) - 实施镜像签名验证 - 定期扫描漏洞(Trivy/Clair)
网络性能优化:
存储方案选择:
灾备方案:
日志管理:
建议在生产部署前进行: 1. 压力测试(使用Locust/k6) 2. 故障注入测试(Chaos Mesh) 3. 安全扫描(使用Anchore/Clair)
以上方案可根据实际业务需求进行调整,建议在过渡环境充分验证后再部署到生产环境。