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 文件让用户很方便的定义一个单独的应用容器.然而,在日常工作中,经常会碰到需要多个容器相互配合来完成某项任务的情况,例如 ...
随机推荐
- springboot 集成 onlyoffice 实现文档预览、编辑、pdf转化、缩略图生成
开源地址 https://gitee.com/lboot/lucy-onlyoffice 介绍 lucy-onlyoffice是依赖于onlyoffice的springboot文档预览编辑集成解决方案 ...
- JavaScript – Temporal API & Date
前言 Temporal API 是 JS 的新东西,用来取代 Date.虽然现在 (12-09-2024) 依然没有任何游览器支持 Temporal API,但它已经是 stage 3 了,而且有完整 ...
- HTML & CSS – Styling List
前言 ul > li 经常会用到, 它原本的 style 很丑, 这篇介绍如果修改它. 以前学 W3Schools 的时候也有记入过: HTML – W3Schools 学习笔记 参考: You ...
- 深入理解ConcurrentHashMap
HashMap为什么线程不安全 put的不安全 由于多线程对HashMap进行put操作,调用了HashMap的putVal(),具体原因: 假设两个线程A.B都在进行put操作,并且hash函数计算 ...
- 构建数据大屏,塑造IT运维可视化核心竞争力
随着大数据.云计算等新兴技术的发展与运用,在金融.交通.教育.政府等行业的信息化在飞速发展.与此同时,各行业的IT建设与维护管理成本也在与日俱增,大量的运维工作下产生庞大的运维数据,如何进行运维数据可 ...
- php7新内容总结(随时更新)
一.参数和返回值类型申明 可以申明的有:float,int,bool,string,interfaces,array,callable 一般模式: function sum(int ...$ints) ...
- spring上 -基于Xml配置bean笔记
4,Spring 内容 7,快速入门 需求:通过 Spring 的方式[配置文件], 获取 JavaBean: Monster 的对象, 并给该的对象属性赋值, 输出该对象信息. 代码结构: lib ...
- ftrace的trace_options
ftrace 中的 trace_options 选项用于控制追踪数据的收集和显示方式.你可以通过 /sys/kernel/debug/tracing/trace_options 文件来设置这些选项.每 ...
- 2023年6月中国数据库排行榜:OceanBase 连续七月踞榜首,华为阿里谋定快动占先机
群雄逐鹿,酣战墨坛. 2023年6月的 墨天轮中国数据库流行度排行 火热出炉,本月共有273个数据库参与排名.本月排行榜前十变动不大,可以用一句话概括为:OTO 组合连续两月开局,传统厂商GBase南 ...
- unable to find sdk 'iphoneos XX' 报错
解决方法: Build Setting->Base SDK->修改为iOS