zoukankan      html  css  js  c++  java
  • Docker Compose文件详解 V2

    Compose file reference

    语法:

    web:
         build: ./web
         ports:
         - "5000:5000"
         volumes:
         - .:/code
         links:
         - redis
    redis:
         image:redis

    build:可使用相对目录或绝对目录
    ports:可使用端口范围
    links:可使用别名,例如: -redis:web-redis

    build


    build: ./dir
    # build后可直接接Dockerfile所在目录,该目录必须存在Dockerfile

    build:
      context: ./dir
      dockerfile: Dockerfile-alternate
      args:
        buildno: 1
    image: webapp:tag
    # contest指定Dockerfile的目录。dockerfile指定Dockerfile文件名
    # args:不清楚
    # images:指定dockerfile构建出的镜像名,默认使用docker-compose.yml所在的文件夹名+service名

    context
    build:
      context: ./dir
    #指定Dockerfile所在的目录

    dockerfile
    build:
      context: .
      dockerfile: Dockerfile-alternate

    build: .
    dockerfile: Dockerfile-alternate
    # 当Dockerfile文件名不是默认名称时,使用dockerfile参数指定Dockerfile的文件名

    args


    cap_add, cap_drop
    Add or drop container capabilities. See man 7 capabilities for a full list.
    cap_add:
      - ALL

    cap_drop:
      - NET_ADMIN
      - SYS_ADMIN

    command
    覆盖Dockerfile中的command

    command: bundle exec thin -p 3000
    # 类似于dockerfile中的命令:
    command: [bundle, exec, thin, -p, 3000]



    container_name
     指定容器的名称
    container_name: my-web-container
    depends_on
    表示服务之前的依赖关系,有两个效果:
    • docker-compose up,启动web服务之前、启动redis、db。
    • docker-compose up web,启动web容器时,检查依赖depends_on的配置内容,先启动db和redis
    '2'
    services: 
    build: .
        depends_on:
           - db
          - redis
      redis:   
         image: redis
     db:   
        image: postgres
    dns
    自定义DNS,可以是单个的,也可以是列表.
    dns: 8.8.8.8
    dns:
      - 8.8.8.8
      - 9.9.9.9

    dns_search

    Custom DNS search domains. Can be a single value or a list.

    dns_search: example.com
    dns_search:
      - dc1.example.com
      - dc2.example.com
    tmpfs
    在容器中挂载一个tmpfs。
    # tmpfs可以理解成虚拟机磁盘,是创建在内存上,不是在硬盘上。读取速度快,重启后数据消失
    run
    tmpfs:
      - /run
      - /tmp
    entrypoint
    覆盖默认的entrypoint.
    entrypoint: /code/entrypoint.sh
    可以是个列表,类似dockerfile中的语法
    entrypoint:
        - php
        - -d
        - zend_extension=/usr/local/lib/php/extensions/no-debug-non-zts-20100525/xdebug.so
        - -d
        - memory_limit=-1
        - vendor/bin/phpunit
    env_file
    指定变量的文件,默认为docker-compose文件夹下的 .env 文件.
    同一个变量,通过export设置,会覆盖env_file中的变量.
    env_file: .env

    env_file:
      - ./common.env
      - ./apps/web.env
    env
    environment
    设置环境变量,支持数组和字典.
    environment:
      RACK_ENV: development
    'true'
      SESSION_SECRET:

    environment:
      - RACK_ENV=development
     - SHOW=true
     - SESSION_SECRET
    expose
    暴漏端口,并不会暴漏到宿主机上,而是提供给内部容器通信.
    expose:
     - "3000"
     - "8000"
    extends、
    external_links
    待补充

    extra_hosts
    添加主机映射. Use the same values as the docker client --add-host parameter.
    extra_hosts:
     - "somehost:162.242.195.82"
    - "otherhost:50.31.209.229"
    映射结果会体现在 /etc/hosts :
    162.242.195.82  somehost
    50.31.209.229   otherhost
    image
    指定基础镜像. 可以是镜像名称、镜像ID。
    version1中不允许build和image同时出现,version2中允许,image代表指定build之后的镜像名称。
    image: redis
    image: ubuntu:14.04image: tutum/influxdb
    image: example-registry.com:4000/postgresql
    image: a4bc65fd
    labels
    指定容器的标签.
    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"
    links
    连接其他容器,可以设置别名,设置link之后,hostname与IP的对应关系会写入到 /etc/hosts中. 和depend_on类似,设置link后,也间接的规定了容器的启动顺序.
    web:
      links:
      - db
     - redis
    logging
    设置容器的日志驱动.version 2 通过logging替换log_driver和log_opt
     options:
       syslog-address: "tcp://192.168.0.42:123"

    net

    Version 1 file format only. In version 2, use network_mode.
    为容器指定网络类型,version 1专用,version 2使用network_mode.
    net: "bridge"
    net: "host"
    net: "none"
    net: "container:[service name or container name/id]"

    network_mode

    Version 2 file format only. In version 1, use net.
    为容器指定网络类型.
    network_mode: "bridge"
    network_mode: "host"
    network_mode: "none"
    network_mode: "service:[service name]"
    network_mode: "container:[container name/id]"

    networks

    Version 2 file format only. In version 1, use net.

    Networks to join, referencing entries under the top-level networks key.
    services:
      some-service:
        networks:
         - some-network
         - other-network
    aliases
    待补充
    ipv4_address, ipv6_address
    指定容器的IP地址等,用法待补充,未操作

    pid
    通过设置,容器可通过ps查询宿主机的进程.
    pid: "host"
    ports
    暴漏容器的端口,可设置为8080:8080 或 :8080(宿主机端口随机).
    Note:建议使用引号
    ports:
     - "3000"
     - "3000-3005"
     - "8000:8000"
     - "9090-9091:8080-8081"
     - "49100:22"
     - "127.0.0.1:8001:8001"
     - "127.0.0.1:5000-5010:5000-5010"
    stop_signal
    待补充
    ulimits
    设置ulimit值,可替换掉docker或dockerfile默认的值.
    ulimits:
      nproc: 65535
      nofile:
        soft: 20000
        hard: 40000
    volumes, volume_driver
    挂载卷,如果不指定宿主机目录,会在volume默认目录创建挂载点。可单独挂载文件、可设置目录权限.  。
    volumes:
      # Just specify a path and let the Engine create a volume
      - /var/lib/mysql

      # Specify an absolute path mapping
      - /opt/data:/var/lib/mysql

      # Path on the host, relative to the Compose file
      - ./cache:/tmp/cache

      # User-relative path
      - ~/configs:/etc/configs/:ro

      # Named volume
    var/lib/mysql    # datavolume是通过docker volume create --name datavolume创建
    如果不使用宿主机存储,须臾奥指定 volume_driver.例如rancher的convoy fs。
    volume_driver: mydriver
    
    volumes_from
    从其他服务或容器挂载所有的volume, 可设置制度访问 (ro)或读写 (rw). 如果不设置,默认为读写模式。
    volumes_from:
     - service_name
     - service_name:ro
     - container:container_name
     - container:container_name:rw

    Note: The Container:... formats are only supported in the version 2 file format. In version 1, you can use container names without marking them as such:

    - service_name
    - service_name:ro
    - container_name
    - container_name:rw

    cpu_shares, cpu_quota, cpuset, domainname, hostname, ipc, mac_address, mem_limit, memswap_limit, privileged, read_only, restart, shm_size, stdin_open, tty, user, working_dir

    单独的值,类似于docker run的参数.
    cpu_shares: 73
    cpu_quota: 50000
    cpuset: 0,1

    user: postgresql
    working_dir: /code

    domainname: foo.com
    hostname: foo
    ipc: host
    mac_address: 02:42:ac:11:65:43

    mem_limit: 1000000000
    memswap_limit: 2000000000
    privileged: true

    restart: always

    read_only: true
    shm_size: 64M
    stdin_open: true
    tty: true
    Volume configuration reference
    driver
    设置volume的驱动,默认是local.
     driver: foobar
    driver_opts
    设置驱动的参数,不同的驱动所需要的参数不同.可选.
     driver_opts:
       foo: "bar"
       baz: 1
    external
    如果设置为true,指定volume在compose的外部,docker-compose up 时不去创建该volume。如果不存在报错.
    version: '2'

    services:
      db:
        image: postgres
        volumes:
          - data:/var/lib/postgresql/data

    volumes:
      data:
        external: true

    You can also specify the name of the volume separately from the name used to refer to it within the Compose file:


    volumes:
      data:
        external:
          name: actual-name-of-volume
    A more extended example, defining volumes and networks:
    version: '2'
    services:
      web:
        build: .
        ports:
         - "5000:5000"
        volumes:
         - .:/code
        networks:
          - front-tier
          - back-tier
      redis:
        image: redis
        volumes:
          - redis-data:/var/lib/redis
        networks:
          - back-tier
    volumes:
      redis-data:
        driver: local
    networks:
      front-tier:
        driver: bridge
      back-tier:
        driver: bridge



    version: '2'
    services:
      db:
        image: postgres
        volumes:
          - data:/var/lib/postgresql/data
    volumes:
      data: {}
  • 相关阅读:
    2020/5/8
    2020/5/8
    2020/5/6
    2020/4/30
    2020/4/29
    2020/4/28
    2020/4/27
    KMP算法详解
    博客搬家声明
    洛谷P2831 NOIP2016 愤怒的小鸟
  • 原文地址:https://www.cnblogs.com/antflow/p/7289709.html
Copyright © 2011-2022 走看看