directory search
Compose About versions and upgrading (Compose) ASP.NET Core + SQL Server on Linux (Compose) CLI environment variables (Compose) Command-line completion (Compose) Compose(组成) Compose command-line reference(组合命令行参考) Control startup order (Compose) Django and PostgreSQL (Compose) Docker stacks and distributed application bundles (Compose) docker-compose build(docker-compose构建) docker-compose bundle docker-compose config docker-compose create docker-compose down docker-compose events docker-compose exec docker-compose help docker-compose images docker-compose kill docker-compose logs docker-compose pause docker-compose port docker-compose ps docker-compose pull docker-compose push docker-compose restart docker-compose rm docker-compose run docker-compose scale docker-compose start docker-compose stop docker-compose top docker-compose unpause docker-compose up Environment file (Compose) Environment variables in Compose Extend services in Compose Frequently asked questions (Compose) Getting started (Compose) Install Compose Link environment variables (deprecated) (Compose) Networking in Compose Overview of Docker Compose Overview of docker-compose CLI Quickstart: Compose and WordPress Rails and PostgreSQL (Compose) Sample apps with Compose Using Compose in production Using Compose with Swarm Engine .NET Core application (Engine) About images, containers, and storage drivers (Engine) Add nodes to the swarm (Engine) Apply custom metadata (Engine) Apply rolling updates (Engine) apt-cacher-ng Best practices for writing Dockerfiles (Engine) Binaries (Engine) Bind container ports to the host (Engine) Breaking changes (Engine) Build your own bridge (Engine) Configure container DNS (Engine) Configure container DNS in user-defined networks (Engine) CouchDB (Engine) Create a base image (Engine) Create a swarm (Engine) Customize the docker0 bridge (Engine) Debian (Engine) Default bridge network Delete the service (Engine) Deploy a service (Engine) Deploy services to a swarm (Engine) Deprecated Engine features Docker container networking (Engine) Docker overview (Engine) Docker run reference (Engine) Dockerfile reference (Engine) Dockerize an application Drain a node (Engine) Engine FAQ (Engine) Fedora (Engine) Get started (Engine) Get started with macvlan network driver (Engine) Get started with multi-host networking (Engine) How nodes work (Engine) How services work (Engine) Image management (Engine) Inspect the service (Engine) Install Docker (Engine) IPv6 with Docker (Engine) Join nodes to a swarm (Engine) Legacy container links (Engine) Lock your swarm (Engine) Manage nodes in a swarm (Engine) Manage sensitive data with Docker secrets (Engine) Manage swarm security with PKI (Engine) Manage swarm service networks (Engine) Migrate to Engine 1.10 Optional Linux post-installation steps (Engine) Overview (Engine) PostgreSQL (Engine) Raft consensus in swarm mode (Engine) Riak (Engine) Run Docker Engine in swarm mode Scale the service (Engine) SDKs (Engine) Select a storage driver (Engine) Set up for the tutorial (Engine) SSHd (Engine) Storage driver overview (Engine) Store service configuration data (Engine) Swarm administration guide (Engine) Swarm mode key concepts (Engine) Swarm mode overlay network security model (Engine) Swarm mode overview (Engine) Understand container communication (Engine) Use multi-stage builds (Engine) Use swarm mode routing mesh (Engine) Use the AUFS storage driver (Engine) Use the Btrfs storage driver (Engine) Use the Device mapper storage driver (Engine) Use the OverlayFS storage driver (Engine) Use the VFS storage driver (Engine) Use the ZFS storage driver (Engine) Engine: Admin Guide Amazon CloudWatch logs logging driver (Engine) Bind mounts (Engine) Collect Docker metrics with Prometheus (Engine) Configuring and running Docker (Engine) Configuring logging drivers (Engine) Control and configure Docker with systemd (Engine) ETW logging driver (Engine) Fluentd logging driver (Engine) Format command and log output (Engine) Google Cloud logging driver (Engine) Graylog Extended Format (GELF) logging driver (Engine) Journald logging driver (Engine) JSON File logging driver (Engine) Keep containers alive during daemon downtime (Engine) Limit a container's resources (Engine) Link via an ambassador container (Engine) Log tags for logging driver (Engine) Logentries logging driver (Engine) PowerShell DSC usage (Engine) Prune unused Docker objects (Engine) Run multiple services in a container (Engine) Runtime metrics (Engine) Splunk logging driver (Engine) Start containers automatically (Engine) Storage overview (Engine) Syslog logging driver (Engine) tmpfs mounts Troubleshoot volume problems (Engine) Use a logging driver plugin (Engine) Using Ansible (Engine) Using Chef (Engine) Using Puppet (Engine) View a container's logs (Engine) Volumes (Engine) Engine: CLI Daemon CLI reference (dockerd) (Engine) docker docker attach docker build docker checkpoint docker checkpoint create docker checkpoint ls docker checkpoint rm docker commit docker config docker config create docker config inspect docker config ls docker config rm docker container docker container attach docker container commit docker container cp docker container create docker container diff docker container exec docker container export docker container inspect docker container kill docker container logs docker container ls docker container pause docker container port docker container prune docker container rename docker container restart docker container rm docker container run docker container start docker container stats docker container stop docker container top docker container unpause docker container update docker container wait docker cp docker create docker deploy docker diff docker events docker exec docker export docker history docker image docker image build docker image history docker image import docker image inspect docker image load docker image ls docker image prune docker image pull docker image push docker image rm docker image save docker image tag docker images docker import docker info docker inspect docker kill docker load docker login docker logout docker logs docker network docker network connect docker network create docker network disconnect docker network inspect docker network ls docker network prune docker network rm docker node docker node demote docker node inspect docker node ls docker node promote docker node ps docker node rm docker node update docker pause docker plugin docker plugin create docker plugin disable docker plugin enable docker plugin inspect docker plugin install docker plugin ls docker plugin push docker plugin rm docker plugin set docker plugin upgrade docker port docker ps docker pull docker push docker rename docker restart docker rm docker rmi docker run docker save docker search docker secret docker secret create docker secret inspect docker secret ls docker secret rm docker service docker service create docker service inspect docker service logs docker service ls docker service ps docker service rm docker service scale docker service update docker stack docker stack deploy docker stack ls docker stack ps docker stack rm docker stack services docker start docker stats docker stop docker swarm docker swarm ca docker swarm init docker swarm join docker swarm join-token docker swarm leave docker swarm unlock docker swarm unlock-key docker swarm update docker system docker system df docker system events docker system info docker system prune docker tag docker top docker unpause docker update docker version docker volume docker volume create docker volume inspect docker volume ls docker volume prune docker volume rm docker wait Use the Docker command line (Engine) Engine: Extend Access authorization plugin (Engine) Docker log driver plugins Docker network driver plugins (Engine) Extending Engine with plugins Managed plugin system (Engine) Plugin configuration (Engine) Plugins API (Engine) Volume plugins (Engine) Engine: Security AppArmor security profiles for Docker (Engine) Automation with content trust (Engine) Content trust in Docker (Engine) Delegations for content trust (Engine) Deploying Notary (Engine) Docker security (Engine) Docker security non-events (Engine) Isolate containers with a user namespace (Engine) Manage keys for content trust (Engine) Play in a content trust sandbox (Engine) Protect the Docker daemon socket (Engine) Seccomp security profiles for Docker (Engine) Secure Engine Use trusted images Using certificates for repository client verification (Engine) Engine: Tutorials Engine tutorials Network containers (Engine) Get Started Part 1: Orientation Part 2: Containers Part 3: Services Part 4: Swarms Part 5: Stacks Part 6: Deploy your app Machine Amazon Web Services (Machine) Digital Ocean (Machine) docker-machine active docker-machine config docker-machine create docker-machine env docker-machine help docker-machine inspect docker-machine ip docker-machine kill docker-machine ls docker-machine provision docker-machine regenerate-certs docker-machine restart docker-machine rm docker-machine scp docker-machine ssh docker-machine start docker-machine status docker-machine stop docker-machine upgrade docker-machine url Driver options and operating system defaults (Machine) Drivers overview (Machine) Exoscale (Machine) Generic (Machine) Get started with a local VM (Machine) Google Compute Engine (Machine) IBM Softlayer (Machine) Install Machine Machine Machine CLI overview Machine command-line completion Machine concepts and help Machine overview Microsoft Azure (Machine) Microsoft Hyper-V (Machine) Migrate from Boot2Docker to Machine OpenStack (Machine) Oracle VirtualBox (Machine) Provision AWS EC2 instances (Machine) Provision Digital Ocean Droplets (Machine) Provision hosts in the cloud (Machine) Rackspace (Machine) VMware Fusion (Machine) VMware vCloud Air (Machine) VMware vSphere (Machine) Notary Client configuration (Notary) Common Server and signer configurations (Notary) Getting started with Notary Notary changelog Notary configuration files Running a Notary service Server configuration (Notary) Signer configuration (Notary) Understand the service architecture (Notary) Use the Notary client
characters

描述

创建新服务

使用

docker service create [OPTIONS] IMAGE [COMMAND] [ARG...]

备选方案

名字,简写

默认

描述

--config


指定配置以暴露给服务

--constraint


展示位置限制

--container-label


容器标签

--credential-spec


托管服务帐户的凭证规范(仅限Windows)

--detach,-d

真正

立即退出,而不是等待服务收敛

--dns


设置自定义DNS服务器

--dns-option


设置DNS选项

--dns-search


设置自定义DNS搜索域

--endpoint-mode

要人

端点模式(vip或dnsrr)

--entrypoint


覆盖图像的默认入口点

--env,-e


设置环境变量

--env-file


读入环境变量文件

--group


为容器设置一个或多个补充用户组

--health-cmd


运行以检查运行状况的命令

--health-interval


运行检查之间的时间(ms | s | m | h)

--health-retries

0

需要报告不健康的连续失败

--health-start-period


在重新计数到不稳定(ms | s | m | h)之前,容器初始化的开始时间段

--health-timeout


允许一次检查运行的最长时间(ms | s | m | h)

--host


设置一个或多个自定义主机到IP映射(主机:IP)

--hostname


容器主机名

--label, -l


服务标签

--limit-CPU


限制CPU

--limit-memory

0

限制记忆

--log-driver


记录驱动程序的服务

--log-OPT


记录驱动程序选项

--mode

复制

服务模式(复制或全局)

--mount


将文件系统挂载附加到服务

--name


服务名称

--network


网络附件

--no-healthcheck

禁用任何容器指定的HEALTHCHECK

--no-resolve-image

不要查询注册表来解析图像摘要和支持的平台

--placement-PREF


添加展示位置首选项

--publish,-p


将端口发布为节点端口

--quiet,-q

抑制进度输出

--read-only

将容器的根文件系统挂载为只读

--replicas


任务数量

--reserve-CPU


预留CPU

--reserve-memory

0

保留内存

--restart-condition


满足条件时重新启动(“none”|“on-failure”|“any”)(默认为“any”)

--restart-delay


重启尝试之间的延迟(ns | us | ms | s | m | h)(默认5秒)

--restart-max-attempts


放弃前的最大重启次数

--restart-window


用于评估重新启动策略的窗口(ns | us | ms | s | m | h)

--rollback-delay

0

任务回滚之间的延迟(ns | us | ms | s | m | h)(默认值为0)

--rollback-failure-action


回滚失败的操作(“暂停”|“继续”)(默认“暂停”)

--rollback-max-failure-ratio

0

在回滚期间容忍的失败率(默认0)

--rollback-monitor

0

(ns | us | ms | s | m | h)(默认5秒)每个任务回滚之后的持续时间

--rollback-order


回滚顺序(“start-first”|“stop-first”)(默认“stop-first”)

--rollback-parallelism

1

同时回滚的任务的最大数量(0一次全部回滚)

--secret


指定泄露给服务的秘密

--stop-grace-period


强制杀死一个容器之前等待的时间(ns | us | ms | s | m | h)(默认10秒)

--stop-signal


停止容器的信号

--tty, -t

分配一个伪TTY

--update-delay

0

更新之间的延迟(ns | us | ms | s | m | h)(默认为0)

--update-failure-action


更新失败的操作(“暂停”|“继续”|“回滚”)(默认“暂停”)

--update-max-failure-ratio

0

更新期间容许的失败率(默认0)

--update-monitor

0

(ns | us | ms | s | m | h)(默认5秒)每个任务更新后的持续时间

--update-order


更新顺序(“start-first”|“stop-first”)(默认为“stop-first”)

--update-parallelism

1

同时更新的最大任务数(0个一次全部更新)

--user,-u


用户名或UID(格式:<名称| uid>:<组| gid>)

--with-registry-auth

向注册代理发送注册表认证详细信息

--workdir,-w


容器内的工作目录

父命令

命令

描述

docker service

管理服务

相关命令

命令

描述

docker service create

创建一项新服务

docker service inspect

显示一项或多项服务的详细信息

docker service logs

获取服务或任务的日志

docker service ls

列出服务

docker service ps

列出一项或多项服务的任务

docker service rm

删除一项或多项服务

docker service scale

扩展一个或多个复制服务

docker service update

更新服务

扩展描述

创建由指定参数描述的服务。必须在管理器节点上运行此命令。

实例

创建服务

$ docker service create --name redis redis:3.0.6dmu1ept4cxcfe8k8lhtux3ro3

$ docker service create --mode global --name redis2 redis:3.0.6a8q9dasaafudfs8q8w32udass

$ docker service ls

ID            NAME    MODE        REPLICAS  IMAGE
dmu1ept4cxcf  redis   replicated  1/1       redis:3.0.6a8q9dasaafud  redis2  global      1/1       redis:3.0.6

创建一个包含5个副本任务的服务%28-副本%29

使用--replicas标志设置复制服务的副本任务数。下面的命令创建一个redis5复制任务:

$ docker service create --name redis --replicas=5 redis:3.0.64cdgfyky7ozwh3htjfw0d12qv

上面的命令设置所需服务的任务数。即使命令立即返回,实际的服务扩展可能需要一些时间。大REPLICAS列显示两个实际所需服务的复制任务数。

在下面的示例中,所需的状态为5复制,但是当前的数量RUNNING任务是3*

$ docker service ls

ID            NAME   MODE        REPLICAS  IMAGE
4cdgfyky7ozw  redis  replicated  3/5       redis:3.0.7

一旦创建了所有任务并且RUNNING实际的任务数量等于所需的数量:

$ docker service ls

ID            NAME   MODE        REPLICAS  IMAGE
4cdgfyky7ozw  redis  replicated  5/5       redis:3.0.7

创建一个包含秘密的服务

使用该--secret标志可以让容器访问秘密。

创建一个指定秘密的服务:

$ docker service create --name redis --secret secret.json redis:3.0.64cdgfyky7ozwh3htjfw0d12qv

创建一个服务,指定秘密、目标、用户/组ID和模式:

$ docker service create --name redis \    --secret source=ssh-key,target=ssh \    --secret source=app-key,target=app,uid=1000,gid=1001,mode=0400 \
    redis:3.0.64cdgfyky7ozwh3htjfw0d12qv

要授予服务对多个秘密的访问权限,请使用多个--secret标志。

秘密位于/run/secrets容器中。如果未指定目标,则秘密的名称将用作容器中的内存文件。如果指定了目标,那将是文件名。在上面的例子中,将创建两个文件:/run/secrets/ssh以及/run/secrets/app指定的每个秘密目标。

使用滚动更新策略创建服务

$ docker service create \  --replicas 10 \  --name redis \  --update-delay 10s \  --update-parallelism 2 \
  redis:3.0.6

当你运行一个服务更新,调度程序一次最多更新2个任务,使用10s在更新之间。有关详细信息,请参阅滚动更新教程...

设置环境变量(-e,-env)

这将为服务中的所有任务设置一个环境变量。例如:

$ docker service create \  --name redis_2 \  --replicas 5 \  --env MYVAR=foo \
  redis:3.0.6

若要指定多个环境变量,请指定多个--env标志,每个标志都有一个单独的键值对。

$ docker service create \  --name redis_2 \  --replicas 5 \  --env MYVAR=foo \  --env MYVAR2=bar \
  redis:3.0.6

使用特定主机名(-hostname)创建服务

此选项将码头服务容器主机名设置为特定字符串。例如:

$ docker service create --name redis --hostname myredis redis:3.0.6

在服务上设置元数据(-l,-label)

标签是key=value将元数据应用于服务的对。若要将服务标记为两个标签,请执行以下操作:

$ docker service create \  --name redis_2 \  --label com.example.foo="bar"  --label bar=baz \
  redis:3.0.6

有关标签的详细信息,请参阅应用自定义元数据...

添加绑定挂载或 volume

Docker 支持两种不同的安装方式,允许容器读取或写入其他容器或主机操作系统上的文件或目录。这些类型是数据卷(通常简称为volume)和绑定挂载。

另外,Docker 支持tmpfs挂载。

绑定贴装使提供给它被安装在容器内的主机上的文件或目录。绑定挂载可以是只读的或读写的。例如,容器可能通过主机的绑定挂载来共享其主机的DNS信息,/etc/resolv.conf或者容器可能会将日志写入其主机的/var/log/myContainerLogs目录。如果您使用绑定挂载并且您的主机和容器具有不同的权限,访问控制或其他此类详细信息的概念,那么您将遇到可移植性问题。

命名卷是一种机制,用于将容器所需的持久性数据与用于创建容器的映像和主机机器分离。 命名卷由Docker创建和管理,即使当前没有容器正在使用它,命名卷仍然存在。 命名卷中的数据可以在容器和主机之间共享,也可以在多个容器之间共享。 Docker使用卷驱动来创建,管理和安装卷。 您可以使用Docker命令备份或恢复卷。

tmpfs 在容器内挂载 tmpfs 以获取易失性数据。

考虑一下你的图像启动一个轻量级web服务器的情况。您可以将该图像用作基础图像,复制网站的HTML文件并将其打包到另一个图像中。每次您的网站更改时,您都需要更新新映像并重新部署为您的网站提供服务的所有容器。更好的解决方案是将网站存储在每个Web服务器容器启动时附加的命名卷中。要更新网站,只需更新指定的卷。

有关命名卷的详细信息,请参阅数据量

下表描述了应用于服务中的绑定挂载和命名卷的选项:

选项

需要

描述

类型


mount的类型可以是volume,bind或tmpfs。如果没有指定类型,则默认为音量。卷:将托管卷装入容器。bind:将主机上的目录或文件绑定到容器中。tmpfs:在容器中安装一个tmpfs

src或来源

对于type = bind only>

type = volume:src是指定卷名称的可选方式(例如,src = my-volume)。如果指定的卷不存在,则会自动创建。如果未指定src,则会为该卷指定一个随机名称,该名称在主机上保证是唯一的,但可能不是群集范围内唯一的。一个随机命名的卷具有与其容器相同的生命周期,并且在容器被销毁时(这是在服务更新时,或者在扩展或重新平衡服务时)被销毁。type = bind:src是必需的,并指定绝对路径到文件或目录进行绑定挂载(例如,src = / path / on / host /)。如果文件或目录不存在,则会产生错误。type = tmpfs:src不受支持。

dst或目标或目标

装入容器内的路径,例如/ some / path / in / container /。如果路径不存在于容器的文件系统中,则引擎会在挂载卷或绑定挂载之前在指定位置创建一个目录。

只读或ro


除非在安装绑定或卷时提供只读选项,否则引擎将挂接和卷读写。true或1或没有值:将绑定或卷装载为只读。假或0:装入绑定或卷读写。

一致性


底座的一致性要求; 默认值之一:等同于一致。一致:完全一致。容器运行时和主机始终保持相同的安装视图。缓存:主机的装载视图是权威的。在主机上进行的更新在容器内可见之前可能会有延迟。委托:容器运行时的挂载视图是权威的。在容器中进行的更新可能会在主机上可见之前出现延迟。

  • 卷:安装管理量放进容器里。

  • 绑定:绑定-将一个目录或文件从主机装载到容器中。

  • tmpfs:在容器中安装tmpfs

 **src** or **source**  for type=bind only>
  • type = volume:src是指定卷名称的可选方式(例如,src = my-volume)。如果指定的卷不存在,则会自动创建。如果未指定 src,则会为该卷指定一个随机名称,该名称在主机上保证是唯一的,但可能不是群集范围内唯一的。随机命名卷具有相同的生命周期为容器,并且当被破坏容器被销毁(这是在服务更新,或缩放或重新平衡服务时)

  • type = bind:src 是必需的,并指定要绑定挂载的文件或目录的绝对路径(例如,src = / path / on / host /)。如果文件或目录不存在,则会产生错误。

  • type = tmpfs:src 不受支持。

**dst** or **destination** or **target** yes  Mount path inside the container, for example /some/path/in/container/. If the path does not exist in the container's filesystem, the Engine creates a directory at the specified location before mounting the volume or bind-mount.
**readonly** or **ro**   The Engine mounts binds and volumes read-write unless readonly option is given when mounting the bind or volume.
  • true 或1或没有值:将绑定或卷装载为只读。

  • false或0:挂载绑定或卷读写。

**consistency**   The consistency requirements for the mount; one of
  • 默认值:等效于一致。

  • 一致性:完全一致。容器运行时和主机始终保持相同的挂载视图。

  • 缓存:主机的装载视图是权威的。在主机上进行的更新在容器内可见之前可能会有延迟。

  • 委托:容器运行时的挂载视图是权威的。在容器中进行的更新可能会在主机上可见之前出现延迟。

约束传播

绑定传播是指在给定的绑定挂载或命名卷中创建的挂载是否可以传播到该挂载的副本。考虑一个挂载点/mnt,它也被挂载/tmp。该状态设置控制是否启用挂载/tmp/a也可用/mnt/a。每个传播设置都有一个递归对应点。在递归的情况下,考虑它/tmp/a也被挂载为/foo。传播设置控制是否/mnt/a和/或/tmp/a将存在。

bind-propagation选项默认值为rprivate对于绑定挂载和卷挂载,并且只能为绑定挂载配置.。换句话说,命名卷不支持绑定传播。

  • shared:原始安装的子安装会暴露给副本安装,并且副安装的子安装也会传播到原始安装。

  • slave:类似于共享安装,但仅限于一个方向。如果原始安装展示了一个子安装,则副本安装可以看到它。但是,如果副本安装程序公开了子安装,则原始安装程序无法看到它。

  • private:挂载是私人的。其中的子安装不会暴露给副本安装,并且副安装的子安装不会暴露给原始安装。

  • rshared:与共享相同,但传播也扩展到嵌套在任何原始或副本安装点内的挂载点。

  • rslave*与slave,但是传播还扩展到嵌套在任何原始或复制挂载点内的挂载点。

  • rprivate*缺省值。同private,这意味着在原始或复制挂载点中的任何位置都不会向任意方向传播挂载点。

有关绑定传播的详细信息,请参阅Linux kernel documentation for shared subtree.

指定卷的选项

以下选项只能用于命名的卷(type=volume);

选项

描述

volume-driver

用于卷的卷驱动程序插件的名称。如果该卷不存在,则默认为“本地”,以使用本地卷驱动程序创建卷。

volume-label

创建时应用于卷的一个或多个自定义元数据(“标签”)。例如,volume-label=mylabel=hello-world,my-other-label=hello-mars。有关标签的更多信息,请参阅应用自定义元数据。

volume-nocopy

默认情况下,如果您将空卷附加到容器,并且文件或目录已经存在于容器中的安装路径(dst)中,则引擎会将这些文件和目录复制到卷中,以便主机访问它们。设置volume-nocopy为禁用将容器文件系统中的文件复制到卷并挂载空卷。值是可选的:如果不提供值,则为true或1:默认值。禁用复制。假或0:启用复制。

volume-opt

特定于给定卷驱动程序的选项,将在创建卷时传递给驱动程序。选项以逗号分隔的键/值对列表形式提供,例如,volume-opt = some-option = some-value,volume-opt = some-other-option = some-other-value。有关给定驱动程序的可用选项,请参阅该驱动程序的文档。

  • 如果您没有提供值,则为 true 或1:默认值。禁用复制。

  • FALSE或0:启用复制。

**volume-opt**  Options specific to a given volume driver, which will be passed to the driver when creating the volume. Options are provided as a comma-separated list of key/value pairs, for example, volume-opt=some-option=some-value,volume-opt=some-other-option=some-other-value. For available options for a given driver, refer to that driver's documentation.

tmpfs选项

以下选项只能用于 tmpfs mounts(type=tmpfs);

选项

描述

tmpfs的大小

tmpfs的大小,以字节为单位。Linux中默认无限制。

tmpfs的模式

tmpfs的八进制文件模式。(例如“700”或“0700”)。在Linux中默认为“1777”。

“-挂载”和“-卷”的区别

--mount属性支持的大多数选项。-v--volume标志docker run,除了一些重要的例外:

  • --mount标志允许您指定卷驱动程序和卷驱动程序选项。每卷,而不预先创建卷。相反,docker run允许您指定由所有卷共享的单个卷驱动程序,使用--volume-driver标志。

  • --mount标志允许您在卷创建之前指定卷的自定义元数据(“标签”)。

  • 当你使用--mount带着type=bind,主机路径必须引用现有主机上的路径。将不会为您创建路径,如果路径不存在,则服务将失败。

  • --mount标志不允许您将卷重新命名为Zz标志,用于selinux贴标签。

使用命名卷创建服务

下面的示例创建使用命名卷的服务:

$ docker service create \  --name my-service \  --replicas 3 \  --mount type=volume,source=my-volume,destination=/path/in/container,volume-label="color=red",volume-label="shape=round" \
  nginx:alpine

对于服务的每个副本,引擎都会从部署任务的默认(“本地”)卷驱动程序中请求一个名为 “my-volume” 的卷。如果音量不存在,引擎将创建一个新音量并应用“颜色”和“形状”标签。

当任务启动时,卷被挂载到/path/in/container/容器里。

请注意,默认(“本地”)卷是本地作用域卷驱动程序。这意味着根据部署任务的位置,该任务可以获得名为 “my-volume”   的卷,或与同一服务的其他任务共享相同的“我的卷”。如果容器内运行的软件不是用来处理写入同一位置的并发进程的,则写入单个共享卷的多个容器可能会导致数据损坏。还要考虑到容器可以由 Swarm 协调器重新调度并部署在不同的节点上。

创建使用匿名卷的服务

下面的命令创建一个带有三个副本的服务,其中包含一个匿名卷。/path/in/container*

$ docker service create \  --name my-service \  --replicas 3 \  --mount type=volume,destination=/path/in/container \
  nginx:alpine

在此示例中,没有source为该卷指定 name(),因此会为每个任务创建一个新卷。这可以确保每个任务都获得自己的卷,并且不会在任务之间共享卷。完成使用任务后,匿名卷将被删除。

创建使用绑定挂载主机目录的服务。

下面的示例绑定-将主机目录安装在/path/in/container在支持服务的容器中:

$ docker service create \  --name my-service \  --mount type=bind,source=/path/on/host,destination=/path/in/container \
  nginx:alpine

设置服务模式( - 模式)

服务模式确定这是复制服务还是全局服务。复制服务按指定运行多个任务,而全局服务在群中的每个活动节点上运行。

以下命令创建一个全局服务:

$ docker service create \ --name redis_2 \ --mode global \
 redis:3.0.6

指定服务约束(-constraint)

您可以通过定义约束表达式来限制可以调度任务的节点集合。多个约束找到满足每个表达式的节点(AND匹配)。约束可以与节点或Docker引擎标签匹配,如下所示:

node attribute

matches

example

node.id

Node ID

node.id == 2ivku8v2gvtg4

node.hostname

Node hostname

node.hostname != node-2

node.role

Node role

node.role == manager

node.labels

user defined node labels

node.labels.security == high

engine.labels

Docker Engine's labels

engine.labels.operatingsystem == ubuntu 14.04

engine.labels适用于 Docker Engine 标签,例如操作系统,驱动程序等。群集管理员node.labels通过使用该docker node update命令添加用于操作目的。

例如,以下将 redis 服务的任务限制为节点类型标签等于队列的节点:

$ docker service create \  --name redis_2 \  --constraint 'node.labels.type == queue' \
  redis:3.0.6

指定服务布局偏好(-placement-pref)

您可以设置该服务,以便在不同的节点类别上平均划分任务。其中一个有用的例子是在一组数据中心或可用性区域上平衡任务。下面的例子说明了这一点:

$ docker service create \  --replicas 9 \  --name redis_2 \  --placement-pref 'spread=node.labels.datacenter' \
  redis:3.0.6

--placement-prefspread策略(当前唯一支持的策略)一起使用,以将任务均匀分布在datacenter节点标签的值上。在这个例子中,我们假设每个节点都datacenter附有一个节点标签。如果群体中的节点之间存在三个不同的标签值,则三分之一的任务将被放置在与每个值相关的节点上。即使有更多的节点具有一个值而不是另一个值,情况也是如此。例如,请考虑以下一组节点:

  • 三节点node.labels.datacenter=east

  • 两个节点node.labels.datacenter=south

  • 一个节点node.labels.datacenter=west

因为我们正在扩展到datacenter标签和服务有9个副本,3个副本将在每个数据中心结束。有三个节点与值相关联。east,因此每个副本都将获得为该值保留的三个副本中的一个。有两个节点的值south,而这个值的三个副本将在它们之间被分割,其中一个接收两个副本,另一个只接收一个副本。最后,west有一个节点,它将为所有三个副本保留west...

如果某个类别中的节点(例如那些节点node.labels.datacenter=south)由于约束或资源限制而无法处理其公平份额的任务,则可能会将其他任务分配给其他节点。

布局首选项支持引擎标签和节点标签。上面的示例使用节点标签,因为标签是以引用的node.labels.datacenter。要分布引擎标签的值,请使用--placement-pref spread=engine.labels.<labelname>

可以向服务添加多个位置首选项。这就建立了一个首选项的层次结构,这样任务首先被划分在一个类别上,然后再被进一步划分到其他类别上。这可能有用的一个例子是,在数据中心之间公平地划分任务,然后在每个数据中心内通过一个货架的选择来划分任务。若要添加多个位置首选项,请指定--placement-pref旗帜多次。该顺序是重要的,在作出调度决策时,位置首选项将应用于给定的顺序。

以下示例使用多个展示位置首选项设置服务。任务首先在各个数据中心上传播,然后在机架上传播(如各个标签所示):

$ docker service create \  --replicas 9 \  --name redis_2 \  --placement-pref 'spread=node.labels.datacenter' \  --placement-pref 'spread=node.labels.rack' \
  redis:3.0.6

在更新服务时docker service update--placement-pref-add在所有现有展示位置偏好设置之后追加新的展示位置偏好设置。--placement-pref-rm删除与参数匹配的现有展示位置偏好设置。

将服务附加到现有网络( - 网络)

您可以使用覆盖网络连接群集中的一个或多个服务。

首先,在管理器节点上创建一个覆盖网络---docker网络创建命令:

$ docker network create --driver overlay my-network

etjpu59cykrptrgw0z0hk5snf

在以群集模式创建覆盖网络之后,所有管理器节点都可以访问该网络。

创建服务并传递-Network标志将服务附加到覆盖网络时:

$ docker service create \  --replicas 3 \  --network my-network \  --name my-web \
  nginx

716thylsndqma81j6kkkb5aus

群将My-Network扩展到运行服务的每个节点。

相同网络上的容器可以使用服务发现...

在群外发布服务端口(-p,-publish)

您可以发布服务端口,使它们在外部可用给群集,使用--publish

$ docker service create --publish <TARGET-PORT>:<SERVICE-PORT> nginx

例如:

$ docker service create --name my_web --replicas 3 --publish 8080:80 nginx

当您发布服务端口时,群路由网格使服务可以在每个节点上的目标端口上访问,而不管该节点上是否有运行该服务的任务。有关更多信息,请参阅使用群模式路由网格...

仅为tcp或udp发布端口。

默认情况下,当发布端口时,它是 TCP 端口。您可以专门发布UDP 端口,而不是 TCP 端口,也可以是 TCP 端口之外的端口。当您同时发布 TCP 和 UDP 端口时,Docker 1.12.2 和更早版本要求您添加后缀/tcp对于 TCP 端口。否则它是可选的。

仅TCP

以下两个命令是等价的。

$ docker service create --name dns-cache -p 53:53 dns-cache

$ docker service create --name dns-cache -p 53:53/tcp dns-cache

TCP和UDP

$ docker service create --name dns-cache -p 53:53/tcp -p 53:53/udp dns-cache

仅UDP

$ docker service create --name dns-cache -p 53:53/udp dns-cache

提供托管服务帐户的凭证规格(仅限 Windows)

此选项仅用于使用Windows容器的服务。大--credential-spec必须是格式file://<filename>registry://<value-name>...

当使用file://<filename>格式时,引用的文件必须出现在CredentialSpecs在docker数据目录中的子目录,该子目录默认为C:\ProgramData\Docker\在窗户上。例如,指定file://spec.json负载C:\ProgramData\Docker\CredentialSpecs\spec.json...

当使用registry://<value-name>格式时,凭据规范是从守护进程主机上的Windows注册表读取的。指定的注册表值必须位于:

HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Virtualization\Containers\CredentialSpecs

使用模板创建服务

的一些标志可以使用模板。service create,使用Go‘s提供的语法。文本/模板包裹。

支持的标志如下:

  • --hostname

  • --mount

  • --env

Go模板的有效占位符列在下面:

Placeholder

Description

.Service.ID

Service ID

.Service.Name

Service name

.Service.Labels

Service labels

.Node.ID

Node ID

.Task.ID

Task ID

.Task.Name

Task name

.Task.Slot

Task slot

模板示例

在这个例子中,我们将根据服务的名称和节点的ID设置创建容器的模板。

$ docker service create --name hosttempl \                        --hostname="{{.Node.ID}}-{{.Service.Name}}"\
                         busybox top

va8ew30grofhjoychbr6iot8c

$ docker service ps va8ew30grofhjoychbr6iot8c

ID            NAME         IMAGE                                                                                   NODE          DESIRED STATE  CURRENT STATE               ERROR  PORTS
wo41w8hg8qan  hosttempl.1  busybox:latest@sha256:29f5d56d12684887bdfa50dcd29fc31eea4aaf4ad3bec43daf19026a7ce69912  2e7a8a9c4da2  Running        Running about a minute ago

$ docker inspect --format="{{.Config.Hostname}}" hosttempl.1.wo41w8hg8qanxwjwsg4kxpprj

x3ti0erg11rjpg64m75kej2mz-hosttempl
Previous article: Next article: