Docker Compose 模板文件 V2

  

  模板文件是使用Compose的核心,默認模板文件名稱爲docker-compose.yml ,格式爲YAML格式。python

 

目錄結構mysql

[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 文件配置nginx

[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

 

 

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

 

 

# 相似於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"

 

 

# 設置容器日誌驅動
# 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
相關文章
相關標籤/搜索