阿里云CentOS环境下Docker Compose详细使用教程
一、环境准备
1. 系统要求
- 操作系统:CentOS 7/8(推荐阿里云ECS镜像,已优化网络性能)。
- Docker版本:Docker CE 18.06+(支持Docker Compose v2+)。
- 硬件配置:至少2GB内存(生产环境建议4GB+),CPU支持虚拟化。
2. 安装Docker
若未安装Docker,请先按以下步骤安装:
`# 卸载旧版本(如存在)
sudo yum remove -y docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine
# 配置阿里云YUM源
sudo yum install -y yum-utils
sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
sudo sed -i 's+download.docker.com+mirrors.aliyun.com/docker-ce+' /etc/yum.repos.d/docker-ce.repo
# 安装Docker CE
sudo yum install -y docker-ce docker-ce-cli containerd.io
# 启动Docker并设置开机自启
sudo systemctl start docker
sudo systemctl enable docker
# 验证安装
sudo docker --version`
3. 配置阿里云镜像加速器
-
登录阿里云容器镜像服务控制台,获取专属加速地址(如
https://xxxx.mirror.aliyuncs.com)。 -
编辑Docker配置文件:
`sudo mkdir -p /etc/docker sudo tee /etc/docker/daemon.json <<-'EOF' { "registry-mirrors": ["https://xxxx.mirror.aliyuncs.com"] } EOF sudo systemctl daemon-reload sudo systemctl restart docker` -
验证加速效果:
`sudo docker info | grep "Registry Mirrors" -A 1`
二、安装Docker Compose
1. 方法一:通过包管理器安装(推荐)
`# CentOS 7/8 安装Docker Compose插件
sudo yum install -y docker-compose-plugin
# 验证安装
sudo docker compose version`
2. 方法二:手动安装(兼容旧版本)
`# 下载Docker Compose二进制文件(以v2.20.2为例)
sudo curl -L "https://github.com/docker/compose/releases/download/v2.20.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
# 添加执行权限
sudo chmod +x /usr/local/bin/docker-compose
# 创建软链接(可选)
sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
# 验证安装
docker-compose --version`
三、Docker Compose核心概念
1. 核心文件:docker-compose.yml
- 作用:定义多容器应用的配置(服务、网络、卷等)。
- 格式:YAML(缩进敏感,使用2个空格)。
- 版本 :推荐使用
version: '3'或更高版本。
2. 关键指令
| 指令 | 作用 | 示例 |
|---|---|---|
services |
定义容器服务 | services: {mysql: {...}} |
image |
指定镜像名称及标签 | image: nginx:latest |
build |
从Dockerfile构建镜像 | build: ./app |
ports |
端口映射(宿主机:容器) | ports: ["8080:80"] |
volumes |
数据卷挂载 | volumes: ["./data:/var/lib/mysql"] |
environment |
设置环境变量 | environment: {MYSQL_ROOT_PASSWORD: "123456"} |
networks |
指定容器网络 | networks: ["my_net"] |
depends_on |
依赖服务(启动顺序) | depends_on: ["mysql"] |
四、实战案例:部署WordPress博客
1. 创建项目目录
`mkdir ~/wordpress && cd ~/wordpress`
2. 编写docker-compose.yml
`version: '3.8'
services:
mysql:
image: mysql:5.7
environment:
MYSQL_ROOT_PASSWORD: "123456"
MYSQL_DATABASE: "wordpress"
MYSQL_USER: "wpuser"
MYSQL_PASSWORD: "wppass"
volumes:
- mysql_data:/var/lib/mysql
networks:
- wp_net
wordpress:
image: wordpress:latest
ports:
- "8080:80"
environment:
WORDPRESS_DB_HOST: "mysql"
WORDPRESS_DB_USER: "wpuser"
WORDPRESS_DB_PASSWORD: "wppass"
WORDPRESS_DB_NAME: "wordpress"
depends_on:
- mysql
networks:
- wp_net
volumes:
mysql_data:
networks:
wp_net:`
3. 启动服务
`# 后台启动(推荐)
sudo docker compose up -d
# 查看运行状态
sudo docker compose ps
# 查看日志
sudo docker compose logs -f`
4. 访问WordPress
- 浏览器访问:
http://<阿里云ECS公网IP>:8080 - 完成安装向导(数据库信息已通过环境变量配置)。
5. 停止服务
`# 停止并删除容器(保留数据卷和网络)
sudo docker compose down
# 彻底清理(删除数据卷)
sudo docker compose down -v`
五、高级用法
1. 多环境配置(开发/测试/生产)
通过不同文件覆盖默认配置:
`# 默认使用docker-compose.yml
# 开发环境:docker-compose.override.yml
# 测试环境:docker-compose.test.yml
# 生产环境:docker-compose.prod.yml
# 启动开发环境(自动合并配置)
sudo docker compose -f docker-compose.yml -f docker-compose.override.yml up -d`
2. 使用.env文件管理变量
创建.env文件:
`MYSQL_ROOT_PASSWORD=secure_password
WORDPRESS_DB_HOST=mysql`
在docker-compose.yml中引用:
`environment:
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}`
3. 构建自定义镜像
若需修改WordPress镜像,可添加Dockerfile:
`FROM wordpress:latest
RUN apt-get update && apt-get install -y vim`
修改docker-compose.yml:
`wordpress:
build: . # 指向Dockerfile所在目录
ports:
- "8080:80"`
4. 健康检查
为服务添加健康检查:
`wordpress:
image: wordpress:latest
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost"]
interval: 30s
timeout: 10s
retries: 3`
六、常见问题解决
1. 端口冲突
- 现象 :启动失败,提示
Port already in use。 - 解决 :
-
修改
ports映射为其他端口(如"8081:80")。 -
停止占用端口的进程:
`sudo netstat -tulnp | grep 8080 sudo kill <PID>`
-
2. 数据卷权限问题
- 现象 :MySQL容器启动失败,日志显示
Permission denied。 - 解决 :
-
调整宿主机目录权限:
`sudo chown -R 999:999 ./mysql_data # MySQL默认用户UID为999` -
或运行容器时指定用户:
`mysql: image: mysql:5.7 user: "1000:1000" # 使用宿主机用户UID:GID volumes: - ./mysql_data:/var/lib/mysql`
-
3. 容器无法访问互联网
- 现象 :容器内
ping失败或apt-get无法下载。 - 解决 :
-
检查宿主机网络是否正常。
-
重启Docker服务:
`sudo systemctl restart docker` -
若使用自定义网络,确保网络配置正确:
`networks: default: driver: bridge ipam: config: - subnet: 172.20.0.0/16`
-
4. 版本兼容性问题
- 现象 :
docker compose命令报错unknown shorthand flag。 - 解决 :
-
升级Docker Compose到最新版本:
`sudo pip install --upgrade docker-compose` -
或使用完整命令形式:
`sudo docker-compose up -d # 旧版语法`
-
七、总结
- 核心流程 :编写
docker-compose.yml→ 定义服务 → 启动容器 → 管理生命周期。 - 关键技巧 :
- 使用数据卷持久化数据。
- 通过
.env文件集中管理变量。 - 利用
depends_on控制启动顺序。 - 多环境配置通过文件覆盖实现。
- 扩展学习 :
通过本教程,您可以在阿里云CentOS环境下高效使用Docker Compose编排多容器应用,实现快速部署和灵活扩展。