docker安装需严格遵循安全加固原则:不破坏现有策略、不开放非必要端口、不引入冗余组件、不降低最小权限。须验证内核≥4.0、overlay2驱动支持、ssh密钥登录、防火墙启用及系统补丁更新;禁用curl|sh一键脚本,采用离线.deb/.rpm包安装;配置daemon.json禁用iptables/ip-forward,关闭insecure-registries;创建专用docker组并授予非root用户权限,确保cgroups/v2兼容。

在已做安全加固的服务器上安装 Docker,核心原则是:不破坏现有安全策略、不开放非必要端口、不引入冗余组件、不降低最小权限模型。重点不是“重装系统”,而是让 Docker 与当前加固环境兼容并协同工作。
确认基础环境是否就绪
安全加固后的系统往往已禁用密码登录、关闭 root 访问、启用防火墙、移除非必要软件包。安装前需验证:
- 内核版本 ≥ 4.0(uname -r),且支持 overlay2 存储驱动(docker info | grep "Storage Driver")
- SSH 已配置密钥登录,PermitRootLogin no 和 PasswordAuthentication no 已生效
- 防火墙(如 ufw 或 firewalld)处于启用状态,且仅放行明确需要的端口(如 2222/tcp、80/tcp、443/tcp)
- 系统已更新至最新补丁(sudo apt update && sudo apt upgrade -y 或 sudo dnf update -y)
使用官方离线或受限网络方式安装
避免执行 curl | sh 类一键脚本——它会绕过防火墙策略、自动启用服务、甚至尝试开放端口。推荐方式:
-
Ubuntu/Debian:下载
docker-ce、docker-ce-cli、containerd.io的 .deb 包(从 Docker 官方仓库对应发行版目录获取),用sudo dpkg -i *.deb离线安装 -
CentOS/RHEL:配置本地 YUM 源,将 RPM 包放入
/localrepo并运行createrepo,再通过yum install docker-ce --disablerepo='*' --enablerepo='localrepo'安装 - 安装后不要立即启动,先检查 systemd 单元文件:
sudo systemctl cat docker.service,确认没有ExecStartPre=自动开放 iptables 规则等危险行为
启动前精简 Docker 服务配置
Docker 默认监听 unix:///var/run/docker.sock,但生产环境常需额外约束:
- 编辑
/etc/docker/daemon.json(若不存在则新建),强制启用最小化配置:
{
"storage-driver": "overlay2",
"log-driver": "json-file",
"log-opts": {"max-size": "10m", "max-file": "3"},
"iptables": false,
"ip-forward": false,
"userland-proxy": false,
"default-ulimits": {"nofile": {"Name": "nofile", "Hard": 65536, "Soft": 65536}}
}- "iptables": false 表示不自动管理防火墙规则,完全交由主机 ufw/firewalld 控制
- "ip-forward": false 关闭内核 IP 转发(除非你明确需要容器间跨网段通信)
- 不配置
insecure-registries或registry-mirrors,避免引入不可信镜像源
用户与权限最小化落地
加固系统通常已禁用 root 登录,Docker 安装后需延续该策略:
- 创建专用 Docker 管理组:
sudo groupadd docker - 将已有的非 root 管理用户(如
deployer)加入该组:sudo usermod -aG docker deployer -
不要执行
sudo usermod -aG docker $USER后直接重启 shell;应注销重登,或运行newgrp docker生效 - 验证权限:
su - deployer→docker info应成功,但docker run hello-world仍需确保 cgroups/v2 权限已适配(CentOS 7 需确认GRUB_CMDLINE_LINUX="cgroup_enable=memory swapaccount=1")











