• 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
    
    
  • 相关阅读:
    c#常用简化语句
    SQL语句使用中的笔录
    UpdateProgress 实现加载效果
    maven的下载安装,配置本地仓库
    IntelliJ IDEA启动Tomcat后,无法访问Tomcat主页
    SSM框架实现分页
    mybatis-generator-xxxx 使用方法
    Mybatis错误:Parameter 'XXX' not found. Available parameters are [1, 0, param1, param2]
    mybatis高级映射(一对一,一对多)
    SSM整合---实现全部用户查询
  • 原文地址:https://www.cnblogs.com/lmx1002/p/8404772.html
Copyright © 2020-2023  润新知