赞
踩
本文首发自「慕课网」(www.imooc.com),想了解更多IT干货内容,程序员圈内热闻,欢迎关注"慕课网"或慕课网公众号!
作者:暮闲 | 慕课网讲师
使用过 Docker 的小伙伴们都知道,启动 Docker 时一般会附带很多的启动参数,如 -v 指定挂载目录,-p 指定端口等等。除此之外,很多时候我们的业务系统中一般都会有几个 Docker 组合运行,容器间网络通信,容器的启动顺序等有明确的要求。基于这些问题,Docker-Compose 技术诞生。
本文将从基础到实战举例,共计7个部分,前面5个部分讲解基础,后面2个部分则时以实战为主,详细讲解 Docker-Compose 的使用。主要讲解如下内容:
如果基础好一点的同学,可以直接跳到第6部分开始学习实战环节,有问题再倒回来查看基础。
阅读并实践本篇文章内容,大致需要30分钟左右。
相信你们在使用 Docker 时都遇到过以下两个场景:
而 Docker-Compose 的出现就是为了解决上述两个问题,通过编写 yaml 文件定义 Docker 启动参数和编排容器。
Docker-Compose 支持目前主流平台的安装,如图:
小伙伴们根据自己的情况安装对应的版本即可,我这里以 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 就可以调用了,如图:
Docker-Compose 容器编排的主要利用到 YAML 语法。学习 YAML 语法可以和 JSON 类比学习,例如 JSON 中有对象、数组等,利用 YAML 语法均可以表示出来。详细的内容推荐看阮一峰的《YAML语言教程》。
前面的铺垫打好之后,这一章我们开始学习 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 后面的那个名字。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。