1.概述
官网地址:https://docs.docker.com/compose/
Compose 是用于定义和运行多容器 Docker 应用程序的工具。通过 Compose,您可以使用 YML 文件来配置应用程序需要的所有服务。然后,使用一个命令,就可以从 YML 文件配置中创建并启动所有服务。
使用Compose三步:
- 使用 Dockerfile 定义应用程序的环境。
- 使用 docker-compose.yml 定义构成应用程序的服务,这样它们可以在隔离环境中一起运行。
- 最后,执行 docker-compose up 命令来启动并运行整个应用程序。
一个 docker-compose.yml 看起来如下:
# yaml 配置实例
version: '3'
services:
web:
build: .
ports:
- "5000:5000"
volumes:
- .:/code
- logvolume01:/var/log
links:
- redis
redis:
image: redis
volumes:
logvolume01: {}
-
Docker Compose 将所管理的容器分为三层,分别是工程(project)、服务(service)、容器(container)
-
Docker Compose 运行目录下的所有文件(docker-compose.yml)组成一个工程,一个工程包含多个服务,每个服务中定义了容器运行的镜像、参数、依赖,一个服务可包括多个容器实例
2.安装
https://docs.docker.com/compose/install/
3.docker-compose.yml 常用命令
- version:描述 Compose 文件的版本信息
- services:多个容器集合
- build:基于指定路径的 Dockerfile 文件构建;也可以是一个对象,用于指定 Dockerfile 的参数
version: '3'
services:
web: # 指定服务名称
build: ./dir
-------------------
version: '3'
services:
web: # 指定服务名称
build:
content: ./dir #Dockerfile 文件的绝对/相对路径,也可以是远程 Git 仓库的 URL
dockerfile: Dockerfile #声明自定义的 Dockerfile 文件名
- image:指定运行的镜像名称
- container_name:指定容器名称,默认名称格式:工程名称_服务名称_序号,工程名称则为当前 yml的目录名
- ports:容器对外暴露的端口(HOST:CONTAINER)
- expose:容器暴露的端口不映射到宿主机,只允许能被连接的服务访问
- volumes:将宿主机的文件或目录挂载到容器中(HOST:CONTAINER)
- environment:配置环境变量
- links:连接其他容器的服务(SERVICE:ALIAS)
# 运行的是mysql5.7的镜像
version: '3'
services:
db: # 指定服务名称
image: mysql:5.7 # 指定容器名称
container_name: mysql
# 指定服务运行的端口
ports:
- 3306:3306
# 将外部文件挂载到myql容器中
volumes:
- /mydata/mysql/log:/var/log/mysql
- /mydata/mysql/data:/var/lib/mysql
- /mydata/mysql/conf:/etc/mysql
# 设置mysqlroot帐号密码的环境变量
environment:
- MYSQL_ROOT_PASSWORD=root
# 可以以database为域名访问服务名称为db的容器 官网推荐使用自定义网络替换 links
links:
- db:database
- depends_on 以依赖性顺序启动服务,解决容器依赖、启动先后问题的配置项
#db和redis在之前启动web
version: "3"
services:
web:
build: .
depends_on:
- db
- redis
redis:
image: redis
db:
image: postgres
- networks 网络设置
- aliases 同一网络上的其他容器可以使用服务名或此别名连接到服务容器。同一服务在不同的网络上可以具有不同的别名。
# 定义服务,可以多个
services:
nginx: # 服务名
networks: # 配置容器连接的网络,引用顶级 networks 下的条目
frontend: # 一个具体网络的条目名称
aliases: #服务别名,可以多个
- nginx1 #同一网络上的其他容器可以使用服务名或此别名连接到服务容器
# 定义网络,可以多个。如果不声明,默认会创建一个网络名称为"工程名称_default"的 bridge 网络
# 使用docker network ls可以查看网络列表
networks:
frontend: # 一个具体网络的条目名称
name: custom_frontend # 网络名称,默认为"工程名称_网络条目名称"
driver: custom-driver-1
4.docker-compose 常用命令
# 构建、启动、创建相关容器 -d表示在后台运行
docker-compose up -d
#指定文件启动
docker-compose -f docker-compose.yml up -d
#停止所有相关容器
docker-compose stop
#列出所有容器信息
docker-compose ps