什么是 Docker Compose?
Docker Compose 是一个工具,用于定义和运行多容器 Docker 应用程序。通过 docker-compose.yml
文件,你可以配置应用程序的服务、网络和卷等。
基本结构
docker-compose.yml
文件通常包含以下几个部分:
1. 版本
指定 Docker Compose 文件的版本。
version: '3'
2. 服务(services)
定义应用程序中的服务。每个服务可以是一个容器。
services:
web:
# 服务配置
db:
# 数据库配置
3. 构建(build)
指定构建 Docker 镜像的上下文。
build: .
-
.
表示当前目录,Docker 将使用该目录中的Dockerfile
。 -
或者使用现成的image
描述:指定要使用的 Docker 镜像。如果镜像不存在,将从 Docker Hub 拉取。
示例:
services:
web:
image: nginx
4. 命令(command)
指定容器启动时要执行的命令。
command: python manage.py runserver 0.0.0.0:8000
5. 卷(volumes)
定义主机与容器之间的文件共享。
volumes:
- .:/app # 将主机当前目录挂载到容器的 /app 目录
6. 端口映射(ports)
将主机端口映射到容器端口。
ports:
- "8000:8000" # 将主机的 8000 端口映射到容器的 8000 端口
7. 依赖(depends_on)
定义服务之间的依赖关系。确保服务按顺序启动。
depends_on:
- db # web 服务在 db 服务之后启动
8. 环境变量(environment)
设置容器内的环境变量。
environment:
- DATABASE_URL=mysql://root:root@db/db1 # 配置数据库连接信息
示例 docker-compose.yml
以下是一个完整的示例,包含一个 Django 应用和一个 MySQL 数据库:
version: '3'
services:
web:
build: .
command: python manage.py runserver 0.0.0.0:8000
volumes:
- .:/app
ports:
- "8000:8000"
depends_on:
- db
environment:
- DATABASE_URL=mysql://root:root@db/db1
db:
image: mysql:5.7
volumes:
- db_data:/var/lib/mysql
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: db1
volumes:
db_data: # 定义持久化卷
常用命令
- 启动服务:
docker-compose up
(可以使用-d
参数在后台运行) - 停止服务:
docker-compose down
- 查看服务日志:
docker-compose logs
- 重建服务:
docker-compose up --build
小贴士
- 在开发过程中使用主机的文件挂载,以便快速反映代码更改。
- 在生产环境中,考虑使用命名卷和网络,以确保数据持久化和服务间的安全通信。