附005.Docker Compose文件详解

一 Docker Compose文件简介

compose文件使用yml格式,主要分为了四个区域:
  • version:用于指定当前docker-compose.yml语法遵循哪个版本
  • services:服务,在它下面可以定义应用需要的一些服务,每个服务都有自己的名字、使用的镜像、挂载的数据卷、所属的网络、依赖哪些其他服务等等。
  • networks:应用的网络,在它下面可以定义应用的名字、使用的网络类型等。
  • volumes:数据卷,在它下面可以定义数据卷,然后挂载到不同的服务下去使用。

二 Docker Compose文件详解

2.1 version字段

用于指定当前compose文件语法遵循哪个版本,Compose文件版本支持特定的Docker版本列表如下:
Compose文件格式
Docker Engine版本
3.7
18.06.0+
3.6
18.02.0+
3.5
17.12.0+
3.4
17.09.0+
3.3
17.06.0+
3.2
17.04.0+
3.1
1.13.1+
3.0
1.13.0+
2.4
17.12.0+
2.3
17.06.0+
2.2
1.13.0+
2.1
1.12.0+
2.0
1.10.0+
1.0
1.9.1.+
示例:version: "3"

2.2 services区域

所有服务的定义都是定义在services区域中,services常用的配置项如下:
image:指定要启动容器的映像。可以是一个repository/tag或镜像ID来表明。
示例:
image: redis image: ubuntu:14.04 image: tutum/influxdb image: example-registry.com:4000/postgresql image: a4bc65fd
提示:image可以是本地也可以是远程的,如果本地不存在,compose会尝试pull下来,肉使用了build手动构建镜像,则使用指定的选项构建它,并使用指定的标签标记它。
build:该参数指定Dockerfile文件的路径,compose会通过Dockerfile构建并生成镜像,然后使用该镜像
示例:
  1 version: '3'
  2 services:
  3   webapp:
  4     build: ./dir
  5     image: webapp:tag
提示:如果在构建镜像的时候你指定相关名字和tag,则生成指定的镜像和tag。
command:重写默认的命令,即指定启动容器的命令。
示例:
command: bundle exec thin -p 3000 或
command: ["bundle", "exec", "thin", "-p", "3000"]
links:链接到其他服务中的容器,可以指定服务名称和这个链接的别名,或者只指定服务名称。
示例:
  1 web:
  2   links:
  3    - db
  4    - db:database
  5    - redis
此时,在容器内部,会在/etc/hosts文件中用别名创建几个条目,如下:
  1 172.17.2.100 db
  2 172.17.2.100 database
  3 172.17.2.100 redis
external_links:链接到compose外部启动的容器,特别是对于提供共享和公共服务的容器。在指定容器名称和别名时,external_links遵循着和links相同的语义用法。
示例:
  1 external_links:
  2  - redis_1
  3  - project_db_1:mysql
  4  - project_db_1:postgresql
ports:暴露端口,指定宿主机到容器的端口映射,或者只指定容器的端口,则表示映射到主机上的随机端口。
提示:注意:以HOST:CONTAINER格式映射端口时,使用低于60的容器端口时可能会遇到错误的结果,因为YAML会将格式xx:yy中的数字解析为base-60值。因此,我们建议始终将端口映射明确指定为字符串。
示例:
  1 ports:
  2  - "3000"
  3  - "3000-3005"
  4  - "8000:8000"
  5  - "9090-9091:8080-8081"
  6  - "49100:22"
  7  - "127.0.0.1:8001:8001"
  8  - "127.0.0.1:5000-5010:5000-5010"
  9  - "6060:6060/udp"
示例2:
  1 ports:
  2   - target: 80
  3     published: 8080
  4     protocol: tcp
  5     mode: host
解释:长格式语法允许配置无法以简短形式表示的其他字段。
  • target:容器内的端口
  • published:公开暴露的港口
  • protocol:端口协议(tcp或udp)
  • mode:host用于在每个节点上发布主机端口,或者ingress用于负载平衡的群集模式端口。
expose:暴露端口,但不需要建立与宿主机的映射,只是会向链接的服务提供,只能指定内部端口。
示例:
  1 expose:
  2  - "3000"
  3  - "8000"
environment:加入环境变量,可以使用数组或者字典,只有一个key的环境变量可以在运行compose的机器上找到对应的值。
提示:任何布尔值; true,false,yes no,需要用引号括起来,以确保YML解析器不会将它们转换为True或False。
示例:
  1 environment:
  2   RACK_ENV: development
  3   SHOW: 'true'
  4   SESSION_SECRET:
  5 environment:
  6   - RACK_ENV=development
  7   - SHOW=true
  8   - SESSION_SECRET
env_file:从一个文件中引入环境变量,该文件可以是一个单独的值或者一个列表,如果同时定义了environment,则environment中的环境变量会重写这些值。
示例:
  1 env_file: .env
  2 
  3 env_file:
  4   - ./common.env
  5   - ./apps/web.env
  6   - /opt/secrets.env
提示:列表中文件的顺序对于确定分配给多次显示的变量的值非常重要。列表中的文件从上到下进行处理。对于在文件中指定的相同变量a.env并在文件中 分配不同的值b.env,如果b.env列在下面(后),则来自b.envstand 的值。
如:给出以下声明docker_compose.yml:
  1 services:
  2   some-service:
  3     env_file:
  4       - a.env
  5       - b.env
以下文件:
# a.env VAR=1
# b.env VAR=hello
则$VAR是hello。
depends_on:指定与部署和运行服务相关的配置。
示例:
  1 version: '3'
  2 services:
  3   web:
  4     build: .
  5     depends_on:
  6       - db
  7       - redis
  8   redis:
  9     image: redis
 10   db:
 11     image: postgres
服务依赖关系之间的Express依赖关系会导致以下行为:
  • docker-compose up:以依赖顺序启动服务,在以上示例中,db和redis之在web之前启动。
  • docker-compose up SERVICE:自动包含SERVICE依赖项。在以上示例中,docker-compose up web还创建并启动db和redis。
deploy:指定与部署和运行服务相关的配置。
示例:
  1 version: '3'
  2 services:
  3   redis:
  4     image: redis:alpine
  5     deploy:
  6       labels:
  7  com.example.description: "This label will appear on all containers for the web service"
  8       resources:
  9         limits:
 10           cpus: '0.50'
 11           memory: 50M
 12         reservations:
 13           cpus: '0.25'
 14           memory: 20M
 15       replicas: 6
 16       update_config:
 17         parallelism: 2
 18         delay: 10s
 19       update_config:
 20         parallelism: 2
 21         delay: 10s
 22         order: stop-first
 23       restart_policy:
 24         condition: on-failure
 25         delay: 5s
 26         max_attempts: 3
 27         window: 120s
子选项说明:
labels:指定服务的标签。这些标签仅在服务上设置,而不是在服务的任何容器上设置。
mode:global:每个集群节点只有一个容器,默认为replicated。
resources:资源限制,如上所示:redis服务被限制为使用不超过50M的内存和0.50(50%)的CPU时间,并且保留20M了内存和0.25CPU时间(始终可用)。
replicas:指定replicated后,或默认情况下课使用replicas指定副本数,
restart_policy:配置是否以及如何在容器退出时重新启动容器,包括:
  • condition:其中之一none,on-failure或any(默认:) any。
  • delay:重新启动尝试之间等待的时间,指定为持续时间(默认值:0)。
  • max_attempts:在放弃之前尝试重新启动容器的次数(默认值:永不放弃)。如果在配置中未成功重新启动 window,则此尝试不会计入配置的max_attempts值。例如,如果max_attempts设置为“2”,并且第一次尝试时重新启动失败,则可能会尝试重新启动两次以上。
  • window:在决定重启是否成功之前等待多长时间,指定为持续时间(默认值:立即决定)。
rollback_config:配置在更新失败的情况下应如何回滚服务。
  • parallelism:一次回滚的容器数。如果设置为0,则所有容器同时回滚。
  • delay:每个容器组的回滚之间等待的时间(默认为0)。
  • failure_action:如果回滚失败该怎么办。一个continue或pause(默认pause)
  • monitor:每次更新任务后的持续时间以监视失败(ns|us|ms|s|m|h)(默认为0)。
  • max_failure_ratio:回滚期间容忍的失败率(默认值为0)。
  • order:回滚期间的操作顺序。其中之一stop-first(旧任务在启动新任务之前停止),或者start-first(首先启动新任务,并且正在运行的任务暂时重叠)(默认stop-first)。
update_config:配置服务应如何更新,用于配置滚动更新。
  • parallelism:一次更新的容器数。
  • delay:更新一组容器之间的等待时间。
  • failure_action:更新失败时的行为。其中一个continue,rollback或者pause (默认:pause)。
  • monitor:每次更新任务后的持续时间以监视失败(ns|us|ms|s|m|h)(默认为0)。
  • max_failure_ratio:更新期间容忍的故障率。
  • order:更新期间的操作顺序。其中一个stop-first(旧任务在启动新任务之前停止),或者start-first(首先启动新任务,并且正在运行的任务暂时重叠)(默认stop-first)注意:仅支持v3.4及更高版本。
注意:order仅支持v3.4及更高版本的撰写文件格式。
healthcheck:配置运行的检查以确定此服务的容器是否“健康”。
示例:
  1 healthcheck:
  2   test: ["CMD", "curl", "-f", "http://localhost"]
  3   interval: 1m30s
  4   timeout: 10s
  5   retries: 3
  6   start_period: 40s
提示:healthcheck可参考:https://docs.docker.com/engine/reference/builder/#healthcheck
network_mode:网络类型,可指定容器运行的网络类型
示例:
  1 network_mode: "bridge"
  2 network_mode: "host"
  3 network_mode: "none"
  4 network_mode: "service:[service name]"
  5 network_mode: "container:[container name/id]"
dns:自定义dns服务
  1 dns: 8.8.8.8
  2 dns:
  3   - 8.8.8.8
  4   - 9.9.9.9

2.3 networks区域

网络决定了服务之间以及服务和外界之间如何去通信,在执行docker-compose up的时候,docker会默认创建一个默认网络,创建的服务也会默认的使用这个默认网络。服务和服务之间,可以使用服务的名字进行通信,也可以自己创建网络,并将服务加入到这个网络之中,这样服务之间可以相互通信,而外界不能够与这个网络中的服务通信,可以保持隔离性。
提示:注意:您的应用程序网络的名称基于“项目名称”,该名称基于其所在目录的名称。您可以使用--project-name参数或COMPOSE_PROJECT_NAME环境变量覆盖项目名称,如当前的目录为myapp,期docker-compose.yml如下:
  1 version: "3"
  2 services:
  3   web:
  4     build: .
  5     ports:
  6       - "8000:8000"
  7   db:
  8     image: postgres
  9     ports:
 10       - "8001:5432"
运行时docker-compose up,则:
  1. 创建了一个名为myapp_default的网络。
  2. 使用web配置创建容器,在web下加入myapp_default网络。
  3. 使用db配置创建容器,在db下加入myapp_default网络。
示例:
  1 version: '2'
  2 
  3 services:
  4   app:
  5     image: busybox
  6     command: ifconfig
  7     networks:
  8       app_net:
  9         ipv4_address: 172.16.238.10
 10 
 11 networks:
 12   app_net:
 13     driver: bridge
 14     enable_ipv6: true
 15     ipam:
 16       driver: default
 17       config:
 18       - subnet: 172.16.238.0/24
 19         gateway: 172.168.238.254

2.4 volumes区域

可以在Compose file文件上声明卷,同时也可以在本区域创建volumes_from,以便在多个服务中重用卷。
示例:
  1 version: "3"
  2 services:
  3   db:
  4     image: db
  5     volumes:
  6       - data-volume:/var/lib/db
  7   backup:
  8     image: backup-service
  9     volumes:
 10       - data-volume:/var/lib/backup/data
 11 volumes:
 12   data-volume:
提示:volumes可参考:https://docs.docker.com/compose/compose-file/#specifying-byte-values

转载于:https://www.cnblogs.com/itzgr/p/10041249.html

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

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

相关文章

如何使用TensorFlow构建简单的图像识别系统(第2部分)

by Wolfgang Beyer沃尔夫冈拜尔(Wolfgang Beyer) 如何使用TensorFlow构建简单的图像识别系统(第2部分) (How to Build a Simple Image Recognition System with TensorFlow (Part 2)) This is the second part of my introduction to building an image recognition system wi…

网站 服务器 用sqlite,sqlite服务器数据库

sqlite服务器数据库 内容精选换一换简要介绍SQLite是一款轻量级的关系型数据库,它的运算速度非常快,占用资源很少,不仅支持标准的SQL语法,还遵循了数据库的ACID事务。编写语言:C一句话概述:轻量级的关系型数…

type-c接口图片_TypeC接口除了充电还能干吗?这些功能都不知道,简直是在浪费...

Type C手机接口相信每个使用智能手机的朋友都很熟悉,目前已经广泛使用在智能手机领域,并且得到用户一致好评。但是对于Type C接口真正的用处很少有人知道,大部分用户只了解正反面都可充电,其他方面一概不知,对于这一点…

Zookeeper的api的简单使用(转载)

转载自: http://www.cnblogs.com/sunddenly/p/4031881.html 1.API 2.API 示例 ZooKeeper中的组成员关系 理解ZooKeeper的一种方法就是将其看作一个具有高可用性的文件系统。但这个文件系统中没有文件和目录,而是统一使用“节点”(node)的概念,称为znode…

必须使用301重定向的运用场景

必须使用301重定向的运用场景

1.1好素数

题目 题意:一个好素数的定义是,他是一个素数,然后他的左右两边10区间内存在素数,那么他就是好素数,现在让你输入一个数字,这个数字以内的好素数的数量。 解题方法:先把每一个数字是不是素数判断…

jquery.vue.js_一个Vue.js简介,面向只了解jQuery的人

jquery.vue.jsby Matt Rothenberg马特罗森伯格(Matt Rothenberg) 一个Vue.js简介,面向只了解jQuery的人 (A Vue.js introduction for people who know just enough jQuery to get by) I’ve had a love-hate relationship with JavaScript for years.我与JavaScrip…

python 矩阵获取行数_4个最佳项目创意的代码片段和示例,旨在为Python和机器学习构建出色的简历!...

点击上方“小白学视觉”,选择加"星标"或“置顶”重磅干货,第一时间送达一篇文章带你了解4个最佳项目创意的代码片段和示例Python是一种特殊的编程语言,适用于从初学者到中级用户。由于它的灵活性,它正逐渐成为一种非常流…

Android 多状态加载布局的开发 Tips

2019独角兽企业重金招聘Python工程师标准>>> 什么是多状态 Layout 对于大多数 App 而言,项目中都有多状态加载 View 这种需求,如下图所示。 对应到开发中,我们通常会开发一个对应的自定义 layout 用于根据页面不同的状态来显示不同…

XML解析之JAXP案例详解

根据一个CRUD的案例&#xff0c;对JAXP解析xml技术&#xff0c;进行详细的解释&#xff1a; 首先&#xff0c;已知一个xml文件中的数据如下&#xff1a; <?xml version"1.0" encoding"UTF-8" standalone"no"?> <书架><书 出版社…

随机梯度下降

1.SGD 代价函数通常可以分解成每个样本的代价函数的总和转载于:https://www.cnblogs.com/bigcome/p/10042800.html

iis mysql5.7_手动配置网站环境 IIS 10+PHP 7.1+MySQL 5.7

之前配置环境一直用的一键安装包&#xff0c;不管是phpStudy还是lnmp&#xff0c;昨天尝试在自己电脑配置一下iis的环境&#xff0c;也踩了一些坑&#xff0c;整理了一下。测试电脑是Windows10&#xff0c;理论上Win7和IIS7.5都支持的。安装 IIS1&#xff1a;控制面板 > 程序…

如何使用Apache的Prediction IO Machine Learning Server构建推荐引擎

by Vaghawan Ojha通过瓦哈万欧哈(Vaghawan Ojha) 如何使用Apache的Prediction IO Machine Learning Server构建推荐引擎 (How to build a recommendation engine using Apache’s Prediction IO Machine Learning Server) This post will guide you through installing Apache…

JavaScript DOM编程艺术第二版学习(1/4)

接下来项目需要网页相关知识&#xff0c;故在大牛的指引下前来阅读本书。 记录方式&#xff1a;本书分四部分阅读&#xff0c;完成阅读之后会多写一篇包括思维导图的算是阅读指南的东西&#xff0c;浏览的童鞋看着指南可以跳过一些不必要的坑~ 当前水平&#xff1a;HTML&CS…

github开源大项目_GitHub刚刚发布了一份大规模的开源指南

github开源大项目Here are three links worth your time:这是三个值得您花费时间的链接&#xff1a; GitHub just released a massive guide to contributing to open source (5 to 60 minute read) GitHub刚刚发布了一份有关开源的大型指南( 阅读5至60分钟 ) A new way to br…

mysql中where条件判断语句_MySQL Where 条件语句介绍和运算符小结

WHERE 条件有时候操作数据库时&#xff0c;只操作一些有条件限制的数据&#xff0c;这时可以在SQL语句中添加WHERE子句来规定数据操作的条件。语法&#xff1a;SELECT column,… FROM tb_name WHERE definitionWHERE 关键字后面接有效的表达式(definition)&#xff0c;该表达式…

node webkit(nw.js) 设置自动更新

原理&#xff1a;把更新的文件放在服务器上&#xff0c;设置一个客户端版本号&#xff0c;每次打开客户端的时候&#xff0c;通过接口获取服务器上的版本&#xff0c;如果高于本地的版本就下载服务器上的代码&#xff0c;低于或等于就不更新 1 <script>2 var htt…

个人工作总结04(冲刺二)

今天是团队第二次冲刺阶段开始的第04天&#xff0c;我的工作总结如下&#xff1a; 一、昨天干了什么&#xff1f; 知识圈查询功能 基本实现数据库查询 (未完成) 二、今天准备做什么&#xff1f; 知识圈查询功能 基本实现数据库查询 三、遇到了什么困难&#xff1f; 数据库访问出…

mysql8.0版1130_navicat premium连接mysql 8.0报错error 10061和error1130问题

昨天安装了最新版的mysql navicat premium, 但没来得及测试使用Navicat连接。今天上班时&#xff0c;使用Navicat premium连接mysql时&#xff0c;出现报错ERROR 2003 (HY000): Can’t connect to MySQL server on ‘1XX.XX.XX.XX’ (10061).起初以为是mysql没有安装成功&#…

freecodecamp_为什么您一定要参与freeCodeCamp的一个研究小组

freecodecampby Frederick Ige弗雷德里克艾格(Frederick Ige) 为什么您一定要参与freeCodeCamp的一个研究小组 (Why you should definitely get involved with one of freeCodeCamp’s study groups) I’m writing this article in hopes of convincing you to take advantage…