Docker Compose 简介

让我们从一个简单的基于python的多容器应用程序开始。这个示例应用程序由一个Web前端,用于缓存的Redis和作为我们数据库的Postgres组成。使用Docker,Web前端,Redis和Postgres都在单独的容器中运行。

您可以使用Docker Compose定义本地开发环境,包括环境变量,需要访问的端口以及要挂载的卷。一切都docker-compose.ymldocker-composeCLI中定义的中定义。

以下是docker-compose.yml该应用程序的:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
version: '2'
services:
web:
build: .
ports:
- "5000:5000"
env_file: .env
depends_on:
- db
volumes:
- ./webapp:/opt/webapp
db:
image: postgres:latest
ports:
- "5432:5432"
redis:
image: redis:alpine
ports:
- "6379:6379"

网络服务

第一部分定义了Web服务。它打开端口5000,设置在.env中定义的环境变量,并将本地代码目录安装为卷。

1
2
3
4
5
6
7
8
9
10
services:
web:
build: .
ports:
- "5000:5000"
env_file: .env
depends_on:
- db
volumes:
- ./webapp:/opt/webapp

数据库服务

下一个服务是Postgres数据库,它将打开端口5432,并在Docker Hub上使用最新的官方Postgres映像。

1
2
3
4
db:
image: postgres:latest
ports:
- "5432:5432"

Redis服务

本部分定义了我们的Redis服务,该服务打开端口6379,并使用Docker Hub上的官方Redis映像。

1
2
3
4
redis:
image: redis:alpine
ports:
- "6379:6379"

现在已经在中定义了本地开发环境docker-compose.yml,您可以使用一个命令启动所有这三个服务:

1
$ docker-compose up

以下命令确认所有三个容器都在运行:

1
2
3
4
5
$ docker ps
CONTAINER ID IMAGE COMMAND
8e422ff92239 python_web "/bin/sh -c 'python a"
4ac9ecc8a2a3 python_db "/docker-entrypoint.s"
2cbc8febd074 redis:alpine "docker-entrypoint.sh"

Docker Compose的好处

使用Docker并使用Docker Compose定义本地开发环境可为您带来许多好处:

  • 通过在Docker容器中运行Redis和Postgres,您不必在本地计算机上安装或维护软件
  • 您可以将整个本地开发环境检入到源代码管理中,从而使其他开发人员可以更轻松地在项目上进行协作
  • 您可以使用一个命令启动整个本地开发环境: docker-compose up