阿里云CentOS环境下Docker Compose详细使用教程

阿里云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. 配置阿里云镜像加速器

  1. 登录阿里云容器镜像服务控制台,获取专属加速地址(如https://xxxx.mirror.aliyuncs.com)。

  2. 编辑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`
  3. 验证加速效果:

    复制代码
    `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编排多容器应用,实现快速部署和灵活扩展。

相关推荐
adnyting4 小时前
【Linux日新月异(二)】CentOS 7用户与用户组管理深度指南:保障系统安全的基石
linux·运维·centos
linuxxx1104 小时前
Centos环境中Django项目中gunicorn的配置和使用
django·centos·gunicorn
N 年 后4 小时前
Docker、Compose、Portainer与K8s详解
docker·容器·kubernetes
lihe7585 小时前
DSM7.2部署可道云+onlyoffice在线办公系统
docker·onlyoffice·群晖·kodbox·docer-compose
powerfulhell6 小时前
11.11作业
linux·运维·centos
b***74887 小时前
云服务厂商对比:阿里云、腾讯云、华为云
阿里云·华为云·腾讯云
adnyting8 小时前
【Linux日新月异(三)】CentOS 7软件管理深度指南:从YUM到源码编译
linux·运维·centos
是Judy咋!10 小时前
RabbitMQ---搭建(自定义数据以及日志目录)
分布式·centos·rabbitmq
君不见,青丝成雪13 小时前
网关整合验签
大数据·数据结构·docker·微服务·系统架构