Compose 简介
通过前面几篇文章的学习 , 我们可以通过 Dockerfile 文件让用户很方便的定义一个单独的应用容器 。然而 , 在日常工作中 , 经常会碰到需要多个容器相互配合来完成某项任务的情况 , 例如之前我给大家讲过的《Docker 搭建 redis Cluster 集群环境 》 , 或者开发一个 Web 应用 , 除了 Web 服务容器本身 , 还需要数据库服务容器、缓存容器 , 甚至还包括负载均衡容器等等 。
Docker Compose 恰好满足了这样的需求 , 它是用于定义和运行多容器 Docker 应用程序的工具 。通过 Compose , 您可以使用 YAML 文件来配置应用程序所需要的服务 。然后使用一个命令 , 就可以通过 YAML 配置文件创建并启动所有服务 。
Docker Compose 项目是 Docker 官方的开源项目 , 来源于之前的 Fig 项目 , 使用 Python 语言编写 。负责实现对 Docker 容器集群的快速编排 。项目地址为:https://github.com/docker/compose/releases
Docker Compose 使用的三个步骤为:
- 使用 Dockerfile 文件定义应用程序的环境;
- 使用 docker-compose.yml 文件定义构成应用程序的服务 , 这样它们可以在隔离环境中一起运行;
- 最后 , 执行 docker-compose up 命令来创建并启动所有服务 。
Compose 安装
下载
官方文档:https://docs.docker.com/compose/install/
您可以在 macOS , windows 和 linux 上运行 Compose 。本文演示基于 Linux 环境的安装 。我们可以使用 curl 命令从 Github 下载它的二进制文件来使用 , 运行以下命令下载 Docker Compose 的当前稳定版本 。或者从网页下载后上传至服务器指定目录 /usr/local/bin 也行 。
sudo curl -L "https://github.com/docker/compose/releases/download/1.26.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
因为 Docker Compose 存放在 GitHub , 可能不太稳定 。你也可以通过执行下面的命令 , 高速安装 Compose 。该加速通道由 DaoCloud 提供:http://get.daocloud.io/#install-compose
sudo curl -L https://get.daocloud.io/docker/compose/releases/download/1.26.2/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
您可以通过修改 URL 中的版本 , 自定义您所需要的版本文件 。授权
安装完成以后 , 查看指定目录 , 发现该文件没有可执行权限 , 进行授权操作 。
文章插图
# 将可执行权限应用于该二进制文件 sudo chmod +x /usr/local/bin/docker-compose
文章插图
测试
docker-compose --version
文章插图
卸载
卸载 Compose 非常简单 , 直接删除二进制文件即可 。
sudo rm /usr/local/bin/docker-compose
docker-compose.yml 文件详解
概念
官方文档:https://docs.docker.com/compose/compose-file/
Docker Compose 允许用户通过 docker-compose.yml 文件(YAML 格式)来定义一组相关联的容器为一个工程(project) 。一个工程包含多个服务(service) , 每个服务中定义了创建容器时所需的镜像、参数、依赖等 。
工程名若无特殊指定 , 即为 docker-compose.yml 文件所在目录的名称 。Docker Compose 模板文件我们需要关注的顶级配置有 version、services、networks、volumes 几个部分 , 除 version 外 , 其他几个顶级配置下还有很多下级配置 , 后面也会详细给大家介绍 , 先来看看这几个顶级配置都什么意思:
- version:描述 Compose 文件的版本信息 , 当前最新版本为 3.8 , 对应的 Docker 版本为 19.03.0+;
- services:定义服务 , 可以多个 , 每个服务中定义了创建容器时所需的镜像、参数、依赖等;
- networkds:定义网络 , 可以多个 , 根据 DNS server 让相同网络中的容器可以直接通过容器名称进行通信;
- volumes:数据卷 , 用于实现目录挂载 。
案例
在配置文件中 , 所有的容器通过 services 来定义 , 然后使用 docker-compose 脚本来启动 , 停止和重启容器 , 非常适合多个容器组合使用进行开发的场景 。我们先从一个简单的 Compose 案例学起 。
推荐阅读
- Docker-For-Pentest的渗透测试镜像推荐
- Docker 安装es和kibana踩坑记录
- Calico网络架构
- linux操作系统上安装docker
- docker 镜像的使用
- 用docker搭建 drogon 环境 世界最快WEB
- 用这个Python的Docker正式版镜像,你也能成容器高玩
- k8s版本平滑升级
- 如何按照条件向Spring容器中注册bean?这次我懂了
- Docker 的前世今生