Docker Service基本命令

557 阅读4分钟

前言

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可以新增或移除服务开放的端口。

参考

[1] docker service
[2] Swarm mode key concepts