跳转到内容

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技术学习平台,从入门到精通的完整学习路径