前言
Docker Compose 是 Docker 官方提供的多容器编排工具,适合用一个 compose.yaml 文件定义应用需要的容器、网络、端口和卷挂载,然后通过一条命令完成启动、停止和销毁。
当前主流安装方式是安装 Docker Compose v2 插件。安装成功后使用的新命令是:
docker compose
注意中间是空格,不是旧版独立二进制命令 docker-compose。
本文以 CentOS 为例,介绍两种常见场景:
- 服务器已经安装 Docker,只补装 Docker Compose。
- 服务器还没有 Docker,一次性安装 Docker Engine 和 Docker Compose。
安装前准备
查看系统版本
cat /etc/redhat-release
# 或者
cat /etc/os-release
CentOS 7 已经比较老,生产环境建议优先选择 CentOS Stream、Rocky Linux、AlmaLinux 等仍在维护的 RHEL 系发行版。下面命令会分别给出 yum 和 dnf 两种写法,可以根据实际系统选择。
检查 Docker 是否已安装
docker --version
systemctl status docker
如果 Docker 已安装并正常运行,可以直接跳到“只安装 Docker Compose 插件”。
检查 Compose 是否已安装
docker compose version
如果能看到类似下面的输出,说明 Docker Compose v2 已经可用:
Docker Compose version v2.x.x
方法一:只安装 Docker Compose 插件
如果服务器已经安装了 Docker Engine,只需要安装 docker-compose-plugin。
CentOS Stream / Rocky Linux / AlmaLinux
使用 dnf:
sudo dnf update -y
sudo dnf install -y docker-compose-plugin
docker compose version
CentOS 7 或使用 yum 的系统
使用 yum:
sudo yum update -y
sudo yum install -y docker-compose-plugin
docker compose version
如果提示找不到 docker-compose-plugin 包,通常是因为还没有配置 Docker 官方仓库,可以参考下一节先添加 Docker 仓库。
方法二:同时安装 Docker Engine 和 Docker Compose
如果是一台新服务器,建议通过 Docker 官方 RPM 仓库安装 Docker Engine、Buildx 和 Compose 插件。
1. 卸载旧版本 Docker
旧版本包名可能是 docker、docker-engine 或 docker-common。没安装过也可以执行,提示不存在可以忽略。
CentOS Stream / Rocky Linux / AlmaLinux:
sudo dnf remove -y docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
CentOS 7:
sudo yum remove -y docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
2. 添加 Docker 官方仓库
CentOS Stream / Rocky Linux / AlmaLinux:
sudo dnf install -y dnf-plugins-core
sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
CentOS 7:
sudo yum install -y yum-utils
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
3. 安装 Docker 和 Compose 插件
CentOS Stream / Rocky Linux / AlmaLinux:
sudo dnf install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
CentOS 7:
sudo yum install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
这些包的作用如下:
| 包名 | 作用 |
|---|---|
docker-ce |
Docker Engine 社区版服务端 |
docker-ce-cli |
Docker 命令行客户端 |
containerd.io |
容器运行时 |
docker-buildx-plugin |
Docker Buildx 构建插件 |
docker-compose-plugin |
Docker Compose v2 插件 |
4. 启动 Docker 服务
sudo systemctl enable --now docker
查看服务状态:
systemctl status docker
5. 验证安装结果
验证 Docker:
sudo docker run hello-world
验证 Docker Compose:
docker compose version
如果这两条命令都能正常执行,说明 Docker 和 Docker Compose 已安装完成。
使用 Compose 启动一个 Nginx 测试服务
下面创建一个最小的 compose.yaml,用于验证 Compose 是否真的能拉起容器。
1. 创建测试目录
mkdir -p ~/compose-test
cd ~/compose-test
2. 编写 compose.yaml
cat > compose.yaml <<'EOF'
services:
nginx:
image: nginx:latest
container_name: compose-nginx-test
ports:
- "8080:80"
EOF
3. 启动服务
docker compose up -d
4. 查看运行状态
docker compose ps
正常情况下可以看到 compose-nginx-test 处于运行状态。
5. 访问测试页面
如果服务器开放了 8080 端口,可以在浏览器访问:
http://服务器IP:8080
也可以在服务器本机验证:
curl http://127.0.0.1:8080
看到 Nginx 默认页面内容,说明 Compose 测试成功。
6. 停止并清理测试容器
docker compose down
如果还想删除测试目录:
cd ~
rm -rf ~/compose-test
普通用户免 sudo 执行 Docker
默认情况下,普通用户执行 Docker 可能会遇到权限错误。如果希望当前用户不用 sudo 执行 Docker 命令,可以把当前用户加入 docker 组。
sudo usermod -aG docker $USER
执行后需要退出当前 SSH 会话并重新登录,然后验证:
docker ps
docker compose version
如果仍然提示权限问题,可以临时执行:
newgrp docker
需要注意,加入 docker 组的用户基本等同于拥有较高的系统操作权限,只建议给可信用户配置。
旧版 docker-compose 命令兼容说明
Docker Compose v1 的命令是:
docker-compose
Docker Compose v2 的命令是:
docker compose
现在更推荐使用 v2 插件。如果旧项目脚本里写死了 docker-compose,建议优先修改脚本为 docker compose。
如果暂时不能改脚本,也可以检查系统是否已提供兼容命令:
docker-compose version
如果没有兼容命令,不建议随意从第三方地址下载旧版二进制文件。更稳妥的做法是统一升级脚本命令,避免后续维护混乱。
常见问题处理
docker compose: command not found
说明 Compose 插件没有安装,或者 Docker CLI 没有识别到插件。
先安装插件:
sudo yum install -y docker-compose-plugin
# 或者
sudo dnf install -y docker-compose-plugin
再验证:
docker compose version
如果仍然找不到,检查 Docker 仓库是否已添加:
yum repolist | grep docker
# 或者
dnf repolist | grep docker
Cannot connect to the Docker daemon
通常是 Docker 服务没有启动。
sudo systemctl start docker
sudo systemctl enable docker
systemctl status docker
permission denied while trying to connect to the Docker daemon socket
普通用户没有 Docker Socket 权限,可以使用 sudo 执行,或者把用户加入 docker 组:
sudo usermod -aG docker $USER
然后重新登录。
拉取镜像很慢或超时
如果服务器网络访问 Docker Hub 较慢,可能会导致 nginx:latest 或 hello-world 拉取失败。可以先确认网络和 DNS:
ping -c 4 registry-1.docker.io
如果公司或机房有内部镜像源,可以按运维规范配置 Docker 镜像加速。配置后重启 Docker:
sudo systemctl daemon-reload
sudo systemctl restart docker
8080 端口无法访问
先确认容器是否运行:
docker compose ps
再确认端口监听:
ss -lntp | grep 8080
如果云服务器安全组或防火墙没有放行 8080,也会导致外部访问失败。CentOS 防火墙可以临时检查:
sudo firewall-cmd --list-ports
按需放行端口:
sudo firewall-cmd --add-port=8080/tcp --permanent
sudo firewall-cmd --reload
常用 Docker Compose 命令
| 命令 | 说明 |
|---|---|
docker compose version |
查看 Compose 版本 |
docker compose config |
校验并输出最终配置 |
docker compose up -d |
后台启动服务 |
docker compose ps |
查看服务状态 |
docker compose logs -f |
实时查看日志 |
docker compose restart |
重启服务 |
docker compose pull |
拉取镜像 |
docker compose down |
停止并删除容器、默认网络 |
docker compose down -v |
停止服务并删除卷,谨慎使用 |
总结
CentOS 下安装 Docker Compose,推荐使用 Docker Compose v2 插件,也就是安装 docker-compose-plugin 后使用 docker compose 命令。
如果系统已经安装 Docker,只需要补装插件;如果是新服务器,则建议通过 Docker 官方仓库一次性安装 docker-ce、docker-ce-cli、containerd.io、docker-buildx-plugin 和 docker-compose-plugin。安装完成后,用 docker compose version 和一个简单的 Nginx 示例验证即可。
文章标签
冬眠
博主专注于技术、阅读与思考。在这里记录学习、思考与生活。
