亲测 Rocky Linux 8 / CentOS 8 下 Docker 与 Docker Compose 安装及远程安全连接配置指南

129 阅读5分钟

一、装前准备:清理旧环境

为避免冲突,安装前先移除系统上可能存在的旧版本 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

常用国内镜像加速器:

镜像源地址
DaoCloudhttps://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.pemca-key.pemserver-cert.pemserver-key.pemcert.pemkey.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.pemCA 根证书
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 连接:

  1. 打开 Settings/Preferences → Build, Execution, Deployment → Docker

  2. 选择 TCP socket 连接方式

  3. 填写 Engine API URL:tcp://<服务器IP>:2376

  4. 勾选 Enable TLS,并指定证书路径:

    • CA certificate:ca.pem
    • Client certificate:cert.pem
    • Client key:key.pem

image.png

配置完成后,即可在 IDEA 中远程管理和操作 Docker 容器 🚀


九、快速参考汇总

操作命令
安装 Dockersudo yum install -y docker-ce docker-ce-cli containerd.io --nobest
启动 Dockersudo 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