1. 华为云服务器初始化与Docker环境准备

在华为云上配置Docker环境前,我们需要先完成云服务器的初始化工作。华为云ECS(弹性云服务器)提供了多种规格选择,对于Docker环境建议选择至少2核4G配置,操作系统推荐使用CentOS 7.6或Ubuntu 18.04/20.04 LTS版本。

1.1 华为云ECS基础配置

登录华为云控制台后,在"计算 > 弹性云服务器"页面创建新实例时,有几个关键配置需要注意:

  1. 镜像选择 :华为云市场提供了预装Docker的镜像,但为了更好的控制版本,建议选择纯净版系统镜像
  2. 安全组配置 :必须开放以下端口:
    • 22端口(SSH)
    • 2375端口(Docker守护进程,生产环境建议关闭)
    • 2376端口(Docker TLS加密通信)
  3. 磁盘配置 :建议系统盘至少40GB,数据盘根据实际需求挂载

创建完成后,通过SSH连接到服务器:

ssh root@<你的华为云服务器公网IP>

1.2 系统环境优化

在安装Docker前,建议先对系统进行基础优化:

# 更新系统软件包
yum update -y  # CentOS
apt update && apt upgrade -y  # Ubuntu

# 关闭SELinux(可选)
setenforce 0
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config

# 设置时区
timedatectl set-timezone Asia/Shanghai

# 安装基础工具
yum install -y vim wget curl net-tools  # CentOS
apt install -y vim wget curl net-tools  # Ubuntu

2. Docker引擎安装与配置

2.1 Docker CE安装

华为云提供了多种Docker安装方式,以下是官方推荐的安装方法:

对于CentOS系统

# 卸载旧版本
yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine

# 安装依赖
yum install -y yum-utils device-mapper-persistent-data lvm2

# 添加Docker官方仓库
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

# 安装Docker CE
yum install -y docker-ce docker-ce-cli containerd.io

对于Ubuntu系统

# 卸载旧版本
apt-get remove docker docker-engine docker.io containerd runc

# 安装依赖
apt-get update
apt-get install -y apt-transport-https ca-certificates curl gnupg-agent software-properties-common

# 添加Docker官方GPG key
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

# 添加仓库
add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"

# 安装Docker CE
apt-get update
apt-get install -y docker-ce docker-ce-cli containerd.io

2.2 华为云Docker加速器配置

华为云提供了容器镜像服务(SWR),我们可以配置为Docker镜像加速器:

# 创建或修改daemon.json
cat > /etc/docker/daemon.json <<EOF
{
  "registry-mirrors": ["https://<你的华为云SWR域名>.myhuaweicloud.com"],
  "exec-opts": ["native.cgroupdriver=systemd"],
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "100m"
  },
  "storage-driver": "overlay2"
}
EOF

# 重启Docker服务
systemctl daemon-reload
systemctl restart docker

# 设置开机自启
systemctl enable docker

注意:华为云SWR域名可以在容器镜像服务控制台获取,格式通常为 -swr. .myhuaweicloud.com

2.3 Docker版本验证与基础命令测试

安装完成后,验证Docker是否正常运行:

# 查看Docker版本
docker version

# 运行测试容器
docker run hello-world

# 查看Docker系统信息
docker info

3. Docker生产环境安全配置

3.1 Docker守护进程安全加固

默认情况下,Docker守护进程监听在Unix socket上,但有时我们需要远程管理,此时需要配置TLS加密:

# 创建CA证书目录
mkdir -p /etc/docker/ca
cd /etc/docker/ca

# 生成CA私钥和自签名证书
openssl genrsa -aes256 -out ca-key.pem 4096
openssl req -new -x509 -days 365 -key ca-key.pem -sha256 -out ca.pem

# 生成服务器密钥和证书签名请求(CSR)
openssl genrsa -out server-key.pem 4096
openssl req -subj "/CN=<你的服务器IP>" -sha256 -new -key server-key.pem -out server.csr

# 使用CA签署服务器证书
echo subjectAltName = DNS:<你的域名>,IP:<你的服务器IP>,IP:127.0.0.1 >> extfile.cnf
echo extendedKeyUsage = serverAuth >> extfile.cnf
openssl x509 -req -days 365 -sha256 -in server.csr -CA ca.pem -CAkey ca-key.pem -CAcreateserial -out server-cert.pem -extfile extfile.cnf

# 生成客户端密钥和证书
openssl genrsa -out key.pem 4096
openssl req -subj '/CN=client' -new -key key.pem -out client.csr
echo extendedKeyUsage = clientAuth > extfile-client.cnf
openssl x509 -req -days 365 -sha256 -in client.csr -CA ca.pem -CAkey ca-key.pem -CAcreateserial -out cert.pem -extfile extfile-client.cnf

# 配置Docker守护进程
vi /lib/systemd/system/docker.service
# 修改ExecStart行为:
ExecStart=/usr/bin/dockerd --tlsverify --tlscacert=/etc/docker/ca/ca.pem --tlscert=/etc/docker/ca/server-cert.pem --tlskey=/etc/docker/ca/server-key.pem -H tcp://0.0.0.0:2376 -H unix:///var/run/docker.sock

# 重新加载并重启Docker
systemctl daemon-reload
systemctl restart docker

3.2 用户权限管理

默认情况下,Docker需要root权限运行,我们可以将普通用户加入docker组来避免使用sudo:

# 创建docker组(如果不存在)
groupadd docker

# 将当前用户加入docker组
usermod -aG docker $USER

# 刷新组权限
newgrp docker

# 验证非root用户是否可以运行Docker命令
docker run hello-world

警告:将用户加入docker组等同于授予该用户root权限,在生产环境中应谨慎操作

4. 华为云容器镜像服务(SWR)集成

4.1 华为云SWR基本配置

华为云容器镜像服务(SWR)提供了私有镜像仓库功能,首先需要在华为云控制台完成以下操作:

  1. 在"容器 > 容器镜像服务"中创建组织
  2. 获取访问凭证(用户名一般为区域项目名称,密码为临时密码)

在服务器上登录SWR:

# 安装华为云CLI工具(可选)
pip install huaweicloudsdkcore huaweicloudsdkecs huaweicloudsdkvpc

# 登录SWR
docker login -u <用户名> -p <密码> <SWR域名>

4.2 镜像推送与拉取示例

# 拉取官方镜像
docker pull nginx:latest

# 重打标签以匹配SWR格式
docker tag nginx:latest <SWR域名>/<组织名称>/nginx:latest

# 推送镜像到SWR
docker push <SWR域名>/<组织名称>/nginx:latest

# 从SWR拉取镜像
docker pull <SWR域名>/<组织名称>/nginx:latest

4.3 使用华为云容器引擎(CCE)

华为云还提供了容器引擎服务(CCE),可以直接在Kubernetes集群中使用SWR镜像:

  1. 在"容器 > 容器引擎"中创建集群
  2. 配置kubectl连接到集群
  3. 创建使用SWR镜像的Deployment
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
spec:
  replicas: 2
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: <SWR域名>/<组织名称>/nginx:latest
        ports:
        - containerPort: 80

5. 常见问题排查与优化

5.1 Docker启动失败问题

问题现象 :执行docker命令时提示"Cannot connect to the Docker daemon"

解决方案

  1. 检查Docker服务状态:
systemctl status docker
  1. 查看日志定位问题:
journalctl -u docker -n 50 --no-pager

常见原因及修复方法:

错误类型 可能原因 解决方案
iptables冲突 防火墙规则冲突 执行 iptables -F 后重启docker
存储驱动问题 不兼容的存储驱动 修改daemon.json中的storage-driver为overlay2
磁盘空间不足 /var/lib/docker空间不足 清理镜像或扩容磁盘

5.2 镜像拉取速度慢

优化方案

  1. 配置多个镜像加速器:
{
  "registry-mirrors": [
    "https://<华为云SWR域名>",
    "https://hub-mirror.c.163.com",
    "https://mirror.baidubce.com"
  ]
}
  1. 使用华为云容器镜像服务的"镜像同步"功能,将常用镜像同步到华为云

5.3 容器资源限制

华为云ECS上运行Docker容器时,建议对容器资源进行限制以避免单个容器占用全部资源:

# 运行容器时限制CPU和内存
docker run -it --cpus 1 --memory 1g <镜像名称>

# 查看容器资源使用情况
docker stats

对于生产环境,建议使用docker-compose或Kubernetes进行更精细的资源管理。

更多推荐