Docker-Compose 入门到实战详尽笔记

使用过 Docker 的小伙伴们都知道,启动 Docker 时一般会附带很多的启动参数,如 -v 指定挂载目录,-p 指定端口等等。除此之外,很多时候我们的业务系统中一般都会有几个 Docker 组合运行,容器间网络通信,容器的启动顺序等有明确的要求。基于这些问题,Docker-Compose 技术诞生。

本文将从基础到实战举例,共计7个小节,前面5小节讲解基础,后面2个小节则时以实战为主,详细讲解 Docker-Compose 的使用。主要讲解如下内容:

  1. Docker-Compose 和 Docker 的联系
  2. 安装 Docker-Compose
  3. YAML 语法概述
  4. Docker-Compose 语法总结
  5. Docker-Compose 常用命令
  6. 实战演练一:Docker-Compose 部署伪分布式的 Elasticsearch
  7. 实战演练二:Docker-Compose 部署 Kafka(Zookeeper)

如果基础好一点的同学,可以直接跳到第6章开始学习实战环节,有问题再倒回来查看基础。
阅读并实践本篇文章内容,大致需要30分钟左右。

Docker-Compose 和 Docker 的联系

相信你们在使用 Docker 时都遇到过以下两个场景:

  1. Docker 启动要指定参数,例如 -p 指定端口,-v 挂载目录等,当下次启动时,由于参数太多,忘记启动参数。
  2. 多个 Docker 容器启动时有依赖关系,不确定启动的先后顺序。

而 Docker-Compose 的出现就是为了解决上述两个问题,通过编写 yaml 文件定义 Docker 启动参数和编排容器。

安装 Docker-Compose

Docker-Compose 支持目前主流平台的安装,如图:

参考连接:Install Docker Compose | Docker Documentation

小伙伴们根据自己的情况安装对应的版本即可,我这里以 Ubuntu 16.04 环境作为演示,也可以按照官网所述的安装步骤,也可以直接一句命令即可(当然前提时已经安装 Docker ):

apt install docker-compose

安装完毕后 docker-compose --version 查看版本

每次输入 docker-compose 这个命令确实比较长,我这里教搭建一个给 docker-compose 取别名的方式,操作如下:

vi ~/.bashrc
alias dc='docker-compose'
source ~/.bashrc

上述操作的原理就是在系统的环境变量里面为某个指令添加别名,执行完上述三条命令,docker-compose 使用 dc 就可以调用了,如图:

YAML 语法概述

Docker-Compose 容器编排的主要利用到 YAML 语法。学习 YAML 语法可以和 JSON 类比学习,例如 JSON 中有对象、数组等,利用 YAML 语法均可以表示出来。详细的内容推荐看 阮一峰的 《YAML 语言教程》

Docker-Compose 语法总结

前面的铺垫打好之后,这一章我们开始学习 Docker-Compose 语法,如果熟悉 Docker 语法的小伙伴,这一章将会学得很快。Docker-Compose 主要目的就是用作容器的编排,编排容器用的是 YAML 语法,编排文件内容都写在 docker-compose.yml 文件中。下面我们根据 Docker-Compose 的编排常用的语法依次做讲解,部分不常用的就小伙伴们根据自己的实际需求去官方网站查询即可,Docker 支持的操作,Docker-Compose 是肯定支持的。

version

每个 docker-compose.yml 文件第一个字段就是 version,version 字段是表明使用那个版本的 Compose ,Compose 有如下的版本,目前的最新版是 3.7,此外还有1、2、2.x、3.x,不同版本的 compose 支持了不同的 Docker 版本。

compose 与 Docker 的版本对应关系表:

除了表中显示的Compose文件格式版本外,Compose本身也处于发布计划中,如Compose版本中所示,但是文件格式版本不一定会随每个版本而增加。例如,Compose文件格式3.0最初是在Compose版本1.10.0中引入的,并在随后的版本中逐渐版本化。

语法结构如下:

version: "2"
version: "3.7"
#可以简写为
version: "3"

image

services:
  web:
    image: hello-world

在 services 标签下的第二级标签是 web,这个名字是用户自己自定义,它就是服务名称。
image 则是指定服务的镜像名称或镜像 ID。如果镜像在本地不存在,Compose 将会尝试拉取这个镜像。

build

服务除了可以基于指定的镜像,还可以基于一份 Dockerfile,在使用 up 启动之时执行构建任务,这个构建标签就是 build,它可以指定 Dockerfile 所在文件夹的路径。Compose 将会利用它自动构建这个镜像,然后使用这个镜像启动服务容器。

build: /path/to/build/dir

也可以是相对路径,只要上下文确定就可以读取到 Dockerfile

build: ./dir

设定上下文根目录,然后以该目录为准指定 Dockerfile

build:
  context: ../
  dockerfile: path/of/Dockerfile

注意 build 都是一个目录,如果你要指定 Dockerfile 文件需要在 build 标签的子级标签中使用 dockerfile 标签指定,如上面的例子。
如果你同时指定了 image 和 build 两个标签,那么 Compose 会构建镜像并且把镜像命名为 image 后面的那个名字。


                
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值