Docker Compose 是一个用于定义和运行多容器 Docker 应用程序的工具。通过一个 docker-compose.yml
文件,你可以配置应用程序的所有服务、网络和卷,然后使用单个命令启动整个应用程序。Docker Compose 使得管理和部署复杂的应用程序变得简单高效。
一、Docker Compose 的主要特点
-
定义服务:通过
docker-compose.yml
文件,可以定义多个服务(容器)、网络和卷。 -
一键启动:使用
docker-compose up
命令可以一键启动所有服务。 -
环境隔离:可以为每个项目创建独立的环境,避免服务之间的冲突。
-
可扩展性:支持通过简单的命令扩展服务实例的数量。
-
兼容性:与 Docker 原生命令无缝集成,可以与
docker
命令一起使用。
二、安装 Docker Compose
Docker Compose 的安装方式因操作系统而异。以下是几种常见操作系统的安装方法:
1. Linux
bash复制
# 下载 Docker Compose
sudo curl -L "https://github.com/docker/compose/releases/download/$(curl -s https://api.github.com/repos/docker/compose/releases/latest | grep -Po '"tag_name": "\K.*\d')" /usr/local/bin/docker-compose
# 赋予执行权限
sudo chmod +x /usr/local/bin/docker-compose
# 验证安装
docker-compose --version
2. MacOS
如果安装了 Homebrew,可以通过以下命令安装:
bash复制
brew install docker-compose
3. Windows
可以通过 Docker Desktop 安装 Docker Compose,Docker Desktop 会自动安装 Docker Compose。
三、docker-compose.yml
文件
docker-compose.yml
文件是 Docker Compose 的核心配置文件,用于定义服务、网络和卷。以下是一个简单的 docker-compose.yml
文件示例:
示例:一个简单的 Web 应用
yaml复制
version: '3.8' # 指定 Compose 文件版本
services: # 定义服务
web:
image: nginx:latest # 使用 Nginx 镜像
ports:
- "80:80" # 端口映射
volumes:
- ./html:/usr/share/nginx/html # 挂载卷
depends_on: # 依赖关系
- backend
backend:
image: python:3.9-slim
command: python app.py
volumes:
- ./app:/app
environment:
- DEBUG=True
文件结构说明
-
version
:指定 Compose 文件的版本。不同版本的 Compose 文件语法可能有所不同。 -
services
:定义服务。每个服务可以指定镜像、端口映射、挂载卷、环境变量等。-
image
:指定服务的基础镜像。 -
ports
:定义端口映射,格式为<宿主机端口>:<容器端口>
。 -
volumes
:定义挂载卷,格式为<宿主机路径>:<容器路径>
。 -
command
:覆盖默认的启动命令。 -
environment
:设置环境变量。 -
depends_on
:定义服务之间的依赖关系。
-
四、Docker Compose 常用命令
-
启动服务
bash复制
docker-compose up
-
默认会启动
docker-compose.yml
文件中定义的所有服务。 -
添加
-d
参数可以后台运行:bash复制
docker-compose up -d
-
-
停止服务
bash复制
docker-compose down
-
停止并移除所有服务、网络和卷。
-
-
查看服务状态
bash复制
docker-compose ps
-
查看所有服务的运行状态。
-
-
查看日志
bash复制
docker-compose logs
-
查看服务的日志。可以指定服务名称查看特定服务的日志:
bash复制
docker-compose logs web
-
-
进入容器
bash复制
docker-compose exec <service_name> /bin/bash
-
进入指定服务的容器。
-
-
构建镜像
bash复制
docker-compose build
-
构建
docker-compose.yml
文件中定义的镜像。
-
-
扩展服务
bash复制
docker-compose up --scale web=3
-
将
web
服务扩展为 3 个实例。
-
五、实际应用场景
假设你有一个简单的 Web 应用,包含前端(Nginx)和后端(Python Flask)服务。以下是 docker-compose.yml
文件的示例:
docker-compose.yml
yaml复制
version: '3.8'
services:
web:
image: nginx:latest
ports:
- "80:80"
volumes:
- ./html:/usr/share/nginx/html
depends_on:
- backend
backend:
build: ./backend # 使用 Dockerfile 构建镜像
command: python app.py
volumes:
- ./backend:/app
environment:
- DEBUG=True
backend/Dockerfile
dockerfile复制
FROM python:3.9-slim
WORKDIR /app
COPY . /app
RUN pip install -r requirements.txt
CMD ["python", "app.py"]
项目结构
复制
my-app/
├── docker-compose.yml
├── html/
│ └── index.html
└── backend/
├── Dockerfile
├── app.py
└── requirements.txt
使用步骤
-
启动服务
bash复制
docker-compose up -d
-
后台启动所有服务。
-
-
查看服务状态
bash复制
docker-compose ps
-
查看日志
bash复制
docker-compose logs
-
停止服务
bash复制
docker-compose down
六、总结
Docker Compose 是一个强大的工具,用于管理和部署多容器 Docker 应用程序。通过 docker-compose.yml
文件,你可以定义多个服务、网络和卷,并使用简单的命令启动和管理整个应用程序。Docker Compose 的主要特点包括:
-
定义服务:通过
docker-compose.yml
文件定义服务。 -
一键启动:使用
docker-compose up
命令启动所有服务。 -
环境隔离:为每个项目创建独立的环境。
-
可扩展性:支持扩展服务实例数量。
-
兼容性:与 Docker 原生命令无缝集成。