当前有三种版本的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 版本是 1.28.6,因此建议在 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的更多相关文章

  1. Docker教程:使用docker配置python开发环境

    http://blog.csdn.net/pipisorry/article/details/50808034 Docker的安装和配置 [Docker教程:docker的安装] [Docker教程: ...

  2. Docker笔记(三):Docker安装与配置

    原文地址:http://blog.jboost.cn/2019/07/14/docker-3.html Docker分为Docker CE社区免费版与Docker EE企业收费版.Docker EE主 ...

  3. Docker最简单入门之(一)——介绍和配置Docker

    0. 前言 最近学完了Dokcer,特别记录一下,算是对自己学习成果的一个总结.以便自己能够更好的理解Docker.粗略估计了一下,我大概会分成4个部分,只记录一下常用的操作,至于一些比较难的操作或者 ...

  4. docker安装与配置

    Docker与虚拟化技术的区别 虚拟机分配多少宿主机就减少多少资源,比如VMware1分配了2Gb内存,如果运行5Gb的应用程序会造成内存溢出,vmware2分配了2Gb内存,如果运行2Gb的应用程序 ...

  5. docker仓库登录 配置insecure-registries

    1. 配置/etc/docker/daemon.json # cat /etc/docker/daemon.json { "registry-mirrors": ["ht ...

  6. Docker使用Calico配置网络模式

    一.Calico介绍 Calico是一种容器之间互通的网络方案,在虚拟化平台中,比如OpenStack.Docker等都需要实现workloads之间互连,但同时也需要对容器做隔离控制,就像在Inte ...

  7. Docker系统六:Docker网络管理

    Docker网络 I. Docer的通信方式 默认情况下,Docker使用网桥(brige)+ NAT的通信模型. Docker启动时会自动创建网桥Docker0,并配置ip 172.17.0.1/1 ...

  8. Docker 系列五(Docker Compose 项目).

    一.概念 Docker Compose 是官方编排项目之一,负责快速的部署分布式应用.它允许用户通过一个单独的 docker-compose.yml 模板文件(YAML格式)来定义一种相关联的应用容器 ...

  9. Docker 0x13: Docker 构建集群/服务/Compose/分布式服务栈

    目录 Docker 构建集群/服务/Compose/分布式服务栈 集群 初始化集群服务 安装docker-machine 管理节点和工作节点 docker集群构建完成 集群中部署应用 集群服务访问特性 ...

  10. Docker 容器编排利器 Docker Compose

    Compose 简介 通过前面几篇文章的学习,我们可以通过 Dockerfile 文件让用户很方便的定义一个单独的应用容器.然而,在日常工作中,经常会碰到需要多个容器相互配合来完成某项任务的情况,例如 ...

随机推荐

  1. bacnet mstp设备数据 转IEC61850项目案例

    目录 1 案例说明 1 2 VFBOX网关工作原理 1 3 使用YABE软件读取BACNET MSTP设备信息 2 4 配置网关采集BACNET MSTP数据 4 5 用IEC61850协议转发数据 ...

  2. webpack笔记-生产环境与开发环境常用plugin介绍(五)

    mode 和 plugin 前边我们介绍 mode 时提过,mode 不同值会影响 webpack 构建配置,其中有一个就是会启用 DefinePlugin 来设置process.env.NODE_E ...

  3. AI实战 | 领克汽车线上营销助手:全面功能展示与效果分析

    助手介绍 我就不自我介绍了,在我的智能体探索之旅中,很多人已经通过coze看过我的教程.今天,我专注于分享我所开发的一款助手--<领克汽车线上营销>. 他不仅仅是一个销售顾问的替身,更是一 ...

  4. Angular Material 18+ 高级教程 – CDK Table

    前言 CDK Table 是 Angular Material 对 <table> 的抽象 (无 styles) 封装. 无 styles 的 table 有什么好封装的呢? CDK Ta ...

  5. 第16天:信息打点-CDN绕过&业务部署&漏洞回链&接口探针&全网扫描&反向邮件

    #CDN配置: 配置1:加速域名-需要启用加速的域名 配置2:加速区域-需要启用加速的地区 配置3:加速类型-需要启用加速的资源 #参考知识: 超级Ping:http://www.17ce.com/ ...

  6. manim边学边做--图形间集合关系

    几何图形间的集合关系,是数学和几何学中的一个基本概念, 通过计算不同形状(如圆形.矩形.三角形等)的交集和并集等关系,可以实现复杂的图形处理和视觉效果. manim中提供了4种计算几何形状间集合关系的 ...

  7. Salesforce AI Specialist篇之 Einstein Trust Layer

    本篇参考: https://trailhead.salesforce.com/content/learn/trails/drive-productivity-with-einstein-ai http ...

  8. spring上 -基于Xml配置bean笔记

    4,Spring 内容 7,快速入门 需求:通过 Spring 的方式[配置文件], 获取 JavaBean: Monster 的对象, 并给该的对象属性赋值, 输出该对象信息. 代码结构: lib ...

  9. C# Webapi Filter 过滤器 - 生命周期钩子函数 - Exception Filter 基础

    什么是Filter ? 1. 切面编程机制,在 ASP.NET Core 特定的位置执行我们自定义的代码: 2. ASP.NET Core 中的Filter五种类型,Authorization ,fi ...

  10. SaaS架构:多租户系统架构设计

    什么是多租户? 多租户是SaaS领域的特有产物,在SaaS服务中,租户是指使用SaaS系统的客户,租户不同于用户,例如,B端SaaS产品,用户可能是某个组织下的员工,但整个企业组织是SaaS系统的租户 ...