Docker五部曲之四:Docker Compose

文章目录

  • 前言
  • Compose应用程序模型
  • Compose规范
    • 顶层属性
      • service
      • network
      • volumes
      • configs
      • secrets
    • 环境变量
      • .env文件
      • environment属性
      • 主机shell中的环境变量
    • Profiles(剖面)
      • 启动剖面
      • 自动启动剖面和依赖项解析
    • 多compose.yml文件共享与扩展
    • 构建规范
      • 构建属性
    • 部署规范
    • 开发规范
  • Compose指令

前言

本文翻译自官方文档。

Compose应用程序模型

Compose是一个用于定义和运行多容器Docker应用程序的工具。使用Compose,您可以通过compose.yml文件来配置应用程序的服务,然后,使用一个命令,从配置中创建并启动所有服务。compose.yml文件的编写规范由Compose规范定义。Compose规范允许您定义与平台无关的基于容器的应用程序。这样的应用程序被设计为一组容器,这些容器必须与足够的共享资源和通信通道一起运行。

  • 服务:应用程序的组件被定义为服务。服务是一个抽象概念,通过一次或多次运行相同的容器镜像和配置在平台上实现。
  • 网络:服务通过网络相互通信。在Compose规范中,网络是一个平台功能抽象,用于在连接在一起的服务中的容器之间建立IP路由
  • 卷:服务将持久数据存储和共享到卷中。规范将这种持久化数据描述为具有全局选项的高级文件系统挂载。实际的特定于平台的实现细节被分组到卷定义中,并且可能部分地在某些平台上实现。
  • 配置:有些服务需要依赖于运行时或平台的配置数据。为此,规范定义了一个专用的配置概念。从服务容器的角度来看,配置与卷类似,因为它们是挂载到容器中的文件。但实际的定义涉及不同的平台资源和服务,这些资源和服务是由这种类型抽象出来的。
  • 项目:项目是应用程序规范在平台上的单独部署。使用顶级名称属性设置的项目名称用于将资源分组在一起,并将它们与其他应用程序或具有不同参数的相同Compose指定应用程序的其他安装隔离开来。

在这里插入图片描述

Compose规范

顶层属性

顶级属性是由规范定义的,用于向后兼容。它只是提供信息。

service

  • build:指定用于从源创建容器镜像的构建配置,请看下文构建规范。
  • image:指定要从哪个镜像启动容器。
    image: redisimage: redis:5image: redis@sha256:0ed5d5928d4737458944eb604cc8509e245c3e19d02ad83935398bc4b991aac7image: library/redisimage: docker.io/library/redisimage: my_private.registry:5000/redis
  • command:用于覆盖容器镜像声明的默认命令
command: bundle exec thin -p 3000
  • configs:见下文configs
  • container_name:指定自定义容器名称的字符串,如果Compose文件指定了container_name,则Compose不会将服务扩展到一个容器之外。
  • depends_on:表示服务之间的启动和关闭依赖关系。
services:web:build: .depends_on:- db- redisredis:image: redisdb:image: postgres
  • deploy:见下文部署规范
  • develop:见下文开发规范
  • entrypoint:声明了服务容器的默认入口点。这将覆盖服务的Dockerfile中的ENTRYPOINT指令。
entrypoint: /code/entrypoint.sh
  • env_file:见下文环境变量
  • environment:见下文环境变量
  • extends:见下文多compose.yml文件共享与扩展
  • ports:公开容器端口
ports:- "3000"- "3000-3005"- "8000:8000"- "9090-9091:8080-8081"- "49100:22"- "8000-9000:80"- "127.0.0.1:8001:8001"- "127.0.0.1:5000-5010:5000-5010"- "6060:6060/udp"
  • profiles:见下文Profiles
  • restart:定义平台在容器终止时应用的策略
    restart: "no"restart: alwaysrestart: on-failurerestart: unless-stopped
  • volumes:定义可由服务容器访问的挂载主机路径或命名卷
services:backend:image: example/backendvolumes:- type: volumesource: db-datatarget: /datavolume:nocopy: true- type: bindsource: /var/run/postgres/postgres.socktarget: /var/run/postgres/postgres.sockvolumes:db-data:

network

  • driver:指定该网络应使用哪个驱动程序
networks:db-data:driver: overlay
  • attachable:如果attachable设置为true,那么除了服务之外,独立容器应该能够连接到这个网络。如果一个独立容器连接到网络,它可以与服务和其他也连接到网络的独立容器通信。
networks:mynet1:driver: overlayattachable: true
  • external:如果设置为true
    • 指定在应用程序生命周期之外维护该网络的生命周期。Compose不会尝试创建这些网络,如果不存在则返回错误。
    • 除了名称以外的所有其他属性都无关紧要。如果Compose检测到任何其他属性,它会将Compose文件视为无效而拒绝。
services:proxy:image: example/proxynetworks:- outside- defaultapp:image: example/appnetworks:- defaultnetworks:outside:external: true
  • internal:默认情况下,Compose提供到网络的外部连接。当该属性设置为true时,允许您创建外部隔离的网络。
  • name:为网络设置自定义名称
networks:network1:name: my-app-net

它也可以与外部属性一起使用来定义Compose应该检索的平台网络:

networks:network1:external: truename: "${NETWORK_ID}"

volumes

  • external:
    • 指定此卷已经存在于平台上,并且其生命周期在应用程序生命周期之外进行管理。然后Compose不会创建卷,如果卷不存在则返回错误。
    • 除了名称以外的所有其他属性都无关紧要。如果Compose检测到任何其他属性,它会将Compose文件视为无效而拒绝。
services:backend:image: example/databasevolumes:- db-data:/etc/datavolumes:db-data:external: true
  • name:设置卷的自定义名称
volumes:db-data:name: "my-app-data"

configs

如有需要可查看官网

secrets

如有需要可查看官网

环境变量

使用Compose,您可以通过多种方式在容器中设置环境变量。您既可以使用Compose文件,也可以使用CLI。

.env文件

Docker Compose中的.env文件是一个文本文件,用于定义环境变量,这些变量在运行Docker Compose up时应该对Docker容器可用。该文件通常包含环境变量的键值对,它允许您在一个地方集中和管理配置。如果需要存储多个环境变量,.env文件很有用。.env文件是在容器中设置环境变量的默认方法。env文件应该放在项目目录的根目录中,紧邻compose.yaml文件。

$ cat .env
TAG=v1.5

在compose.yml中可以直接引用.env文件中定义的变量:

$ cat compose.yml
services:web:image: "webapp:${TAG}"

您可以在撰写中使用多个.env文件。Docker Compose会按照指定的顺序读取它们。如果同一个变量在多个文件中定义,最后一个定义优先:

services:webapp:image: my-webapp-imageenv_file:- .env- .env.override

.env文件的语法如下:

  • 以#开头的行被当作注释处理,并被忽略。
  • 空白行江被忽略
  • 值类型应该被加引号,插值类型不加引号
  • ${VAR:-default} :VAR的值已设置且不为空,否则VAR的值为default
  • ${VAR-default}:VAR的值已设置,否则VAR的值为default
  • ${VAR:?error}:VAR的值已设置且不为空,否则异常退出
  • ${VAR?error}:VAR的值已设置,否则异常退出
  • ${VAR:+replacement}:如果VAR的值已设置且非空,则替换,否则为空
  • ${VAR+replacement}:如果VAR的值已设置且非空,则替换,否则为空

environment属性

您可以直接在Compose文件中设置环境变量,而无需使用.env文件,在Compose .yml中使用environment属性。。

web:environment:- DEBUG=1

主机shell中的环境变量

您可以在主机或执行docker compose命令的shell环境中使用现有的环境变量。如果未设置环境变量,Compose将使用空字符串代替。

Profiles(剖面)

通过剖面可以有选择地启动服务,帮助您调整Compose应用程序模型,以适应各种用途和环境。这是通过将每个服务分配给零个或多个剖面来实现的。服务通过profiles属性实现剖面,该属性接受一个剖面名称数组:

services:frontend:image: frontendprofiles: [frontend]phpmyadmin:image: phpmyadmindepends_on: [db]profiles: [debug]backend:image: backenddb:image: mysql

启动剖面

  • 启动指定剖面
docker compose --profile debug up
  • 启动多个剖面
docker compose --profile frontend --profile debug up

自动启动剖面和依赖项解析

如果在使用docker compose up时没有指定剖面,则只启动没有profiles属性的服务,此外,docker compose up不会启动不同剖面的依赖项,这意味着目标服务依赖的任何其他服务都应该:

  • 共享一个相同的剖面
  • 或通过显式的指定剖面来启动

多compose.yml文件共享与扩展

  • 分块
  • 扩展
  • 合并
  • 包含

构建规范

Compose可以从service下的build属性和image属性构建服务:

  • build:从自定义构建定义构建服务
  • image:从已存在镜像构建服务

不要同时使用buildimage属性,当这两个属性同时出现时,Compose会有一个默认的处理逻辑,并且这个逻辑用户可以自定义配置。

构建属性

build属性值可以是以下两种类型:

  • 构建上下文的路径字符串:在这种情况下Compose会在这个上下文中寻找一个规范的Dockerfile来进行构建。
  • 详细的构建定义:在这种情况下可以指定构建参数。

使用字符串语法,构建上下文可以构建为:

  • 一个相对路径。该路径必须为目录,且必须包含Dockerfile:
services:webapp:build: ./dir
  • Git存储库URL:
services:webapp:build: https://github.com/mycompany/example.git#branch_or_tag:subdirectory

build也可以是一个对象,其字段定义如下:

  • context:定义了一个包含Dockerfile的目录的路径,或者一个指向Git仓库的URL。
build:context: ./dir
  • dockerfile:指定Dockerfile:
build:context: .dockerfile: webapp.Dockerfile
  • dockerfile_inline:将Dockerfile内容定义为Compose文件中的内联字符串,该属性不能和dockerfile属性同时出现:
build:context: .dockerfile_inline: |FROM baseimageRUN some command
  • args:定义构建参数,即Dockerfile的ARG值:
build:context: .args:GIT_COMMIT: cdc3b19
  • target:定义要构建的阶段:
build:context: .target: prod

此外还有许多属性,详情请看官方文档。

部署规范

部署规范用于定义在部署时的资源配置等元数据,详情请看官方文档。

开发规范

开发规范用于定义本地开发时的开发钩子,以便加快本地开发工作流速度,详情请看官方文档。

Compose指令

请查阅官方文档。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/621698.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

网站后台拿Webshell

通过注入或者其他途径,获取网站管理员账号和密码后,找到后台登录地址,登录后,寻找后台漏洞上传网页后门,获取网站的webshell webshell的作用是方便攻击者,webshel是拥有fso权限,根据fso权限的不…

论文阅读:Bayesian GAN

Bayesian GAN 点击访问paper 官方github 半监督学习对比算法 1.简介 贝叶斯 GAN(Saatchi 和 Wilson,2017)是生成对抗网络(Goodfellow,2014)的贝叶斯公式,我们在其中学习生成器参数 θ g \th…

mybatisplus(service CRUD 接口)

一、我们在控制器层都是调用Service层&#xff0c;不会直接调用仓储层。现在我给大家介绍一下怎么快速实现Service 的CRUD 定义接口&#xff1a;IProductService 继承IService<实体> package com.saas.plusdemo;import com.baomidou.mybatisplus.extension.service.ISe…

Bootsrap-导航、栅格、及使用案例

文章目录 一、下载并导入Bootstrap中文文档二、Bootstrap初体验三、Boostrap导航栏四、Boostrap栅格五、博客案例六、用户登录界面七、后台管理界面八、引入图标九、Bootstrap动态效果 一、下载并导入Bootstrap中文文档 二、Bootstrap初体验 实现提交按钮&#xff0c;去中文文…

SpringBoot 入门 SpringBoot 与其他项目整合 集成 Druid 数据库连接池 集成 Log 日志 配置修改

目录 1.SpringBoot简介 1.1.什么是SpringBoot 1.2.特点 2.SpringBoot快速入门 2.1.创建SpringBoot项目 2.2.项目目录介绍 2.3.配置修改 2.4.启动SpringBoot 3.SpringBoot与其他项目整合 3.1.整合JDBC 3.2.整合Druid数据库连接池 3.3.整合MyBatis 3.4.整合Log日志 …

科研绘图(四)火山图

火山图是生物信息学中常用的一种图表&#xff0c;用来显示基因表达数据的变化。它通常将每个点表示为一个基因&#xff0c;x轴显示对数比率&#xff08;log ratio&#xff09;&#xff0c;表示基因表达的变化大小&#xff1b;y轴显示-log10(p-value)&#xff0c;表示变化的统计…

跨镜动线分析丨用AI解读顾客行为,助力零售企业运营与增长

步入数字时代&#xff0c;先进技术让传统零售焕发新生。智慧零售以用户为中心&#xff0c;“人”的数据化价值将反哺生产、渠道、销售、运营全场景。 悠络客正式推出“跨镜动线分析”&#xff0c;运用AI技术&#xff0c;深度分析顾客的进店、逛店等一系列行为&#xff0c;助力零…

host没有管理员权限

1 以管理员身份运行 Windows PowerShell 2 输入 notepad C:\Windows\System32\drivers\etc\hosts 3在自动弹出的host文件里添加信息&#xff0c;然后保存即可

Fluids —— Viscosity: honey

目录 Fixed viscosity: honey Point variable viscosity: honey Fixed viscosity: honey SOP FLIP提供的粘性解释器&#xff0c;可对恒定或变化的粘性&#xff1b;以下是恒定粘性的蜂蜜模拟&#xff0c;蜂蜜的特性与粘度和表面张力等参数相关&#xff0c;可观察到典型的缠绕和…

机器学习周报第28周

目录 摘要Abstract一、文献阅读1.题目&#xff1a;2.摘要3.问题描述4.过去方案5.论文方案6.论文模型7.相关代码 摘要 本周阅读了一篇混沌时间序列预测的论文&#xff0c;论文模型主要使用的是时间卷积网络&#xff08;Temporal Convolutional Network&#xff0c;TCN&#xff…

2624. 蜗牛排序

说在前面 &#x1f388;不知道大家对于算法的学习是一个怎样的心态呢&#xff1f;为了面试还是因为兴趣&#xff1f;不管是出于什么原因&#xff0c;算法学习需要持续保持。 题目描述 请你编写一段代码为所有数组实现 snail(rowsCount&#xff0c;colsCount) 方法&#xff0c;…

5.Pytorch模型单机多GPU训练原理与实现

文章目录 Pytorch的单机多GPU训练1)多GPU训练介绍2)pytorch中使用单机多GPU训练DistributedDataParallel(DDP)相关变量及含义a)初始化b)数据准备c)模型准备d)清理e)运行 3)使用DistributedDataParallel训练模型的一个简单实例 欢迎访问个人网络日志&#x1f339;&#x1f339;知…

数学建模day15-时间序列分析

时间序列也称动态序列&#xff0c;是指将某种现象的指标数值按照时间顺序排列而成的数值序列。时间序列分析大致可分成三大部分&#xff0c;分别是描述过去、分析规律和预测未来&#xff0c;本讲将主要介绍时间序列分析中常用的三种模型&#xff1a;季节分解、指数平滑方法和AR…

WEB服务器-Tomcat

3. WEB服务器-Tomcat 3.1 简介 3.1.1 服务器概述 服务器硬件 指的也是计算机&#xff0c;只不过服务器要比我们日常使用的计算机大很多。 服务器&#xff0c;也称伺服器。是提供计算服务的设备。由于服务器需要响应服务请求&#xff0c;并进行处理&#xff0c;因此一般来说…

【AI】人工智能和水下机器视觉

目录 一、初识水下机器视觉 ——不同点 ——难点 二、AI如何助力水下机器视觉 三、应用场景 四、关键技术 水下机器视觉&#xff0c;非常复杂&#xff0c;今天来简单讨论一下。因为目标识别更难。 水下机器视觉是机器视觉技术在水下环境中的应用&#xff0c;它与普通机器…

基于Springboot的网上点餐系统(有报告)。Javaee项目,springboot项目。

演示视频&#xff1a; 基于Springboot的网上点餐系统&#xff08;有报告&#xff09;。Javaee项目&#xff0c;springboot项目。 项目介绍&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09;三层体系结构&am…

【2024】OAK智能深度相机校准教程

编辑&#xff1a;OAK中国 首发&#xff1a;oakchina.cn 喜欢的话&#xff0c;请多多&#x1f44d;⭐️✍ 内容可能会不定期更新&#xff0c;官网内容都是最新的&#xff0c;请查看首发地址链接。 ▌前言 Hello&#xff0c;大家好&#xff0c;这里是OAK中国&#xff0c;我是Ash…

机器人跟踪性能量化指标

衡量机械臂关节轨迹跟踪控制的性能可以通过以下几个方面来进行&#xff1a; 跟踪精度&#xff1a;这是衡量机械臂关节轨迹跟踪控制性能的最重要的指标。它反映了机械臂实际运动轨迹与期望运动轨迹之间的偏差。跟踪精度越高&#xff0c;说明机械臂的控制性能越好。运动范围&…

抖音小店怎么选品?分享如何培养选爆品的思维,每个人都要学会

选品定店铺生死。 一个店铺能不能出单&#xff0c;能不能赚钱&#xff0c;店铺的商品占主要部分&#xff0c;商品才是电商店铺最核心的内容&#xff0c;一个货真价实&#xff0c;物美价廉的产品才是店铺的核心竞争力&#xff0c;运营和找达人都是让产品卖的更多&#xff0c;更…

三、MySQL实例初始化、设置、服务启动关闭、环境变量配置、客户端登入(一篇足以从白走到黑)

目录 1、选择安装的电脑类型、设置端口号 2、选择mysql账号密码加密规则 3、设置root账户密码 4、设置mysql服务名和服务启动策略 5、执行设置&#xff08;初始化mysql实例&#xff09; 6、完成设置 7、MySQL数据库服务的启动和停止 方式一&#xff1a;图形化方式 方式…