# Docker 进阶
# 参考文档
# Docker Compose
# 简介
我们知道通过 Dockerfile 可以很方便的定义一个单独的容器,但是一个项目中往往会包含多个容器(项目代码、Mysql、Redis...),多个容器配合才能完成一个应用。
Compose 就是用来编排这些容器的,它允许用户通过一个单独的 docker-compose.yml
模板文件定义一组关联容器构成一个应用。Compose 中有两个重要概念:
service
服务,一个应用实际的容器,也就是每一个微服务所在的容器,实际上可以包括多个运行相同镜像的容器实例。project
项目,有多个服务组成的一个完整的应用项目。
Compose 默认管理的对象是项目,通过 Compose 可以使用 YML 文件来配置应用程序需要的所有服务。然后使用一个命令,就可以从 YML 文件配置中创建并启动所有服务。
Compose v1 中的命令是 docker-compose [arg]
,Compose v2 中的命令是 docker compose [arg]
。
# Compose 模板文件
详细参数解释可见文档 (opens new window)
目前主要使用到的 Compose 是 v3,所以这里默认使用 v3,其它版本可以去官方文档中查看。
Compose 默认使用文件名 docker-compose.yml
。当然,也可以使用 -f
参数指定具体文件。
# 示例
定义 docker-compose.yml
放在工程根目录下,执行 docker compose up
这个命令来启动并运行整个应用程序。在工程根目录下执行 docker compose logs
将展示整个应用的日志信息,不同服务的日志将会以不同的颜色展示出来。
# docker-compose.yml 配置
version: '3'
services:
compose-demo:
build: .
ports:
- '7400:7401'
# 这里意思是先运行 redis,再运行当前服务
depends_on:
- redis
redis:
image: redis
ports:
- '6374:6379'
# service - compose-demo 的 Dockfile
FROM openjdk:8
ADD /target/compose-demo-1.0-SNAPSHOT.jar app.jar
ENTRYPOINT java -jar app.jar
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# 讨论区
由于评论过多会影响页面最下方的导航,故将评论区做默认折叠处理。