模板文件是使用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的更多相关文章

  1. Docker Compose模板文件介绍

    模板文件是使用 Compose 的核心,涉及到的指令关键字也比较多,这里面大部分指令跟 docker run 相关参数的含义都是类似的.默认的模板文件名称为 docker-compose.yml ,格 ...

  2. Compose 模板文件

    模板文件是使用 Compose 的核心,涉及到的指令关键字也比较多.但大家不用担心,这里面大部分指令跟 docker run 相关参数的含义都是类似的. 默认的模板文件名称为 docker-compo ...

  3. Docker Compose YML文件配置

    Docker Compose YML 默认的模板文件是 docker-compose.yml,其中定义的每个服务都必须通过 image 指令指定镜像或 build 指令(需要 Dockerfile)来 ...

  4. docker compose yml 文件常用字段简介

    常用参数: version # 指定 compose 文件的版本 services # 定义所有的 service 信息, services 下面的第一级别的 key 既是一个 service 的名称 ...

  5. Docker 容器编排利器 Docker Compose

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

  6. Docker Compose 搭建 Redis Cluster 集群环境

    在前文<Docker 搭建 Redis Cluster 集群环境>中我已经教过大家如何搭建了,本文使用 Docker Compose 再带大家搭建一遍,其目的主要是为了让大家感受 Dock ...

  7. 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 ...

  8. Docker Compose容器编排

    Compose是Docker官方的开源项目,可以实现对Docker容器集群的快速编排.Compose 中有两个重要的概念:服务(service):一个应用的容器,实际上可以包括若干运行相同镜像的容器实 ...

  9. Docker(四):Docker 三剑客之 Docker Compose

    前两篇文章我们介绍了 Dockerfile 的使用Docker(二):Dockerfile 使用介绍,我们知道使用一个 Dockerfile 模板文件可以定义一个单独的应用容器,如果需要定义多个容器就 ...

随机推荐

  1. js六种数据类型

    六种数据类型: undefined . boolean  .string .number .object .function 效果地址:https://scrimba.com/c/cEedDGTd 代 ...

  2. Tarjan强连通分量模板

    最好还是看一看下面这个网址吧 我的这篇博客里的代码更加缜密(毫无错误的神级代码)https://www.cnblogs.com/Tidoblogs/p/11315153.html https://ww ...

  3. ntelliJ IDEA添加注释常用的快捷键

    IDEA可以使用快捷键添加行注释Ctrl+/.块注释Ctrl+Shift+/,还可以快速生成类注释.方法注释等,下面就介绍这几种快捷键的用法

  4. Linux下搭建Jmeter+Ant+Jenkins自动化测试框架

    前言 在之前的文章中,我们学习了通过Ant调用Jmeter脚本生成HTML测试报告,但未实现自动执行脚本生成报告,同时生成的报告是在Linux下,查看报告很不方便.因此,我们将结合Jenkins来进一 ...

  5. 关于C++读入数字按位取出与进制转换问题

    这一片博客我就不写具体的一个题了,只是总结一种典型问题——读入数字按位取出. 就拿数字12345举例吧. 是首先,我们要取出个位.这样取出: 12345/1=12345 12345%10=5.    ...

  6. Isx个人第4次作业—Alpha项目测试

    标题 内容 这个作业属于哪个课程 https://edu.cnblogs.com/campus/xnsy/GeographicInformationScience 这个作业要求在哪里 https:// ...

  7. Linux 高压缩率工具 XZ 压缩详解

    目录 一.XZ 基础信息 二.安装 三.详解 3.1.常用的参数 3.2. 常用命令 四.扩展 4.1.unxz 4.2.xzcat 4.3.lzma 4.4.unlzma 4.5.lzcat 一.X ...

  8. mysql--->mysql慢查询

    简介 > 开启慢查询日志,可以让MySQL记录下查询超过指定时间的语句,通过定位分析性能的瓶颈,才能更好的优化数据库系统的性能 参数及命令说明 查看慢查询是否开启和日志存储地址 show var ...

  9. Windows 下部署Subversion

    前言 此文章介绍用户在windows环境下部署svn服务,部署svn服务的方式并不是唯一的,我这里仅仅列出了其中很普通的一种,若使用者有其他喜欢的方式也可自行选择 名词介绍 VisualSVN Ser ...

  10. ElasticSearch系列专栏

    最近我们公司因业务发展较快,不少服务遇到了一些瓶颈,影响最大的就是数据量的暴增带来的搜索效率的问题.虽然建立索引以及利用好缓存可以有效地缓解该问题,但是随着业务的发展,业务的复杂度也逐渐提升,原有的技 ...