1、准备工具
2、简介
Compose项目是Docker官方的开源项目,负责实现对docker容器集群的快速编排。它是一个定义和运行多容器的docker应用工具。使用compose,你能通过ymal文件配置你自己的服务,然后通过一个命令,你能使用配置文件创建和运行所有的服务
2.1 组成
Docker-Compose将所管理的容器分为三层,分别时工程(project)、服务(service)以及容器(container)。Docekr-Compose运行目录下的所有文件(docker-compose.yml,extends文件或环境变量文件等)组成一个工程,若无特殊指定工程名即可为当前目录名。一个工程中可包含多个服务,每个服务中定义了容器运行的镜像,参数,依赖。一个服务当中可包括多个容器实例。
- 服务(service):一个应用的容器,实际上可以包含若干个运行相同镜像的容器实例。每个服务都有自己的名字、使用的镜像、挂载的数据卷、所属的网络、依赖那些其他服务等,即以容器为粒度,用户需要compose所完成的任务。
- 项目(project):由一组关联的应用容器组成的一个完成业务单元,在docker-compose.yml中定义。即是compose的一个配置文件可以解析为一个项目,compose通过分析指定配置文件,得出配置文件所需要完成的所有容器管理与部署操作
Docker-compose的工程配置文件默认为docker-compose.yml,可通过环境变量COMPOSE_FILE或-f参数自定义配置文件,其定义了多个有依赖关系的服务以及每个服务运行的容器
使用一个Dockerfile模板文件,可以让用户很方便的定义一个单独的应用容器。在工作中,经常会碰到需要多个容器相互配合来完成某个项目任务的情况。例如:部署一个web项目,除了web服务容器,往往需要再加上后端的数据库服务容器,甚至还包括负载均衡容器等。
3 安装
compose目前已经完全支持Linux、Max OS和Windows,在我们安装compose之前,需要安装docker。下面我们以编译好的二级制包方式进行安装在Linux系统中
3.1 安装服务
- 下载docker-compose (如果github下载较慢,可以将链接的github.com更换为github.com.cnpmjs.org) ```shell curl -L “https://github.com/docker/compose/releases/download/1.24.0/docker-compose-$(uname -s)-$(uname -m)” -o /usr/local/bin/docker-compose
设置文件可执行权限
chmod +x /usr/local/bin/docker-compose
![image.png](https://cdn.nlark.com/yuque/0/2021/png/12883990/1617625166629-8e87f8bd-c2ab-4292-b919-6a2b449e672c.png#height=88&id=sBKMQ&margin=%5Bobject%20Object%5D&name=image.png&originHeight=175&originWidth=1373&originalType=binary&ratio=1&size=29480&status=done&style=none&width=686.5)
<a name="GvdVX"></a>
### 3.2 查看docker-compose版本
```shell
docker-compose -version
4 卸载
- 删除文件即可
rm -rf docker-compose
5 常用命令
5.1 常用命令格式
【常用命令】:请进入这个的文档中查看 点击进入常用命令讲解
- compose命令的基本的使用格式
docker-compse [-f 参数...] [options] [COMMAND] [ARGS...]
- 命令选择如下:
- -f,-file FILE指定使用的compose模板文件,默认docker-compose.yml,可以多次指定
- -p,-project-name NAME指定项目名称,默认将使用所在目录名称作为项目名称
- -x-network-driver 使用docker的可拔插网络后端特性(需要docker 1.9 及以后版本)
- -x-network-driver DRIVER指定网络后端的驱动,默认为birdge(需要docker 1.9 及以后版本)
- -verbose 输出更多调试信息
- -v,-version 打印版本并退出
【帮助】:
- 通过docker-compose —help|-h 来查看compose基本命令用法
- 通过执行docker-compose [COMMAND] —help或者docker-compose —help [COMMAND]查看具体格式
6、模板文件
6.1 模板文件格式
- 模板文件是使用compose的核心,涉及的指令关键字也比较多,大部分指令与d
ocker run
相关参数的含义都是类似的。默认的模板文件名称为docker-compose.yml,格式为YAML格式 ```yaml version: “2” service: web: images: nginx ports:
volumes:- "8080:80"
- /usr/local/abc:/usr/local/cbc
volumes:
networks:
Docker Compose的模板主要分为3个区域
- **services**:服务,在它下面可以定义应用需要的一些服务,每个服务都有自己的名字、使用的镜像、挂载的数据卷、所属的网络、依赖那些其他服务等等
- **volumes**:数据卷,在它下面可以定义的数据卷(名字等等),然后挂载到不服务下去使用
- **networks**:应用的网络,在它下面可以定义应用的名字、使用的网络类型等等
<a name="vulye"></a>
### 6.2 常用模板命令
| **指令** | **功能** |
| --- | --- |
| build | 指定服务镜像Dockerfile所在路径 |
| cap_add,cap_drop | 指定容器的内核能力(capacity)分配 |
| command | 覆盖容器启动后默认执行的命令 |
| cgroup_parent | 指定父cgroup组,意味着将基础该组的资源限制 |
| container_name | 指定容器名称,默认将会使用项目名称、服务名称、序号这样的格式 |
| devices | 指定设置映射关系 |
| dns | 自定义DNS服务器。可以是一个值,也可以是一个列表 |
| dns_search | 配置DNS搜索域。可以是一个值,也可以是一个列表 |
| dockerfile | 指定额外编译镜像的Dockerfile文件,可以通过该指令来指定 |
| env_file | 从文件中获取环境变量,可以为单独的文件路径或列表 |
| environment | 设置环境变量,可以使用数组或字典两种格式 |
| expose | 暴力端口 |
| external_links | 连接到docker-compose.yml外部的容器,甚至可以是非compose管理的外部容器 |
| extra_hosts | 指定额外的host名称映射信息 |
| image | 指定服务镜像Dockerfile所在路径 |
| links | 连接到其他服务中的容器 |
| log_driver | 指定日志驱动类型,类似于Docker中的-log-driver参数。目前支持三种日志驱动类型:log_driver:"json-file"、log_driver:"syslog"、log_driver:"none" |
| log_opt | 日志驱动的相关参数 |
| net | 设置网络模式。参数类似于docker clinet的-net参数一样 |
| pid | 跟主机系统共享进程命名空间。打开该选项的容器之间,以及容器和宿主机系统之间可以通过进程ID来相互访问和操作 |
| port | 暴露端口信息 |
| security_opt | 指定容器模板标签(label)机制的默认属性(如用户、角色、类型、级别等) |
| ulimits | 指定容器的ulimits限制值 |
| volumes | 数据卷锁挂载路径设置。可以设置宿主机路径(HOST:CONTAINER) 或加上访问模式(HOST:CONTAINER:ro) |
<a name="6SrFW"></a>
### 6.3 模板文件实现启动多个容器
docker-compose可以实现一次启动多个容器,通过配置docker-compose模板文件(docker-compose.yml),在这个配置文件中去配置各个容器及其相关的依赖
1. 编写模板文件(同时启动Tomcat、MySQL和redis容器)
```shell
# 创建文件夹
mkdir -p /usr/local/mycompose
# 进入文件夹
cd /usr/local/mycompose
# 创建docker-compose.yml
vi docker-compose.yml
编写模板配置文件(模板文件所在的目录,docker-compose.yml)
version: '3'
services:
redis1:
image: redis:6.0.10
ports:
- "7000:6379"
container_name: "redis1"
networks:
- dev
mysql1:
image: mysql:8.0.21
environment:
MYSQL_ROOT_PASSWORD: "root"
ports:
- "3316:3306"
container_name: "mysql1"
networks:
- dev
web1:
image: tomcat
ports:
- "8080:8080"
container_name: "web1"
networks:
- dev
- pro
networks:
dev:
driver: bridge
pro:
driver: bridge
【注意】:关闭docker中的所有容器,本机之前并未配置docker重启后容器自动启动。直接使用restart即可关闭docker中的所有容器systemctl restart docker
通过配置文件构建并启动 ```shell
-d:后台启动
docker-compose up -d
查看通过配置文件构建的容器启动状态
docker ps
![image.png](https://cdn.nlark.com/yuque/0/2021/png/12883990/1617636715352-6bcc0fa9-2378-4760-8cf1-8c8f3f6cacae.png#height=200&id=ANUO4&margin=%5Bobject%20Object%5D&name=image.png&originHeight=400&originWidth=1888&originalType=binary&ratio=1&size=77043&status=done&style=none&width=944)
4. 查看docker网络
```shell
# mycompose_dev/pro为本次创建的网络服务
docker network ls