Docker Compose 模板文件 V2
模板文件是使用Compose的核心,默认模板文件名称为docker-compose.yml ,格式为YAML格式。
目录结构
[root@localhost ~]# tree /opt/compose-conf/jenkins/
/opt/compose-conf/jenkins/
├── conf
│ ├── ansible.cfg
│ ├── ansible.cfg.bak
│ └── hosts
├── core
│ └── Dockerfile
└── jenkins.yml
/opt/compose-conf/jenkins/core/Dockerfile 文件配置
[root@localhost ~]# cat /opt/compose-conf/jenkins/core/Dockerfile
FROM jenkins/jenkins
MAINTAINER simon
USER root
RUN apt-get update \
&& apt-get -y install vim rsync procps cronolog python-pip \
&& pip install ansible \
&& mkdir /etc/ansible EXPOSE 8080
[root@localhost ~]# cat /opt/compose-conf/jenkins/jenkins.yml
version: '2'
services:
jenkins:
build: core
container_name: jenkins-core
cap_add:
- LINUX_IMMUTABLE
ports:
- "8080:8080"
volumes:
- /etc/localtime:/etc/localtime:ro
- /opt/container-logs/jenkins:/var/log
- /etc/hosts:/etc/hosts:ro
- /opt/compose-conf/jenkins/conf:/etc/ansible
hostname: jenkins
restart: always
#command: /bin/bash
command: "/bin/tini -- /usr/local/bin/jenkins.sh"
mem_limit: 8g
memswap_limit: 8g
stdin_open: true
tty: true
dns:
- 10.168.11.100
- 10.167.11.100
ulimits:
core:
soft: 0
hard: 0
指令:
build 指定Dockerfile所在目录(可以是绝对路径,或者docker-compose.yml 文件的相对路径)。
Compose将会利用它自动构建这个镜像,然后使用这个镜像
build: core
cap_add,cap_drop 指定容器的内核能力(capacity)分配。
# 让容器拥有所有能力
cap_add:
- ALL
# 去掉NET_ADMIN能力
cap_drop:
- NET_ADMIN
command 覆盖容器启动后默认执行的命令
command: "/bin/tini -- /usr/local/bin/jenkins.sh"
container_name 指定容器名称,默认将会使用"项目名称_服务名称_序号" 这样的格式
# 需要注意,指定容器名称后,改服务奖无法进行扩展,因为Docker不允许多个容器具有相同的名称。
container_name: jenkins-core
depends_on 表示服务之前的依赖关系
# docker-compose up ,启动web服务器之前,启动redis、db。
# docker-compose up web ,启动web容器时,检查依赖depends_on的配置内容,先启动db和redis 例如:
services:
web:
build: web
depends_on:
- db
- redis
redis:
image: redis
db:
image: postages
dns 自定义DNS,可以是单个的,也可以是列表
# 单个
dns:8.8.8.8
# 多个
dns:
- 8.8.8.8
- 4.4.4.4
dns_search 配置DNS搜索区域。可以是单个的,也可以是列表。
# 单个
dns_search: example.com
# 多个
dns_search:
- dom1.example.com
- dom2.example.com
tmpfs 在容器中挂载一个tmpfs
# tmpfs 可以理解成虚拟机磁盘,是创建在内存上,不是硬盘上,读取速度快,重启后数据消失
tmpfs: /run
tpmfs:
- /run
- /tmp
env_file 指定变量文件,可以为党文件路径或列表
# 如果通过docker-compose -f File 方式来指定Compose模板文件,则nev_file中变量路径会基于模板文件路径。
# 如果变量名称与environment 指令冲突,则按照惯例以后者为准
# 环境变量文件中每一行必须符合格式,支持#开通的注释行 # 单个
env_file: .env
# 多个
env_file:
- ./common.env
- ./apps/web.env
- /opt/secrets.env
environment 设置环境变量,可以使用数组或字典两种格式
# 给定名称的变量会自动获取运行Compose 主机上对应变量的值,可以用来防止泄露不必要的数据
# 如果在变量名或者值中用到true|false, yes|no 等,最后放在引号里,避免YAML自动解析某些内容对应的布尔语义
# 字典格式
environment:
RACK_ENV: development
SHOW: 'true'
# 数组格式
environment:
- RACK_ENV=development
- SHOW='true'
expose 暴露端口,但不映射到宿主机,只允许能被连接的服务访问,仅可以指定内部端口为参数
expose:
- "3000"
- "8000"
extends 基于其他模板文件进行扩展。
# 要避免出现循环依赖,例如 A依赖B,B依赖C,C反过来依赖A的情况
# extends 不会继承links 和volumes_from 中定义的容器和数据卷资源
# 推荐在基础模板中定义一些可以共享的镜像和环境变量,在扩展模板中具体制定应用变量、链接、数据卷等信息。
例如已经有一个webapp服务,定义的基础模板 common.yml
webapp:
build: ./webapp
environment:
- DEBUG='false'
- RACK_ENV=development
在编写一个新的development.yml 文件,使用common.yml 文件中的webapp服务进行扩展
web:
extends:
file: common.yml
service: webapp
ports:
- "3000:3000"
links:
- db
environment:
- DEBUG='true'
db:
imgae: postgres
# external_links 链接到docker-compose.yml 外部容器,甚至可以是非Compose管理的外部容器。
external_links:
- redis_1
- project_db_1:mysql
# 类似于Docker 中的--add-host 参数,制定额外的host名称映射信息。
extra_hosts:
- "googledns:8.8.8.8"
启动后容器中的/etc/hosts 文件中将添加:
8.8.8.8 googledns
# 指定镜像名称或镜像ID。 如果本地不存在,Compose将会尝试来去这个镜像。
images: ubuntu
# 指定容器的标签.
# 字典类型定义
labels:
com.example.description: "Accounting webapp"
com.example.department: "Finance"
com.example.label-with-empty-value: ""
# 元祖类型定义
labels:
- "com.example.description=Accounting webapp"
- "com.example.department=Finance"
- "com.example.label-with-empty-value"
# 链接到其他服务中的容器。使用服务名称(同时作为别名),或者"服务名称: 服务别名 (如: SERVICE:ALIAS)"
links:
- db
- db:database
- redis
# 设置容器日志驱动
# v2 中使用logging,在v1 中使用log_driver和log_opt
logging:
driver: syslog
options:
syslog-address: "tcp://10.168.11.101:571"
# 指定容器的网络类型,v1 使用 net ;v2 使用network_mode
network_mode: "bridge"
network_mode: "host"
network_mode: "none"
network_mode: "service:[service name]"
network_mode: "container:[container name/id]"
# 通过设置,容器可通过ps查询宿主机的进程.
pid: "host"
# 暴露端口信息
# 使用"宿主: 容器"
# 或者仅仅指定容器的端口(宿主将会随机端口)
ports:
- "3000"
- "8000:8000"
# 指定容器的ulimits限制值。
ulimits:
nproc: 65535 #最大进程数
nofile:
soft: 20000 #软连接
hard: 20000 #系统应限制
# 数据卷所挂载路径设置。
# 可以设置宿主路径(HOST:CONTAINER)
# 加上访问模式(HOST:CONTAINER:ro)
volumes:
- /etc/localtime:/etc/localtime:ro
- /opt/container-logs/jenkins:/var/log
- /etc/hosts:/etc/hosts:ro
- /opt/compose-conf/jenkins/conf:/etc/ansible
# 数据卷的插件驱动,可以使用第三方驱动创建一个数据卷,然后使用名称来访问
volumes_driver: mydriver
# 从另外一个服务或者容器挂载他的数据卷
volumes_from:
- service_name
- service_name:ro
- container:container_name
- container:container_name:rw
# 使用CPU 0核 和1核,只用50%的CPU资源
cpu_shares: 73
cpuset: 0,1
# 指定服务容器启动后执行的命令
entrypoint: /code/entrypoint.sh # 指定容器中运行应用的用户名
user: nginx
# 指定容器中的工作目录
working_dir: /code
# 指定容器中搜索域名、主机名、mac地址等
domainname: website.com
hostname: jenkins
mac_address: 08-00-28-00-0C-0A # 指定容器
ipc: hostname
# 指定容器中内存和交换分区的大小
mem_limit: 8g
memswap_limit: 8g # 运行容器中运行一些特权命令
privileged: true # 指定容器退出后的重启策略为始终重启。该命令对保持服务始终运行十分有效,生产环境推荐配置
# 配置项: always 或 unless-stopped
restart: always # 以只读模式挂载容器的root文件系统,意味着不能对容器内容进行修改
read_only: true # 打开标准输入,可以接受外部输入
stdin_open: true
# 模拟一个假的远程控制台
tty: true
Docker Compose 模板文件 V2的更多相关文章
- Docker Compose模板文件介绍
模板文件是使用 Compose 的核心,涉及到的指令关键字也比较多,这里面大部分指令跟 docker run 相关参数的含义都是类似的.默认的模板文件名称为 docker-compose.yml ,格 ...
- Compose 模板文件
模板文件是使用 Compose 的核心,涉及到的指令关键字也比较多.但大家不用担心,这里面大部分指令跟 docker run 相关参数的含义都是类似的. 默认的模板文件名称为 docker-compo ...
- Docker Compose YML文件配置
Docker Compose YML 默认的模板文件是 docker-compose.yml,其中定义的每个服务都必须通过 image 指令指定镜像或 build 指令(需要 Dockerfile)来 ...
- docker compose yml 文件常用字段简介
常用参数: version # 指定 compose 文件的版本 services # 定义所有的 service 信息, services 下面的第一级别的 key 既是一个 service 的名称 ...
- Docker 容器编排利器 Docker Compose
Compose 简介 通过前面几篇文章的学习,我们可以通过 Dockerfile 文件让用户很方便的定义一个单独的应用容器.然而,在日常工作中,经常会碰到需要多个容器相互配合来完成某项任务的情况,例如 ...
- Docker Compose 搭建 Redis Cluster 集群环境
在前文<Docker 搭建 Redis Cluster 集群环境>中我已经教过大家如何搭建了,本文使用 Docker Compose 再带大家搭建一遍,其目的主要是为了让大家感受 Dock ...
- Docker Compose 容器编排 NET Core 6+MySQL 8+Nginx + Redis
环境: CentOS 8.5.2111Docker 20.10.10Docker-Compose 2.1.0 服务: db redis web nginx NET Core 6+MySQL 8+N ...
- Docker Compose容器编排
Compose是Docker官方的开源项目,可以实现对Docker容器集群的快速编排.Compose 中有两个重要的概念:服务(service):一个应用的容器,实际上可以包括若干运行相同镜像的容器实 ...
- Docker(四):Docker 三剑客之 Docker Compose
前两篇文章我们介绍了 Dockerfile 的使用Docker(二):Dockerfile 使用介绍,我们知道使用一个 Dockerfile 模板文件可以定义一个单独的应用容器,如果需要定义多个容器就 ...
随机推荐
- Ubuntu16安装NVIDIA驱动后重复登录 简单粗暴
第一步 卸载所有NVIDIA的东西 第二步 开机,应该能进入默认驱动的桌面了,在设置里关闭开机密码,开机自动登录 第三步 安装英伟达驱动
- FFT 入门
推荐博客 :https://oi.men.ci/fft-notes/ 卷积的理解 : https://www.zhihu.com/question/22298352?rf=21686447 题目链接 ...
- stars-one原创工具——蓝奏云批量下载工具
一款可以批量下载蓝奏云分享的文件夹下的所有文件 基于HtmlUnit和okhttp开源库,所以打包后的jar包文件有点大 蓝奏云下载地址 github地址 需求 之前找电子书资源的时候,网友分享的蓝奏 ...
- pyton 封装
定义:在类中将方法和属性隐藏起来 一.私有化 1.格式 __名字,在名字前加双下划线 2.私有化对象 对象属性 静态属性 普通方法 3.作用 1)在类的外面不能直接调用类的方法和属性 2)类的属性值不 ...
- Redis(三):set/get 命令解析
经过前两篇的介绍,我们对整个redis的动作流程已经有比较清晰的认识. 接下来就是到具体的命令处理方式的理解了,想来我们用这些工具的意义也是在此.虽然没有人觉得,一个set/get方法会有难度,但是我 ...
- maven常用的远程仓库地址
<mirror> <id>nexus-aliyun</id> <name>Nexus aliyun</name> <url>ht ...
- Oracle GoldenGate for DB2
--Enable logdb2 update db cfg using LOGARCHMETH1 DISK:/home/db2inst1/arclogs--Rebootdb2 terminatedb2 ...
- chrome最耐看的主题
google chrome最耐看的主题James White大家可以尝试一下
- [CF 487C Prefix Product Sequence]
题意 将1~n的正整数重排列,使得它的前缀积在模n下形成0~n-1的排列,构造解或说明无解.n≤1E5. 思考 小范围内搜索解,发现n=1,n=4和n为质数时有解. 不难发现,n一定会放在最后,否则会 ...
- Future、Callback、Promise
推荐下边两篇,写的很棒 https://juejin.im/post/5b126065e51d4506bd72b7cc https://www.cnkirito.moe/future-and-prom ...