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