Docker Compose 是用于定义和运行多容器 Docker 应用程序的一种工具。通过使用一个 YAML 文件来配置应用程序的服务,您可以使用一个单一的命令来创建和启动所有的服务。

Docker Compose 解决了以下问题:

  1. 多容器应用的管理:当一个应用程序需要多个容器时,手动管理这些容器会变得复杂,而 Docker Compose 可以轻松地管理这些容器。
  2. 环境隔离:每个项目都有独立的环境,这样不同项目之间不会有冲突。
  3. 版本控制配置:使用 Docker Compose 文件,可以将配置版本控制,使得团队成员能够轻松地共享配置。

安装与配置 Docker Compose

Docker Compose 提供了多种安装方式,以下是最常用的几种方式:

在 Windows 上安装 Docker Compose

  1. 使用 Docker Desktop:Docker Desktop 内置了 Docker Compose,安装 Docker Desktop 后可以直接使用 Docker Compose。
  2. 手动安装
    • 下载 Docker Compose 的二进制文件:
  1. $version = (Invoke-RestMethod -Uri https://api.github.com/repos/docker/compose/releases/latest).tag_name
  2. Invoke-WebRequest "https://github.com/docker/compose/releases/download/$version/docker-compose-Windows-x86_64.exe" -OutFile "$Env:ProgramFiles\Docker\Docker\resources\bin\docker-compose.exe"
  1. - `docker-compose.exe` 移动到系统路径中。

在 macOS 上安装 Docker Compose

  1. 使用 Docker Desktop:同样的,Docker Desktop 内置了 Docker Compose。
  2. 通过 Homebrew 安装
  1. brew install docker-compose

在 Linux 上安装 Docker Compose

  1. 下载 Docker Compose 的二进制文件
  1. sudo curl -L "https://github.com/docker/compose/releases/download/$(curl -s https://api.github.com/repos/docker/compose/releases/latest | grep -oP '\"tag_name\": \"\K(.*)(?=\")')/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
  1. 为二进制文件添加执行权限
  1. sudo chmod +x /usr/local/bin/docker-compose
  1. 创建软链接(可选):
  1. sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose

验证 Docker Compose 安装

安装完成后,可以通过以下命令验证 Docker Compose 是否安装成功:

  1. docker-compose --version

输出类似如下内容即表示安装成功:

  1. docker-compose version 1.29.2, build 5becea4c

创建第一个 Docker Compose 文件

为了帮助您快速上手 Docker Compose,我们将创建一个简单的示例应用,这个应用由一个 web 服务和一个数据库服务构成。

  1. 创建项目目录
  1. mkdir myapp
  2. cd myapp
  1. 创建 **docker-compose.yml** 文件
  1. version: "3"
  2. services:
  3. web:
  4. image: nginx
  5. ports:
  6. - "80:80"
  7. db:
  8. image: postgres
  9. environment:
  10. POSTGRES_PASSWORD: example
  1. 启动应用
  1. docker-compose up

此命令将下载 nginx 和 postgres 镜像,并启动两个容器。通过访问 http://localhost 可以查看 nginx 的默认页面。

  1. 停止应用
    使用以下命令可以停止并移除容器:
  1. docker-compose down

编排多容器应用

Docker Compose 并不仅限于简单的服务配置,它还支持复杂的多容器应用编排。

定义服务

docker-compose.yml 文件中,您可以定义多个服务,每个服务可以指定不同的镜像和配置。例如:

  1. version: "3"
  2. services:
  3. web:
  4. image: mycustomimage:latest
  5. build: .
  6. ports:
  7. - "80:80"
  8. depends_on:
  9. - db
  10. db:
  11. image: postgres
  12. environment:
  13. POSTGRES_PASSWORD: example

使用 docker-compose up 启动应用

启动所有定义的服务:

  1. docker-compose up

使用 docker-compose down 停止应用

停止并移除所有服务:

  1. docker-compose down

Docker Compose 实践

本节将通过实际案例展示如何使用 Docker Compose 部署常见的应用环境。

使用 Docker Compose 部署 LAMP 环境

LAMP (Linux, Apache, MySQL, PHP) 是一个常见的 Web 开发环境。以下是使用 Docker Compose 部署 LAMP 环境的示例:

  1. 创建 **docker-compose.yml** 文件
  1. version: "3"
  2. services:
  3. web:
  4. image: php:7.4-apache
  5. volumes:
  6. - ./html:/var/www/html
  7. ports:
  8. - "80:80"
  9. db:
  10. image: mysql:5.7
  11. environment:
  12. MYSQL_ROOT_PASSWORD: example
  1. 创建项目结构
  1. mkdir -p lamp/html
  2. cd lamp
  1. 启动 LAMP 环境
  1. docker-compose up
  1. 访问 Web 服务
    在浏览器中访问 http://localhost,可以看到默认的 PHP 页面。

使用 Docker Compose 部署微服务架构

微服务是一种架构模式,将应用程序划分为一组小的、独立的服务。以下是一个简化的微服务架构示例:

  1. 创建 **docker-compose.yml** 文件
  1. version: "3"
  2. services:
  3. frontend:
  4. image: node:14
  5. working_dir: /app
  6. command: npm start
  7. volumes:
  8. - ./frontend:/app
  9. ports:
  10. - "3000:3000"
  11. backend:
  12. image: python:3.8
  13. working_dir: /app
  14. command: python app.py
  15. volumes:
  16. - ./backend:/app
  17. ports:
  18. - "5000:5000"
  1. 创建项目结构
  1. mkdir -p microservices/{frontend,backend}
  2. cd microservices
  1. 启动微服务架构
  1. docker-compose up
  1. 访问前端服务
    在浏览器中访问 http://localhost:3000,可以看到前端应用。
  2. 访问后端服务
    在浏览器中访问 http://localhost:5000,可以看到后端应用。