1. 重装Linux系统后的Docker部署指南

刚完成Linux系统重装后,第一件要事就是搭建开发环境。作为现代应用部署的事实标准,Docker的安装配置直接决定了后续工作效率。不同于Windows/macOS的一键安装包,Linux环境下需要更多手动配置,但同时也带来更高的灵活性和控制力。

我在运维岗位上经历过数十次系统迁移,总结出这套经过生产环境验证的Docker部署方案。无论你是使用Ubuntu、CentOS还是国产统信UOS,这套方法都能快速构建稳定的容器环境。下面将从系统准备、依赖处理、安装验证到权限配置,手把手带你避开那些新手常踩的坑。

2. 系统环境准备

2.1 选择适合的Linux发行版

不同的Linux发行版在软件源管理和内核版本上存在差异,这直接影响Docker的安装方式:

  • Ubuntu/Debian系 :使用apt管理软件包,建议选择LTS版本(如Ubuntu 22.04)
  • RHEL/CentOS系 :使用yum/dnf管理软件包,推荐CentOS 7+或AlmaLinux 8+
  • 国产系统 :统信UOS、麒麟等基于Debian/Deepin,可参考Ubuntu方案

重要提示:内核版本需≥3.10(建议≥4.x),通过 uname -r 确认。如果是老旧系统,需先升级内核:

# Ubuntu升级内核示例
sudo apt update && sudo apt install --install-recommends linux-generic-hwe-22.04

2.2 清理残留的旧版本

重装系统虽已清除数据,但某些自定义配置目录可能保留在/home分区。执行彻底清理:

sudo rm -rf /var/lib/docker
sudo rm -rf /etc/docker
sudo rm -f /etc/apparmor.d/docker
sudo groupdel docker 2>/dev/null

3. Docker安装全流程

3.1 官方仓库配置

不同发行版的仓库配置方法:

Ubuntu/Debian :

# 安装基础工具
sudo apt update && sudo apt install -y ca-certificates curl gnupg

# 添加官方GPG密钥
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg

# 设置稳定版仓库
echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
  $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

RHEL/CentOS :

sudo yum install -y yum-utils
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

3.2 核心组件安装

执行安装命令前,建议先更新软件源缓存:

# Ubuntu/Debian
sudo apt update

# RHEL/CentOS
sudo yum makecache

安装Docker引擎:

# Ubuntu/Debian
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

# RHEL/CentOS
sudo yum install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

3.3 国产系统特别处理

对于统信UOS等国产系统,若遇到依赖问题,可尝试以下方案:

# 添加Debian兼容源
echo "deb http://deb.debian.org/debian buster main" | sudo tee /etc/apt/sources.list.d/debian-compat.list
sudo apt update --allow-insecure-repositories
sudo apt install -y --allow-unauthenticated docker.io

4. 安装后关键配置

4.1 用户权限管理

避免每次使用sudo执行docker命令:

sudo usermod -aG docker $USER
newgrp docker  # 立即生效无需重启

验证权限配置:

docker run --rm hello-world

成功运行表示基础环境已就绪。

4.2 镜像加速配置

国内用户建议配置镜像加速器(以阿里云为例):

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://<your-aliyun-id>.mirror.aliyuncs.com"],
  "exec-opts": ["native.cgroupdriver=systemd"],
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "100m"
  },
  "storage-driver": "overlay2"
}
EOF

应用配置并重启服务:

sudo systemctl daemon-reload
sudo systemctl restart docker

4.3 开机自启设置

生产环境必须确保Docker服务自动启动:

sudo systemctl enable docker.service
sudo systemctl enable containerd.service

5. 深度优化与问题排查

5.1 存储驱动选择

查看当前存储驱动:

docker info | grep "Storage Driver"

推荐配置(适用于大多数现代系统):

  • overlay2(默认)
  • btrfs(适用于Btrfs文件系统)
  • zfs(ZFS专用)

5.2 常见故障处理

问题1:iptables/nftables冲突

# 解决方案1:切换为iptables-legacy
sudo update-alternatives --set iptables /usr/sbin/iptables-legacy

# 解决方案2:启用nftables后端
echo '{ "iptables": false }' | sudo tee /etc/docker/daemon.json

问题2:cgroup v2兼容性问题

# 临时切换为cgroup v1
sudo grubby --update-kernel=ALL --args="systemd.unified_cgroup_hierarchy=0"

问题3:磁盘空间不足 定期清理无用资源:

docker system prune -af

6. 生产环境增强配置

6.1 日志轮转设置

编辑systemd配置文件:

sudo mkdir -p /etc/systemd/system/docker.service.d
sudo tee /etc/systemd/system/docker.service.d/docker.conf <<-'EOF'
[Service]
ExecStart=
ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock --log-opt max-size=50m --log-opt max-file=3
EOF

6.2 安全加固建议

  1. 禁用API远程访问:
sudo sed -i 's/-H fd:\/\///g' /lib/systemd/system/docker.service
  1. 启用用户命名空间隔离:
echo '{"userns-remap": "default"}' | sudo tee -a /etc/docker/daemon.json
  1. 限制容器能力:
docker run --cap-drop ALL --cap-add NET_BIND_SERVICE ...

7. 扩展工具链安装

7.1 Docker Compose V2

现代Docker已内置compose插件,如需独立安装:

# Linux通用安装方式
DOCKER_CONFIG=${DOCKER_CONFIG:-$HOME/.docker}
mkdir -p $DOCKER_CONFIG/cli-plugins
curl -SL https://github.com/docker/compose/releases/latest/download/docker-compose-linux-x86_64 -o $DOCKER_CONFIG/cli-plugins/docker-compose
chmod +x $DOCKER_CONFIG/cli-plugins/docker-compose

7.2 实用辅助工具

  1. ctop - 容器监控工具:
sudo wget https://github.com/bcicen/ctop/releases/download/v0.7.7/ctop-0.7.7-linux-amd64 -O /usr/local/bin/ctop
sudo chmod +x /usr/local/bin/ctop
  1. dive - 镜像分析工具:
wget https://github.com/wagoodman/dive/releases/download/v0.11.0/dive_0.11.0_linux_amd64.deb
sudo apt install ./dive_0.11.0_linux_amd64.deb

8. 国产化替代方案

对于有信创要求的场景,可考虑以下替代品:

  1. iSula (华为开源容器引擎):
curl -fsSL https://isula.xyz/install.sh | sh
  1. PouchContainer (阿里云容器引擎):
wget https://github.com/alibaba/pouch/releases/download/v1.3.0/pouch-1.3.0-ubuntu.x86_64.deb
sudo dpkg -i pouch-1.3.0-ubuntu.x86_64.deb
  1. KubeOS (统信容器OS): 需从统信应用商店获取专用安装包

9. 性能调优实战

9.1 文件系统优化

推荐使用XFS或ext4(带metadata_csum):

# 创建优化后的XFS文件系统
sudo mkfs.xfs -f -n ftype=1 /dev/sdb1

挂载参数建议:

# /etc/fstab示例
/dev/mapper/vg0-docker /var/lib/docker xfs defaults,pquota,prjquota 0 0

9.2 内存与swap配置

限制容器内存使用:

docker run -it --memory="1g" --memory-swap="2g" alpine

调整swappiness:

echo 'vm.swappiness=10' | sudo tee -a /etc/sysctl.conf
sudo sysctl -p

9.3 网络性能优化

启用IPVS负载均衡:

echo '{"ipv6": false, "ip6tables": false, "experimental": false, "ipvs": true}' | sudo tee /etc/docker/daemon.json

调整conntrack参数:

sudo modprobe nf_conntrack
echo 'net.netfilter.nf_conntrack_max=1048576' | sudo tee -a /etc/sysctl.conf
sudo sysctl -p

10. 持续维护建议

  1. 版本升级策略
# Ubuntu/Debian
sudo apt update && sudo apt --only-upgrade install docker-ce

# RHEL/CentOS
sudo yum update docker-ce
  1. 备份关键数据
# 备份容器配置
docker ps -aq | xargs docker inspect > /backup/container_metadata.json

# 备份卷数据
tar -czvf /backup/docker_volumes.tar.gz /var/lib/docker/volumes/
  1. 监控方案集成
# 安装cAdvisor
docker run \
  --volume=/:/rootfs:ro \
  --volume=/var/run:/var/run:ro \
  --volume=/sys:/sys:ro \
  --volume=/var/lib/docker/:/var/lib/docker:ro \
  --publish=8080:8080 \
  --detach=true \
  --name=cadvisor \
  gcr.io/cadvisor/cadvisor:v0.47.0

这套方案已在金融、互联网等多个行业的生产环境中验证过稳定性。根据具体业务需求,你可能还需要配置私有仓库、网络策略或安全扫描工具。记住,容器化只是手段,真正的价值在于通过标准化交付提升整体运维效率。

更多推荐