Docker Compose 开发笔记
什么是 Docker Compose?
Docker Compose 是一个工具
- 是一个用于定义和管理多容器 Docker 应用的工具
- 通过 docker-compose.yml 文件简化容器的配置、部署和管理。
好处:
- 简化配置:通过 YAML 文件集中管理应用的多个服务、网络和卷,易于理解和维护。
- 多容器管理:能够轻松定义和管理多个相互依赖的容器,便于开发和测试复杂应用。
- 环境一致性:确保在不同环境(如开发、测试、生产)中以一致的方式运行应用,减少环境差异导致的问题。
- 快速启动和停止:使用简单的命令快速启动、停止和重启整个应用堆栈,节省时间和精力。
- 版本控制: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
| 命令 | 描述 |
|---------------------------------------------|--------------------------------------------|
|docker-compose up
| 启动docker-compose.yml
文件中定义的所有服务。 |
|docker-compose up -d
| 在分离模式下启动服务,让它们在后台运行。 |
|docker-compose down
| 停止并删除所有服务、网络和卷。 |
|docker-compose build
| 仅构建在docker-compose.yml
中定义的服务的镜像,而不启动它们。 |
|docker-compose start
| 启动已存在但停止的服务。 |
|docker-compose stop
| 停止正在运行的服务,但不删除它们。 |
|docker-compose restart
| 重启所有服务。 |
|docker-compose ps
| 列出当前运行的服务及其状态。 |
|docker-compose logs
| 显示所有服务的日志。 |
|docker-compose logs <service_name>
| 查看特定服务的日志。 |
|docker-compose up --scale web=3
| 启动多个实例(例如,将web
服务扩展到 3 个实例)。 |
|docker-compose exec <service_name> <command>
| 在运行的服务中执行指定的命令。 |
|docker-compose build --no-cache
| 强制重建镜像。 |
|docker-compose up -d --build
| 仅更新已更改的服务。 |
小贴士
- 在开发过程中使用主机的文件挂载,以便快速反映代码更改。
- 在生产环境中,考虑使用命名卷和网络,以确保数据持久化和服务间的安全通信。