前言
docker service是 Docker swarm 中必不可少的操作指令,可以对 swarm 中的服务作查看、扩展、删除和更新等操作。本文主要记录 Docker swarm service 相关的部分命令及选项用法。
docker service create
此命令用于创建 swarm service。
命令格式:docker service create [OPTIONS] IMAGE [COMMAND] [ARG...]
--mount
--mount 选项可以用于添加 bind mounts,volumes 或者 memory filesystems,它们分别对应的文件系统类型是 bind mounts,data volumes,tmpfs 以及 named pipes。
- bind mounts,能够让主机上的文件或目录在容器内所挂载的地方被访问。例如说容器需要共享主机的 DNS 信息,那么就可以通过绑定挂载主机的
etc/resovl.conf;或者说容器可能会写入到主机上的某个日志目录。 - data volumes,数据卷是由 Docker 管理的,即使没有容器使用,数据卷也会保留。数据卷中的数据可以在容器和主机上共享以及容器之间。Docker 使用
volume驱动类型来创建、管理与绑定数据卷。数据卷也可以通过 Docker 命令备份或恢复。 - tmpfs,基于内存的文件存储系统,挂载至容器内以实现 volatile 数据。
- npipes,挂载 pipes,从主机到容器中。
--mount type=<TYPE>
- volume,挂载一个 data volume 到容器内。
- bind,绑定式挂载主机上的文件或目录到容器内。
- tmpfs,挂载 tmpfs 到容器。
- npipe,挂载 named pipe,从主机到容器中(仅 Windows 容器可用)。
--mount [src | source] =<SOURCE>
- type=volume,src 为数据卷名称 (可选项),如果指定的数据卷不存在则自动创建;如果不指定 src 则会创建一个随机名称的 volume,并将其挂载到容器,生命周期随着容器销毁时删除(取决于 Swarm service 的 update、scale、re-balance)
- type=bind,必须指定 src,且必须是主机上存在的文件或目录,以绝对路径指明;如文件或目录不存在则报错。
- type=tmpfs,无需也不支持 src。
--mount [dst | destination | target]=<DESTINATION>
指定要挂载到的容器内路径,如果不存在则会创建(Docker 引擎在挂载数据卷或绑定式挂载前会创建指定路径)。
--mode
服务模式主要用于决定服务是复制式 (replicated) 还是全局式 (global)。
- 对于复制式,由 manager 节点实施分发复制任务 (replica task) 到各个节点上,任务数量由指定的扩展 (scale) 参数决定,也就是说有多少个 task 就运行多少个 service。
- 对于全局式,在每个可用节点上都只有一个 task,因此
--replicas是不可用的。
task 是 Docker Swarm 集群管理的最小的调度单位。manager 节点根据服务扩展数量分配 task 到各个 worker 节点,一旦 task 分配给某个节点,就不能转移,除非分配失败。
docker service ls
此命令用于列出服务。
命令格式:docker service ls [OPTIONS]
docker service ls
ID NAME MODE REPLICAS IMAGE PORTS
ihk5b0fmrbxy boot_admin replicated 0/1 jre8:4.0-arm64 *:8080->8080/tcp
ll611p2gi10j boot_app replicated 0/1 jre8:4.0-arm64 *:8081->8081/tcp
u2100qzmm5za boot_jobs replicated 0/1 jre8:4.0-arm64 *:8082->8082/tcp
s1gcndoikk1y boot_mq-consumer replicated 0/1 jre8:4.0-arm64 *:8088->8088/tcp
3cc7a3ooccjg boot_pay replicated 0/1 jre8:4.0-arm64 *:8083->8083/tcp
docker service inspect
此命令用于显示服务的详情信息。
命令格式:docker service inspect [OPTIONS] SERVICE [SERVICE...]
### 通过服务名检查服务
docker service inspect boot_admin
### 通过服务ID检查服务
docker service inspect ihk5b0fmrbxy
docker service rm
此命令用于移除服务。
命令格式:docker service rm SERVICE [SERVICE...]
docker service rm boot_admin
docker service scale
此命令用于复制式服务的扩展,可以将服务上线或下线到预期的实例数量;
此命令无法在全局式 (global) 模式下使用。
命令格式:docker service scale SERVICE=REPLICAS [SERVICE=REPLICAS...]
docker service scale boot_admin=2
docker service update
此命令用于更新服务。
命令格式:docker service update [OPTIONS] SERVICE
--mount-add, --mount-rm
--mount-add和--mount-rm可以新增或移除服务的绑定式挂载或数据卷。
--publish-add, --publish-rm
--publish-add和--publish-rm可以新增或移除服务开放的端口。