YML配置文件的常用属性

简介: 本实验介绍了Docker Compose中YML配置文件的常用属性

YML配置文件的常用属性

1. 创建资源

开始实验之前,您需要先创建实验相关资源。

  1. 在实验室页面,单击创建资源
  2. (可选)在实验室页面左侧导航栏中,单击云产品资源列表,可查看本次实验资源相关信息(例如IP地址、子用户信息等)。

说明:资源创建过程需要3~5分钟视资源不同开通时间有所差异,ACK等资源开通时间较长。完成实验资源的创建后,您可以在云产品资源列表查看已创建的资源信息,例如:子用户名称、子用户密码、AK ID、AK Secret、资源中的项目名称等。

实验环境一旦开始创建则进入计时阶段,建议学员先基本了解实验具体的步骤、目的,真正开始做实验时再进行创建。

资源创建成功,可在左侧的资源卡片中查看相关资源信息以及RAM子账号信息

2. YML配置文件简介

在上一个小节中我们学习了Docker compose 的基本用法,相比较使用docker run命令行和参数启动容器,使用yml配置文件大步幅简化命令输入。在本实验中我们再来看一下docker_compose.yml文件的常见配置信息

  1. 环境准备

为了接下来的实验,首先我们安装docker compose插件。在安装成功后使用vi创建docker-compose.yml文件,在docker-compose.yml文件中加入下列内容。注意使用vim编辑器时:

  1. 需要先按i键进入编辑模式。
  2. 编辑完成之后按esc退出编辑模式。
  3. 然后按大写的ZZ保存并退出vim。

配置文件编写完毕后,我们通过docker compose来启动容器。

yum install -y docker-compose-plugin
vi docker-compose.yml
version: "3.9"
services:
    web:
       container_name: web
       image: "httpd:latest"
       ports:
          - "5000:80"
          - "6000:8000"
    db:
       container_name: db
       image: "mysql"
       volumes:
          - "mysql-vol:/var/lib/mysql"
       environment:
          MYSQL_ROOT_PASSWORD: "[MYSQL密码]"
volumes:
    mysql-vol: {}
docker compose up -d

  1. 配置文件基本讲解

在通过docker compose up启动容器之后,我们来看一下docker_comose.yml的配置文件结构。在docker_compose中,一个project可以包含多个配置文件中的内容,如果没有设置所有的资源都会创建在root这个project中,在project中serviecs字段中的每一个key表示一个serviec,每个service下又可以由一个或多个container,在service中的基本配置选项如下表。

container_name

等同于--name

image

容器镜像

volumes

等价于-v,类型为数组

ports

等价于-p,类型为数组

environment

等价于ie,类型为对象

需要注意的是,默认情况下docker compose会为每个project自动创建一个network,接下来创建的所有的容器都会连接到这个network,我们来验证容器的配置。

docker network ls
docker port web
docker inspect -f "{{json .Mounts}}"  db | jq

  1. 容器状态查询

我们还可以通过docker compose命令对容器服务的状态查询。和使用docker原生命令相比,docker compose只会对配置文件中包含的容器生效。并不需要具体指定容器名,降低了操作复杂性。

这里我们演示docker compose ps,docker compose top,docker compose images三个命令

docker compose ps
docker compose top
docker compose images

  1. 容器的删除

当我们需要结束容器的使用,我们可以使用docker compose down来结束和删除配置文件中的容器。

需要注意的时,该命令会停止并且销毁配置文件中描述的容器。同时容器停止后相应的网络等组件都会被销毁,类似于使用docker rm -f加docker network rm

docker compose down

3. YML的常用配置项目

在上一个小节中我们演示了docker  compose的主要配置和常用命令,接下来我们再来看一下docker  compose配置文件中的其他配置项目。yml中的一部分配置选项可以和docker  run中的命令行对应,这些属性主要包括在下表中,在本小节中我们来实验这些属性。

command

容器的启动命令

stdin_open

设置为true等价于-i参数

tty

设置为true等价于-t参数

networ_mode

网络模式

networks

容器连接的网络,类型为数组

  1. 编写配置文件。

在docker compose中默认使用docker-compose.yml配置文件, 如果我们想使用不同名称的配置文件,可以在docker compose后面添加-f参数指定yml文件。我们使用vi创建一个web.yml文件以演示配置选项。

创建之后,我们启动project,在启动时我们可以通过-p参数指定资源所在的Project,以避免资源橙色图,这里我们指定project为web。

vi web.yml
version: "3.9"
services:
    busybox:
        container_name: sh
        image: "busybox:latest"
        tty: true
        stdin_open: true
        networks:
            - "custom"
    python:
        container_name: web
        image: "python"
        network_mode: "host"
        command: "python -m http.server 8000"
networks:
    custom:
        name: "custom"
docker compose -f web.yml -p web up -d

  1. 创建Project并验证

web.yml创建成功后,我们来创建Project,需要注意的是在创建Proejct时,-f[配置文件名]参数需要放在up命令之前。在Proejct 创建之后我们来验证自定网络的创建和容器参数的指定。

docker inspect -f '{"Tty":{{.Config.Tty}},"OpenStdin":{{.Config.OpenStdin}}}' sh | jq
docker inspect -f "{{json .NetworkSettings.Networks}}" sh | jq

  1. 查看配置信息

当Project创建成功后使用docker compose convert命令,可以显示service中某个容器的的配置信息。我们可以看到显示的配置信息中,包括yml中指定的选项,也包括yml中没有指定的默认选项。

docker compose -f web.yml -p web convert busybox
docker compose -f web.yml -p web convert python

4. YML的其他配置项目

在本小节中我们再来看三个并不是和docker run 命令参数有对应关系的docker compose属性值的用法。

deploy.replicas

可以选择Service中容器的部署个数。

depends_on

可以选择Service启动的先后顺序

restart

设置Service的重启策略

  1. 容器个数

首先我们来看deploy.replicas,之前我们提到过在docker   compose中的层次结构为,project->service->container,这里面的service指的是不同的容器配置,而container是指可以为相同的配置建立多个容器实例。配置容器实例个数的属性就是deploy.replicas。我们使用vi创建一个replicas.yml文件以演示配置选项。

在编写配置文件时,我们要注意由于我们需要在相同的配置下创建多个容器,因此我们不能在配置中用container_name属性为容器指定一个固定的名字。因此我们需要删除此字段,由启动自动分配名字。

vi replicas.yml
version: "3.9"
services:
    busybox:
        image: "busybox:latest"
        tty: true
        stdin_open: true
        deploy:
            replicas: 3
docker compose -f replicas.yml -p replicas up -d
docker compose -f replicas.yml -p replicas ps

  1. 启动顺序

在容器启动时,如果不同service在启动时有互相依赖关系,比如redis缓存要先于web服务启动,这种情况下就可以使用depends_on来管理service的启动顺序。我们使用vi创建一个dependson.yml文件以演示启动顺序选项。会发现servie严格按照先后顺序进行了启动

vi dependson.yml
version: "3.9"
services:
    busybox-before:
        image: "busybox"
        tty: true
        stdin_open: true
    busybox-after:
        image: "busybox"
        tty: true
        stdin_open: true
        depends_on:
            - "busybox-before"
            - "busybox"
    busybox:
        image: "busybox"
        tty: true
        stdin_open: true
        depends_on:
            - "busybox-before"
docker compose -f dependson.yml -p dependson up -d

  1. 重启策略

在生产环境中,容器中服务难免会因为各种问题出现异常,错误,从而导致服务进程崩溃。一旦这种情况发生就会导致局部服务不可用,如果是关键服务出现问题,甚至会影响整个应用得稳定性。

因此在生产环境中,我们一般会配置使用restart属性。该属性可以根据值得不同设定容器得自动重启策略。常用得属性值包括:no不自动重启,always总是自动重启,on-failure错误退出时重启。

接下来我们启动一个busybox容器,在容器启动时执行sleep 10。这个命令表示命令行会在10秒后退出,以模拟容器服务出现错误。在project启动后等待超过10秒,然后再查看状态,会发现由于设置了always策略,容器会在退出后重新启动。

vi restart.yml
version: "3.9"
services:
    busybox-auto:
        container_name: busybox-auto
        image: "busybox"
        command: sleep 10
        restart: "always"
docker compose -f restart.yml -p restart up -d
[等待超过10秒]
docker compose -f restart.yml -p restart ps

5. Flask的build联动案例

在实际开发应用得过程中,我们往往不会直接使用原生容器进行部署,而是需要使用开发者自行build的镜像。这种情况下开发者部署应用时,需要先执行docker build构建镜像,然后再执行docker compose up来运行镜像。

除了这种方式之外,我们还可以在YML配置文件中使用build属性值,这种情况下docker compose在创建project之前会先执行docker build生成镜像,然后再创建容器。简化了开发者的部署工作。

本小节中我们就来通过一个Python语言得Flask框架来演示在开发过程中如何联动镜像得打包和部署。

  1. 环境准备

首先我们需要构建三个文件,分别是应用开发的源代码文件main.py制作镜像的打包文件Dockfile,和容器联动得配置文件build.yml。首先我们来构建main.py和Dockfile。

在main.py中我们通过Flask框架实现了一个简单得Http服务器。具体代码原理可以参考源码中得注释,在此不做过多得讲解。

mkdir app
vi app/main.py
# 导入Flask类
from flask import Flask 
# 创建app对象
app = Flask(__name__)
# 将对路径"/"得访问路由到函数index上
@app.route('/')
def index():
    return '网页首页\n'
# 将对路径"/Host"得访问路由到函数index上
@app.route('/host')
def host():
    return '访问Host路径\n'
# 启动app对象中得服务,并指导服务端口为8000
if __name__ == '__main__':
    app.run(host="0.0.0.0", port=8000)

接下来我们来编写Dockerfile,这里我们主要做几件事:首先通过pip安装Flask框架,然后将main.py源码文件复制到/app/目录下,接下来设置/app为工作目录,最后使用CMD设置容器得启动命令。

vi app/Dockerfile
FROM python
RUN pip install Flask
ADD main.py /app/main.py
WORKDIR /app/
CMD python main.py

  1. 编写配置文件

源代码文件和打包文件编辑完毕后,我们继续通过vi来编写配置文件build.yml。在配置文件中,我们使用build属性值代替image。如果在执行docker build时使用的是默认的打包配置文件,那么将build的属性值设置为Dockerfile文件所在目录即可。

如果需要指定打包文件名,则需要将build的属性值设置为对象。对象中包含contextdockerfile两个属性值,分别表示配置文件所在路径和配置文件名。

vi build.yml
version: "3.9"
services:
    app:
        build: app/
#       build: 
#           context: app/
#           dockerfile: Dockerfile
        ports: 
            - "8080:8000"
        restart: "always"
  1. 验证部署结果

文件编写完成后我们即可进行编译打包和project部署的联动,proejct部署成功后。我们通过docker compose ps命令进行查看,发现容器使用了自动打包的镜像build-app

最后我们使用curl访问8080端口映射,验证服务部署成功。

docker compose -f build.yml -p build up -d
docker compose -f build.yml -p build ps
curl 127.0.0.1:8080
curl 127.0.0.1:8080/host

实验地址:https://developer.aliyun.com/adc/scenario/97df5c50cb854dc89f5f64c1aa9c2eeb

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
相关文章
|
Web App开发 编解码 JavaScript
Flutter Web:图片相关及跨域问题
在flutter web上也可以使用Image这个widget来加载显示图片。但是涉及到网络图片的时候就可能会出现问题,现象是不显示图片,控制台报错:
2335 0
|
2月前
|
人工智能 弹性计算 对象存储
阿里云个人、企业、学生用户AI算力资源补贴类型及申请条件简介
阿里云面向学生和教师、企业及个人OPC等群体提供多层次AI算力补贴。学生可领300元无门槛券,教师享公共云5折优惠(年上限40万元);新迁企业可申领AI算力资源补贴;OPC用户享"先用后返"Token补贴,最高100万元。各群体需完成实名认证并提交相应材料,补贴设有效期及用途限制。
|
自然语言处理 API C++
阿里通义推出SmartVscode插件,自然语言控制VS Code,轻松开发应用,核心技术开源!
SmartVscode插件深度解析:自然语言控制VS Code的革命性工具及其开源框架App-Controller
2730 1
阿里通义推出SmartVscode插件,自然语言控制VS Code,轻松开发应用,核心技术开源!
|
搜索推荐
WordPress文章配图插件
文章配图插件可自动为文章创建缩略图并添加图片,支持背景颜色、本地图片和Pixabay图片三种配图方式。功能包括设置缩略图参数、添加标题文字、虚化背景、生成特色图片等。注意事项涵盖主题兼容性、图片来源限制及文件管理。更新后新增多图添加、Pixabay搜索配图等功能,提升使用灵活性与内容丰富度。
514 9
|
Linux 数据库 iOS开发
CrossOver 25.1.0 for macOS & Linux - 领先的 Wine 解决方案
CrossOver 25.1.0 for macOS & Linux - 领先的 Wine 解决方案
790 0
|
负载均衡 Java API
Java一分钟之-Spring Cloud OpenFeign:声明式服务调用
【6月更文挑战第9天】Spring Cloud OpenFeign是声明式服务调用库,简化了微服务间调用。通过动态代理,它允许开发者用Java接口调用HTTP服务,支持服务发现、负载均衡。本文介绍了OpenFeign的基本概念,展示了如何添加依赖、开启客户端和定义服务接口。还讨论了接口调用失败、超时重试和日志配置等问题及其解决方案,并提供了自定义Feign配置的代码示例。通过学习,读者可以更好地在微服务架构中使用OpenFeign进行服务通信。
887 4
|
编解码 Java 计算机视觉
探索 JavaCV:开启计算机视觉与多媒体处理新世界
JavaCV 是基于 OpenCV 和 FFmpeg 的 Java 接口库,助力开发者实现视频处理、图像分析等功能。支持多种音视频格式编解码、GPU 加速及跨平台运行,适用于直播录制、摄像头捕获、美颜相机等场景,是多媒体开发的利器。
1042 1
|
SQL 关系型数据库 Go
Golang ORM框架介绍及比较
Golang ORM框架介绍及比较
|
前端开发 JavaScript API
网页自动提交Form表单的方法
在数字化时代,自动化任务如网页自动提交Form表单,能大幅提升效率。这涉及自动填写注册信息等场景。本文概述了多种实现方式:JavaScript可直接在前端自动填充并提交;Python结合Selenium模拟真实用户操作;AOKSend作为API工具发送表单数据;第三方工具如iMacros、AutoHotkey和Zapier提供非编程自动化选项。根据需求选择合适方法,可显著提升工作效能,减少重复性劳动。
|
人工智能 监控 测试技术