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 模板文件可以定义一个单独的应用容器,如果需要定义多个容器就 ...
随机推荐
- APICloud开发者进阶之路 |纯手工编写日程表功能
本文出自APICloud官方论坛, 感谢论坛版主 赵永亮 的分享. 最近看论坛内关于极光推送的问题有很多, 本想写一个关于极光的详细教程的,无奈已经有很多大牛分享过了,所以只得纯手工写了一个日程表,可 ...
- Window同一电脑配置多个git公钥
前言 配置多个本地ssh-key之前,先初始化下GIt环境哦! 可以参照:https://www.cnblogs.com/poloyy/p/12185132.html 执行前两步就好啦 本地生成两个s ...
- 由Kaggle竞赛wiki文章流量预测引发的pandas内存优化过程分享
pandas内存优化分享 缘由 最近在做Kaggle上的wiki文章流量预测项目,这里由于个人电脑配置问题,我一直都是用的Kaggle的kernel,但是我们知道kernel的内存限制是16G,如下: ...
- springboot的yml不显示的原因
首先排除插件原因 1 安装好插件Ctrl+Alt+S 2 查看修改的application.yml是什么格 在yaml格式中添加*.yaml和*.yml 3 查看maven是否配置完善
- 【洛谷4424】[HNOI_AHOI2018]寻宝游戏(我也不知道括号里该写啥)
题目 洛谷 4424 分析 感觉思路比较神仙. 对于按位与和按位或两种运算,显然每一位是独立的,可以分开考虑. 对于某一位,「与 \(0\)」会将这一位变成 \(0\),「或 \(1\)」会将这一位变 ...
- 客户端TNSPING通 连接出现ORA-12514错误
ORA-12514: TNS: 监听程序当前无法识别连接描述符中请求的服务,这是一个经常遇到的问题,可以按照以下步骤一步步解决 1.使用tnsping检测 tnsping可判断出以下两点(1)判断网络 ...
- CQBZOJ 避开怪兽
题目描述 给出一个N行M列的地图,地图形成一个有N*M个格子的矩阵.地图中的空地用'.'表示.其中某些格子有怪兽,用'+'表示.某人要从起点格子'V'走到终点格子'J',他可以向上.下.左.右四个方向 ...
- c#数字图像处理(二)彩色图像灰度化,灰度图像二值化
为加快处理速度,在图像处理算法中,往往需要把彩色图像转换为灰度图像,在灰度图像上得到验证的算法,很容易移植到彩色图像上.24位彩色图像每个像素用3个字节表示,每个字节对应着R.G.B分量的亮度(红.绿 ...
- CSS-12-盒子模型
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- wireshark简单实用教程
转自:https://jingyan.baidu.com/article/c35dbcb0866b698916fcbc81.html wireshark是非常流行的网络封包分析软件,功能十分强大.可以 ...