# docker service COMMAND
集群服务管理命令,在集群manager节点上执行
# 1 管理服务命令
docker service create
创建一项新服务docker service inspect
显示一项或多项服务的详细信息docker service logs
获取服务或任务的日志docker service ls
列出服务docker service ps
列出一项或多项服务的任务docker service rm
删除一项或多项服务docker service rollback
还原服务配置的更改docker service scale
扩展一个或多个复制服务docker service update
更新服务
# 2 管理服务命令详解
# 2.1 docker service create
格式
# docker service create [options] image [command] [arg...] # eg: docker service create --name redis redis:6.0.5 docker service create --mode global --name redis2 redis:6.0.5 docker service ls # 使用--with-registry-auth从私有仓库拉取image生成service docker login docker.mofar.top docker service create \ --with-registry-auth \ --name web-portal \ docker.mofar.top/dss/web-portal:3.0.0 #使用--replicas创建多副本任务的服务 docker service create --name redis --replicas=3 redis:6.0.5 # --secret default secrets are located in `/run/secrets` docker service create --name redis --secret secret.json redis:6.0.5 docker service create --name redis \ --secret source=ssh-key,target=ssh \ --secret source=app-key,target=app,uid=1000,gid=1001,mode=0400 \ redis:6.0.5 # --config default amount `/` docker service create --name redis --config redis-conf redis:6.0.5 docker service create --name redis \ --config source=redis-conf,target=/etc/redis/redis.conf,mode=0400 \ redis:6.0.5 #rolling update policy 更新策略,执行docker service update redis时,每次最多同时更新2个任务,间隔10s docker service create \ --name redis \ --replicas 13 \ --update-delay 10s \ --update-parellelism 2 \ redis:6.0.5 # -e,--env docker service create \ --name redis \ --replicas 3 \ --env MAVEN_HOME=/usr/local/share/maven \ redis:6.0.5 docker service create \ --name redis \ --replicas 3 \ --env JAVA_HOME=/usr/local/jdk8 \ --env MAVEN_HOME=/usr/local/share/maven \ redis:6.0.5 # --hostname docker service create --name redis --hostname myredis redis:6.0.5 # -l,--label docker service create \ --name redis \ --label docker.mofar.top="docker" \ --label nexus.mofar.top=nexus \ redis:6.0.5 # --mount # 如果多个任务在一个节点上,可能会出现写入冲突情况,卷会持久化 docker service create \ --name nginx \ --replicas 3 \ --mount type=volume,source=nginx-conf,destination=/etc/nginx/conf,volume-label="color=red",volume-label="shape=round" \ nginx:alpine # 每个任务都生成一个新卷,卷会跟随任务完成后自动删除 docker service create \ --name nginx \ --replicas 3 \ --mount type=volume,destination=path/in/container \ nginx:alpine # dst|destination|target is same, src|source is same,ro|readonly is same docker service create \ --name nginx \ --mount type=bind,src=/path/to/host,target=/path/in/container \ nginx:alpine # --mode replicated(default)|global docker service create \ --name redis \ --mode global \ redis:6.0.5 #--constraint 指定约束表达式(设置任务调度) docker service create \ --name redis \ --constaint node.id==2ivku8v2gvtg4 \ --constaint node.hostname!=node-2 \ --constaint node.role==manager|worker \ --constaint node.platform.os==windows|linux \ --constaint node.platform.arch==x86_64 \ --constaint node.labels.xxx==bbb \ --constaint engine.labels.xxx==ccc \ redis:6.0.5 docker service create \ --name nginx \ --constaint node.labels.region=east \ nginx:alpine # --reserve-memory --limit-memory 预订|限制内存 docker service create --name redis --reserve-memory=4GB redis:6.0.5 docker service create --name redis --limit-memory=4GB redis:6.0.5 #--replicas-max-per-node 每个节点任务副本数 docker service create \ --name nginx \ --replicas 3 \ --replicas-max-per-node 1 \ --placement-pref 'spread=node.labels.datacenter' \ nginx:alpine # --network 附加一个服务到存在的网络 docker network create --driver overlay my-network docker sevice create \ --name nginx \ --replicas 3 \ --network my-network \ nginx # -p,--publish docker service create --name nginx --replicas 3 -p 8080:80 nginx docker service create --name ngixn --replicas 3 --pulbish published=8080,target=80 nginx # 使用模板参数, # 支持选项 --hostname,--mount,--env # 有效选项值:.Service.ID|.Service.Name|.Service.Labels|.Node.ID|.Node.Hostname|.Task.ID|.Task.Name|.Task.Slot docker service create \ --name nginx \ --hostname="{{.Service.Name}}-{{.Node.Hostname}}-{{.Node.ID}}" nginx # running as a job,two modes:replicated-job|global-job docker service create \ --name myjob \ --mode global-job \ bash "true" docker service create \ --name myjob \ --mode replicated-job \ --replicas 13 \ --max-concurrent 2 \ bash "true"
选项
- --name
- -d,--detach
- -w,--workdir
- -e,env 设置环境变量
- -p,publish
- -t, tty
- --replicas
- --constraint 安置约束
- --with-registry-auth 将注册验证信息发送给集群代理(下载私仓镜像用到)
- --config 指定向服务公开的配置,即向容器引入配置
- --env-file 从文件中读取环境变量
- --host 设置host-to-ip映射,(host:ip)
- --hostname 指定容器的主机名
- -l,label 定义label,key=val
- --limit-cpu
- --reserve-cpu
- --limit-memory
- --reserve-memory
- --network 附加到已有网络
- --replicas-max-per-node
- -q,quiet
- --max-concurrent
- --read-only
- --mode service mode(replicated(default)|global|replicated-job|global-job)
- --log-driver
- --log-opt
- --health-cmd 健康检查的命令
- --health-interval
- --health-retries
- --health-start-period
- --health-timeout
- --no-healthcheck
- --dns
- --dns-option
- --dns-search
- --endpoint-mode 终端模式(vip(default)|dnsrr)
- --ulimit
- --secret
- -u,--user username or UID(format:<name|uid>[:<group|gid>])
- --group 为容器设置附加用户组
# 2.2 docker service inspect
格式
# 显示指定服务的详细信息 # docker service inspect [options] SERVICE [SERVICE...] docker service inspect nginx # == docker service inspect --f pretty nginx docker service inspect --pretty nginx docker service inspect -f {{.Spec.Mode.Replicated.Replicas}} nginx
选项
- -f,--format 格式化输出,
- --pretty 人性化方式打印信息,默认json方式打印
# 2.3 docker service logs
格式
#获取服务或任务的日志 # docker service logs [OPTIONS] SERVICE_ID|SERVICE_NAME|TASK_ID docker service logs -f --tail 10 nginx
选项
-f,--follow
跟踪日志输出--tail <n>
显示多少行,实际显示的行数:replicas*n,default "all"--no-trunc
不截断输出--details
--no-resolve
不把ID映射成name输出--no-task-ids
不输出任务ID--raw
原始格式输出--since
从几时的日志开始输出,可以是绝对日期时间(2021-01-12T13:13:12z) 或相对时间(42m,即42分钟内)-t,--timestamps
显示日期时间
# 2.4 docker service ls
格式
# 列出所有服务 # docker service ls [OPTIONS] docker service ls #只显示ids docker service ls -q #filter docker service ls -f "id=0j0s" docker service ls --filter label=project docker service ls --filter name=redis #format docker service ls --format "{{.ID}}: {{.Mode}} {{.Replicas}}"
选项
-f, --filter
过滤输出,支持的过滤器有`id|label|mode|name``--format
格式化输出,支持.ID|.Name|.Mode|.Replicas|.Image|.Ports
-q,--quiet
only dispaly ids
# 2.5 docker service ps
格式
#显示一个或多个服务中的任务列表 #docker service ps [OPTIONS] SERVICE [SERVICE...] docker service ps nginx
选项
-f,--filter
--format
no-resolve
no-trunc
-q,--quiet
# 2.6 docker service rollback
格式
#回滚服务配置 # docker service rollback [OPTIONS] SERVICE docker service create --name nginx --replicas 3 -p 8080:80 nginx:alpine docker service scale nginx=4 docker service rollback nginx
选项
-d,--detach
-q,quiet
# 2.7docker service rm
格式
# remove one or more services # docker service rm SERVICE [SERVICE...] docker service rm nginx redis
选项
# 2.8 docker service scale
格式
# docker service scale SERVICE=REPLICAS [SERVICE=REPLICAS...] docker service scale nginx=5 redis=3
选项
# 2.9 docker service update
格式
# 更新服务配置 # docker service update [OPTIONS] SERVICE docker service update --replicas 3 nginx docker service update --replicas=5 nginx docker service update --limit-cpu 2 nginx # 并行2个2个更新任务,间隔30s docker service update --force --update-parallelism 2 --update-delay 30s nginx # mount update(mount-add|mount-rm) docker service create \ --name nginx \ --mount type=volume,source=test-data,target=/path/in/container \ nginx docker service update \ --mount-add type=volume,source=other-data,target=/other/path \ nginx docker service update --mount-rm /other/path nginx #published ports(publish-add|pubish-rm),删除时,指定target端口即可 docker service update \ --publish-add publish=8080,target=80 \ nginx docker service update \ --publish-add 8080:80 \ nginx docker service update \ --publish-rm publish-rm published=8080,target=80 \ nginx docker service update \ --publish-rm publish-rm 80 \ nginx # add or remove network(network-add|network-rm) docker service update \ --network-rm my-network \ --network-add name=my-network,alias=web1 \ nginx # rollback docker service update --replicas=5 nginx docker service update --rollback nginx docker service update \ --rollback \ --update-delay 0s \ nginx # secrets(secret-add|secret-rm) docker service update \ --secret-add source=ssh-2,target=ssh-2 \ --secret-rm ssh-1 \ nginx
选项
--args
服务命令参数--cap-add
增加linux能力--cap-drop
删除linux能力--config-add
增加或更新服务的一个配置文件--config-rm
删除一个配置文件--constraint-add
增加或更新约束--constraint-rm
删除结束--container-label-add
增加或更新容器标签--container-label-rm
通过key删除容器的标签-d, --detach
立即退出而不待待服务完成--dns-add
增加或更新自定义的dns服务--dns-rm
删除自定义的dns服务--dns-option-add
增加或更新dns选项--dns-option-rm
删除dns选项--dns-search-add
增加dns搜索域--dns-search-rm
删除dns搜索域--endpoint-mode
端点模式(vip|dnsrr)--entrypoint
`重写镜像的默认入口命令(ENTRYPOINT)--env-add
增加或更新环境变量--env-rm
删除环境变量--force
即使没有更改也强制更新--generic-resource-add
增加通用--generic-resource-rm
删除通用资源--group-add
增加额外的附加用户组--group-rm
从容器中删除之前增加的附加用户群组-health-cmd
健康检查运行的命令--health-interval
健康检查的频率(ms|s|m|h)--health-retries
连接失败多少次报告不健康--health-start-period
在对不稳定的重试计数之前容器初始化的开始时间 (ms|s|m|h)--health-timeout
允许一次健康检查的最大时间(ns|us|ms|s|m|h)--host-add
增加自定义host-to-ip映射(host:ip)--host-rm
删除自定义host-to-ip映射(host:ip)--hostname
指定容器的主机名--image
更新服务镜像,可以用来升级--init
在每个服务容器内使用一个init来转发信号和获取进程--isolation
服务容器的隔离模式--label-add
增加或更新一个服务label--label-rm
通过key来删除label--limit-cpu
CPU限制数--limit-memory
最大的内存限制--limit-pids
限制最大的进程数(默认0,无限制)--log-driver
服务的日志驱动程序--log-opt
日志驱动程序选项--max-concurrent
并发运行的作业任务数(默认等于--replicas)--mount-add
增加或更新一个挂载--mount-rm
通过target路径删除挂载--network-add
增加网络--network-rm
删除网络--no-healthcheck
禁用容器指定的健康检查--no-resolve-image
不查询仓库来解析镜像摘要和支持的平台--placement-pref-add
增加展示位置首选项--placement-pref-rm
删除展示位置首选项--publish-add
增加映射端口--publish-rm
通过target端口删除已映射出来的端口-q,--quiet
抑制进度输出--read-only
将容器的根文件系统挂载为只读--replicas
任务数--replicas-max-per-node
每个节点的任务数--reserve-cpu
预留cpu--reserve-memory
保留内存--restart-condition
满足条件重启("none"|"on-failure"|"any")--restart-delay
重启尝试的时间间隔(ns|us|ms|s|m|h)--restart-max-attempts
重启的最大尝试次数--restart-window
用于评估重启策略的窗口(ns|us|ms|s|m|h),不明白--rollback
回滚到前一个配置--rollback-delay
回滚任务间隔(ns|us|ms|s|m|h)--rollback-failure-action
回滚失败后的动作("pause"|"continue")--rollback-max-failure-ratio
回滚期间允许的故障率--rollback-monitor
每个任务回滚后监控失败的持续时间(ns|us|ms|s|m|h)--rollback-order
回滚顺序("start-first"|"stop-first")--rollback-parallelism
回滚并行最大任务数(0是全部一次性回滚)--secret-add
增加secret--secret-rm
删除secret--stop-grace-period
强制杀死一个容器前的待待时间(ns|us|ms|s|m|h)--stop-signal
停止容器的信号--sysctl-add
增加一个sysctl选项--sysctl-rm
删除一个sysctl选项-t,--tty
分配一个伪终端--ulimit-add
增加一个ulimit的选项--ulimit-rm
删除一个ulimit的选项--update-delay
更新的时间间隔--update-failure-action
更新失败后采取的动作("pause"|"continue"|"rollback")--update-max-failure-ratio
更新期间允许的故障率--update-monitor
每个任务更新后监控失败的持续时间--update-order
更新顺序("start-first"|"stop-first")update-parallelism
更新并行最大任务数-u,--user
用户或用户ID(format:<name|uid>[:<group|gid>])--with-registry-auth
发送注册表的验证信息到集群代理(swarm agent)-w, --workdir
容器工作目录