docker-compose之配置docker-compose.yml
当前有三种版本的Compose配置文件格式:
- Version 1
旧版格式,通过省略YAML的根配置项version来指定。
未声明版本的Compose配置文件都被视为V1版,所有的服务都作为根选项在Compose配置文件中声明。
支持V1的Compose最高到1.6.x,再高版本的Compose不推荐使用V1版Compose配置文件。
不支持数据卷、网络和构建参数配置。
V1的Compose不会利用网络优势,每个容器都位于默认的bridge网络上,并且可以从其他容器的IP地址访问,需要使用links来启用容器之间的发现。
- Version 2.x
通过YAML的根配置项version来指定,具体配置如version: '2'或version: '2.1'等。
必须在Compose配置文件根选项指定版本号,并且主版本数字为2,且所有服务必须在services配置项下声明。
1.6.0+版本的Compose都支持V2,Docker Engine的版本需要1.10.0+版本。
支持数据卷和网络的配置。
默认情况下,每个容器都加入了应用范围的默认网络,并且可以在与服务名称相同的主机名下发现。很大程度上links不是必要的。
V2中加入了环境变量替换。
- Version 3.x
最新版本,也是推荐使用版本,推出该版的目的是为了在Compose和Docker Engine的swarm模式之间形成交叉兼容。
通过YAML的根配置项version来指定,具体配置如version: '3'或version: '3.1'等。
V3删除了多个配置项,但也新增了更多配置项。
关于Compose配置文件版本的常见注意事项:
在声明V2和V3版本时需注意:
在指定Compose配置文件要使用的版本时,需同时指定主版本数字和次版本数字。如果未给定次版本数字,则默认使用0而不是最新版本,因此将不支持再更高版本中才加入的新功能。比如version: '3',使用的是3.0版本而不是目前最新的3.8版本。
在使用多Compose配置文件时需注意:
使用多个Compose配置文件扩展服务时,每个文件必须为相同的版本。
Compose配置文件格式版本 VS Docker Engine 版本
3.8 19.03.0+
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.+
docker-compose.yml 文件中将 version 字段设置为 "3.8"。这个版本号对应着 Docker Engine API 的 1.38 版本,是 Docker Compose 1.28.6 支持的最高版本。示例:
version: "3.8"
services:
redis:
image: redis:alpine
ports:
- "6379"
networks:
- frontend
deploy:
replicas: 2
update_config:
parallelism: 2
delay: 10s
restart_policy:
condition: on-failure db:
image: postgres:9.4
volumes:
- db-data:/var/lib/postgresql/data
networks:
- backend
deploy:
placement:
constraints:
- "node.role==manager"
vote:
image: dockersamples/examplevotingapp_vote:before
ports:
- "5000:80"
networks:
- frontend
depends_on:
- redis
deploy:
replicas: 2
update_config:
parallelism: 2
restart_policy:
condition: on-failure result:
image: dockersamples/examplevotingapp_result:before
ports:
- "5001:80"
networks:
- backend
depends_on:
- db
deploy:
replicas: 1
update_config:
parallelism: 2
delay: 10s
restart_policy:
condition: on-failure worker:
image: dockersamples/examplevotingapp_worker
networks:
- frontend
- backend
deploy:
mode: replicated
replicas: 1
labels: [APP=VOTING]
restart_policy:
condition: on-failure
delay: 10s
max_attempts: 3
window: 120s
placement:
constraints:
- "node.role==manager" visualizer:
image: dockersamples/visualizer:stable
ports:
- "8080:8080"
stop_grace_period: 1m30s
volumes:
- "/var/run/docker.sock:/var/run/docker.sock"
deploy:
placement:
constraints:
- "node.role==manager" networks:
frontend:
backend: volumes:
db-data:
docker-compose.yml
version: '3'
services:
proxy:
image: nginx
ports:
- "80:80"
networks:
- frantnet
webapp:
build: .
networks:
- frantnet
- endnet
redis:
image: redis
networks:
- endnet
networks:
frantnet:
endnet:
参数说明:
- version: 声明语法版本
- services: 指定服务
- image: 指定使用的镜像
- build: 使用编译Dockerfile的方式得到的镜像
- networks: 使用, 创建网络
- volumes: 数据卷, 处理容器中数据的持久化方式, 如果在多个容器见共享数据卷,则必须在顶级的volumes中定义这个数据卷
version: "3.2"
services:
web:
image: nginx:alpine
volumes:
- type: volume # 随机找一个临时目录
source: mydata
target: /data
- type: bind # 绑定相对目录,绝对目录
source: ./nginx/logs
target: /var/log/nginx
jenkins:
image: jenkins/jenkins:lts
volumes:
- jenkins_home:/var/jenkins_home
- mydata:/data
volumes:
mydata:
jenkins_home:
volumes两种方式:
1)绝对路径
db:
image: mariadb:latest
restart: always
ports:
- "3306:3306"
volumes:
- [直接使用宿主机的本地路径]:/var/lib/mysql
2)卷标
db:
image: mariadb:latest
restart: always
ports:
- "3306:3306"
volumes:
- [卷标名称]:/var/lib/mysql
volumes:
[卷标名称]:
使用卷标的方式,简洁易于管理,但是数据实际存放的位置需要费点周折才能看到。
查看某个卷信息: docker volume inspect volume_name
查看所有卷: docker volume ls
---
docker run -v /docker_dir ...
docker run -v /home:/docker_dir ...
当不指明宿主机目录时,Docker会默认在宿主机上创建一个临时目录: /var/lib/docker/volumes/[VOLUME_ID]/_data作为宿主机上的被挂载目录。
- environment: 定义环境变量
- ports: 定义端口映射
- container_name: 指定容器名称
- restart:
-
no是默认的重启策略,在任何情况下都不会重启容器。 always指定时,容器总是重新启动。on-failure如果退出代码指示失败错误,则该策略会重新启动容器。unless-stopped总是重新启动容器,除非容器停止(手动或其他方式)。
-
常用命令:
# 验证该配置文件是否正确
docker-compose -f docker-compose-dev.yml config -f: 指定配置文件
-p: 指定项目名称
config:不会执行真正的操作,而是显示docker-compose程序解析的配置文件内容
示例:
docker-compose -p testnet -f docker-compose-net.yml up -d
常用服务:
elasticsearch:
version: "3.9"
services:
elasticsearch:
image: docker.elastic.co/elasticsearch/elasticsearch:6.8.23
container_name: elasticsearch
environment:
- discovery.type=single-node
volumes:
- ./es/data:/usr/share/elasticsearch/data
# docker cp elasticsearch:/usr/share/elasticsearch/config/ ./es/
- ./es/config:/usr/share/elasticsearch/config
ports:
- 9200:9200
- 9300:9300
networks:
- elastic networks:
elastic:
更多参考项: Docker Compose 配置文件 docker-compose.yml 详解 - 云+社区 - 腾讯云 (tencent.com)
docker-compose之配置docker-compose.yml的更多相关文章
- Docker教程:使用docker配置python开发环境
http://blog.csdn.net/pipisorry/article/details/50808034 Docker的安装和配置 [Docker教程:docker的安装] [Docker教程: ...
- Docker笔记(三):Docker安装与配置
原文地址:http://blog.jboost.cn/2019/07/14/docker-3.html Docker分为Docker CE社区免费版与Docker EE企业收费版.Docker EE主 ...
- Docker最简单入门之(一)——介绍和配置Docker
0. 前言 最近学完了Dokcer,特别记录一下,算是对自己学习成果的一个总结.以便自己能够更好的理解Docker.粗略估计了一下,我大概会分成4个部分,只记录一下常用的操作,至于一些比较难的操作或者 ...
- docker安装与配置
Docker与虚拟化技术的区别 虚拟机分配多少宿主机就减少多少资源,比如VMware1分配了2Gb内存,如果运行5Gb的应用程序会造成内存溢出,vmware2分配了2Gb内存,如果运行2Gb的应用程序 ...
- docker仓库登录 配置insecure-registries
1. 配置/etc/docker/daemon.json # cat /etc/docker/daemon.json { "registry-mirrors": ["ht ...
- Docker使用Calico配置网络模式
一.Calico介绍 Calico是一种容器之间互通的网络方案,在虚拟化平台中,比如OpenStack.Docker等都需要实现workloads之间互连,但同时也需要对容器做隔离控制,就像在Inte ...
- Docker系统六:Docker网络管理
Docker网络 I. Docer的通信方式 默认情况下,Docker使用网桥(brige)+ NAT的通信模型. Docker启动时会自动创建网桥Docker0,并配置ip 172.17.0.1/1 ...
- Docker 系列五(Docker Compose 项目).
一.概念 Docker Compose 是官方编排项目之一,负责快速的部署分布式应用.它允许用户通过一个单独的 docker-compose.yml 模板文件(YAML格式)来定义一种相关联的应用容器 ...
- Docker 0x13: Docker 构建集群/服务/Compose/分布式服务栈
目录 Docker 构建集群/服务/Compose/分布式服务栈 集群 初始化集群服务 安装docker-machine 管理节点和工作节点 docker集群构建完成 集群中部署应用 集群服务访问特性 ...
- Docker 容器编排利器 Docker Compose
Compose 简介 通过前面几篇文章的学习,我们可以通过 Dockerfile 文件让用户很方便的定义一个单独的应用容器.然而,在日常工作中,经常会碰到需要多个容器相互配合来完成某项任务的情况,例如 ...
随机推荐
- PLC 入口
教程 全网最全西门子S7-1500PLC视频教程, https://www.bilibili.com/video/BV1Yi4y1U7Md?p=12&vd_source=7f5dfe09aaa ...
- 变“金点子”为“好应用”,合合信息智能文档处理技术助力大学生探索AI创新边界
谈"糖"色变.追求养生.低卡生活--这些热门词汇频频在社交媒体上掀起讨论热潮.有这样一批年轻人不但捕捉到了这些词汇背后真实的用户需求,并且正在利用AI技术寻找解决之道. 近日,&q ...
- WPF 实现一个吃豆豆的Loading加载动画
运行的效果如下 先引入一下我们需要的库 在nuget上面搜一下"expression.Drawing",安装一下这个包 我们再创建一个Window,引入一下这个包的命名空间 我们设 ...
- Fluent Builder 模式
前言 以前最讨厌设计复杂方法调用, 就是那种需要一堆有逻辑规则的 config 作为参数的方法. 这种 config 通常是一个大对象, 有许多 property, property 之间有存在一些逻 ...
- Figma 学习笔记 – Keyboard Shortcut and Tips 小技巧
参考: 10 tips to work 10x faster in Figma 15 tips to design 15X faster in Figma | Figma Tutorial 2021 ...
- uni-app v3.0.0-alpha-3090220231010001
https://uniapp.dcloud.net.cn/tutorial/ #-------------------------------------------------------- 未分类 ...
- Maven 依赖项管理&&依赖范围
依赖管理 使用坐标导入jar包 1.在pom.xml 中编写 <dependencies> 标签 2.在 <dependencies> 标签中使用 < ...
- KPTI——可以缓解“熔断” (Meltdown) 漏洞的内核新特性
Linux 内核修复办法:内核页表隔离KPTl(kernel page table isolation) 每个进程一张页表变成两张:运行在内核态和运行在用户态时分别使用各自分离的页表 Kernel页表 ...
- apisix~自定义文件上传代理插件~支持form-data文件和kv参数
参考文献 https://stackoverflow.com/questions/24535189/composing-multipart-form-data-with-a-different-con ...
- 如何修改word默认模板(Normal.dotm)
背景描述:平时有大量的文字编辑工作要做,其中最繁琐的就是格式问题:为了排版工整.符合要求,在每个word中都要进行大量的更改,如:字体.大小.行距.段前段后间距等......但这其中有很多的重复性工作 ...