zoukankan      html  css  js  c++  java
  • docker-compose.md

    安装

    pip

    python 2.7+的系统同yum先安装pip命令。

    # yum install -y python2-pip
    # pip install docker-compose
    

    网络安装

    # curl -L "https://github.com/docker/compose/releases/download/1.9.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
    # chmod +x /usr/local/bin/docker-compose
    

    compose file

    blkio_config

    用于为此服务设置块IO限制的一组配置选项。

    version: '2.2'
    services:
      foo:
        image: busybox
        blkio_config:
          weight: 300
          weight_device:
            - path: /dev/sda
              weight: 400
          device_read_bps:
            - path: /dev/sdb
              rate: '12mb'
          device_read_iops:
            - path: /dev/sdb
              rate: 120
          device_write_bps:
            - path: /dev/sdb
              rate: '1024k'
          device_write_iops:
            - path: /dev/sdb
              rate: 30
    

    DEVICE_READ_BPS, DEVICE_WRITE_BPS

    为给定设备上的读/写操作设置每秒字节数限制。 列表中的每个项目必须有两个键:

    • 路径,为受影响的设备定义符号路径
    • 速率,可以是表示字节数的整数值,也可以是表示字节值的字符串。

    DEVICE_READ_IOPS, DEVICE_WRITE_IOPS

    为给定设备上的读/写操作设置每秒操作的限制。 列表中的每个项目必须有两个键:

    • 路径,为受影响的设备定义符号路径
    • 速率,作为表示每秒允许的操作次数的整数值。

    WEIGHT

    修改分配给该服务的带宽相对于其他服务的比例。 采用10到1000之间的整数值,其中500是默认值。

    WEIGHT_DEVICE

    微调设备的带宽分配。 列表中的每个项目必须有两个键:

    • 路径,为受影响的设备定义符号路径
    • 权重,一个10到1000之间的整数值

    build

    在构建时应用的配置选项。
    build可以指定为包含构建上下文的路径的字符串,也可以指定具有在上下文中指定的路径的对象,也可以指定dockerfile和args。

    build: ./dir
    
    build:
      context: ./dir
      dockerfile: Dockerfile-alternate
      args:
        buildno: 1
    

    如果您指定了镜像以及构建,那么Compose会使用镜像中指定的webapp和可选标记命名构建的镜像:

    build: ./dir
    image: webapp:tag
    

    这将生成一个名为webapp和标记标签的图像,该镜像由./dir构建。

    CONTEXT

    可以是包含Dockerfile的目录的路径,也可以是到git存储库的url。
    当提供的值是相对路径时,它被解释为相对于撰写文件的位置。 这个目录也是发送到Docker守护进程的构建上下文。
    使用生成的名称构建并标记它,然后使用该镜像。

    build:
      context: ./dir
    

    DOCKERFILE

    替代Dockerfile。
    组合使用一个替代文件来构建。还必须指定构建路径。

    build:
      context: .
      dockerfile: Dockerfile-alternate
    

    ARGS

    添加构建参数,这些参数只有在构建过程中才可访问的环境变量。
    首先,在Dockerfile中指定参数:

    ARG buildno
    ARG password
    
    RUN echo "Build number: $buildno"
    RUN script-requiring-password.sh "$password"
    

    然后在构建键下面指定参数。你可以通过一个映射或一个列表:

    build:
      context: .
      args:
        buildno: 1
        password: secret
    
    build:
      context: .
      args:
        - buildno=1
        - password=secret
    

    在指定构建参数时,您可以省略该值,在这种情况下,它在构建时的值是构成正在运行的环境中的值。

    args:
      - buildno
      - password
    

    EXTRA_HOSTS

    在构建时添加主机名映射。使用与docker客户端相同的值——加载主机参数。

    extra_hosts:
     - "somehost:162.242.195.82"
     - "otherhost:50.31.209.229"
    

    一个带有ip地址和主机名的条目是在容器内的/etc/hosts中创建的。

    162.242.195.82  somehost
    50.31.209.229   otherhost
    

    LABELS

    使用Docker标签为生成的镜像添加元数据。您可以使用数组或字典。
    建议您使用反向dns标记来防止您的标签与其他软件所使用的标签相冲突。

    build:
      context: .
      labels:
        com.example.description: "Accounting webapp"
        com.example.department: "Finance"
        com.example.label-with-empty-value: ""
    
    
    build:
      context: .
      labels:
        - "com.example.description=Accounting webapp"
        - "com.example.department=Finance"
        - "com.example.label-with-empty-value"
    

    NETWORK

    在构建期间设置网络容器连接到运行指令。

    build:
      context: .
      network: host
    
    build:
      context: .
      network: custom_network_1
    

    SHM_SIZE

    为这个构建的容器设置/dev/shm分区的大小。指定为表示字节数或表示字节值的字符串的整数值。

    build:
      context: .
      shm_size: '2gb'
    
    build:
      context: .
      shm_size: 10000000
    

    TARGET

    构建在Dockerfile中定义的指定阶段。

      build:
        context: .
        target: prod
    

    cap_add, cap_drop

    添加或删除容器功能。See man 7 capabilities for a full list.

    cap_add:
      - ALL
    
    cap_drop:
      - NET_ADMIN
      - SYS_ADMIN
    

    command

    覆盖默认的命令。

    command: bundle exec thin -p 3000
    

    该命令也可以是一个列表,与dockerfile类似:

    command: ["bundle", "exec", "thin", "-p", "3000"]
    

    cgroup_parent

    为容器指定一个可选的父cgroup。

    cgroup_parent: m-executor-abcd
    

    container_name

    指定一个定制的容器名,而不是生成的默认名称。

    container_name: my-web-container
    

    因为Docker容器的名称必须是唯一的,所以如果您指定了一个自定义名称,您就不能将服务扩展到一个容器之外。尝试这样做会导致错误。

    devices

    设备映射列表。使用与设备docker客户端创建选项相同的格式。

    devices:
      - "/dev/ttyUSB0:/dev/ttyUSB0"
    

    depends_on

    在服务之间表达依赖性,这有两个影响:

    • 在依赖顺序中,docker-compose up启动服务。在下面的例子中,db和redis在web之前就开始了。
    • docker-compose up SERVICE自动包含服务的依赖项。在下面的例子中,docker-compose up web也创建和启动db和redis。
      简单的例子:
    version: '2'
    services:
      web:
        build: .
        depends_on:
          - db
          - redis
      redis:
        image: redis
      db:
        image: postgres
    

    healthcheck表示您想要依赖于等待另一个容器的“healthy”(从healthcheck中获得成功的状态)。
    例子:

    version: '2.1'
    services:
      web:
        build: .
        depends_on:
          db:
            condition: service_healthy
          redis:
            condition: service_started
      redis:
        image: redis
      db:
        image: redis
        healthcheck:
          test: "exit 0"
    

    在上面的示例中,在开始web之前,要为要启动的redis服务(遗留行为)和db服务进行等待。

    dns

    定制的DNS服务器。可以是一个单独的值,也可以是一个列表。

    dns: 8.8.8.8
    dns:
      - 8.8.8.8
      - 9.9.9.9
    

    dns_opt

    将定制的DNS选项列表添加到容器的resolv.conf文件中。

    dns_opt:
      - use-vc
      - no-tld-query
    

    dns_search

    定制的DNS搜索领域。可以是一个单独的值,也可以是一个列表。

    dns_search: example.com
    dns_search:
      - dc1.example.com
      - dc2.example.com
    

    tmpfs

    在容器中装入一个临时文件系统。可以是一个单独的值,也可以是一个列表。

    tmpfs: /run
    tmpfs:
      - /run
      - /tmp
    

    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
    

    注意:设置ENTRYPOINT不仅覆盖了服务映像上的任何默认入口点,还包括了入口点Dockerfile指令,并清除了图像上的任何默认命令——这意味着如果Dockerfile中有CMD指令,那么它将被忽略。

    env_file

    从一个文件中添加环境变量。可以是一个单独的值,也可以是一个列表。
    如果您已经指定了一个带有docker-compose -f FILE的组合文件,那么envfile中的路径相对于文件所在的目录来说是相对的。
    在环境部分中声明的环境变量将覆盖这些值——即使这些值是空的或未定义的,这也是成立的。

    env_file: .env
    
    env_file:
      - ./common.env
      - ./apps/web.env
      - /opt/secrets.env
    

    environment

    添加环境变量。您可以使用数组或字典。布尔值;True、False、yes no,需要用引号括起来,以确保它们不会被YML解析器转换为True或False。
    只有一个键的环境变量被解析为在机器组合上运行的值,这对于秘密或特定于主机的值是有帮助的。

    environment:
      RACK_ENV: development
      SHOW: 'true'
      SESSION_SECRET:
    
    environment:
      - RACK_ENV=development
      - SHOW=true
      - SESSION_SECRET
    

    注意:如果您的服务指定了构建选项,那么在构建过程中定义的变量不会自动可见。使用build的args子选项来定义构建时环境变量。

    expose

    公开端口,而不将它们发布到主机上——它们只能访问链接的服务。只能指定内部端口。

    expose:
     - "3000"
     - "8000"
    

    extends

    在当前文件或其他文件中扩展另一个服务,可选地覆盖配置。
    您可以在任何服务上使用扩展和其他配置键。扩展值必须是一个定义了一个必需的服务和一个可选的文件键的字典。

    extends:
      file: common.yml
      service: webapp
    

    服务被扩展的服务的名称,例如web或database。该文件是定义该服务的组合配置文件的位置。
    如果您省略了文件,那么在当前文件中查找服务配置。文件的值可以是一个绝对或相对路径。如果指定一个相对路径,则将其视为相对于当前文件的位置。
    您可以扩展服务本身来扩展另一个服务。你可以无限期延长。组合不支持循环引用,如果遇到一个错误,就会返回一个错误。

    external_links

    链接到这个docker-compose.yml之外的容器,甚至在组合之外,特别是对于提供共享或公共服务的容器。当指定容器名和链接别名(CONTAINER:ALIAS)时,external_links遵循与links类似的语义。

    external_links:
     - redis_1
     - project_db_1:mysql
     - project_db_1:postgresql
    

    extra_hosts

    添加主机名映射。 使用与docker客户端--add-host参数相同的值。

    extra_hosts:
     - "somehost:162.242.195.82"
     - "otherhost:50.31.209.229"
    

    group_add

    指定容器内的用户应该作为成员的附加组(通过名称或数字)。必须在容器和要添加的主机系统中存在组。当多个容器(作为不同的用户运行)需要在主机系统上读取或写入相同的文件时,这是有用的一个例子。该文件可以由所有容器共享的组拥有,并在group_add中指定。

    version: '2'
    services:
      myservice:
        image: alpine
        group_add:
          - mail
    

    在创建的容器中运行id显示用户属于mail组,如果不使用group_add,情况就不会如此。

    healthcheck

    配置一个检查,以确定该服务的容器是否“healthy ”。

    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost"]
      interval: 1m30s
      timeout: 10s
      retries: 3
      start_period: 40s
    

    interval,timeout和start_period被指定为持续时间。
    test必须是一个字符串或一个列表。 如果是列表,则第一项必须是NONE,CMD或CMD-SHELL。 如果它是一个字符串,则相当于指定CMD-SHELL,后跟该字符串。

    # Hit the local web app
    test: ["CMD", "curl", "-f", "http://localhost"]
    
    # As above, but wrapped in /bin/sh. Both forms below are equivalent.
    test: ["CMD-SHELL", "curl -f http://localhost && echo 'cool, it works'"]
    test: curl -f https://localhost && echo 'cool, it works'
    

    要禁用图像设置的任何默认healthcheck,您可以使用disable: true。这相当于指定test: ["NONE"]。

    healthcheck:
      disable: true
    

    注意:start_period选项是更新的功能,仅适用于2.3文件格式。

    image

    指定要启动容器的映像。可以是存储库/标记,也可以是局部镜像ID。

    image: redis
    image: ubuntu:14.04
    image: tutum/influxdb
    image: example-registry.com:4000/postgresql
    image: a4bc65fd
    

    如果镜像不存在,Compose就尝试拉它,除非您也指定了构建,在这种情况下,它使用指定的选项来构建它,并使用指定的标记标记它。

    init

    在容器中运行一个init,它可以转发信号并重新获得进程。要么设置一个布尔值来使用默认的init,要么指定一条自定义的路径。

    version: '2.2'
    services:
      web:
        image: alpine:latest
        init: true
    
    version: '2.2'
    services:
      web:
        image: alpine:latest
        init: /usr/libexec/docker-init
    

    isolation

    指定容器的隔离技术。

    labels

    使用Docker labels向容器添加元数据。您可以使用数组或字典。
    建议您使用反向dns标记来防止您的标签与其他软件所使用的标签相冲突。

    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

    链接到另一个服务中的容器。 既可以指定服务名称又可以指定链接别名(“SERVICE:ALIAS”),或者仅指定服务名称。链接是遗留选项。 我们建议使用网络。

    web:
      links:
       - "db"
       - "db:database"
       - "redis"
    

    链接服务的容器可以在与别名相同的主机名中访问,也可以在没有指定别名的情况下使用服务名。
    链接还以与依赖项相同的方式表示服务之间的依赖关系,因此它们决定了服务启动的顺序。
    注意:如果您定义了链接和网络,那么带有链接的服务必须共享至少一个公共网络,以便进行通信。我们建议使用网络。

    logging

    为服务进行日志配置。

    logging:
      driver: syslog
      options:
        syslog-address: "tcp://192.168.0.42:123"
    

    驱动程序名称指定服务容器的日志记录驱动程序,与docker run的--log-driver选项一样。
    默认值是json文件。

    driver: "json-file"
    driver: "syslog"
    driver: "none"
    

    network_mode

    网络模式。 使用与docker客户端相同的值--net参数,以及特殊的表单service:[service name]。

    network_mode: "bridge"
    network_mode: "host"
    network_mode: "none"
    network_mode: "service:[service name]"
    network_mode: "container:[container name/id]"
    

    networks

    加入网络,引用顶级网络密钥下的条目。

    services:
      some-service:
        networks:
         - some-network
         - other-network
    

    ALIASES

    网络上此服务的别名(备用主机名)。 同一网络上的其他容器可以使用服务名称或别名来连接到某个服务的容器。
    由于别名是网络范围的,相同的服务可以在不同的网络上具有不同的别名。

    services:
      some-service:
        networks:
          some-network:
            aliases:
             - alias1
             - alias3
          other-network:
            aliases:
             - alias2
    

    在下面的例子中,提供了三种服务(web,worker和db)以及两个网络(新的和旧的)。 数据库服务可以在新网络上的主机名数据库或数据库以及旧数据库上的db或mysql上访问。

    version: '2'
    
    services:
      web:
        build: ./web
        networks:
          - new
    
      worker:
        build: ./worker
        networks:
          - legacy
    
      db:
        image: mysql
        networks:
          new:
            aliases:
              - database
          legacy:
            aliases:
              - mysql
    
    networks:
      new:
      legacy:
    

    IPV4_ADDRESS, IPV6_ADDRESS

    加入网络时,为此服务的容器指定一个静态IP地址。
    顶级网络部分中的相应网络配置必须具有ipam块,其中包含每个静态地址的子网和网关配置。 如果需要IPv6寻址,则必须设置enable_ipv6选项。

    version: '2.1'
    
    services:
      app:
        image: busybox
        command: ifconfig
        networks:
          app_net:
            ipv4_address: 172.16.238.10
            ipv6_address: 2001:3984:3989::10
    
    networks:
      app_net:
        driver: bridge
        enable_ipv6: true
        ipam:
          driver: default
          config:
          - subnet: 172.16.238.0/24
            gateway: 172.16.238.1
          - subnet: 2001:3984:3989::/64
            gateway: 2001:3984:3989::1
    

    LINK_LOCAL_IPS

    指定一个链接本地ip的列表。链路本地ip是一种特殊的ip,它属于一个众所周知的子网,由操作员完全管理,通常依赖于其部署的架构。因此,他们不是由docker(IPAM驱动)管理的。

    version: '2.1'
    services:
      app:
        image: busybox
        command: top
        networks:
          app_net:
            link_local_ips:
              - 57.123.22.11
              - 57.123.22.13
    networks:
      app_net:
        driver: bridge
    

    PRIORITY

    指定一个优先级来指明Compose应该将服务的容器连接到其网络的顺序。 如果未指定,则默认值为0。
    在以下示例中,应用服务首先连接到app_net_1,因为它具有最高优先级。 然后它连接到app_net_3,然后是app_net_2,它使用默认优先级值0。

    version: '2.3'
    services:
      app:
        image: busybox
        command: top
        networks:
          app_net_1:
            priority: 1000
          app_net_2:
    
          app_net_3:
            priority: 100
    networks:
      app_net_1:
      app_net_2:
      app_net_3:
    

    pid

    pid: "host"
    pid: "container:custom_container_1"
    pid: "service:foobar"
    

    如果设置为以下格式之一:container:<container_name>service:<service_name>,则该服务共享指定容器或服务的PID地址空间。
    如果设置为“主机”,则服务的PID模式是主机PID模式。 这将打开容器与主机操作系统之间的共享PID地址空间。 使用此标志启动的容器可以访问和操作裸机的名称空间中的其他容器,反之亦然。

    pids_limit

    调整一个容器的pid限制。设置为-1,无限的pid。

    pids_limit: 10
    

    ports

    公开端口。 既可以指定两个端口(HOST:CONTAINER),也可以指定容器端口(选择临时主机端口)。

    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"
     - "6060:6060/udp"
     - "12400-12500:1240"
    

    runtime

    指定用于服务容器的运行时间。 默认运行时和可用运行时在docker info的输出中列出。

    web:
      image: busybox:latest
      command: true
      runtime: runc
    

    scale

    指定要为此服务部署的默认容器数量。 无论何时运行docker-compose,Compose都会创建或移除容器以匹配指定的编号。 该值可以使用--scale标志覆盖。

    web:
      image: busybox:latest
      command: echo 'scaled'
      scale: 3
    

    security_opt

    覆盖每个容器的默认标记方案。

    security_opt:
      - label:user:USER
      - label:role:ROLE
    

    stop_grace_period

    指定在发送SIGKILL之前,如果试图停止一个容器(如果它没有处理SIGTERM)(或者使用stop_signal指定了任何停止信号),请等待多久。 指定为持续时间。

    stop_grace_period: 1s
    stop_grace_period: 1m30s
    

    默认情况下,停止在发送SIGKILL之前等待10秒钟容器退出。

    stop_signal

    设置一个替代信号来停止容器。 默认停止使用SIGTERM。 使用stop_signal设置替代信号会导致停止发送该信号。

    stop_signal: SIGUSR1
    

    storage_opt

    为此服务设置存储驱动程序选项。

    storage_opt:
      size: '1G'
    

    sysctls

    在容器中设置的内核参数。 您可以使用数组或字典。

    sysctls:
      net.core.somaxconn: 1024
      net.ipv4.tcp_syncookies: 0
    
    sysctls:
      - net.core.somaxconn=1024
      - net.ipv4.tcp_syncookies=0
    

    ulimits

    覆盖容器的默认ulimit。您可以将单个限制指定为整数或软/硬限制作为映射。

    ulimits:
      nproc: 65535
      nofile:
        soft: 20000
        hard: 40000
    

    userns_mode

    userns_mode: "host"
    

    如果Docker守护程序配置了用户命名空间,则禁用此服务的用户命名空间。

    volumes

    装载主机文件夹或命名卷。 命名卷需要使用顶级卷密钥指定。
    您可以在主机上挂载相对路径,该路径相对于正在使用的Compose配置文件的目录进行扩展。

    SHORT SYNTAX

    短语法使用通用的[SOURCE:]TARGET[:MODE]格式,其中SOURCE可以是主机路径或卷名称。 TARGET是卷安装的容器路径。 标准模式是ro为只读,rw为读写(默认)。

    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
      - datavolume:/var/lib/mysql
    

    LONG SYNTAX

    长表单语法允许在短表单中不能表示的其他字段的配置。

    • type: the mount type volume, bind, tmpfs or npipe
    • source: the source of the mount, a path on the host for a bind mount, or the name of a volume defined in the top-level volumes key. Not applicable for a tmpfs mount.
    • target: the path in the container where the volume is mounted
    • read_only: flag to set the volume as read-only
    • bind: configure additional bind options
      • propagation: the propagation mode used for the bind
    • volume: configure additional volume options
      • nocopy: flag to disable copying of data from a container when a volume is created
    version: "3.2"
    services:
      web:
        image: nginx:alpine
        ports:
          - "80:80"
        volumes:
          - type: volume
            source: mydata
            target: /data
            volume:
              nocopy: true
          - type: bind
            source: ./static
            target: /opt/app/static
    
    networks:
      webnet:
    
    volumes:
      mydata:
    

    volume_driver

    指定用于此服务上所有已声明卷的默认卷驱动程序。

    volume_driver: mydriver
    

    volumes_from

    装载来自其他服务或容器的所有卷,可选择指定只读访问(ro)或读写(rw)。 如果未指定访问级别,则使用读写。

    volumes_from:
     - service_name
     - service_name:ro
     - container:container_name
     - container:container_name:rw
    

    restart

    no是默认的重启策略,在任何情况下都不会重启容器。 指定为always时,容器总是重新启动。The on-failure policy restarts a container if the exit code indicates an on-failure error.

      - restart: no
      - restart: always
      - restart: on-failure
    

    cpu_count, cpu_percent, cpu_shares, cpu_quota, cpus, cpuset, domainname, hostname, ipc, mac_address, mem_limit, memswap_limit, mem_swappiness, mem_reservation, oom_kill_disable, oom_score_adj, privileged, read_only, shm_size, stdin_open, tty, user, working_dir

    每一个都是一个单独的值,类似于docker运行的对应。

    cpu_count: 2
    cpu_percent: 50
    cpus: 0.5
    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
    mem_reservation: 512m
    privileged: true
    
    oom_score_adj: 500
    oom_kill_disable: true
    
    read_only: true
    shm_size: 64M
    stdin_open: true
    tty: true
    

    https://docs.docker.com/compose/compose-file/compose-file-v2/

  • 相关阅读:
    尝试Spring Data Jpa--告别CRUD
    SSM框架开发web项目系列(七) SpringMVC请求接收
    SSM框架开发web项目系列(六) SpringMVC入门
    SSM框架开发web项目系列(五) Spring集成MyBatis
    SSM框架开发web项目系列(四) MyBatis之快速掌握动态SQL
    SSM框架开发web项目系列(三) MyBatis之resultMap及关联映射
    SSM框架开发web项目系列(二) MyBatis真正的力量
    从MVC到Ajax再到前后端分离的思考
    SSM框架开发web项目系列(一) 环境搭建篇
    antd4.0 定制主题
  • 原文地址:https://www.cnblogs.com/cuchadanfan/p/8567214.html
Copyright © 2011-2022 走看看