YML配置文件的常用属性

本文涉及的产品
RDS MySQL DuckDB 分析主实例,集群系列 4核8GB
RDS MySQL DuckDB 分析主实例,基础系列 4核8GB
RDS AI 助手,专业版
简介: 本实验介绍了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

相关实践学习
自建数据库迁移到云数据库
本场景将引导您将网站的自建数据库平滑迁移至云数据库RDS。通过使用RDS,您可以获得稳定、可靠和安全的企业级数据库服务,可以更加专注于发展核心业务,无需过多担心数据库的管理和维护。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
相关文章
|
运维 监控 Java
nacos常见问题之获取配置文件的时候报错user not found如何解决
Nacos是阿里云开源的服务发现和配置管理平台,用于构建动态微服务应用架构;本汇总针对Nacos在实际应用中用户常遇到的问题进行了归纳和解答,旨在帮助开发者和运维人员高效解决使用Nacos时的各类疑难杂症。
2896 2
|
JavaScript 前端开发
VUE组件:如何在Vue中实现组件的动态引入?
VUE组件:如何在Vue中实现组件的动态引入?
2634 0
|
Web App开发 编解码 JavaScript
Flutter Web:图片相关及跨域问题
在flutter web上也可以使用Image这个widget来加载显示图片。但是涉及到网络图片的时候就可能会出现问题,现象是不显示图片,控制台报错:
2242 0
|
XML 存储 SQL
独立部署Xray反练平台——详细说明加举例xxe漏洞
xray 是一款功能强大的安全评估工具,由多名经验丰富的一线安全从业者呕心打造而成,主要特性有:检测速度快。发包速度快; 漏洞检测算法高效。支持范围广。大至 OWASP Top 10 通用漏洞检测,小至各种 CMS 框架 POC,均可以支持。代码质量高。编写代码的人员素质高, 通过 Code Review、单元测试、集成测试等多层验证来提高代码可靠性。高级可定制。通过配置文件暴露了引擎的各种参数,通过修改配置文件可以极大的客制化功能。安全无威胁。xray 定位为一款安全辅助评估工具,而不是攻击工具,内置的所有 payload 和 poc 均为无害化检查。
2326 0
独立部署Xray反练平台——详细说明加举例xxe漏洞
Squid 安装与配置
本文转载自:https://help.aliyun.com/knowledge_detail/41342.html Squid 介绍 Squid 是一个缓存 Internet 数据的软件,其接收用户的下载申请,并自动处理所下载的数据。
1891 0
|
安全 Linux
使用squid在阿里云服务器(centos7)上搭建自己的代理服务器
大部分公司的内网往往有各种网络限制,无法访问部分网站。所以弄个服务器来代理一下,翻个公司的内网还是很舒服的。在此,我记录的是用squid来完成的代理服务器。   安装 检测是否安装: # which squid /usr/bin/which: no squid in (/usr/local/sbin:/usr/local... 出现以上提示说明没有安装。
9057 0
|
Java 数据库连接 Maven
springBoot:项目建立&配置修改&yaml的使用&resource 文件夹(二)
本文档介绍了如何创建一个基于Maven的项目,并配置阿里云仓库、数据库连接、端口号、自定义启动横幅及多环境配置等。同时,详细说明了如何使用YAML格式进行配置,以及如何处理静态资源和模板文件。文档还涵盖了Spring Boot项目的`application.properties`和`application.yaml`文件的配置方法,包括设置数据库驱动、URL、用户名、密码等关键信息,以及如何通过配置文件管理不同环境下的应用设置。
1115 1
|
前端开发 Java Spring
请求映射掌握:探讨Spring MVC中@RequestMapping注解的妙用
请求映射掌握:探讨Spring MVC中@RequestMapping注解的妙用
517 1
请求映射掌握:探讨Spring MVC中@RequestMapping注解的妙用
|
XML 数据格式
yaml基本语法和yaml数据格式,ymal对象写法,数组写法
yaml基本语法和yaml数据格式,ymal对象写法,数组写法
|
前端开发 JavaScript API
网页自动提交Form表单的方法
在数字化时代,自动化任务如网页自动提交Form表单,能大幅提升效率。这涉及自动填写注册信息等场景。本文概述了多种实现方式:JavaScript可直接在前端自动填充并提交;Python结合Selenium模拟真实用户操作;AOKSend作为API工具发送表单数据;第三方工具如iMacros、AutoHotkey和Zapier提供非编程自动化选项。根据需求选择合适方法,可显著提升工作效能,减少重复性劳动。