preload-image

Docker Compose编排工具

Docker Compose介绍

Compose 项⽬是 Docker 官⽅的开源项⽬,负责实现对 Docker 容器集群的快速编排。从功能上看,跟 OpenStack 中的 Heat 十分类似。
其代码⽬前在https://github.com/docker/compose上开源

Compose 定位是 (定义和运⾏多个 Docker 容器的应⽤),其前身是开源项⽬ Fig。  使⽤⼀个 Dockerfile 模板⽂件,可以让⽤户很⽅便的定义⼀个单独的应⽤容器。 然⽽,在⽇常⼯作中,经常会碰到需要多个容器相互配合来完成某项任务的情况。 例如要实现⼀个 Web 项⽬,除了 Web 服务容器本身,往往还需要再加上后端的数据库服务容器,甚⾄还包括负载均衡容器等。  Compose 恰好满⾜了这样的需求。 它允许⽤户通过⼀个单独的 docker-compose.yml 模板⽂件(YAML 格式)来定义⼀组相关联的应⽤容器为⼀个项⽬(project)。 

Compose 中有两个重要的概念:

  • 服务 ( service ):一个应用的容器,实际上可以包括若干运行相同镜像的容器实例。
  • 项目 ( project ):由一组关联的应用容器组成的一个完整业务单元,在 docker-compose.yml 文件中定义。

Compose 的默认管理对象是项目,通过子命令对项目中的一组容器进行便捷地生命周期管理。
Compose 项目由 Python 编写,实现上调用了 Docker 服务提供的 API 来对容器进⾏管理。
只要所操作的平台⽀持 Docker API,就可以在其上利用 Compose 来进⾏编排管理。

安装Docker Compose

二进制安装Docker Compose

# 下载安装Docker Compose [root@docker01 ~]# curl -L https://github.com/docker/compose/releases/download/1.27.4/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose  # 添加执行权限 [root@docker01 ~]# chmod +x /usr/local/bin/docker-compose   # 检查安装版本 [root@docker01 ~]# docker-compose --version  docker-compose version 1.27.4, build 40524192  # bash命令补全 [root@docker01 ~]# curl -L https://raw.githubusercontent.com/docker/compose/1.25.5/contrib/completion/bash/er-compose > /etc/bash_completion.d/docker-compose 

卸载Docker Compose

  • 如果是⼆进制包⽅式安装的,删除⼆进制⽂件即可。
rm -rf /usr/local/bin/docker-compose 

Compose 可以通过 Python 的包管理⼯具 pip 进⾏安装,也可以直接下载编译好的⼆进制⽂件使⽤,甚⾄能够直接在 Docker 容器中运⾏。
Docker Desktop for Mac/Windows ⾃带 docker-compose ⼆进制⽂件,安装 Docker 之后可以直接使⽤。

# 使用pip安装compose直接下载即可 pip install -U docker-compose 

Docker Compose使用

使用compose必须先安装好docker!!!

模板⽂件是使⽤ Compose 的核⼼,涉及到的指令关键字也⽐较多。
默认的模板文件名称为:docker-compose.yml ,格式为 YAML 格式。

# 编写 docker-compose.yml 模板文件 [root@docker01 ~]# vim docker-compose.yaml version: "3.0" services:   mysqldb:     image: mysql:5.7.19     container_name: mysql     ports:       - "3306:3306"     volumes:       - /root/mysql/conf:/etc/mysql/conf.d       - /root/mysql/logs:/logs       - /root/mysql/data:/var/lib/mysql     environment:       MYSQL_ROOT_PASSWORD: root     networks:       - ems     depends_on:       - redis      redis:     image: redis:4.0.14     container_name: redis     ports:       - "6379:6379"     networks:       - ems     volumes:       - /root/redis/data:/data     command: redis-server   networks:   ems:  # 前台启动⼀组服务 [root@docker01 ~]# docker-compose up # 后台启动⼀组服务 [root@docker01 ~]# docker-compose up -d  # 查看正在运行的容器 [root@docker01 ~]# docker ps CONTAINER ID   IMAGE          COMMAND                  CREATED         STATUS         PORTS                                       NAMES 4020d471ec9d   mysql:5.7.19   "docker-entrypoint.s…"   3 minutes ago   Up 3 minutes   0.0.0.0:3306->3306/tcp, :::3306->3306/tcp   mysql 34a0b30c5ac6   redis:4.0.14   "docker-entrypoint.s…"   3 minutes ago   Up 3 minutes   0.0.0.0:6379->6379/tcp, :::6379->6379/tcp   redis 

Back-To-Top