Docker Compose入门
1. 创建资源
开始实验之前,您需要先创建实验相关资源。
- 在实验室页面,单击创建资源。
- (可选)在实验室页面左侧导航栏中,单击云产品资源列表,可查看本次实验资源相关信息(例如IP地址、子用户信息等)。
说明:资源创建过程需要3~5分钟(视资源不同开通时间有所差异,ACK等资源开通时间较长)。完成实验资源的创建后,您可以在云产品资源列表查看已创建的资源信息,例如:子用户名称、子用户密码、AK ID、AK Secret、资源中的项目名称等。
实验环境一旦开始创建则进入计时阶段,建议学员先基本了解实验具体的步骤、目的,真正开始做实验时再进行创建。
资源创建成功,可在左侧的资源卡片中查看相关资源信息以及RAM子账号信息
2. Docker Compose的安装
在之前的实验中,我们在创建和管理容器的时候,都是用的是docker的命令行,但是随着docker run参数的增多,命令行的长度会越来越长。再加上复杂的服务往往由多个不同的容器共同组成,这样在创建一个完整的服务的时候,就会输入多条超长的命令。这时候我们就可以考虑使用docker compose。
docker compose 是一个用go语言开发的docker扩展程序,通过docker compose我可以使用配置文件的方式来同时管理多个容器。接下来我们先来学习docker compose的安装。
- 插件安装(推荐)
docker compose的安装有两种方式,分别为作为docker插件和单独应用。在centos或者redhat系统中,我们可以通过yum以插件的方式安装docker compose。这种方式在安装之后会将docker compose作为docker插件进行运行。我们可以通过docker compose命令进行调用。
yum install -y docker-compose-plugin docker compose version
- 单独应用安装【两种任选其一即可】
另一种方式是直接下载安装包安装,这种方式将docker compose安装为独立的应用,注意此步骤会使用github数据源安装,如果速度较慢,可以省略。这种方式在安装之后使用docker-compose命令进行运行。
curl -SL https://github.com/docker/compose/releases/download/v2.5.0/docker-compose-linux-x86_64 -o /usr/local/bin/docker-compose chmod +x /usr/local/bin/docker-compose docker-compose version
3. YML到JSON的转化工具
YML文件是一种适合人类阅读的配置文件格式,这种文件格式能够表示的数据结构和JSON格式配置文件类似。为了便于我们学习,我们先来制作一个YML和JSON的互相转换工具,以便于理解YML的格式。
- 创建转换镜像
我们基于python中的yaml和json模块来实现解析功能。首先我们来创建Dockerfile,在镜像中首先通过pip install安装pyyaml模块。接下来再添加两条py格式的脚本2json.py和2yml.py。我们使用vi来编辑Dockerfile,注意使用vim编辑器时:
- 需要先按i键进入编辑模式。
- 编辑完成之后按esc退出编辑模式。
- 然后按大写的ZZ保存并退出vim。
vi Dockerfile
FROM python:latest RUN pip install pyyaml RUN echo "import yaml, json, sys\n\ print(json.dumps(yaml.safe_load(sys.stdin.read()), indent=4))" > 2json.py RUN echo "import yaml, json, sys\n\ print(yaml.safe_dump(json.load(sys.stdin), sort_keys=False))" > 2yml.py
Dockerfile编写好之后,我们生成容器镜像
docker build -t yml/py . docker images
- YML转化为JSON
接下来我们使用刚才创建好的镜像,将yml文件转化为json格式。首先我们创建一个最简单的YML文件demo.yml。内容为id: '10'。
接下来在这里我们在执行docker run创建容器时使用--rm参数。该参数创建的容器在退出后会自动被删除,一般用于执行一次性任务的容器的创建。同时在命令中使用了< 重定向符号,将宿主机中的文件作为参数传递给容器中。
echo id: '10' > demo.yml docker run -i --rm yml/py python 2json.py < demo.yml
- JSON转化为YML
然后我们再来尝试将JSON格式文件转化为YML格式。首先创建一个简单的JSON文件,然后使用下面命令执行容器中的2yml.py即可。
echo \{\"name\":\"aliyun\",\"age\":100} > demo.json docker run -i --rm yml/py python 2yml.py < demo.json
4. YML格式配置文件
在docker compose安装完毕后,我们需要编写YML格式的配置文件配合该工具进行使用。在本小节中我们先来学习YML格式配置文件的用法。
YML文件中包括了纯量,Key/Value对象,数组三种形式。但是和JSON使用{}表示层次关系不同的是,YML通过行前的空格来表明内容之间的层次关系。
- YML的对象
接下来我们先来看YML中的第一种数据结构对象。对象是由多个Key/Value属性对对组成,属性对的格式为key: value。注意和JSON不同的是,一行中只包含一个属性对。
如果属性对的Value值为对象或者数组时,Value的内容需要新起一行,同时新起的一行要比上一行更多的空格(一般使用4个空格)缩进来表示。
接下来我们使用vi构建一个demo.yml文件来演示对象结构,并且转化成JSON结构和YML结构进行对比。注意使用vi编辑器时:
- 需要先按i键进入编辑模式。
- 编辑完成之后按esc退出编辑模式。
- 然后按大写的ZZ保存并退出vim。
vi demo1.yml
name: "aliyun" attr: age: 10 addr: "HANGZHOU"
cat demo1.yml docker run -i --rm yml/py python 2json.py < demo1.yml
- YML中的纯量
纯量是指对象的Value或者数组中不可分割的量,换句说话就是简单属性类型。YML的纯量包括:字符串,数字,布尔,日期,时间等类型。接下来我们编辑demo.yml来做演示。需要注意的是python默认的JSON编码模块不支持日期时间。因此我们使用# 注释日期时间属性对。
vi demo2.yml
string: "aliyun" number1: 10 number2: 10.01 boolean: true # datatime: 2000-01-01 23:59:59
cat demo2.yml docker run -i --rm yml/py python 2json.py < demo2.yml
- YML中的数组
YML中的数组不需要前后缀,只需要将数组中的元素前加入- 即可,一行中只包含一个元素。
vi demo3.yml
scores: - 100 - 90.5 - 78
cat demo3.yml docker run -i --rm yml/py python 2json.py < demo3.yml
5. Docker Compose快速上手
- 编写配置文件
docker compose使用YML格式的配置文件代替docker run命令的各种参数,配置文件默认名称为docker-compose.yml。接下来我们使用vi构建该文件,注意使用vim编辑器时:
- 需要先按i键进入编辑模式。
- 编辑完成之后按esc退出编辑模式。
- 然后按大写的ZZ保存并退出vim。
vi docker-compose.yml
version: "3.9" services: busy: container_name: busy1 image: "busybox:latest" stdin_open: true tty: true
- 启动容器
配置文件编写完成之后,我们就可以使用docker compose up来启动配置文件中描述的容器。一般在执行docker compose up时会加入-d参数,其功能类似于docker run中的-d,表示容器在后台运行。
docker compose up -d
- 验证容器启动
命令执行成功后,我们使用docker ps查看,会发现容器已经启动。相比较使用复杂的docker run命令,使用docker compose的方式管理容器,命令简单统一。
docker ps
实验地址:https://developer.aliyun.com/adc/scenario/3043989082784568b6e2fee9d0881cab