?
本文檔使用 php中文網(wǎng)手冊 發(fā)布
創(chuàng)建新服務(wù)
docker service create [OPTIONS] IMAGE [COMMAND] [ARG...]
名字,簡寫 | 默認 | 描述 |
---|---|---|
--config | 指定配置以暴露給服務(wù) | |
--constraint | 展示位置限制 | |
--container-label | 容器標簽 | |
--credential-spec | 托管服務(wù)帳戶的憑證規(guī)范(僅限Windows) | |
--detach,-d | 真正 | 立即退出,而不是等待服務(wù)收斂 |
--dns | 設(shè)置自定義DNS服務(wù)器 | |
--dns-option | 設(shè)置DNS選項 | |
--dns-search | 設(shè)置自定義DNS搜索域 | |
--endpoint-mode | 要人 | 端點模式(vip或dnsrr) |
--entrypoint | 覆蓋圖像的默認入口點 | |
--env,-e | 設(shè)置環(huán)境變量 | |
--env-file | 讀入環(huán)境變量文件 | |
--group | 為容器設(shè)置一個或多個補充用戶組 | |
--health-cmd | 運行以檢查運行狀況的命令 | |
--health-interval | 運行檢查之間的時間(ms | s | m | h) | |
--health-retries | 0 | 需要報告不健康的連續(xù)失敗 |
--health-start-period | 在重新計數(shù)到不穩(wěn)定(ms | s | m | h)之前,容器初始化的開始時間段 | |
--health-timeout | 允許一次檢查運行的最長時間(ms | s | m | h) | |
--host | 設(shè)置一個或多個自定義主機到IP映射(主機:IP) | |
--hostname | 容器主機名 | |
--label, -l | 服務(wù)標簽 | |
--limit-CPU | 限制CPU | |
--limit-memory | 0 | 限制記憶 |
--log-driver | 記錄驅(qū)動程序的服務(wù) | |
--log-OPT | 記錄驅(qū)動程序選項 | |
--mode | 復制 | 服務(wù)模式(復制或全局) |
--mount | 將文件系統(tǒng)掛載附加到服務(wù) | |
--name | 服務(wù)名稱 | |
--network | 網(wǎng)絡(luò)附件 | |
--no-healthcheck | 假 | 禁用任何容器指定的HEALTHCHECK |
--no-resolve-image | 假 | 不要查詢注冊表來解析圖像摘要和支持的平臺 |
--placement-PREF | 添加展示位置首選項 | |
--publish,-p | 將端口發(fā)布為節(jié)點端口 | |
--quiet,-q | 假 | 抑制進度輸出 |
--read-only | 假 | 將容器的根文件系統(tǒng)掛載為只讀 |
--replicas | 任務(wù)數(shù)量 | |
--reserve-CPU | 預留CPU | |
--reserve-memory | 0 | 保留內(nèi)存 |
--restart-condition | 滿足條件時重新啟動(“none”|“on-failure”|“any”)(默認為“any”) | |
--restart-delay | 重啟嘗試之間的延遲(ns | us | ms | s | m | h)(默認5秒) | |
--restart-max-attempts | 放棄前的最大重啟次數(shù) | |
--restart-window | 用于評估重新啟動策略的窗口(ns | us | ms | s | m | h) | |
--rollback-delay | 0 | 任務(wù)回滾之間的延遲(ns | us | ms | s | m | h)(默認值為0) |
--rollback-failure-action | 回滾失敗的操作(“暫停”|“繼續(xù)”)(默認“暫?!保?/p> | |
--rollback-max-failure-ratio | 0 | 在回滾期間容忍的失敗率(默認0) |
--rollback-monitor | 0 | (ns | us | ms | s | m | h)(默認5秒)每個任務(wù)回滾之后的持續(xù)時間 |
--rollback-order | 回滾順序(“start-first”|“stop-first”)(默認“stop-first”) | |
--rollback-parallelism | 1 | 同時回滾的任務(wù)的最大數(shù)量(0一次全部回滾) |
--secret | 指定泄露給服務(wù)的秘密 | |
--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 | 更新失敗的操作(“暫停”|“繼續(xù)”|“回滾”)(默認“暫?!保?/p> | |
--update-max-failure-ratio | 0 | 更新期間容許的失敗率(默認0) |
--update-monitor | 0 | (ns | us | ms | s | m | h)(默認5秒)每個任務(wù)更新后的持續(xù)時間 |
--update-order | 更新順序(“start-first”|“stop-first”)(默認為“stop-first”) | |
--update-parallelism | 1 | 同時更新的最大任務(wù)數(shù)(0個一次全部更新) |
--user,-u | 用戶名或UID(格式:<名稱| uid>:<組| gid>) | |
--with-registry-auth | 假 | 向注冊代理發(fā)送注冊表認證詳細信息 |
--workdir,-w | 容器內(nèi)的工作目錄 |
命令 | 描述 |
---|---|
docker service | 管理服務(wù) |
命令 | 描述 |
---|---|
docker service create | 創(chuàng)建一項新服務(wù) |
docker service inspect | 顯示一項或多項服務(wù)的詳細信息 |
docker service logs | 獲取服務(wù)或任務(wù)的日志 |
docker service ls | 列出服務(wù) |
docker service ps | 列出一項或多項服務(wù)的任務(wù) |
docker service rm | 刪除一項或多項服務(wù) |
docker service scale | 擴展一個或多個復制服務(wù) |
docker service update | 更新服務(wù) |
創(chuàng)建由指定參數(shù)描述的服務(wù)。必須在管理器節(jié)點上運行此命令。
$ 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
使用--replicas
標志設(shè)置復制服務(wù)的副本任務(wù)數(shù)。下面的命令創(chuàng)建一個redis
與5
復制任務(wù):
$ docker service create --name redis --replicas=5 redis:3.0.64cdgfyky7ozwh3htjfw0d12qv
上面的命令設(shè)置所需服務(wù)的任務(wù)數(shù)。即使命令立即返回,實際的服務(wù)擴展可能需要一些時間。大REPLICAS
列顯示兩個實際和所需服務(wù)的復制任務(wù)數(shù)。
在下面的示例中,所需的狀態(tài)為5
復制,但是當前的數(shù)量RUNNING
任務(wù)是3
*
$ docker service ls ID NAME MODE REPLICAS IMAGE 4cdgfyky7ozw redis replicated 3/5 redis:3.0.7
一旦創(chuàng)建了所有任務(wù)并且RUNNING
實際的任務(wù)數(shù)量等于所需的數(shù)量:
$ docker service ls ID NAME MODE REPLICAS IMAGE 4cdgfyky7ozw redis replicated 5/5 redis:3.0.7
使用該--secret
標志可以讓容器訪問秘密。
創(chuàng)建一個指定秘密的服務(wù):
$ docker service create --name redis --secret secret.json redis:3.0.64cdgfyky7ozwh3htjfw0d12qv
創(chuàng)建一個服務(wù),指定秘密、目標、用戶/組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
要授予服務(wù)對多個秘密的訪問權(quán)限,請使用多個--secret
標志。
秘密位于/run/secrets
容器中。如果未指定目標,則秘密的名稱將用作容器中的內(nèi)存文件。如果指定了目標,那將是文件名。在上面的例子中,將創(chuàng)建兩個文件:/run/secrets/ssh
以及/run/secrets/app
指定的每個秘密目標。
$ docker service create \ --replicas 10 \ --name redis \ --update-delay 10s \ --update-parallelism 2 \ redis:3.0.6
當你運行一個服務(wù)更新,調(diào)度程序一次最多更新2個任務(wù),使用10s
在更新之間。有關(guān)詳細信息,請參閱滾動更新教程...
這將為服務(wù)中的所有任務(wù)設(shè)置一個環(huán)境變量。例如:
$ docker service create \ --name redis_2 \ --replicas 5 \ --env MYVAR=foo \ redis:3.0.6
若要指定多個環(huán)境變量,請指定多個--env
標志,每個標志都有一個單獨的鍵值對。
$ docker service create \ --name redis_2 \ --replicas 5 \ --env MYVAR=foo \ --env MYVAR2=bar \ redis:3.0.6
此選項將碼頭服務(wù)容器主機名設(shè)置為特定字符串。例如:
$ docker service create --name redis --hostname myredis redis:3.0.6
標簽是key=value
將元數(shù)據(jù)應用于服務(wù)的對。若要將服務(wù)標記為兩個標簽,請執(zhí)行以下操作:
$ docker service create \ --name redis_2 \ --label com.example.foo="bar" --label bar=baz \ redis:3.0.6
有關(guān)標簽的詳細信息,請參閱應用自定義元數(shù)據(jù)...
Docker 支持兩種不同的安裝方式,允許容器讀取或?qū)懭肫渌萜骰蛑鳈C操作系統(tǒng)上的文件或目錄。這些類型是數(shù)據(jù)卷(通常簡稱為volume)和綁定掛載。
另外,Docker 支持tmpfs
掛載。
綁定貼裝使提供給它被安裝在容器內(nèi)的主機上的文件或目錄。綁定掛載可以是只讀的或讀寫的。例如,容器可能通過主機的綁定掛載來共享其主機的DNS信息,/etc/resolv.conf
或者容器可能會將日志寫入其主機的/var/log/myContainerLogs
目錄。如果您使用綁定掛載并且您的主機和容器具有不同的權(quán)限,訪問控制或其他此類詳細信息的概念,那么您將遇到可移植性問題。
命名卷是一種機制,用于將容器所需的持久性數(shù)據(jù)與用于創(chuàng)建容器的映像和主機機器分離。 命名卷由Docker創(chuàng)建和管理,即使當前沒有容器正在使用它,命名卷仍然存在。 命名卷中的數(shù)據(jù)可以在容器和主機之間共享,也可以在多個容器之間共享。 Docker使用卷驅(qū)動來創(chuàng)建,管理和安裝卷。 您可以使用Docker命令備份或恢復卷。
tmpfs 在容器內(nèi)掛載 tmpfs 以獲取易失性數(shù)據(jù)。
考慮一下你的圖像啟動一個輕量級web服務(wù)器的情況。您可以將該圖像用作基礎(chǔ)圖像,復制網(wǎng)站的HTML文件并將其打包到另一個圖像中。每次您的網(wǎng)站更改時,您都需要更新新映像并重新部署為您的網(wǎng)站提供服務(wù)的所有容器。更好的解決方案是將網(wǎng)站存儲在每個Web服務(wù)器容器啟動時附加的命名卷中。要更新網(wǎng)站,只需更新指定的卷。
有關(guān)命名卷的詳細信息,請參閱數(shù)據(jù)量
下表描述了應用于服務(wù)中的綁定掛載和命名卷的選項:
選項 | 需要 | 描述 |
---|---|---|
類型 | mount的類型可以是volume,bind或tmpfs。如果沒有指定類型,則默認為音量。卷:將托管卷裝入容器。bind:將主機上的目錄或文件綁定到容器中。tmpfs:在容器中安裝一個tmpfs | |
src或來源 | 對于type = bind only> | type = volume:src是指定卷名稱的可選方式(例如,src = my-volume)。如果指定的卷不存在,則會自動創(chuàng)建。如果未指定src,則會為該卷指定一個隨機名稱,該名稱在主機上保證是唯一的,但可能不是群集范圍內(nèi)唯一的。一個隨機命名的卷具有與其容器相同的生命周期,并且在容器被銷毀時(這是在服務(wù)更新時,或者在擴展或重新平衡服務(wù)時)被銷毀。type = bind:src是必需的,并指定絕對路徑到文件或目錄進行綁定掛載(例如,src = / path / on / host /)。如果文件或目錄不存在,則會產(chǎn)生錯誤。type = tmpfs:src不受支持。 |
dst或目標或目標 | 是 | 裝入容器內(nèi)的路徑,例如/ some / path / in / container /。如果路徑不存在于容器的文件系統(tǒng)中,則引擎會在掛載卷或綁定掛載之前在指定位置創(chuàng)建一個目錄。 |
只讀或ro | 除非在安裝綁定或卷時提供只讀選項,否則引擎將掛接和卷讀寫。true或1或沒有值:將綁定或卷裝載為只讀。假或0:裝入綁定或卷讀寫。 | |
一致性 | 底座的一致性要求; 默認值之一:等同于一致。一致:完全一致。容器運行時和主機始終保持相同的安裝視圖。緩存:主機的裝載視圖是權(quán)威的。在主機上進行的更新在容器內(nèi)可見之前可能會有延遲。委托:容器運行時的掛載視圖是權(quán)威的。在容器中進行的更新可能會在主機上可見之前出現(xiàn)延遲。 |
卷:安裝管理量放進容器里。
綁定:綁定-將一個目錄或文件從主機裝載到容器中。
tmpfs:在容器中安裝tmpfs
**src** or **source** for type=bind only>
type = volume:src是指定卷名稱的可選方式(例如,src = my-volume)。如果指定的卷不存在,則會自動創(chuàng)建。如果未指定 src,則會為該卷指定一個隨機名稱,該名稱在主機上保證是唯一的,但可能不是群集范圍內(nèi)唯一的。隨機命名卷具有相同的生命周期為容器,并且當被破壞容器被銷毀(這是在服務(wù)更新,或縮放或重新平衡服務(wù)時)
type = bind:src 是必需的,并指定要綁定掛載的文件或目錄的絕對路徑(例如,src = / path / on / host /)。如果文件或目錄不存在,則會產(chǎn)生錯誤。
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
默認值:等效于一致。
一致性:完全一致。容器運行時和主機始終保持相同的掛載視圖。
緩存:主機的裝載視圖是權(quán)威的。在主機上進行的更新在容器內(nèi)可見之前可能會有延遲。
委托:容器運行時的掛載視圖是權(quán)威的。在容器中進行的更新可能會在主機上可見之前出現(xiàn)延遲。
綁定傳播是指在給定的綁定掛載或命名卷中創(chuàng)建的掛載是否可以傳播到該掛載的副本??紤]一個掛載點/mnt
,它也被掛載/tmp
。該狀態(tài)設(shè)置控制是否啟用掛載/tmp/a
也可用/mnt/a
。每個傳播設(shè)置都有一個遞歸對應點。在遞歸的情況下,考慮它/tmp/a
也被掛載為/foo
。傳播設(shè)置控制是否/mnt/a
和/或/tmp/a
將存在。
bind-propagation
選項默認值為rprivate
對于綁定掛載和卷掛載,并且只能為綁定掛載配置.。換句話說,命名卷不支持綁定傳播。
shared
:原始安裝的子安裝會暴露給副本安裝,并且副安裝的子安裝也會傳播到原始安裝。
slave
:類似于共享安裝,但僅限于一個方向。如果原始安裝展示了一個子安裝,則副本安裝可以看到它。但是,如果副本安裝程序公開了子安裝,則原始安裝程序無法看到它。
private
:掛載是私人的。其中的子安裝不會暴露給副本安裝,并且副安裝的子安裝不會暴露給原始安裝。
rshared
:與共享相同,但傳播也擴展到嵌套在任何原始或副本安裝點內(nèi)的掛載點。
rslave
*與slave
,但是傳播還擴展到嵌套在任何原始或復制掛載點內(nèi)的掛載點。
rprivate
*缺省值。同private
,這意味著在原始或復制掛載點中的任何位置都不會向任意方向傳播掛載點。
有關(guān)綁定傳播的詳細信息,請參閱Linux kernel documentation for shared subtree.
以下選項只能用于命名的卷(type=volume
);
選項 | 描述 |
---|---|
volume-driver | 用于卷的卷驅(qū)動程序插件的名稱。如果該卷不存在,則默認為“本地”,以使用本地卷驅(qū)動程序創(chuàng)建卷。 |
volume-label | 創(chuàng)建時應用于卷的一個或多個自定義元數(shù)據(jù)(“標簽”)。例如,volume-label=mylabel=hello-world,my-other-label=hello-mars。有關(guān)標簽的更多信息,請參閱應用自定義元數(shù)據(jù)。 |
volume-nocopy | 默認情況下,如果您將空卷附加到容器,并且文件或目錄已經(jīng)存在于容器中的安裝路徑(dst)中,則引擎會將這些文件和目錄復制到卷中,以便主機訪問它們。設(shè)置volume-nocopy為禁用將容器文件系統(tǒng)中的文件復制到卷并掛載空卷。值是可選的:如果不提供值,則為true或1:默認值。禁用復制。假或0:啟用復制。 |
volume-opt | 特定于給定卷驅(qū)動程序的選項,將在創(chuàng)建卷時傳遞給驅(qū)動程序。選項以逗號分隔的鍵/值對列表形式提供,例如,volume-opt = some-option = some-value,volume-opt = some-other-option = some-other-value。有關(guān)給定驅(qū)動程序的可用選項,請參閱該驅(qū)動程序的文檔。 |
如果您沒有提供值,則為 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 mounts(type=tmpfs
);
選項 | 描述 |
---|---|
tmpfs的大小 | tmpfs的大小,以字節(jié)為單位。Linux中默認無限制。 |
tmpfs的模式 | tmpfs的八進制文件模式。(例如“700”或“0700”)。在Linux中默認為“1777”。 |
--mount
屬性支持的大多數(shù)選項。-v
或--volume
標志docker run
,除了一些重要的例外:
--mount
標志允許您指定卷驅(qū)動程序和卷驅(qū)動程序選項。每卷,而不預先創(chuàng)建卷。相反,docker run
允許您指定由所有卷共享的單個卷驅(qū)動程序,使用--volume-driver
標志。
--mount
標志允許您在卷創(chuàng)建之前指定卷的自定義元數(shù)據(jù)(“標簽”)。
當你使用--mount
帶著type=bind
,主機路徑必須引用現(xiàn)有主機上的路徑。將不會為您創(chuàng)建路徑,如果路徑不存在,則服務(wù)將失敗。
--mount
標志不允許您將卷重新命名為Z
或z
標志,用于selinux
貼標簽。
下面的示例創(chuàng)建使用命名卷的服務(wù):
$ 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
對于服務(wù)的每個副本,引擎都會從部署任務(wù)的默認(“本地”)卷驅(qū)動程序中請求一個名為 “my-volume” 的卷。如果音量不存在,引擎將創(chuàng)建一個新音量并應用“顏色”和“形狀”標簽。
當任務(wù)啟動時,卷被掛載到/path/in/container/
容器里。
請注意,默認(“本地”)卷是本地作用域卷驅(qū)動程序。這意味著根據(jù)部署任務(wù)的位置,該任務(wù)可以獲得名為 “my-volume” 的新卷,或與同一服務(wù)的其他任務(wù)共享相同的“我的卷”。如果容器內(nèi)運行的軟件不是用來處理寫入同一位置的并發(fā)進程的,則寫入單個共享卷的多個容器可能會導致數(shù)據(jù)損壞。還要考慮到容器可以由 Swarm 協(xié)調(diào)器重新調(diào)度并部署在不同的節(jié)點上。
下面的命令創(chuàng)建一個帶有三個副本的服務(wù),其中包含一個匿名卷。/path/in/container
*
$ docker service create \ --name my-service \ --replicas 3 \ --mount type=volume,destination=/path/in/container \ nginx:alpine
在此示例中,沒有source
為該卷指定 name(),因此會為每個任務(wù)創(chuàng)建一個新卷。這可以確保每個任務(wù)都獲得自己的卷,并且不會在任務(wù)之間共享卷。完成使用任務(wù)后,匿名卷將被刪除。
下面的示例綁定-將主機目錄安裝在/path/in/container
在支持服務(wù)的容器中:
$ docker service create \ --name my-service \ --mount type=bind,source=/path/on/host,destination=/path/in/container \ nginx:alpine
服務(wù)模式確定這是復制服務(wù)還是全局服務(wù)。復制服務(wù)按指定運行多個任務(wù),而全局服務(wù)在群中的每個活動節(jié)點上運行。
以下命令創(chuàng)建一個全局服務(wù):
$ docker service create \ --name redis_2 \ --mode global \ redis:3.0.6
您可以通過定義約束表達式來限制可以調(diào)度任務(wù)的節(jié)點集合。多個約束找到滿足每個表達式的節(jié)點(AND匹配)。約束可以與節(jié)點或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 標簽,例如操作系統(tǒng),驅(qū)動程序等。群集管理員node.labels
通過使用該docker node update
命令添加用于操作目的。
例如,以下將 redis 服務(wù)的任務(wù)限制為節(jié)點類型標簽等于隊列的節(jié)點:
$ docker service create \ --name redis_2 \ --constraint 'node.labels.type == queue' \ redis:3.0.6
您可以設(shè)置該服務(wù),以便在不同的節(jié)點類別上平均劃分任務(wù)。其中一個有用的例子是在一組數(shù)據(jù)中心或可用性區(qū)域上平衡任務(wù)。下面的例子說明了這一點:
$ docker service create \ --replicas 9 \ --name redis_2 \ --placement-pref 'spread=node.labels.datacenter' \ redis:3.0.6
--placement-pref
與spread
策略(當前唯一支持的策略)一起使用,以將任務(wù)均勻分布在datacenter
節(jié)點標簽的值上。在這個例子中,我們假設(shè)每個節(jié)點都datacenter
附有一個節(jié)點標簽。如果群體中的節(jié)點之間存在三個不同的標簽值,則三分之一的任務(wù)將被放置在與每個值相關(guān)的節(jié)點上。即使有更多的節(jié)點具有一個值而不是另一個值,情況也是如此。例如,請考慮以下一組節(jié)點:
三節(jié)點node.labels.datacenter=east
兩個節(jié)點node.labels.datacenter=south
一個節(jié)點node.labels.datacenter=west
因為我們正在擴展到datacenter
標簽和服務(wù)有9個副本,3個副本將在每個數(shù)據(jù)中心結(jié)束。有三個節(jié)點與值相關(guān)聯(lián)。east
,因此每個副本都將獲得為該值保留的三個副本中的一個。有兩個節(jié)點的值south
,而這個值的三個副本將在它們之間被分割,其中一個接收兩個副本,另一個只接收一個副本。最后,west
有一個節(jié)點,它將為所有三個副本保留west
...
如果某個類別中的節(jié)點(例如那些節(jié)點node.labels.datacenter=south
)由于約束或資源限制而無法處理其公平份額的任務(wù),則可能會將其他任務(wù)分配給其他節(jié)點。
布局首選項支持引擎標簽和節(jié)點標簽。上面的示例使用節(jié)點標簽,因為標簽是以引用的node.labels.datacenter
。要分布引擎標簽的值,請使用--placement-pref spread=engine.labels.<labelname>
。
可以向服務(wù)添加多個位置首選項。這就建立了一個首選項的層次結(jié)構(gòu),這樣任務(wù)首先被劃分在一個類別上,然后再被進一步劃分到其他類別上。這可能有用的一個例子是,在數(shù)據(jù)中心之間公平地劃分任務(wù),然后在每個數(shù)據(jù)中心內(nèi)通過一個貨架的選擇來劃分任務(wù)。若要添加多個位置首選項,請指定--placement-pref
旗幟多次。該順序是重要的,在作出調(diào)度決策時,位置首選項將應用于給定的順序。
以下示例使用多個展示位置首選項設(shè)置服務(wù)。任務(wù)首先在各個數(shù)據(jù)中心上傳播,然后在機架上傳播(如各個標簽所示):
$ docker service create \ --replicas 9 \ --name redis_2 \ --placement-pref 'spread=node.labels.datacenter' \ --placement-pref 'spread=node.labels.rack' \ redis:3.0.6
在更新服務(wù)時docker service update
,--placement-pref-add
在所有現(xiàn)有展示位置偏好設(shè)置之后追加新的展示位置偏好設(shè)置。--placement-pref-rm
刪除與參數(shù)匹配的現(xiàn)有展示位置偏好設(shè)置。
您可以使用覆蓋網(wǎng)絡(luò)連接群集中的一個或多個服務(wù)。
首先,在管理器節(jié)點上創(chuàng)建一個覆蓋網(wǎng)絡(luò)---docker網(wǎng)絡(luò)創(chuàng)建命令:
$ docker network create --driver overlay my-network etjpu59cykrptrgw0z0hk5snf
在以群集模式創(chuàng)建覆蓋網(wǎng)絡(luò)之后,所有管理器節(jié)點都可以訪問該網(wǎng)絡(luò)。
創(chuàng)建服務(wù)并傳遞-Network標志將服務(wù)附加到覆蓋網(wǎng)絡(luò)時:
$ docker service create \ --replicas 3 \ --network my-network \ --name my-web \ nginx 716thylsndqma81j6kkkb5aus
群將My-Network擴展到運行服務(wù)的每個節(jié)點。
相同網(wǎng)絡(luò)上的容器可以使用服務(wù)發(fā)現(xiàn)...
您可以發(fā)布服務(wù)端口,使它們在外部可用給群集,使用--publish
:
$ docker service create --publish <TARGET-PORT>:<SERVICE-PORT> nginx
例如:
$ docker service create --name my_web --replicas 3 --publish 8080:80 nginx
當您發(fā)布服務(wù)端口時,群路由網(wǎng)格使服務(wù)可以在每個節(jié)點上的目標端口上訪問,而不管該節(jié)點上是否有運行該服務(wù)的任務(wù)。有關(guān)更多信息,請參閱使用群模式路由網(wǎng)格...
默認情況下,當發(fā)布端口時,它是 TCP 端口。您可以專門發(fā)布UDP 端口,而不是 TCP 端口,也可以是 TCP 端口之外的端口。當您同時發(fā)布 TCP 和 UDP 端口時,Docker 1.12.2 和更早版本要求您添加后綴/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
$ docker service create --name dns-cache -p 53:53/tcp -p 53:53/udp dns-cache
$ docker service create --name dns-cache -p 53:53/udp dns-cache
此選項僅用于使用Windows容器的服務(wù)。大--credential-spec
必須是格式file://<filename>
或registry://<value-name>
...
當使用file://<filename>
格式時,引用的文件必須出現(xiàn)在CredentialSpecs
在docker數(shù)據(jù)目錄中的子目錄,該子目錄默認為C:\ProgramData\Docker\
在窗戶上。例如,指定file://spec.json
負載C:\ProgramData\Docker\CredentialSpecs\spec.json
...
當使用registry://<value-name>
格式時,憑據(jù)規(guī)范是從守護進程主機上的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 |
在這個例子中,我們將根據(jù)服務(wù)的名稱和節(jié)點的ID設(shè)置創(chuàng)建容器的模板。
$ 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