简介
Docker Compose
是一个用于定义和运行多容器 Docker 应用程序的工具。它允许你在单个 YAML 文件中定义应用程序的服务、网络和卷,从而更轻松地管理和扩展复杂的应用程序。
本教程的目标是手把手教你如何在 Linux 服务器上使用 Docker Compose 部署多容器应用程序。
准备工作
- 准备一台云服务器
若尚未拥有服务器,可前往 雨云官网 https://rainyun.ivwv.site 进行注册,新用户有专属优惠。
安装和配置步骤
第一步:安装 Docker 和 Docker Compose
如果你的服务器上还没有安装 Docker 和 Docker Compose,请按照以下步骤操作:
首先安装 Docker。执行以下命令:
sudo apt-get update
sudo apt-get install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc
# Add the repository to Apt sources:
echo \\
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \\
$(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \\
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
安装 Docker 包:
sudo apt-get install docker-ce
下载最新版本的 Docker Compose:
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
为二进制文件应用可执行权限:
sudo chmod +x /usr/local/bin/docker-compose
验证安装:
docker-compose --version
Docker Compose 帮助管理多容器 Docker 应用程序。我们将使用它来简化 Flask 应用程序的管理。
第二步:创建 Docker Compose YAML 文件
在这一步,你将使用 docker-compose.yml
文件定义你的多容器应用程序。为了演示,我们将部署一个简单的 Web 应用程序,该应用程序由 Nginx Web 服务器和 MySQL 数据库组成。
创建项目目录:
mkdir my_app && cd my_app
创建 docker-compose.yml
文件:
nano docker-compose.yml
在 docker-compose.yml
文件中定义服务:
这是一个示例配置:
services:
web:
image: nginx:latest
ports:
- "80:80"
volumes:
- ./html:/usr/share/nginx/html
networks:
- app-network
db:
image: mysql:9.0
environment:
MYSQL_ROOT_PASSWORD: example_root_password
MYSQL_DATABASE: example_db
MYSQL_USER: example_user
MYSQL_PASSWORD: example_password
volumes:
- db_data:/var/lib/mysql
networks:
- app-network
volumes:
db_data:
networks:
app-network:
services
: 定义组成你的应用程序的服务。web
: 定义 Nginx Web 服务器服务。db
: 定义 MySQL 数据库服务。volumes
: 为数据库定义持久数据存储。networks
: 定义用于服务间通信的自定义网络。
第三步:部署应用程序
准备好 docker-compose.yml
文件后,你现在可以部署应用程序。
启动服务:
sudo docker-compose up -d
d
标志在后台(分离模式)运行容器。
验证容器是否正在运行:
sudo docker-compose ps
你应该看到 web
和 db
服务正在运行。
测试应用程序:
打开你的浏览器并导航到你服务器的 IP 地址。你应该看到 Nginx 欢迎页面。
第四步:管理应用程序
Docker Compose 使管理多容器应用程序变得容易。
停止应用程序:
sudo docker-compose down
此命令停止并删除 docker-compose.yml
文件中定义的容器、网络和卷。
重启应用程序:
sudo docker-compose up -d
查看日志:
要查看特定服务的日志,请使用:
sudo docker-compose logs <service_name>
例如:
sudo docker-compose logs web
第五步:扩展应用程序
Docker Compose 允许你轻松地扩展你的服务。例如,要将 web
服务扩展为运行三个实例:
sudo docker-compose up -d --scale web=3
Docker Compose 将自动在实例之间进行负载均衡。
高级 Docker Compose 命令
对于那些希望深入了解 Docker Compose 的人,这里有一些高级命令和技术,可以帮助你更有效地优化和管理多容器应用程序。
1. 查看详细的容器信息
要检查有关特定服务的容器的详细信息,请使用以下命令:
sudo docker-compose exec <service_name> docker inspect <container_id>
此命令提供有关容器配置、状态和资源使用的详细 JSON 输出。
2. 运行一次性命令
你可以在正在运行的服务容器中执行一次性命令。例如,要在 web
容器内打开 bash shell:
sudo docker-compose exec web bash
或者在 db
容器内运行 MySQL 命令:
sudo docker-compose exec db mysql -u root -p
注意:输入你在 docker-compose.yml
文件中作为 MYSQL_ROOT_PASSWORD
提到的密码。
3. 构建和重建镜像
如果你的 docker-compose.yml
文件包含构建上下文,你可以使用以下命令构建或重建镜像:
sudo docker-compose build
要重建特定服务:
sudo docker-compose build <service_name>
要强制在不使用缓存的情况下重建:
sudo docker-compose build --no-cache
4. 检查资源使用情况
要监控容器的 CPU、内存和其他资源使用情况:
sudo docker-compose top
此命令显示每个服务的资源使用统计信息。
5. 创建和使用覆盖
Docker Compose 允许你定义一个覆盖文件,通常命名为 docker-compose.override.yml
,该文件可用于自定义或扩展基本配置。当你运行 docker-compose up
时,Docker Compose 会自动应用覆盖。
# docker-compose.override.yml
services:
web:
environment:
- DEBUG=true
此覆盖文件在 web
服务中设置了一个额外的环境变量,这对于调试非常有用。
6. 删除孤立容器
当你更新 docker-compose.yml
文件并删除服务时,旧的容器可能会变成“孤立容器”。要删除这些孤立容器:
sudo docker-compose up -d --remove-orphans
这确保你的环境保持干净且没有未使用的容器。
7. 查看配置
要查看 Docker Compose 如何解释你的 docker-compose.yml
文件,请使用:
sudo docker-compose config
此命令验证你的配置并显示 Docker Compose 使用的完整、扩展配置。
8. 使用多个 Compose 文件
你可以一起使用多个 Docker Compose 文件,这对于将基本配置与特定于环境的设置(例如,开发、生产)分开非常有用。
sudo docker-compose -f docker-compose.yml -f docker-compose.prod.yml up -d
此命令合并来自 docker-compose.yml
和 docker-compose.prod.yml
的配置并启动服务。
9. 导出 Docker Compose 日志
如果你需要稍后分析日志,你可以将其导出到文件:
sudo docker-compose logs > logs.txt
此命令捕获来自你所有服务的日志并将其保存到 logs.txt
。
10. 使用健康检查
你可以在 docker-compose.yml
文件中定义健康检查,以确保你的服务正常运行:
services:
web:
image: nginx
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost"]
interval: 1m30s
timeout: 10s
retries: 3
健康检查有助于确保只有健康的容器才能接收流量,从而提高应用程序的可靠性。
结尾
我们已经成功地了解了如何使用 Docker Compose 部署多容器应用程序。此设置具有高度的可扩展性,可以轻松适应更复杂的应用程序。Docker Compose 是一款强大的工具,可简化容器化应用程序的部署和管理,使其成为现代 DevOps 实践的重要组成部分。
高级 Docker Compose 命令为管理和优化你的多容器应用程序提供了强大的功能。通过掌握这些命令,你可以增强你的 DevOps 实践,提高应用程序性能并简化部署。