Docker技术入门与实战 第二版-学习笔记-9-Docker Compose 项目-2-Compose 命令说明

Compose 命令说明

1)命令对象与格式

对于 Compose 来说,大部分命令的对象既可以是项目本身,也可以指定为项目中 的服务或者容器。如果没有特别的说明,命令对象将是项目,这意味着项目中所有 的服务都会受到命令影响。

userdeMBP:compose-haproxy-web user$ docker-compose --help
...
Options:
  -f, --file FILE             Specify an alternate compose file (default: docker-compose.yml) 指定使用的 Compose 模板文件,默认为docker-compose.yml,可以多次指定
  -p, --project-name NAME     Specify an alternate project name(default: directory name)指定项目名称,默认将使用所在目录名称作为项目名
  --verbose                   Show more output 输出更多调试信息
  --log-level LEVEL           Set log level (DEBUG, INFO, WARNING, ERROR, CRITICAL) 设置日志级别
  --no-ansi                   Do not print ANSI control characters 不输出ANSI控制字符
  -v, --version               Print version and exit 打印版本并退出
  -H, --host HOST             Daemon socket to connect to Daemon socket连接的主机
  --x-networking              使用Docker的可拔插网络后段特性(需要Docker1.9及以后版本)
  --x-network-driver          DRIVER指定网络后端的驱动,默认为bridge(需要Docker1.9及以后版本)

格式:

 docker-compose [-f <arg>...] [options] [COMMAND] [ARGS...]

 

 

2)命令使用说明

1> build

build [options] [--build-arg key=val...] [SERVICE...]

构建(重新构建)项目中的服务容器

服务容器一旦构建后,将会带上一个标记名,例如对于 web 项目中的一个 db 容 器,可能是 web_db

 

可以随时在项目目录下运行docker-compose build来重新构建服务

Options:
    --compress              Compress the build context using gzip. 使用gzip压缩构建上下文
    --force-rm              Always remove intermediate containers. 删除构建过程中的临时容器
    --no-cache              Do not use cache when building the image. 构建镜像过程中不使用 cache(这将加长构建过程)
    --pull                  Always attempt to pull a newer version of the image. 始终尝试通过 pull 来获取更新版本的镜像
    -m, --memory MEM        Sets memory limit for the build container. 为构建容器设置内存限制
    --build-arg key=val     Set build-time variables for services. 为服务设置构建时间变量
    --parallel              Build images in parallel. 并行构建镜像

 

2> help

获得一个命令的帮助

 

3> kill

格式及选项:

Usages : docker-compose kill [options] [SERVICE...]
Options:
    -s SIGNAL         SIGNAL to send to the container.Default signal is SIGKILL.指定发送的信号,默认发送 SIGKILL 信号来强制停止服务容器

 

4> logs

格式及选项

Usage: docker-compose logs [options] [SERVICE...]

Options:
    --no-color          Produce monochrome output.关闭颜色
    -f, --follow        Follow log output. 跟踪日志输出 
    -t, --timestamps    Show timestamps. 展示时间戳
    --tail="all"        Number of lines to show from the end of the logs for each container.展示每个容器日志结尾的行数

查看服务容器的输出。默认情况下,docker-compose 将对不同的服务输出使用不同的颜色来区分。

可以通过--no-color来关闭颜色。该命令在调试问题的时候十分有用。

 

5> pause

格式:

Usage: docker-compose pause [SERVICE...]

暂停一个服务容器

 

6> port

格式及选项:

Usage: docker-compose port [options] SERVICE PRIVATE_PORT

Options:
    --protocol=proto  tcp or udp [default: tcp] 指定端口协议,tcp(默认值)或者 udp
    --index=index     index of the container if there are multiple instances of a service [default: 1]如果同一服务存在多个容器,指定命令对象容器的序号(默认为1)

打印某个容器端口所映射的公共端口

 

7> ps

Usage: docker-compose ps [options] [SERVICE...]

Options:
    -q, --quiet          Only display IDs 只打印容器的 ID 信息
    --services           Display services  显示服务
    --filter KEY=VAL     Filter services by a property 通过属性过滤服务

 

8> pull

格式和选项:

Usage: docker-compose pull [options] [SERVICE...]

Options: 
    --ignore-pull-failures  Pull what it can and ignores images with pull failures. 忽略拉取镜像过程中的错误
    --parallel              Deprecated, pull multiple images in parallel (enabled by default). 弃用,并行拉取多个镜像(默认可用)
    --no-parallel           Disable parallel pulling. 不可并行拉取
    -q, --quiet             Pull without printing progress information 没有打印进程信息的拉取
    --include-deps          Also pull services declared as dependencies 也拉取声称为依赖的服务

 

9> restart

格式和选项:

Usage: docker-compose restart [options] [SERVICE...]

Options:
  -t, --timeout TIMEOUT      Specify a shutdown timeout in seconds.(default: 10)指定重启前停止容器的超时(默认为 10 秒)

 

10> rm

格式和选项:

Usage: docker-compose rm [options] [SERVICE...]

Options:
    -f, --force   Don't ask to confirm removal 强制直接删除,包括非停止状态的容器。一般尽量不要使用该选项
    -s, --stop    Stop the containers, if required, before removing 如果需要,在移除前先停止该容器
    -v            Remove any anonymous volumes attached to containers 删除容器所挂载的数据卷
    -a, --all     Deprecated - no effect. 弃用-没有影响

 

11> run

格式和选项:

Usage:
    docker-compose run [options] [-v VOLUME...] [-p PORT...] [-e KEY=VAL...] [-l KEY=VALUE...] SERVICE [COMMAND] [ARGS...]

Options:
    -d, --detach          Detached mode: Run container in the background, print new container name. 分离模式:后台运行容器,打印新容器名
    --name NAME           Assign a name to the container 为容器指定一个名字
    --entrypoint CMD      Override the entrypoint of the image.覆盖默认的容器启动指令
    -e KEY=VAL            Set an environment variable (can be used multiple times) 设置环境变量值,可多次使用选项来设置多个环境变量
    -l, --label KEY=VAL   Add or override a label (can be used multiple times) 添加或覆写标签,可多次使用
    -u, --user=""         Run as specified username or uid 指定运行容器的用户名或者 uid
    --no-deps             Don't start linked services. 不自动启动关联的服务容器
    --rm                  Remove container after run. Ignored in detached mode. 运行命令后自动删除容器, -d模式下将忽略
    -p, --publish=[]      Publish a container's port(s) to the host 映射容器端口到本地主机
    --service-ports       Run command with the service's ports enabled and mapped to the host. 配置服务端口并映射到本地主机
    --use-aliases         Use the service's network aliases in the network(s) the container connects to. 在容器连接的网络中使用服务网络的别名
    -v, --volume=[]       Bind mount a volume (default []) 连接挂载数据卷,默认为[]
    -T                    Disable pseudo-tty allocation. By default `docker-compose run` allocates a TTY. 不分配伪 tty,意味着依赖 tty 的指令将无法运行
    -w, --workdir=""      Working directory inside the container 在容器中的运行目录

这里run的service一定是之前docker-compose up命令开启的容器中的一种

在指定服务上执行一个命令,比如:

 

userdeMacBook-Pro:compose-haproxy-web user$ docker-compose run weba env
PATH=/usr/local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
HOSTNAME=db02a3babdb3
TERM=xterm
COMPOSE_HAPROXY_WEB_WEBA_1_PORT=tcp://172.17.0.4:80
COMPOSE_HAPROXY_WEB_WEBA_1_PORT_80_TCP=tcp://172.17.0.4:80
COMPOSE_HAPROXY_WEB_WEBA_1_PORT_80_TCP_ADDR=172.17.0.4
COMPOSE_HAPROXY_WEB_WEBA_1_PORT_80_TCP_PORT=80
COMPOSE_HAPROXY_WEB_WEBA_1_PORT_80_TCP_PROTO=tcp
COMPOSE_HAPROXY_WEB_WEBA_1_NAME=/compose-haproxy-web_weba_run_e5f54aba4fd5/compose-haproxy-web_weba_1
COMPOSE_HAPROXY_WEB_WEBA_1_ENV_LANG=C.UTF-8
COMPOSE_HAPROXY_WEB_WEBA_1_ENV_PYTHONIOENCODING=UTF-8
COMPOSE_HAPROXY_WEB_WEBA_1_ENV_GPG_KEY=C01E1CAD5EA2C4F0B8E3571504C367C218ADD4FF
COMPOSE_HAPROXY_WEB_WEBA_1_ENV_PYTHON_VERSION=2.7.15
COMPOSE_HAPROXY_WEB_WEBA_1_ENV_PYTHON_PIP_VERSION=18.1
WEBA_PORT=tcp://172.17.0.4:80
WEBA_PORT_80_TCP=tcp://172.17.0.4:80
WEBA_PORT_80_TCP_ADDR=172.17.0.4
WEBA_PORT_80_TCP_PORT=80
WEBA_PORT_80_TCP_PROTO=tcp
WEBA_NAME=/compose-haproxy-web_weba_run_e5f54aba4fd5/weba
WEBA_ENV_LANG=C.UTF-8
WEBA_ENV_PYTHONIOENCODING=UTF-8
WEBA_ENV_GPG_KEY=C01E1CAD5EA2C4F0B8E3571504C367C218ADD4FF
WEBA_ENV_PYTHON_VERSION=2.7.15
WEBA_ENV_PYTHON_PIP_VERSION=18.1
WEBA_1_PORT=tcp://172.17.0.4:80
WEBA_1_PORT_80_TCP=tcp://172.17.0.4:80
WEBA_1_PORT_80_TCP_ADDR=172.17.0.4
WEBA_1_PORT_80_TCP_PORT=80
WEBA_1_PORT_80_TCP_PROTO=tcp
WEBA_1_NAME=/compose-haproxy-web_weba_run_e5f54aba4fd5/weba_1
WEBA_1_ENV_LANG=C.UTF-8
WEBA_1_ENV_PYTHONIOENCODING=UTF-8
WEBA_1_ENV_GPG_KEY=C01E1CAD5EA2C4F0B8E3571504C367C218ADD4FF
WEBA_1_ENV_PYTHON_VERSION=2.7.15
WEBA_1_ENV_PYTHON_PIP_VERSION=18.1
LANG=C.UTF-8
PYTHONIOENCODING=UTF-8
GPG_KEY=C01E1CAD5EA2C4F0B8E3571504C367C218ADD4FF
PYTHON_VERSION=2.7.15
PYTHON_PIP_VERSION=18.1
HOME=/root

 

将会启动一个 web 服务容器,并执行命令。 默认情况下,如果存在关联,则所有关联的服务将会自动被启动,除非这些服务已经在运行中。

该命令类似启动容器后运行指定的命令,相关卷、链接等等都将会按照配置自动创建。

两个不同点:

  • 给定命令将会覆盖原有的自动运行命令;
  • 不会自动创建端口,以避免冲突。

如果不希望自动启动关联的容器,可以使用 --no-deps选项,例如

$ docker-compose run --no-deps web python manage.py shell

将不会启动 web 容器所关联的其它容器。

 

12> scale

格式及选项:

Usage: docker-compose scale [options] [SERVICE=NUM...]

Options:
  -t, --timeout TIMEOUT      Specify a shutdown timeout in seconds.(default: 10)指定重启前停止容器的超时(默认为 10 秒)

设置指定服务运行的容器个数。

通过 SERVICE=NUM的参数来设置数量。例如:

 $ docker-compose scale web=3 db=2

将启动 3 个容器运行 web 服务,2 个容器运行 db 服务。

一般的,当指定数目多于该服务当前实际运行容器,将新创建并启动容器;反之,将停止容器。

 

13> start

格式:

docker-compose start [SERVICE...]

启动已经存在的服务容器

 

14> stop

格式及选项:

Usage: docker-compose stop [options] [SERVICE...]

Options:
  -t, --timeout TIMEOUT      Specify a shutdown timeout in seconds.(default: 10)指定重启前停止容器的超时(默认为 10 秒)

停止已经处于运行状态的容器,但不删除它。通过 docker-compose start可以再次启动这些容器。

 

15> unpause

格式:

Usage: docker-compose unpause [SERVICE...]

恢复处于暂停状态中的服务

 

16> up

Usage: docker-compose up [options] [--scale SERVICE=NUM...] [SERVICE...]

Options:
    -d, --detach               Detached mode: Run containers in the background,print new container names. Incompatible with --abort-on-container-exit. 分离模式:在后台运行服务容器,打印新容器名。不与--abort-on-container-exit兼容
    --no-color                 Produce monochrome output. 不使用颜色来区分不同的服务的控制台输出
    --quiet-pull               Pull without printing progress information 不带打印过程信息地拉取
    --no-deps                  Don't start linked services. 不启动服务所链接的容器
    --force-recreate           Recreate containers even if their configuration and image haven't changed. 即使他们的配置和镜像没有改变,也强制重新创建容器,不能与--no-recreate连用
    --always-recreate-deps     Recreate dependent containers.Incompatible with --no-recreate. 重新创建依赖镜像,不能与--no-recreate连用
    --no-recreate              If containers already exist, don't recreate them. Incompatible with --force-recreate and -V. 如果容器已经存在了,则不重新创建,不能与--force-recreate连用
    --no-build                 Don't build an image, even if it's missing. 不再构建镜像,即使丢失
    --no-start                 Don't start the services after creating them. 在创建后不再开启服务
    --build                    Build images before starting containers. 在开启容器时构建镜像
    --abort-on-container-exit  Stops all containers if any container was stopped. Incompatible with -d. 如果有任意容器停止了,就停止所有的容器。与-d参数不连用
    -t, --timeout TIMEOUT      Use this timeout in seconds for container shutdown when attached or when containers are already running. (default: 10) 当连接容器或容器已经运行时或停止容器时候的超时(默认为 10 秒)
    -V, --renew-anon-volumes   Recreate anonymous volumes instead of retrieving data from the previous containers.重新创建匿名数据卷来替代从以前的容器中检索数据
    --remove-orphans           Remove containers for services not defined in the Compose file. 移除Compose文件中的服务没有定义的容器
    --exit-code-from SERVICE   Return the exit code of the selected service container. Implies --abort-on-container-exit. 运行已选服务容器的exit代码,同时实现--abort-on-container-exit参数功能
    --scale SERVICE=NUM        Scale SERVICE to NUM instances. Overrides the `scale` setting in the Compose file if present. 将服务扩展到NUM个实例。覆盖Compose文件中存在的`scale`设置

该命令十分强大,它将尝试自动完成包括构建镜像,(重新)创建服务,启动服务,并关联服务相关容器的一系列操作。

链接的服务都将会被自动启动,除非已经处于运行状态

可以说,大部分时候都可以直接通过该命令来启动一个项目

默认情况,如果服务容器已经存在, docker-compose up将会尝试停止容器, 然后重新创建(保持使用 volumes-from挂载的卷),以保证新启动的服务匹配docker-compose.yml文件的最新内容

如果用户不希望容器被停止并重新创建,可以使用--no-recreate参数 。这样将只会启动处于停止状态的容器,而忽略已经运行的服务。

如果用户只想重新部署某个服务,可以使用 docker-compose up --no-deps -d <SERVICE_NAME>来重新创建服务并后台停止旧服务,启动新服务,并不会影响到其所依赖的服务

 

17> migrate-to-labels(现在好像已经没有这个功能了)

重新创建容器,并添加 label
主要用于升级 1.2 及更早版本中创建的容器,添加缺失的容器标签。 实际上,最􏰀底的办法当然是删除项目,然后重新创建。

 

18> version

userdeMacBook-Pro:~ user$ docker-compose version
docker-compose version 1.23.2, build 1110ad01
docker-py version: 3.6.0
CPython version: 3.6.6
OpenSSL version: OpenSSL 1.1.0h  27 Mar 2018

打印版本信息

 

 

2) Compose 模板文件

模板文件是使用 Compose 的核心,涉及到的指令关键字也比较多。但大家不用担心,这里面大部分指令跟docker run 相关参数的含义都是类似的

默认的模板文件名称为 docker-compose.yml,格式为 YAML 格式

版本2和版本1最大的不同:
  • 添加了版本信息
  • 需要将所有的服务放到services根下面
version: "2"
services:
  webapp: //服务
    image: examples/web //该服务的镜像
    ports: //开放端口及其映射
      - "80:80"
    volumes: //挂载的数据卷
      - "/data"

⚠️每个服务都必须通过image指令指定镜像或 build指令(需要 Dockerfile)等来自动构建生成镜像

如果在docker-compose.yml中使用了build指令,那么在Dockerfile中设置的选项(如CMD、EXPOSE、VOLUME、ENV等)将会自动被获取,无需在docker-compose.yml中再次设置

 

3)模版文件的指令

1> build

用于指定Dockerfile文件所在的文件夹的路径(可以是绝对路径,或者是相对于docker-compose.yml文件的路径)。docker-compose会利用它自动构建镜像并使用这个镜像

build: /path/to/build/dir

 

2> cap_add, cap_drop

指定容器的内核能力(capacity)分配。

例如,让容器拥有所有能力可以指定为:

cap_add:
  - ALL

去掉 NET_ADMIN 能力可以指定为:

cap_drop:
  - NET_ADMIN

 

3> command

覆盖容器启动后默认执行的命令,如:

 command: echo "hello world"

 

4> cgroup_parent(这是什么???)

指定父 cgroup 组,意味着将继承该组的资源限制。 例如,创建了一个 cgroup 组名称为 cgroups_1:

 cgroup_parent: cgroups_1

 

5> container_name

指定容器名称。默认将会使用 项目名称-服务名称-序号 这样的格式。 例如:

 container_name: docker-web-container

需要注意,指定容器名称后,该服务将无法进行扩展(scale),因为 Docker 不允 许多个容器具有相同的名称

 

 

6> devices

指定设备映射关系,如:

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

 

7> dns

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

dns: 8.8.8.8
dns:
  - 8.8.8.8
  - 9.9.9.9

 

8> dns_search

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

dns_search: example.com
dns_search:
  - domain1.example.com
  - domain2.example.com

 

9> dockerfile

如果需要指定额外的编译镜像的 Dockefile 文件,可以通过该指令来指定,如:

 dockerfile: Dockerfile-alternate

注意,该指令不能跟 image同时使用,否则 Compose 将不知道根据哪个指令来 生成最终的服务镜像

 

10> env_file

从文件中获取环境变量,可以为单独的文件路径或列表

如果通过 docker-compose -f FILE方式来指定 Compose 模板文件,则 env_file中变量的路径会基于模板文件路径:

如果有变量名称与 environment指令冲突,则按照惯例,以后者为准

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

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

# common.env: Set development environment
PROG_ENV=development

 

11> environment

设置环境变量。你可以使用数组或字典两种格式

只给定名称的变量会自动获取运行 Compose 主机上对应变量的值,可以用来防止泄露不必要的数据,如:

environment:
  RACK_ENV: development
  SESSION_SECRET:

或:

environment:
  - RACK_ENV=development
  - SESSION_SECRET

注意,如果变量名称或者值中用到 true|fale,yes|no 等表达布尔含义的词汇,最好放到引号里,避免 YAML 自动解析某些内容为对应的布尔语义。

http://yaml.org/type/bool.html中给出了这些特定词汇,包括:

 y|Y|yes|Yes|YES|n|N|no|No|NO
|true|True|TRUE|false|False|FALSE
|on|On|ON|off|Off|OFF

 

12> expose

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

 

expose:
 - "3000"
 - "8000"

 

 

13> extends

基于其它模板文件进行扩展

例如我们已经有了一个 webapp 服务,定义一个基础模板文件为 common.yml:

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

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

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

后者会自动继承 common.yml 中的 webapp 服务及环境变量定义。 使用 extends 需要注意:

  • 要避免出现循环依赖,例如 A依赖B,B依赖C,C返回来依赖A的情况
  • extends 不会继承 links volumes_from 中定义的容器和数据卷资源

一般的,推荐在基础模板中只定义一些可以共享的镜像和环境变量,在扩展模板中具体指定应用变量、链接、数据卷等信息

 

14> external_links

链接到 docker-compose.yml 外部的容器,甚至 并非Compose管理的外部容器。参数格式跟 links类似:

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

 

15> external_hosts

类似 Docker 中的 --add-host参数,指定额外的 host 名称映射信息。 例如:

extra_hosts:
 - "googledns:8.8.8.8"
 - "dockerhub:52.1.157.61"

这会导致启动后的服务容器中 /etc/hosts 文件中添加如下两条条目:

8.8.8.8 googledns
52.1.157.61 dockerhub

 

16> image

指定为镜像名称或镜像 ID。如果镜像在本地不存在, Compose将会尝试拉去这个镜像:

image: ubuntu

 

17> labels

为容器添加 Docker 元数据(metadata)信息。例如可以为容器添加辅助说明信息

labels:
  com.startupteam.description: "webapp for a startup team"
  com.startupteam.department: "devops department"
  com.startupteam.release: "rc3 for v1.0"

 

18> links

链接到其它服务中的容器。使用服务名称(同时作为别名)或服务名称:服务别名 (SERVICE:ALIAS)格式都可以:

links:
 - db
 - db:database
 - redis

使用的别名将会自动在服务容器中的 /etc/hosts里创建。例如:

172.17.2.186  db
172.17.2.186  database
172.17.2.187  redis

被链接容器中相应的环境变量也将被创建

 

19> log_driver

类似 Docker 中的 --log-driver参数,指定日志驱动类型;

目前支持三种日志驱动类型:

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

 

20> log_opt

日志驱动的相关参数,如:

log_driver: "syslog"
log_opt:
  syslog-address: "tcp://192.168.0.42:123"

 

21> net

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

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

 

22> pid

跟主机系统共享进程命名空间。打开该选项的容器之间,以及容器和宿主机系统之间可以通过进程 ID 来相互访问和操作。

 pid: "host"

 

23> ports

暴露端口信息

使用宿主:容器(HOST:CONTAINER) 格式,或者仅仅指定容器的端口(宿主将会随机选择端口)都可以

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

注意:当使用 HOST:CONTAINER格式来映射端口时,如果你使用的容器端口小于 60 并且没放到引号里,可能会得到错误结果,因为yaml会自动解析 XX:YY

这种数字格式为 60 进制。为避免出现这种问题,建议数字串都采用引号包括起来的字符串格式。

 

24> security_opt

指定容器模板标签(label)机制的默认属性(用户、角色、类型、级别等)。 例如配置标签的用户名和角色名。

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

 

25> ulimits

指定容器的 ulimits 限制值。

例如,指定最大进程数为 65535,指定文件句柄数为 20000(软限制,应用可以随 时修改不能超过硬限制) 和 40000(系统硬限制,只能 root 用户提高)

  nproc: 65535
  nofile:
    soft: 20000
    hard: 40000

 

26> volumes

数据卷所挂载路径设置。可以设置宿主机路径 ( HOST:CONTAINER) 或加上访问 模式 ( HOST:CONTAINER:ro)。

该指令中路径支持相对路径。例:

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

 

27> volumes_driver

较新版本的 Docker 支持数据卷的插件驱动。 用户可以先使用第三方驱动创建一个数据卷,然后使用名称来访问它。 此时,可以通过 volumes_driver来指定驱动。

 volume_driver: mydriver

 

28> volumes_from

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

volumes_from:
 - service_name
 - container_name

 

29> 其它指令

还有如cpu_shares,cpuset,domainname,entrypoint,hostname,ipc,mac_address,mem_limit,memswap_limit,privileged,read_only,restart,stdin_open,tty,user,working_dir等指令,基本上和docker-run中对应的参数的功能一致

例如,指定使用 cpu 0 和 核 1,只用 50% CPU 资源:

cpu_shares: 73
cpuset: 0,1

指定服务容器启动后执行的命令:

 entrypoint: /code/entrypoint.sh

指定容器中运行应用的用户名:

 user: nginx

指定容器中工作目录

working_dir: /code

指定容器中搜索域名、主机名、mac 地址等

domainname: your_website.com
hostname: test
mac_address: 08-00-27-00-0C-0A

指定容器中实现进程间通信:

ipc: host

指定容器中内存和内存交换区限制都为 1G

mem_limit: 1g
memswap_limit: 1g

允许容器中运行一些特权命令:

privileged: true

指定容器退出后的重启策略为始终重启。该命令对保持服务始终运行十分有效,在 生产环境中推荐配置为 always或者 unless-stopped

 restart: always

以只读模式挂载容器的 root 文件系统,意味着不能对容器内容进行修改:

 read_only: true

打开标准输入,可以接受外部输入:

 stdin_open: true

模拟一个假的远程控制台:

 tty: true

 

30>读取环境变量

 

1.5.0 版本开始,Compose 模板文件支持动态读取主机的系统环境变量。

例如,下面的 Compose 文件将从运行它的环境中读取变量 ${MONGO_VERSION} 的值,并写入执行的指令中。

db:
  image: "mongo:${MONGO_VERSION}"

如果执行MONGO_VERSION=3.0 docker-compose up则会启动一个mongo:3.2镜像的容器;如果执行MONGO_VERSION=3.0 docker-compose up,则会启动一个mongo:2.8镜像的容器

 

 

 

 

 

posted @ 2019-01-04 11:08  慢行厚积  阅读(820)  评论(0编辑  收藏  举报