zoukankan      html  css  js  c++  java
  • 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
    
    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
    
    
  • 相关阅读:
    HDU 3572 Task Schedule(拆点+最大流dinic)
    POJ 1236 Network of Schools(Tarjan缩点)
    HDU 3605 Escape(状压+最大流)
    HDU 1166 敌兵布阵(分块)
    Leetcode 223 Rectangle Area
    Leetcode 219 Contains Duplicate II STL
    Leetcode 36 Valid Sudoku
    Leetcode 88 Merge Sorted Array STL
    Leetcode 160 Intersection of Two Linked Lists 单向链表
    Leetcode 111 Minimum Depth of Binary Tree 二叉树
  • 原文地址:https://www.cnblogs.com/lmx1002/p/8404772.html
Copyright © 2011-2022 走看看