一、装前准备:清理旧环境
为避免冲突,安装前先移除系统上可能存在的旧版本 Docker 及相关依赖(如 Podman):
bash
sudo dnf remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine \
podman*
二、核心安装步骤
| 步骤 | 操作说明 | 关键命令 |
|---|---|---|
| 1. 安装依赖 | 安装 yum-utils 等工具包,并禁用 CentOS 8 / Rocky Linux 8 默认的容器模块(Podman),避免冲突 | sudo dnf install -y yum-utils device-mapper-persistent-data lvm2 sudo dnf module disable container-tools -y |
| 2. 添加仓库 | 添加 Docker 官方仓库,推荐使用国内镜像源(阿里云)加速 | sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo |
| 3. 安装 Docker | 执行安装,加 --nobest 参数让系统自动选择兼容版本 | sudo yum install -y docker-ce docker-ce-cli containerd.io --nobest |
| 4. 启动与验证 | 启动 Docker 并设置开机自启,运行 hello-world 验证 | sudo systemctl enable --now docker sudo docker run --rm hello-world |
2.1 彻底清理模块化数据(针对 Rocky Linux 8)
如果系统提示模块化元数据混乱,执行以下清理:
bash
# 移除冲突包
sudo dnf remove -y container-selinux fuse-overlayfs libslirp slirp4netns
# 重置并禁用 container-tools 模块
sudo dnf module reset -y container-tools
sudo dnf module disable -y container-tools
# 清理并重建 DNF 缓存
sudo dnf clean all
sudo dnf makecache
2.2 安装指定版本 Docker(可选)
如需安装特定版本,可执行:
bash
sudo dnf install -y docker-ce-3:20.10.24-3.el8 \
docker-ce-cli-20.10.24-3.el8 \
containerd.io
或使用 --nobest 参数:
bash
sudo yum install docker-ce-3:20.10.24-3.el8 \
docker-ce-cli-1:20.10.24-3.el8 \
containerd.io-1.6.28-3.1.el8 \
--nobest
三、配置镜像加速器
编辑 /etc/docker/daemon.json,添加国内镜像加速源:
bash
sudo vi /etc/docker/daemon.json
写入以下内容:
json
{
"registry-mirrors": [
"https://docker.m.daocloud.io"
]
}
重启 Docker 使配置生效:
bash
sudo systemctl daemon-reload
sudo systemctl restart docker
常用国内镜像加速器:
| 镜像源 | 地址 |
|---|---|
| DaoCloud | https://docker.m.daocloud.io |
| 网易云 | https://hub-mirror.c.163.com |
| 中科大 | https://docker.mirrors.ustc.edu.cn |
验证配置是否生效:
bash
docker info | grep -A 5 "Registry Mirrors"
如个别镜像拉取仍失败,可直接指定镜像源拉取:
bash
docker pull docker.m.daocloud.io/library/redis:latest
四、开启数据包转发
启用 IP 转发,否则 Docker 容器无法被远程访问:
bash
# 编辑 sysctl 配置文件
sudo vim /etc/sysctl.conf
添加或修改:
ini
net.ipv4.ip_forward = 1
net.ipv6.conf.all.forwarding = 1
使配置生效:
bash
sudo sysctl -p
验证:
bash
sysctl net.ipv4.ip_forward
# 输出应为:net.ipv4.ip_forward = 1
五、安装 Docker Compose
Docker Compose 现以插件形式提供,安装命令:
bash
sudo dnf install -y docker-compose-plugin
验证安装:
bash
docker compose version
# 输出示例:Docker Compose version v2.x.x
六、远程安全连接配置(TLS)
⚠️ 直接暴露 Docker 的 2375 端口存在严重安全风险。以下采用 TLS 加密连接(默认端口 2376),是官方推荐的安全方案。
6.1 在服务器端生成 TLS 证书
bash
# 1. 创建证书存放目录
mkdir -p /etc/docker/certs
cd /etc/docker/certs
# 2. 生成 CA 私钥和证书
openssl genrsa -aes256 -out ca-key.pem 4096
openssl req -new -x509 -days 3650 -key ca-key.pem -sha256 -out ca.pem
# 3. 生成服务器私钥和证书签名请求
openssl genrsa -out server-key.pem 4096
openssl req -subj "/CN=<你的服务器IP>" -sha256 -new -key server-key.pem -out server.csr
# 4. 配置服务器证书扩展属性(将 IP 替换为实际值)
echo subjectAltName = IP:<你的服务器IP>,IP:127.0.0.1 >> extfile.cnf
echo extendedKeyUsage = serverAuth >> extfile.cnf
# 5. 生成服务器证书
openssl x509 -req -days 3650 -sha256 -in server.csr -CA ca.pem -CAkey ca-key.pem -CAcreateserial -out server-cert.pem -extfile extfile.cnf
# 6. 生成客户端证书
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 3650 -sha256 -in client.csr -CA ca.pem -CAkey ca-key.pem -CAcreateserial -out cert.pem -extfile extfile-client.cnf
# 7. 设置文件权限
chmod 0400 ca-key.pem server-key.pem key.pem
chmod 0444 ca.pem server-cert.pem cert.pem
# 8. 清理临时文件
rm -f server.csr client.csr extfile.cnf extfile-client.cnf
📌 生成的证书文件清单:
ca.pem、ca-key.pem、server-cert.pem、server-key.pem、cert.pem、key.pem
6.2 配置 Docker 守护进程
编辑 /etc/docker/daemon.json:
json
{
"hosts": ["tcp://0.0.0.0:2376", "unix:///var/run/docker.sock"],
"tlsverify": true,
"tlscacert": "/etc/docker/certs/ca.pem",
"tlscert": "/etc/docker/certs/server-cert.pem",
"tlskey": "/etc/docker/certs/server-key.pem"
}
修改 systemd 配置以避免冲突:
bash
sudo mkdir -p /etc/systemd/system/docker.service.d
sudo vim /etc/systemd/system/docker.service.d/override.conf
写入:
ini
[Service]
ExecStart=
ExecStart=/usr/bin/dockerd
重启 Docker:
bash
sudo systemctl daemon-reload
sudo systemctl restart docker
验证端口监听:
bash
sudo netstat -lntp | grep 2376
6.3 配置防火墙放行 2376 端口
bash
sudo firewall-cmd --zone=public --add-port=2376/tcp --permanent
sudo firewall-cmd --reload
☁️ 如使用云服务器(阿里云、腾讯云等),还需在云控制台安全组中放行 2376 端口(入方向)。
七、客户端连接配置
7.1 复制证书到客户端
将以下三个证书文件从服务器复制到客户端:
| 文件 | 说明 |
|---|---|
ca.pem | CA 根证书 |
cert.pem | 客户端证书 |
key.pem | 客户端私钥 |
Linux/Mac 示例:
bash
scp root@<服务器IP>:/etc/docker/certs/{ca.pem,cert.pem,key.pem} ~/.docker/
Windows PowerShell 示例:
powershell
scp root@<服务器IP>:/etc/docker/certs/{ca.pem,cert.pem,key.pem} C:/Users/<用户名>/.docker/
7.2 测试连接
Linux/Mac:
bash
docker --tlsverify \
--tlscacert=~/.docker/ca.pem \
--tlscert=~/.docker/cert.pem \
--tlskey=~/.docker/key.pem \
-H tcp://<服务器IP>:2376 version
Windows PowerShell:
powershell
docker --tlsverify --tlscacert=%USERPROFILE%.docker\ca.pem --tlscert=%USERPROFILE%.docker\cert.pem --tlskey=%USERPROFILE%.docker\key.pem -H tcp://<服务器IP>:2376 version
7.3 设置环境变量(简化后续操作)
Linux/Mac:
bash
export DOCKER_HOST=tcp://<服务器IP>:2376
export DOCKER_TLS_VERIFY=1
export DOCKER_CERT_PATH=~/.docker
Windows PowerShell:
powershell
$env:DOCKER_HOST="tcp://<服务器IP>:2376"
$env:DOCKER_TLS_VERIFY="1"
$env:DOCKER_CERT_PATH="$env:USERPROFILE.docker"
配置后即可直接运行 docker ps 等命令。
八、IDEA 连接 Docker
在 IntelliJ IDEA 中配置 Docker 连接:
-
打开
Settings/Preferences → Build, Execution, Deployment → Docker -
选择 TCP socket 连接方式
-
填写 Engine API URL:
tcp://<服务器IP>:2376 -
勾选 Enable TLS,并指定证书路径:
- CA certificate:
ca.pem - Client certificate:
cert.pem - Client key:
key.pem
- CA certificate:
配置完成后,即可在 IDEA 中远程管理和操作 Docker 容器 🚀
九、快速参考汇总
| 操作 | 命令 |
|---|---|
| 安装 Docker | sudo yum install -y docker-ce docker-ce-cli containerd.io --nobest |
| 启动 Docker | sudo systemctl enable --now docker |
| 配置镜像加速 | 编辑 /etc/docker/daemon.json,添加 registry-mirrors |
| 安装 Compose 插件 | sudo dnf install -y docker-compose-plugin |
| 开启 IP 转发 | 编辑 /etc/sysctl.conf,设置 net.ipv4.ip_forward=1 |
| 防火墙放行端口 | sudo firewall-cmd --add-port=2376/tcp --permanent |
| 测试 TLS 连接 | docker --tlsverify -H tcp://<IP>:2376 version |