跳转到内容

Docker Compose使用 ​

课程介绍 ​

Docker Compose是Docker官方提供的多容器应用编排工具,它可以使用YAML文件定义多容器应用,并一键启动和管理这些容器。本课程将详细讲解Docker Compose的使用方法,包括安装、配置、命令等内容,帮助你掌握Docker Compose的核心知识。

1. Docker Compose概述 ​

1.1 什么是Docker Compose ​

Docker Compose是Docker官方提供的多容器应用编排工具。

Docker Compose的定义: Docker Compose是Docker官方提供的多容器应用编排工具,它可以使用YAML文件定义多容器应用,并一键启动和管理这些容器。

Docker Compose的作用:

作用说明
多容器编排编排多个容器
一键启动一键启动多容器应用
配置管理集中管理应用配置
网络管理自动创建网络
卷管理自动创建卷

1.2 Docker Compose的优势 ​

Docker Compose的优势。

Docker Compose的优势:

优势说明
简单易用使用YAML文件定义应用
一键操作一键启动和管理应用
配置集中配置集中管理
网络自动配置自动创建和配置网络
卷自动配置自动创建和配置卷
环境变量管理管理环境变量
依赖管理管理容器依赖关系

1.3 Docker Compose的工作原理 ​

Docker Compose的工作原理。

Docker Compose的工作原理:

  1. 读取配置文件:读取docker-compose.yml文件
  2. 解析配置:解析配置文件中的服务定义
  3. 创建网络:创建应用所需的网络
  4. 创建卷:创建应用所需的卷
  5. 启动容器:按顺序启动容器
  6. 管理容器:管理容器的生命周期

2. Docker Compose安装 ​

2.1 安装Docker Compose ​

在Linux系统上安装Docker Compose。

安装步骤:

bash
# 下载Docker Compose
sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

# 赋予执行权限
sudo chmod +x /usr/local/bin/docker-compose

# 验证安装
docker-compose --version

2.2 安装Docker Compose(使用pip) ​

使用pip安装Docker Compose。

安装步骤:

bash
# 安装pip
pip install --upgrade pip

# 安装Docker Compose
pip install docker-compose

# 验证安装
docker-compose --version

2.3 安装Docker Compose(Windows/macOS) ​

在Windows和macOS上安装Docker Compose。

安装步骤:

  1. 下载Docker Desktop:从Docker官网下载Docker Desktop安装包
  2. 运行安装程序:双击安装包,按照提示进行安装
  3. 启动Docker Desktop:安装完成后,启动Docker Desktop
  4. 验证安装:打开终端,运行docker-compose --version

3. Docker Compose配置文件 ​

3.1 docker-compose.yml文件 ​

Docker Compose使用docker-compose.yml文件定义应用。

docker-compose.yml基本结构:

yaml
version: '3'

# 服务定义
services:
  # 服务名称
  web:
    # 镜像
    image: nginx:latest
    # 端口映射
    ports:
      - "80:80"
    # 卷
    volumes:
      - ./html:/usr/share/nginx/html
    # 环境变量
    environment:
      - NGINX_HOST=localhost
    # 网络
    networks:
      - mynetwork

# 网络定义
networks:
  mynetwork:
    driver: bridge

# 卷定义
volumes:
  myvolume:
    driver: local

3.2 配置文件语法 ​

Docker Compose配置文件的语法。

常用配置项:

配置项说明
versionCompose文件版本
services服务定义
networks网络定义
volumes卷定义
secrets密钥定义
configs配置定义

3.3 服务配置 ​

服务的配置项。

服务配置项:

配置项说明
image容器镜像
build构建镜像
ports端口映射
volumes卷挂载
environment环境变量
env_file环境变量文件
networks网络
depends_on依赖服务
restart重启策略
command启动命令
entrypoint入口点
working_dir工作目录
user用户
healthcheck健康检查

4. Docker Compose命令 ​

4.1 基本命令 ​

Docker Compose的基本命令。

命令:

bash
# 启动应用
docker-compose up

# 启动应用(后台)
docker-compose up -d

# 停止应用
docker-compose down

# 查看服务状态
docker-compose ps

# 查看服务日志
docker-compose logs

# 查看服务日志(实时)
docker-compose logs -f

# 进入容器
docker-compose exec service-name bash

# 构建镜像
docker-compose build

# 拉取镜像
docker-compose pull

# 推送镜像
docker-compose push

# 重启服务
docker-compose restart

# 停止服务
docker-compose stop

# 启动服务
docker-compose start

# 删除服务
docker-compose rm

4.2 高级命令 ​

Docker Compose的高级命令。

命令:

bash
# 验证配置文件
docker-compose config

# 验证配置文件(详细)
docker-compose config --verbose

# 查看服务依赖
docker-compose top

# 查看服务网络
docker-compose network ls

# 查看服务卷
docker-compose volume ls

# 运行一次性命令
docker-compose run service-name command

# 强制重建
docker-compose up --build

# 不启动依赖服务
docker-compose up --no-deps service-name

# 缩放服务
docker-compose up --scale service-name=3

5. 实战案例 ​

案例1:Web应用 ​

场景:使用Docker Compose部署一个Web应用,包含Nginx和PHP。

docker-compose.yml:

yaml
version: '3'

services:
  web:
    image: nginx:latest
    ports:
      - "80:80"
    volumes:
      - ./html:/usr/share/nginx/html
      - ./nginx.conf:/etc/nginx/nginx.conf
    depends_on:
      - php
    networks:
      - app-network

  php:
    image: php:7.4-fpm
    volumes:
      - ./html:/var/www/html
    networks:
      - app-network

networks:
  app-network:
    driver: bridge

启动命令:

bash
# 启动应用
docker-compose up -d

# 查看服务状态
docker-compose ps

# 停止应用
docker-compose down

案例2:WordPress应用 ​

场景:使用Docker Compose部署WordPress应用,包含WordPress和MySQL。

docker-compose.yml:

yaml
version: '3'

services:
  wordpress:
    image: wordpress:latest
    ports:
      - "8080:80"
    environment:
      WORDPRESS_DB_HOST: db
      WORDPRESS_DB_USER: wordpress
      WORDPRESS_DB_PASSWORD: wordpress
      WORDPRESS_DB_NAME: wordpress
    volumes:
      - wordpress_data:/var/www/html
    depends_on:
      - db
    networks:
      - wordpress-network

  db:
    image: mysql:5.7
    environment:
      MYSQL_ROOT_PASSWORD: root
      MYSQL_DATABASE: wordpress
      MYSQL_USER: wordpress
      MYSQL_PASSWORD: wordpress
    volumes:
      - db_data:/var/lib/mysql
    networks:
      - wordpress-network

volumes:
  wordpress_data:
  db_data:

networks:
  wordpress-network:
    driver: bridge

启动命令:

bash
# 启动应用
docker-compose up -d

# 查看服务状态
docker-compose ps

# 停止应用
docker-compose down

案例3:微服务应用 ​

场景:使用Docker Compose部署一个微服务应用,包含多个服务。

docker-compose.yml:

yaml
version: '3'

services:
  gateway:
    image: gateway:latest
    ports:
      - "80:80"
    depends_on:
      - service1
      - service2
    networks:
      - microservice-network

  service1:
    image: service1:latest
    environment:
      DB_HOST: db
    depends_on:
      - db
    networks:
      - microservice-network

  service2:
    image: service2:latest
    environment:
      DB_HOST: db
    depends_on:
      - db
    networks:
      - microservice-network

  db:
    image: mysql:8.0
    environment:
      MYSQL_ROOT_PASSWORD: root
      MYSQL_DATABASE: microservice
    volumes:
      - db_data:/var/lib/mysql
    networks:
      - microservice-network

  redis:
    image: redis:latest
    networks:
      - microservice-network

volumes:
  db_data:

networks:
  microservice-network:
    driver: bridge

启动命令:

bash
# 启动应用
docker-compose up -d

# 查看服务状态
docker-compose ps

# 停止应用
docker-compose down

案例4:多环境部署 ​

场景:使用Docker Compose部署多环境应用,包含开发、测试和生产环境。

docker-compose.yml:

yaml
version: '3'

services:
  web:
    image: nginx:latest
    ports:
      - "80:80"
    volumes:
      - ./html:/usr/share/nginx/html
    environment:
      - ENVIRONMENT=${ENVIRONMENT:-development}
    networks:
      - app-network

networks:
  app-network:
    driver: bridge

启动命令:

bash
# 启动开发环境
ENVIRONMENT=development docker-compose up -d

# 启动测试环境
ENVIRONMENT=test docker-compose up -d

# 启动生产环境
ENVIRONMENT=production docker-compose up -d

# 停止应用
docker-compose down

6. 常见问题 ​

问题1:服务启动失败 ​

问题:Docker Compose服务启动失败。

解决方法:

bash
# 查看服务日志
docker-compose logs service-name

# 检查配置文件
docker-compose config

# 检查网络
docker-compose network ls

# 检查卷
docker-compose volume ls

# 重新构建
docker-compose up --build

问题2:端口冲突 ​

问题:Docker Compose端口冲突。

解决方法:

yaml
# 修改端口映射
ports:
  - "8080:80"

# 或者
ports:
  - "8081:80"

问题3:依赖服务启动失败 ​

问题:Docker Compose依赖服务启动失败。

解决方法:

yaml
# 添加健康检查
services:
  db:
    image: mysql:8.0
    healthcheck:
      test: ["CMD", "mysqladmin", "ping", "-h", "localhost"]
      interval: 30s
      timeout: 10s
      retries: 3

  web:
    image: nginx:latest
    depends_on:
      db:
        condition: service_healthy

问题4:配置文件错误 ​

问题:Docker Compose配置文件错误。

解决方法:

bash
# 验证配置文件
docker-compose config

# 检查YAML语法
# 使用在线YAML验证工具

# 检查缩进
# 确保YAML文件缩进正确

# 检查格式
# 确保配置文件格式正确

课程总结 ​

这节课我们学习了Docker Compose使用。

核心内容:

  • Docker Compose概述(什么是Docker Compose、Docker Compose的优势、Docker Compose的工作原理)
  • Docker Compose安装(Linux安装、pip安装、Windows/macOS安装)
  • Docker Compose配置文件(docker-compose.yml文件、配置文件语法、服务配置)
  • Docker Compose命令(基本命令、高级命令)
  • 实战案例(Web应用、WordPress应用、微服务应用、多环境部署)
  • 常见问题

重要命令:

  • docker-compose up:启动应用
  • docker-compose down:停止应用
  • docker-compose ps:查看服务状态
  • docker-compose logs:查看服务日志
  • docker-compose build:构建镜像
  • docker-compose config:验证配置文件
  • docker-compose exec:进入容器
  • docker-compose restart:重启服务

Docker Compose是Docker官方提供的多容器应用编排工具,掌握这些知识后,我们将在后续课程中学习Docker容器化部署实战等内容。

课后练习 ​

练习1(基础) ​

使用Docker Compose部署一个Web应用,包含Nginx和PHP。

练习2(进阶) ​

使用Docker Compose部署WordPress应用,包含WordPress和MySQL。

练习3(拓展) ​

使用Docker Compose部署一个微服务应用,包含多个服务。

评论区

专业的Linux技术学习平台,从入门到精通的完整学习路径