zoukankan      html  css  js  c++  java
  • Docker Compose YML文件配置

    Docker Compose YML

    默认的模板文件是 docker-compose.yml,其中定义的每个服务都必须通过 image 指令指定镜像或 build 指令(需要 Dockerfile)来自动构建。
    其它大部分指令都跟 docker run 中的类似。
    如果使用 build 指令,在 Dockerfile 中设置的选项(例如:CMD, EXPOSE, VOLUME, ENV 等) 将会自动被获取,无需在 docker-compose.yml 中再次设置。
    image指定为镜像名称或镜像 ID。如果镜像在本地不存在,Compose 将会尝试拉去这个镜像。

    image

    镜像的地址,可以在镜像仓库找到。会在主机不存在该镜像的时候,拉取。

    image: ubuntu
    image: orchardup/postgresql
    image: a4bc65fd
    

    build

    指定 Dockerfile 所在文件夹的路径。 Compose 将会利用它自动构建这个镜像,然后使用这个镜像。build构建镜像和image下拉镜像,优先通过build执行Dockerfile构建镜像。

    build: /path/to/build/dir
    

    command

    覆盖掉默认的命令

    command: bundle exec thin -p 3000
    

    可以Link到其他的容器。可以直接写应用名(同一个YML内),或者可以写Link别名(SERVICE:ALIAS)

    links:
    	- db   
    	- db:database
    	- redis
    

    Docker Link 会修改您容器内的HOST表和环境变量,的工作方式可以参考 Docker Link文档。

    depends_on

    可以把依赖的容器名写进来。

    depends_on:
    	- db
    	- redis
    

    external_links可以Link到不是同一个YML内的容器。语法和普通的Link接近。但启动的时候要保证被Link的容器是正常运行的。可以直接写应用名(同一个YML内),或者可以写Link别名(SERVICE:ALIAS)

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

    extra_hosts

    hostname映射。相当于在Docker Run中--add-host 参数.

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

    这个配置会在容器的 /etc/hosts 文件中添加如下的内容。

    162.242.195.82 somehost
    50.31.209.229 otherhost

    ports

    开放端口,可以同时申明主机和容器端口 (HOST:CONTAINER), 也可以只申明容器端口。(会随机选定一个外部端口).

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

    expose

    开放端口但不会在主机上映射。仅仅用于被其他的容器Link。只能保留内部端口

    expose:
        - "3000"
        - "8000"
    

    volumes

    支持Mount存储卷,可以支持指定主机路径和容器路径(HOST:CONTAINER), 还可以包括只读 (HOST:CONTAINER:ro).

    volumes:
        - /var/lib/mysql
        - ./cache:/tmp/cache
        - ~/configs:/etc/configs/:ro
    

    volumes_from

    支持从其他APP和容器Mount。

    volumes_from:
        - service_name
        - container_name
    

    environment

    可以添加环境变量,您可以指定YML数组或者字典。

    environment:
    	RACK_ENV: development
    	SESSION_SECRET:
    environment:
    	- RACK_ENV=development
    	- SESSION_SECRET
    

    env_file

    从文件中获取环境变量,可以为单独的文件路径或列表。
    如果通过 docker-compose -f FILE 指定了模板文件,则 env_file 中路径会基于模板文件路径。
    如果有变量名称与 environment 指令冲突,则以后者为准。

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

    环境变量文件中每一行必须符合格式,支持 # 开头的注释行。

    环境变量文件中每一行必须符合格式,支持 # 开头的注释行。

    common.env: Set Rails/Rack environment

    RACK_ENV=development

    extends

    基于已有的服务进行扩展。例如我们已经有了一个 webapp 服务,模板文件为 common.yml。

       # common.yml
       webapp:
       build: ./webapp
       environment:
       	- DEBUG=false
       	- SEND_EMAILS=false
    

    编写一个新的 development.yml 文件,使用 common.yml 中的 webapp 服务进行扩展。

    web:
    extends:
    file: common.yml
    service: webapp
    ports:
    	- "8000:8000"
    links:
    	- db
    environment:
      	- DEBUG=true
    db:
        image: postgres
    

    后者会自动继承 common.yml 中的 webapp 服务及相关环节变量。

    labels

    可以通过Docker Lable给容器加一些元数据。

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

    log_driver

    可以给容器增加Log Driver。和命令行参数 --log-driver 相同

    现在支持 json-file, syslog and none. 默认是 json-file.

    log_driver: "json-file"
    log_driver: "syslog"
    log_driver: "none"
    

    net

    设置网络模式。使用和 docker client 的 --net 参数一样的值

    net: "bridge"
    net: "none"
    net: "container:[name or id]"
    net: "host"
    

    pid

    容器共享pid。 跟主机系统共享进程命名空间。打开该选项的容器可以相互通过进程 ID 来访问和操作。在docker命令中的使用是:docker run --pid container:containerid

    pid: "host"
    

    dns

    配置 DNS 服务器。可以是一个值,也可以是一个列表。

    dns: 8.8.8.8
    dns:
    	- 8.8.8.8
        - 9.9.9.9
    

    cap_add

    增加容器的能力

    cap_add: 
        - ALL
    

    cap_drop

    删除容器的能力

    cap_drop:
    	- NET_ADMIN
        - SYS_ADMIN
    

    配置 DNS 搜索域。可以是一个值,也可以是一个列表

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

    devices

    设备映射. 和命令行参数 --device 相同

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

    security_opt

    覆盖默认的容器安全参数

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

    working_dir

    docker指定工作目录

    entrypoint

    docker入口点

    user

    指定容器当前用户

    hostname

    指定容器主机名

    domainname

    指定域名

    mem_limit

    指定容器内存限制

    privileged

    开启特权,可以设置容器里的内核参数

    restart

    重启后的容器启动情况

    stdin_open

    tty

    支持tty

    cpu_shares

    CPU 共享权值(相对权重)

    cpuset

    允许使用的CPU 集,值可以为 0-3,0,1

    read_only

    设置只读文件系统

    下列的熟悉都和 docker run 命令中的参数相同。

    cpu_shares: 73
    cpuset: 0,1
    
    working_dir: /code
    entrypoint: /code/entrypoint.sh
    user: postgresql
    
    hostname: foo
    domainname: foo.com
    
    mac_address: 02:42:ac:11:65:43
    
    mem_limit: 1000000000
    privileged: true
    
    restart: always
    
    stdin_open: true
    tty: true
    read_only: true
    
  • 相关阅读:
    struts2实现的简单的Trie树
    从源码总结struts2命名空间的匹配规则
    Knockout2.x:ko.dataFor()、ko.contextFor()使用
    Reporting Services可選參數設置
    在.net CF中設置DataGrid中列的寬度
    VB.net 簡體繁體轉化代碼
    在SQL語句中獲取錯誤信息
    VS 2005 使用 Crystal report 發生載入報表失敗
    Lazarus一個奇怪的設置
    怎样用wince设备创建快捷方式
  • 原文地址:https://www.cnblogs.com/aric2016/p/11377520.html
Copyright © 2011-2022 走看看