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 安装服务

  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

  1. ![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)
  2. <a name="GvdVX"></a>
  3. ### 3.2 查看docker-compose版本
  4. ```shell
  5. docker-compose -version

image.png


4 卸载

  1. 删除文件即可
    1. rm -rf docker-compose

5 常用命令

5.1 常用命令格式

【常用命令】:请进入这个的文档中查看 点击进入常用命令讲解

  1. compose命令的基本的使用格式
    1. 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 打印版本并退出

      【帮助】:

      1. 通过docker-compose —help|-h 来查看compose基本命令用法
      2. 通过执行docker-compose [COMMAND] —help或者docker-compose —help [COMMAND]查看具体格式

6、模板文件

6.1 模板文件格式

  1. 模板文件是使用compose的核心,涉及的指令关键字也比较多,大部分指令与docker run相关参数的含义都是类似的。默认的模板文件名称为docker-compose.yml,格式为YAML格式 ```yaml version: “2” service: web: images: nginx ports:
    1. - "8080:80"
    volumes:
    1. - /usr/local/abc:/usr/local/cbc

    volumes:

networks:

  1. Docker Compose的模板主要分为3个区域
  2. - **services**:服务,在它下面可以定义应用需要的一些服务,每个服务都有自己的名字、使用的镜像、挂载的数据卷、所属的网络、依赖那些其他服务等等
  3. - **volumes**:数据卷,在它下面可以定义的数据卷(名字等等),然后挂载到不服务下去使用
  4. - **networks**:应用的网络,在它下面可以定义应用的名字、使用的网络类型等等
  5. <a name="vulye"></a>
  6. ### 6.2 常用模板命令
  7. | **指令** | **功能** |
  8. | --- | --- |
  9. | build | 指定服务镜像Dockerfile所在路径 |
  10. | cap_addcap_drop | 指定容器的内核能力(capacity)分配 |
  11. | command | 覆盖容器启动后默认执行的命令 |
  12. | cgroup_parent | 指定父cgroup组,意味着将基础该组的资源限制 |
  13. | container_name | 指定容器名称,默认将会使用项目名称、服务名称、序号这样的格式 |
  14. | devices | 指定设置映射关系 |
  15. | dns | 自定义DNS服务器。可以是一个值,也可以是一个列表 |
  16. | dns_search | 配置DNS搜索域。可以是一个值,也可以是一个列表 |
  17. | dockerfile | 指定额外编译镜像的Dockerfile文件,可以通过该指令来指定 |
  18. | env_file | 从文件中获取环境变量,可以为单独的文件路径或列表 |
  19. | environment | 设置环境变量,可以使用数组或字典两种格式 |
  20. | expose | 暴力端口 |
  21. | external_links | 连接到docker-compose.yml外部的容器,甚至可以是非compose管理的外部容器 |
  22. | extra_hosts | 指定额外的host名称映射信息 |
  23. | image | 指定服务镜像Dockerfile所在路径 |
  24. | links | 连接到其他服务中的容器 |
  25. | log_driver | 指定日志驱动类型,类似于Docker中的-log-driver参数。目前支持三种日志驱动类型:log_driver:"json-file"log_driver:"syslog"log_driver:"none" |
  26. | log_opt | 日志驱动的相关参数 |
  27. | net | 设置网络模式。参数类似于docker clinet的-net参数一样 |
  28. | pid | 跟主机系统共享进程命名空间。打开该选项的容器之间,以及容器和宿主机系统之间可以通过进程ID来相互访问和操作 |
  29. | port | 暴露端口信息 |
  30. | security_opt | 指定容器模板标签(label)机制的默认属性(如用户、角色、类型、级别等) |
  31. | ulimits | 指定容器的ulimits限制值 |
  32. | volumes | 数据卷锁挂载路径设置。可以设置宿主机路径(HOST:CONTAINER 或加上访问模式(HOST:CONTAINER:ro |
  33. <a name="6SrFW"></a>
  34. ### 6.3 模板文件实现启动多个容器
  35. docker-compose可以实现一次启动多个容器,通过配置docker-compose模板文件(docker-compose.yml),在这个配置文件中去配置各个容器及其相关的依赖
  36. 1. 编写模板文件(同时启动TomcatMySQLredis容器)
  37. ```shell
  38. # 创建文件夹
  39. mkdir -p /usr/local/mycompose
  40. # 进入文件夹
  41. cd /usr/local/mycompose
  42. # 创建docker-compose.yml
  43. vi docker-compose.yml
  1. 编写模板配置文件(模板文件所在的目录,docker-compose.yml)

    1. version: '3'
    2. services:
    3. redis1:
    4. image: redis:6.0.10
    5. ports:
    6. - "7000:6379"
    7. container_name: "redis1"
    8. networks:
    9. - dev
    10. mysql1:
    11. image: mysql:8.0.21
    12. environment:
    13. MYSQL_ROOT_PASSWORD: "root"
    14. ports:
    15. - "3316:3306"
    16. container_name: "mysql1"
    17. networks:
    18. - dev
    19. web1:
    20. image: tomcat
    21. ports:
    22. - "8080:8080"
    23. container_name: "web1"
    24. networks:
    25. - dev
    26. - pro
    27. networks:
    28. dev:
    29. driver: bridge
    30. pro:
    31. driver: bridge

    Docker Compose 安装 - 图2
    【注意】:关闭docker中的所有容器,本机之前并未配置docker重启后容器自动启动。直接使用restart即可关闭docker中的所有容器

    1. systemctl restart docker
  2. 通过配置文件构建并启动 ```shell

    -d:后台启动

    docker-compose up -d

查看通过配置文件构建的容器启动状态

docker ps

  1. ![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)
  2. 4. 查看docker网络
  3. ```shell
  4. # mycompose_dev/pro为本次创建的网络服务
  5. docker network ls

image.png

点击返回 Docker 20.10.5 安装(Centos7)