精华内容
下载资源
问答
  • Docker-Compose模板文件命令参考
    千次阅读
    2021-12-12 11:20:25

    Docker-Compose允许用户通过一个docker-compose.yml模板文件(YAML 格式)来定义一组相关联的应用容器为一个项目(project)。

    Compose模板文件是一个定义服务、网络和卷的YAML文件。Compose模板文件默认路径是当前目录下的docker-compose.yml,可以使用.yml或.yaml作为文件扩展名。

    Docker-Compose标准模板文件应该包含version、services、networks三大部分,最关键的是services和networks两个部分。

    参考官网:https://github.com/compose-spec/compose-spec/blob/master/spec.md

    举例:

    version: '2'
    services:
      web:
        image: dockercloud/hello-world
        ports:
          - 8080
        networks:
          - front-tier
          - back-tier
     
      redis:
        image: redis
        links:
          - web
        networks:
          - back-tier
     
      lb:
        image: dockercloud/haproxy
        ports:
          - 80:80
        links:
          - web
        networks:
          - front-tier
          - back-tier
        volumes:
          - /var/run/docker.sock:/var/run/docker.sock
     
    networks:
      front-tier:
        driver: bridge
      back-tier:
        driver: bridge
    

    version

    Compose目前有三个版本分别为Version 1,Version 2,Version 3,Compose区分Version 1和Version 2(Compose 1.6.0+,Docker Engine 1.10.0+)。Version 2支持更多的指令。Version 1将来会被弃用。

    image

    image是指定服务的镜像名称或镜像ID。如果镜像在本地不存在,Compose将会尝试拉取镜像。

    services:
      web:
        image: dockercloud/hello-world
    

    build

    服务除了可以基于指定的镜像,还可以基于一份Dockerfile,在使用up启动时执行构建任务,构建标签是build,可以指定Dockerfile所在文件夹的路径。Compose将会利用Dockerfile自动构建镜像,然后使用镜像启动服务容器。

    build: /path/to/build/dir
    

    也可以是相对路径,只要上下文确定就可以读取到Dockerfile。

    build: ./dir
    

    设定上下文根目录,然后以该目录为准指定Dockerfile。

    build:
    	context: ../
    	dockerfile: path/of/Dockerfile
    

    build都是一个目录,如果要指定Dockerfile文件需要在build标签的子级标签中使用dockerfile标签指定。如果同时指定image和build两个标签,那么Compose会构建镜像并且把镜像命名为image值指定的名字。

    context

    context选项可以是Dockerfile的文件路径,也可以是到链接到git仓库的url,当提供的值是相对路径时,被解析为相对于撰写文件的路径,此目录也是发送到Docker守护进程的context

    build:
    	context: ./dir
    

    dockerfile

    使用dockerfile文件来构建,必须指定构建路径

    build:
    	context: .
    	dockerfile: Dockerfile-alternate
    

    command

    使用command可以覆盖容器启动后默认执行的命令。

    command: bundle exec thin -p 3000
    

    container_name

    Compose的容器名称格式是:<项目名称><服务名称><序号>

    可以自定义项目名称、服务名称,但如果想完全控制容器的命名,可以使用标签指定:

    container_name: app
    

    depends_on

    在使用Compose时,最大的好处就是少打启动命令,但一般项目容器启动的顺序是有要求的,如果直接从上到下启动容器,必然会因为容器依赖问题而启动失败。例如在没启动数据库容器的时候启动应用容器,应用容器会因为找不到数据库而退出。depends_on标签用于解决容器的依赖、启动先后的问题:

    version: '2'
    services:
      web:
        build: .
        depends_on:
          - db
          - redis
      redis:
        image: redis
      db:
        image: postgres
    

    上述YAML文件定义的容器会先启动redis和db两个服务,最后才启动web服务。

    PID

    pid: "host"
    

    将PID模式设置为主机PID模式,跟主机系统共享进程命名空间。容器使用pid标签将能够访问和操纵其他容器和宿主机的名称空间。

    ports

    ports用于映射端口的标签。

    使用HOST:CONTAINER格式或者只是指定容器的端口,宿主机会随机映射端口。

    ports:
     - "3000"
     - "8000:8000"
     - "49100:22"
     - "127.0.0.1:8001:8001"
    

    当使用HOST:CONTAINER格式来映射端口时,如果使用的容器端口小于60可能会得到错误得结果,因为YAML将会解析xx:yy这种数字格式为60进制。所以建议采用字符串格式。

    extra_hosts

    添加主机名的标签,会在/etc/hosts文件中添加一些记录。

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

    启动后查看容器内部hosts:

    162.242.195.82  somehost
    50.31.209.229   otherhost
    

    volumes

    挂载一个目录或者一个已存在的数据卷容器,可以直接使用[HOST:CONTAINER]格式,或者使用[HOST:CONTAINER:ro]格式,后者对于容器来说,数据卷是只读的,可以有效保护宿主机的文件系统。Compose的数据卷指定路径可以是相对路径,使用.或者…来指定相对目录。

    数据卷的格式可以是下面多种形式

    volumes:
      // 只是指定一个路径,Docker 会自动在创建一个数据卷(这个路径是容器内部的)。
      - /var/lib/mysql
      // 使用绝对路径挂载数据卷
      - /opt/data:/var/lib/mysql
      // 以 Compose 配置文件为中心的相对路径作为数据卷挂载到容器。
      - ./cache:/tmp/cache
      // 使用用户的相对路径(~/ 表示的目录是 /home/<用户目录>/ 或者 /root/)。
      - ~/configs:/etc/configs/:ro
      // 已经存在的命名的数据卷。
      - datavolume:/var/lib/mysql
    

    如果不使用宿主机的路径,可以指定一个volume_driver。

    volume_driver: mydriver
    

    volumes_from

    从另一个服务或容器挂载其数据卷:

    volumes_from:
       - service_name   
         - container_name
    

    dns

    自定义DNS服务器。可以是一个值,也可以是一个列表。

    dns:8.8.8.8
    dns:
        - 8.8.8.8   
        - 9.9.9.9
    

    expose

    暴露端口,但不映射到宿主机,只允许能被连接的服务访问。仅可以指定内部端口为参数,如下所示:

    expose:
        - "3000"
        - "8000"
    

    links

    链接到其它服务中的容器。使用服务名称(同时作为别名),或者“服务名称:服务别名”(如 SERVICE:ALIAS),例如:

    links:
        - db
        - db:database
        - redis
    

    net

    设置网络模式。

    net: "bridge"
    net: "none"
    net: "host"
    

    cap_add,cap_drop

    添加或删除容器拥有的宿主机的内核功能。

    cap_add:
      - ALL # 开启全部权限
    
    cap_drop:
      - SYS_PTRACE # 关闭 ptrace权限
    

    cgroup_parent

    为容器指定父cgroup组,意味着将继承该组的资源限制。

    cgroup_parent: m-executor-abcd
    

    dns_search

    自定义DNS搜索域。可以是单个值或列表。

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

    entrypoint

    覆盖容器默认的 entrypoint。

    entrypoint: /code/entrypoint.sh
    

    也可以是以下格式:

    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

    从文件添加环境变量。可以是单个值或列表的多个值。

    env_file: .env
    

    也可以是列表格式:

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

    environment

    添加环境变量。您可以使用数组或字典、任何布尔值,布尔值需要用引号引起来,以确保 YML 解析器不会将其转换为 True 或 False。

    environment:
      RACK_ENV: development
      SHOW: 'true'
    

    healthcheck

    用于检测docker服务是否健康运行。

    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost"] # 设置检测程序
      interval: 1m30s # 设置检测间隔
      timeout: 10s # 设置检测超时时间
      retries: 3 # 设置重试次数
      start_period: 40s # 启动后,多少秒开始启动检测程序
    

    logging

    服务的日志记录配置。

    driver:指定服务容器的日志记录驱动程序,默认值为json-file。有以下三个选项

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

    仅在json-file驱动程序下,可以使用以下参数,限制日志得数量和大小。

    logging:
      driver: json-file
      options:
        max-size: "200k" # 单个文件大小为200k
        max-file: "10" # 最多10个文件
    

    当达到文件限制上限,会自动删除旧得文件。

    syslog驱动程序下,可以使用syslog-address指定日志接收地址。

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

    networks

    配置容器连接的网络,引用顶级networks下的条目 。

    services:
      some-service:
        networks:
          some-network:
            aliases:
             - alias1
          other-network:
            aliases:
             - alias2
    networks:
      some-network:
        # Use a custom driver
        driver: custom-driver-1
      other-network:
        # Use a custom driver which takes special options
        driver: custom-driver-2
    

    aliases:同一网络上的其他容器可以使用服务名称或此别名来连接到对应容器的服务。

    restart

    • no:是默认的重启策略,在任何情况下都不会重启容器。
    • always:容器总是重新启动。
    • on-failure:在容器非正常退出时(退出状态非0),才会重启容器。
    • unless-stopped:在容器退出时总是重启容器,但是不考虑在Docker守护进程启动时就已经停止了的容器
    restart: "no"
    restart: always
    restart: on-failure
    restart: unless-stopped
    

    注:swarm集群模式,请改用restart_policy。

    secrets

    存储敏感数据,例如密码:

    version: "3.1"
    services:
    
    mysql:
      image: mysql
      environment:
        MYSQL_ROOT_PASSWORD_FILE: /run/secrets/my_secret
      secrets:
        - my_secret
    
    secrets:
      my_secret:
        file: ./my_secret.txt
    

    security_opt

    修改容器默认的schema标签。

    security-opt:
      - label:user:USER   # 设置容器的用户标签
      - label:role:ROLE   # 设置容器的角色标签
      - label:type:TYPE   # 设置容器的安全策略标签
      - label:level:LEVEL  # 设置容器的安全等级标签
    

    stop_grace_period

    指定在容器无法处理SIGTERM (或者任何 stop_signal 的信号),等待多久后发送SIGKILL信号关闭容器。

    stop_grace_period: 1s # 等待 1 秒
    stop_grace_period: 1m30s # 等待 1 分 30 秒 
    

    默认的等待时间是10秒。

    stop_signal

    设置停止容器的替代信号。默认情况下使用SIGTERM 。

    以下示例,使用SIGUSR1替代信号SIGTERM来停止容器。

    stop_signal: SIGUSR1
    

    sysctls

    设置容器中的内核参数,可以使用数组或字典格式。

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

    tmpfs

    在容器内安装一个临时文件系统。可以是单个值或列表的多个值。

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

    ulimits

    覆盖容器默认的ulimit。

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

    devices

    指定设备映射列表。

    devices:
      - "/dev/ttyUSB0:/dev/ttyUSB0"
    
    更多相关内容
  • Licote是Linux command template的缩写,顾名思义就是Linux命令模板。用于快速编写一个linux环境的命令程序,当然如果你愿意,你可以用于任何程序中;Licote的主要任务就是帮助你解析linux环境下的常用命令选项,让...
  • Licote是Linux command template的缩写,顾名思义就是Linux命令模板。用于快速编写一个linux环境的命令程序,当然如果你愿意,你可以用于任何程序中;Licote的主要任务就是帮助你解析linux环境下的常用命令选项,让...
  • team_profile_generator 从后端使用命令模板生成团队资料
  • pentest-studio:审核员的项目管理。 创建命令模板并一键执行
  • Licote是Linux command template的缩写,顾名思义就是Linux命令模板。用于快速编写一个linux环境的命令程序,Licote的主要任务是帮助你解析linux环境下的常用命令选项,让你快速编写命令程序的同时,为用户提供灵活而...
  • Licote是Linux command template的缩写,顾名思义就是Linux命令模板。用于快速编写一个linux环境的命令程序,当然如果你愿意,你可以用于任何程序中;Licote的主要任务就是帮助你解析linux环境下的常用命令选项,让...
  • Licote是Linux command template的缩写,顾名思义就是Linux命令模板。用于快速编写一个linux环境的命令程序,当然如果你愿意,你可以用于任何程序中;Licote的主要任务就是帮助你解析linux环境下的常用命令选项,让...
  • Licote是Linux command template的缩写,顾名思义就是Linux命令模板。用于快速编写一个linux环境的命令程序,当然如果你愿意,你可以用于任何程序中;Licote的主要任务就是帮助你解析linux环境下的常用命令选项,让...
  • Licote是Linux command template的缩写,顾名思义就是Linux命令模板。用于快速编写一个linux环境的命令程序,当然如果你愿意,你可以用于任何程序中;Licote的主要任务就是帮助你解析linux环境下的常用命令选项,让...
  • Linux命令模板 licote

    2013-06-18 09:36:43
    Licote是Linux command template的缩写,顾名思义就是Linux命令模板。用于快速编写一个linux环境的命令程序,当然如果你愿意,你可以用于任何程序中;Licote的主要任务就是帮助你解析linux环境下的常用命令选项,让...
  • Licote是Linux command template的缩写,顾名思义就是Linux命令模板。用于快速编写一个linux环境的命令程序,Licote的主要任务是帮助你解析linux环境下的常用命令选项,让你快速编写命令程序的同时,为用户提供灵活而...
  • 实用SQL命令模板

    2011-12-31 09:48:54
    给出12个我常用的SQL命令模板,是份很好的SQL模板。
  • 说明:本文主要讲述Laravel的Artisan命令来实现自定义模板,就如经常输入的php artisan make:controller ShopController就会自动生成一个ShopController.php模板文件一样,通过命令生成模板也会提高开发效率。...
  • 【Spring boot配置模板】java远程执行shell命令(支持向多主机发起远程命令)前言pom依赖支持配置yml建类调用后记 前言 受2020年初的新型肺炎病毒影响,多日宅在家中无聊至极,就在琢磨一套调度系统,想用来管理维护...
  • 元素create命令使用的全局模板模板使您可以从默认文件和文件夹结构创建项目和项目资源。 当您安装元素时,这些模板将与此包一起全局安装。 您可以在~/elements/node_modules/@elements/templates/src找到这些...
  • 制造命令模板.doc

    2022-01-30 21:38:01
    制造命令模板.doc
  • ntc-templates, 用于分析网络设备显示命令的TextFSM模板 用于网络设备的TEXTFSM模板存储库ntc模板包含一组基于TEXTFSM解析引擎的多供应商模板。这些模板从网络基础设施设备( 如 Cisco IOS 。Juniper JUNOS或者 HPE ...
  • 25-ONU配置模板命令.pdf

    2020-09-05 00:39:16
    预配置模板命令 目录 目 录 第 章 预配置模板命令1 1 1.1 预配置模板配置命令1 1.1.1epononu-config-template1 1.1.2cmd-sequence2 1.1.3eponpre-config-template2 1.1.4showonu-config-template3 - I- Interface ...
  • Excel模板个人指示_命令确认表.zip
  • 生产命令单(表格模板、DOC格式).doc
  • Domino系统Notes数据库模板替换命令详解.docx
  • 制造命令单(表格模板、DOC格式).doc
  • 实验2模板-HDFS环境搭建及基本命令的使用,实验报告原始资料
  • DC_Design_Compiler_综合脚本命令及参考模板.doc
  • 使用.Net Core CLI命令dotnet new创建自定义模板.pdf
  • Excel表格+Word文档各类各行业模板-制造命令单.zip
  • 具有命令处理程序的基本bot模板 更改token.json令牌 在commands文件夹中进行命令 在commands文件夹中有ping命令,该bot的默认前缀为! 您可以在config.json更改它 先决条件 您需要什么东西来安装软件以及如何安装它们...
  • vue项目模板

    2018-12-13 10:28:52
    vue项目的模板,已经配置好路由和热保存编译,可以直接使用run dev命令

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 339,707
精华内容 135,882
关键字:

命令模板