DockerCompose模板⽂件V2
模板⽂件是使⽤Compose的核⼼,默认模板⽂件名称为l ,格式为YAML格式。
⽬录结构
[root@localhost ~]# tree /opt/compose-conf/jenkins/
/opt/compose-conf/jenkins/
├── conf
│├── ansible.cfg
│├── ansible.cfg.bak
│└── hosts
├── core
│└── Dockerfile
└── l
/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/l
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所在⽬录(可以是绝对路径,或者l ⽂件的相对路径)。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
# 多个
dns_search:
- ample
- ample
tmpfs 在容器中挂载⼀个tmpfs
# tmpfs 可以理解成虚拟机磁盘,是创建在内存上,不是硬盘上,读取速度快,重启后数据消失
tmpfs: /run
tpmfs:
- /run
-
/tmp
env_file 指定变量⽂件,可以为党⽂件路径或列表
# 如果通过docker-compose -f File ⽅式来指定Compose模板⽂件,则nev_file中变量路径会基于模板⽂件路径。# 如果变量名称与environment 指令冲突,则按照惯例以后者为准
# 环境变量⽂件中每⼀⾏必须符合格式,⽀持#开通的注释⾏
# 单个
env_file: .env
# 多个
docker重启容器命令env_file:
- ./v
- ./v
- /v
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服务,定义的基础模板 l
webapp:
build: ./webapp
environment:
- DEBUG='false'
- RACK_ENV=development
在编写⼀个新的l ⽂件,使⽤l ⽂件中的webapp服务进⾏扩展
web:
extends:
file: l
service: webapp
ports:
- "3000:3000"
links:
- db
environment:
-
DEBUG='true'
db:
imgae: postgres
# external_links 链接到l 外部容器,甚⾄可以是⾮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
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论