插件窝 干货文章 如何在生产环境中部署Docker

如何在生产环境中部署Docker

Docker sudo apt 方案 405    来源:    2025-04-29

在生产环境中部署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
  1. Docker安装与配置
# 安装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
  1. Kubernetes集成(大规模生产环境)
# 安装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
  1. 安全策略配置
# 启用用户命名空间隔离
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. 网络性能优化:

    • 考虑macvlan驱动
    • 对于高性能需求使用host网络模式
  2. 存储方案选择:

    • 块存储:适用于数据库类应用
    • 分布式存储:Ceph/Rook
    • 云存储:AWS EBS/Azure Disk
  3. 灾备方案:

    • 定期备份/var/lib/docker(非生产环境)
    • 对于生产环境,实现容器编排层面的高可用
  4. 日志管理:

    • ELK栈集中管理
    • 日志轮转策略(max-size=100MB/max-file=3)

建议在生产部署前进行: 1. 压力测试(使用Locust/k6) 2. 故障注入测试(Chaos Mesh) 3. 安全扫描(使用Anchore/Clair)

以上方案可根据实际业务需求进行调整,建议在过渡环境充分验证后再部署到生产环境。