简介
本新手指南将引导你完成安装 Docker 和 Docker Compose 的过程,并教你如何使用 Compose 来定义、部署和管理你的应用程序。你将了解 Docker Compose 中可用的关键特性和配置选项,以及扩展和负载均衡你的 Compose 应用程序的最佳实践。
本新手指南将引导你完成安装 Docker 和 Docker Compose 的过程,并教你如何使用 Compose 来定义、部署和管理你的应用程序。你将了解 Docker Compose 中可用的关键特性和配置选项,以及扩展和负载均衡你的 Compose 应用程序的最佳实践。
Docker Compose 是一个工具,可让你定义和运行多容器 Docker 应用程序。它通过提供一种声明式方式来定义应用程序的服务、网络和卷,简化了管理和编排多个 Docker 容器的过程。
使用 Docker Compose,你可以:
你可以在单个 YAML 文件中定义构成应用程序的不同服务,例如 Web 服务器、数据库和消息队列。这个文件称为 “Compose 文件”,它描述了每个服务的配置,包括要使用的 Docker 镜像、要暴露的网络端口以及要挂载的任何环境变量或卷。
Docker Compose 提供了用于启动、停止和管理整个应用程序生命周期的命令。你可以使用 docker-compose up
来创建并启动 Compose 文件中定义的所有服务,使用 docker-compose down
来停止并移除它们。
Docker Compose 在应用程序的开发和测试阶段特别有用。它允许你轻松启动一个包含所有必要服务的完整开发环境,从而更轻松地以一致且可重复的方式测试应用程序。
通过使用 Docker Compose,你可以确保应用程序在从开发到生产的不同环境中以相同方式运行,降低特定于环境的问题风险。
服务 | 镜像 | 端口 | 环境 |
---|---|---|---|
Web 服务器 | nginx:latest | 80:80 | - |
数据库 | mysql:5.7 | 3306:3306 | MYSQL_ROOT_PASSWORD=password |
消息队列 | rabbitmq:3-management | 5672:5672, 15672:15672 | - |
总之,Docker Compose 是一个强大的工具,它简化了多容器 Docker 应用程序的管理和部署,使你能够以一致且可重复的方式更轻松地开发、测试和运行复杂应用程序。
在开始使用 Docker Compose 之前,你需要在系统上安装 Docker 和 Docker Compose。在本节中,我们将指导你在 Ubuntu 22.04 系统上完成安装过程。
sudo apt-get update
sudo apt-get install -y \
ca-certificates \
curl \
gnupg \
lsb-release
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin
sudo docker run hello-world
在 Ubuntu 22.04 上,Docker Compose 作为 Docker 引擎安装过程的一部分进行安装。但是,如果你需要安装特定版本的 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
现在你已经安装了 Docker 和 Docker Compose,就可以开始使用 Docker Compose 定义和部署你的多容器应用程序了。
Docker Compose 应用程序的核心是 Compose 文件,它采用 YAML 格式编写。在这个文件中,你要定义构成应用程序的不同服务及其配置。
Compose 文件中的每个服务都被定义为一个顶级键,比如 web
、db
或 redis
。在每个服务下,你可以指定各种配置选项,例如要使用的 Docker 镜像、要暴露的网络端口、环境变量等等。
这是一个包含三个服务的简单 Compose 文件示例:
version: "3"
services:
web:
image: nginx:latest
ports:
- 80:80
volumes: -./app:/usr/share/nginx/html
db:
image: mysql:5.7
environment:
MYSQL_ROOT_PASSWORD: password
volumes:
- db-data:/var/lib/mysql
redis:
image: redis:latest
ports:
- 6379:6379
volumes:
db-data:
在这个示例中,我们有三个服务:
web
:运行最新版本的 Nginx 网络服务器,将主机上的端口 80 映射到容器中的端口 80,并将主机上的 ./app
目录挂载到容器中的 /usr/share/nginx/html
目录。
db
:运行 MySQL 5.7 数据库,设置 MYSQL_ROOT_PASSWORD
环境变量,并挂载一个名为 db-data
的卷来存储数据库数据。
redis
:运行最新版本的 Redis 内存数据存储,将主机上的端口 6379 映射到容器中的端口 6379。
除了定义服务之外,Compose 文件还允许你定义服务可以使用的共享卷和网络。
在上面的示例中,我们定义了一个名为 db-data
的卷来存储 MySQL 数据库数据。这个卷可以在多个服务之间共享,确保即使容器停止或重新创建,数据也能持久保存。
你还可以定义自定义网络来控制服务之间的连接。当你想要隔离某些服务或创建更复杂的网络拓扑时,这会很有用。
通过使用 Compose 文件,你可以轻松定义和管理应用程序的不同组件,从而更轻松地部署、扩展和维护你的多容器 Docker 应用程序。
一旦你在 Compose 文件中定义了服务,就可以使用 Docker Compose 命令来部署和管理你的应用程序。
要部署你的应用程序,请导航到包含 Compose 文件的目录并运行以下命令:
docker-compose up -d
-d
标志会以分离模式运行容器,这意味着它们将在后台运行。
Docker Compose 将读取 Compose 文件,创建必要的 Docker 网络和卷,并启动所有定义的服务。
部署应用程序后,你可以使用以下 Docker Compose 命令来管理其生命周期:
docker-compose stop
:停止所有正在运行的服务。docker-compose start
:启动已停止的服务。docker-compose restart
:重启所有正在运行的服务。docker-compose down
:停止并移除所有服务、网络和卷。例如,要停止应用程序,可以运行:
docker-compose stop
要再次启动它,可以运行:
docker-compose start
Docker Compose 使你能够轻松地扩展服务的规模,增加或减少实例数量。要扩展特定服务,可以使用 scale
命令:
docker-compose scale web=3 db=2
这将把 web
服务扩展到 3 个实例,把 db
服务扩展到 2 个实例。
你还可以在部署应用程序时使用带有 --scale
标志的 up
命令来扩展服务:
docker-compose up --scale web=3 --scale db=2 -d
要查看应用程序的日志,可以使用 logs
命令:
docker-compose logs
这将显示所有服务的日志。你还可以通过指定服务名称来查看特定服务的日志:
docker-compose logs web
通过使用这些 Docker Compose 命令,你可以轻松地部署、管理和扩展多容器应用程序,从而更轻松地以一致且可重复的方式开发、测试和运行复杂应用程序。
虽然基本的 Compose 文件结构和命令已经很强大,但 Docker Compose 还提供了一系列高级功能和配置选项,以帮助你构建更复杂、更健壮的应用程序。
你可以使用环境变量将配置设置传递给你的服务。Docker Compose 支持构建时和运行时环境变量,这些变量可以在服务级别或全局级别定义。
此外,你可以使用 Docker 机密信息来安全地存储敏感信息,例如数据库密码或 API 密钥,并将它们提供给你的服务。
version: "3"
services:
web:
image: myapp/web
environment:
- DATABASE_URL=mysql://root:${DB_PASSWORD}@db/myapp
secrets:
- db-password
secrets:
db-password: file:./db-password.txt
Docker Compose 允许你定义服务依赖关系,确保服务按正确顺序启动,并且在启动其他服务之前,依赖的服务是健康的。
你还可以为你的服务配置健康检查,这使 Compose 能够监控容器的健康状况并采取适当的行动,例如重启不健康的容器。
version: "3"
services:
web:
image: myapp/web
depends_on:
db:
condition: service_healthy
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost"]
interval: 30s
timeout: 10s
retries: 5
db:
image: mysql:5.7
healthcheck:
test: ["CMD", "mysqladmin", "ping", "-h", "localhost"]
interval: 30s
timeout: 10s
retries: 5
Docker Compose 会自动为你的应用程序创建一个默认网络,但你也可以定义自定义网络并控制服务的网络配置。
此外,Compose 提供了内置的服务发现功能,允许你的服务使用 Compose 文件中定义的服务名称相互查找和通信。
version: "3"
services:
web:
image: myapp/web
networks:
- frontend
environment:
- DB_HOST=db
db:
image: mysql:5.7
networks:
- backend
networks:
frontend:
backend:
通过利用这些高级功能,你可以构建更复杂、更具弹性和可扩展性的 Docker Compose 应用程序,以满足你组织的需求。
使用 Docker Compose 的主要优势之一是能够轻松扩展服务并实现负载均衡。在本节中,我们将探讨如何实现这些功能。
如前所述,你可以使用 scale
命令来扩展服务的规模,增加或减少实例数量。当你需要处理增加的流量或资源需求时,这特别有用。
例如,假设你的 Compose 文件中定义了一个 web 服务:
version: "3"
services:
web:
image: myapp/web
ports:
- 80:80
要将 web
服务扩展到 3 个实例,你可以运行以下命令:
docker-compose scale web=3
这将创建另外两个 web
服务实例,使你能够在多个容器之间分配负载。
Docker Compose 还提供了内置的负载均衡功能。当你定义一个服务的多个实例时,Compose 将自动在可用容器之间对传入请求进行负载均衡。
version: "3"
services:
web:
image: myapp/web
ports:
- 80:80
deploy:
replicas: 3
restart_policy:
condition: on-failure
在这个例子中,我们将 web
服务定义为有 3 个副本。当你运行 docker-compose up
时,Compose 将创建三个 web
服务实例,并在它们之间对传入请求进行负载均衡。
你还可以配置其他负载均衡选项,例如重启策略,以确保你的应用程序保持高可用性。
通过利用 Docker Compose 的扩展和负载均衡功能,你可以构建高度可扩展且具有弹性的应用程序,以处理增加的流量和资源需求。
与任何技术一样,在使用 Docker Compose 时,你可能会遇到问题或挑战。在本节中,我们将介绍一些常见的故障排除步骤和最佳实践,以帮助你有效地管理基于 Compose 的应用程序。
docker-compose logs
命令检查日志。这将帮助你识别服务中的任何错误或问题。docker-compose ps
命令列出正在运行的容器及其状态。这可以帮助你识别任何未按预期运行的容器。docker-compose exec
命令访问容器并调试问题。例如,docker-compose exec web bash
将在 web
服务容器内为你提供一个 shell。docker-compose config
命令验证 Compose 文件的语法和结构。通过遵循这些故障排除步骤和最佳实践,你可以有效地管理和维护你的 Docker Compose 应用程序,确保它们在各种环境中平稳、可靠地运行。
在本教程结束时,你将对如何安装和使用 Docker Compose 以简化应用程序部署和管理有扎实的理解。你将能够定义你的服务、部署和管理你的 Compose 应用程序,并对可能出现的任何问题进行故障排除。无论你是 Docker 的新手还是希望提高你的 Compose 技能,本指南都将为你提供入门所需的知识和工具。