Docker Compose 多容器编排实战
前言
一、Docker Compose 简介
1️⃣ Docker Compose 工作原理
二、安装 Docker Compose
1️⃣ 安装 Docker Compose
三、编写 docker-compose.yml 文件
3.1 配置文件结构
3.2 编写 LNMP 环境配置
四、启动和管理多容器应用
4.1 启动所有服务
4.2 查看容器状态
4.3 查看服务日志
4.4 停止和删除服务
4.5 重启服务
五、Docker Compose 实战:LNMP 环境部署
5.1 创建项目目录
5.2 创建 Nginx 配置文件
5.3 创建 HTML 文件
5.4 启动服务
5.5 测试部署
六、Docker Compose 配置优化
6.1 使用 .env 文件配置环境变量
6.2 使用 build 构建自定义镜像
七、Docker Compose 微服务部署案例
7.1 项目结构:
八、Docker Compose 扩展:多容器自动化部署
8.1 多容器的自动化扩展
九、总结
前言
在前几章中,我们学习了 Dockerfile 和单容器的管理。 然而,在实际应用中,我们往往需要同时管理多个容器,Docker Compose 就是解决这一问题的强大工具。
Docker Compose 通过定义一个 docker-compose.yml
文件来管理多容器应用,让我们能够以 声明式配置 启动、停止和管理整个应用栈。 本篇将详细讲解如何使用 Docker Compose 构建 LNMP 环境(Linux + Nginx + MySQL + PHP),以及如何用它进行 微服务架构的快速部署。
一、Docker Compose 简介
Docker Compose 是一个用于定义和运行多容器 Docker 应用的工具。 通过 Compose,我们可以:
-
使用一个配置文件定义多个服务(容器)
-
通过一个命令启动所有服务
-
方便地管理容器间的依赖和网络配置
1️⃣ Docker Compose 工作原理
-
docker-compose.yml:配置文件,定义服务、网络、卷等。
-
docker-compose 命令:用于启动、停止、重启、删除服务。
二、安装 Docker Compose
在大多数 Docker 环境中,Docker Compose 默认已安装。如果没有安装,可以手动安装:
1️⃣ 安装 Docker Compose
curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose chmod +x /usr/local/bin/docker-compose
验证安装:
docker-compose --version
三、编写 docker-compose.yml 文件
3.1 配置文件结构
Docker Compose 的配置文件通常由三个主要部分组成:
部分 | 描述 |
---|---|
services | 定义容器服务,所有运行的容器都要在此部分列出 |
volumes | 定义持久化数据卷 |
networks | 定义服务间通信网络 |
3.2 编写 LNMP 环境配置
以下是一个典型的 LNMP 环境配置:
version: '3' services:nginx:image: nginx:latestcontainer_name: nginxports:- "8080:80"volumes:- ./html:/usr/share/nginx/html- ./nginx.conf:/etc/nginx/nginx.confnetworks:- lnmp_network mysql:image: mysql:5.7container_name: mysqlenvironment:MYSQL_ROOT_PASSWORD: examplevolumes:- mysql_data:/var/lib/mysqlnetworks:- lnmp_network php:image: php:7.4-fpmcontainer_name: phpvolumes:- ./html:/var/www/htmlnetworks:- lnmp_network networks:lnmp_network:driver: bridge volumes:mysql_data:
四、启动和管理多容器应用
4.1 启动所有服务
在包含 docker-compose.yml
文件的目录中执行以下命令启动容器:
docker-compose up -d
✅ 参数说明:
-d
:后台运行容器
4.2 查看容器状态
docker-compose ps
4.3 查看服务日志
docker-compose logs
查看特定服务日志:
docker-compose logs nginx
4.4 停止和删除服务
停止服务:
docker-compose down
如果希望删除卷(清理数据):
docker-compose down -v
4.5 重启服务
docker-compose restart
五、Docker Compose 实战:LNMP 环境部署
5.1 创建项目目录
mkdir -p /opt/lnmp && cd /opt/lnmp
在该目录下创建 docker-compose.yml
和 nginx.conf
文件。
5.2 创建 Nginx 配置文件
nginx.conf
文件内容:
server {listen 80;server_name localhost; root /usr/share/nginx/html;index index.php index.html index.htm; location / {try_files $uri $uri/ =404;} location ~ \.php$ {fastcgi_pass php:9000;fastcgi_index index.php;fastcgi_param SCRIPT_FILENAME /var/www/html$fastcgi_script_name;include fastcgi_params;} }
5.3 创建 HTML 文件
在 ./html
目录中创建一个简单的 index.php
文件:
<?php phpinfo(); ?>
5.4 启动服务
docker-compose up -d
5.5 测试部署
访问 http://localhost:8080
,你应该可以看到 PHP 信息页面,表示 LNMP 环境成功搭建。
六、Docker Compose 配置优化
6.1 使用 .env
文件配置环境变量
在 docker-compose.yml
文件中使用环境变量来配置服务:
version: '3' services:nginx:image: nginx:latestcontainer_name: nginxports:- "${NGINX_PORT}:80"volumes:- ./html:/usr/share/nginx/html- ./nginx.conf:/etc/nginx/nginx.confnetworks:- lnmp_network
然后创建一个 .env
文件,定义环境变量:
NGINX_PORT=8080
💡 使用
.env
文件可以方便地配置不同环境下的服务变量。
6.2 使用 build 构建自定义镜像
如果你需要自定义镜像,可以在 docker-compose.yml
中使用 build
:
services:nginx:build:context: ./nginxdockerfile: Dockerfilecontainer_name: nginxports:- "8080:80"volumes:- ./html:/usr/share/nginx/htmlnetworks:- lnmp_network
✅ 这将从
./nginx/Dockerfile
构建一个镜像,替代默认的nginx:latest
。
七、Docker Compose 微服务部署案例
以下是一个典型的 微服务架构,包含 Nginx、Node.js、MongoDB:
version: '3' services:nginx:image: nginx:latestcontainer_name: nginxports:- "8080:80"volumes:- ./nginx.conf:/etc/nginx/nginx.confnetworks:- app_network nodeapp:image: node:14container_name: nodeappbuild:context: ./nodeappports:- "3000:3000"networks:- app_networkdepends_on:- mongodb mongodb:image: mongo:latestcontainer_name: mongodbvolumes:- mongodb_data:/data/dbnetworks:- app_network networks:app_network:driver: bridge volumes:mongodb_data:
7.1 项目结构:
myapp/ ├── docker-compose.yml ├── nodeapp/ │ ├── Dockerfile │ ├── app.js │ └── package.json └── nginx.conf
八、Docker Compose 扩展:多容器自动化部署
8.1 多容器的自动化扩展
使用 scale
命令扩展服务实例:
docker-compose up -d --scale nodeapp=3
这将扩展 nodeapp
服务为 3 个实例。
九、总结
通过本篇学习,你应掌握以下技能:
✅ 使用 Docker Compose 管理多容器应用
✅ 配置并启动 LNMP 环境
✅ 构建微服务架构的多容器应用
✅ 使用 .env
文件与构建自定义镜像
✅ 实践 Docker Compose 扩展与自动化部署