Docker Service 创建

这篇具有很好参考价值的文章主要介绍了Docker Service 创建。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Docker Swarm Mode
Docker Swarm 集群搭建
Docker Swarm 节点维护
Docker Service 创建

service 只能依附于 docker swarm 集群,所以 service 的创建前提是,swarm 集群搭建完毕。

1. 创建 service

docker service create 命令用于创建 service,需要在 manager 中运行。与创建容器的命令 docker run 非常类似

目前的节点状态如下:

docker service create,云原生,docker,容器,运维

在 swarm 中创建一个运行 tomcat:8.5.49 镜像的 service,服务名称为 toms,包含3 个副本 task,对外映射端口号为 9000。当一个 service 包含多个 task 时,对 service 的访问最终会通过 负载均衡 方式转发给各个 task 处理。这个负载均衡为轮询策略

docker service create --name toms --replicas 3 -p 9000:8080 tomcat:8.5.49

docker service create,云原生,docker,容器,运维

1.1 查看服务列表

docker service ls 命令用于查看当前 swarm 集群中正在运行的 service 列表信息。一个swarm 中可以运行多个 service。
docker service create,云原生,docker,容器,运维

1.2 查看服务详情

通过 docker service inspect [service name|service ID]命令可以查看指定 service 的详情。

docker service create,云原生,docker,容器,运维

1.3 用户访问服务

服务创建完毕后,该服务也就运行了起来。此时就可通过浏览器进行访问了

docker service create,云原生,docker,容器,运维

也可以直接通过ip访问,通过域名访问需要在本机C:\Windows\System32\drivers\etc\hosts文件中加入如下:

192.168.137.100 docker
192.168.137.101 docker2
192.168.137.102 docker3
192.168.137.103 docker4
192.168.137.104 docker5

1.4 查看 task 节点

docker service ps [service name|service ID]命令可以查看指定服务的各个 task 所分配的节点信息。

docker service create,云原生,docker,容器,运维

可以看到,toms 服务的 3 个 task 被分配到了 docker2、docker3、docker 三个主机。其中 ID 为task ID,NAME 为 task 的 name。task nameservice name 后添加从 1 开始的流水号形成的。

1.5 查看指定节点的 task

通过 docker node ps [node]可以查看指定节点中运行的 task 的信息。默认查看的是当前节点的task 信息。

docker service create,云原生,docker,容器,运维

1.6 查看服务日志

通过 docker service logs 命令可以查看指定 service 或 task 的日志。通过 docker service logs –f 命令可动态监听指定 service 或 task 的日志。

(1)查看 service 日志

通过 docker service logs [service name|service ID]命令可以查看指定 service 的日志。这些日志实际是所有 task 在节点容器中的运行日志。

# -f 实时进行显示,-t 日志要携带时间戳,-–tail 100 显示最新的100条数据 
docker logs -f -t --tail 200 <service name|service ID>

(2)查看 task 日志

通过 docker service logs [task ID]命令可以查看指定 task 的日志。注意,这里只能指定taskID,不能指定 task name(task name不唯一)。这些日志实际是指定 task 在节点容器中的运行日志。

docker service logs -f -t -n 5 <task ID>

docker service create,云原生,docker,容器,运维

有时候server启动失败,通过logs查看日志什么也没有,可以通过docker service ps --no-trunc <service>查看错误信息

1.7 查看节点容器

在 docker2、docker3、docker 三个主机中查看正在运行的容器列表,可以看到相应的tomcat 容器。

docker service create,云原生,docker,容器,运维

容器的 NAME 是由 task name 后添加 task ID 形成的。在 docker4、docker5 主机中是没有该服务的 task 容器的。

1.8 task伸缩

 根据访问量的变化,需要在不停止服务的前提下对服务的 task 进行扩容/缩容,即对服务进行伸缩变化。有两种实现方式:

(1)docker service update 方式

通过 docker service update --replicas 命令可以实现对指定服务的 task 数量进行变更。

docker service update --replicas 5 toms

docker service create,云原生,docker,容器,运维

(2)docker service scale 方式

通过 docker service scale 命令可以为指定的服务变更 task 数量。

# docker service scale SERVICE=REPLICAS
docker service scale toms=7
docker service scale toms=3

(3)暂停节点的 task 分配

生产环境下,可能由于某主机性能不高,在进行 task 扩容时,不想再为该主机再分配更多的 task,此时可通过 pause 暂停该主机节点的可用性来达到此目的。

docker node update --availability pause <nodeID>

docker service create,云原生,docker,容器,运维

更新前有3个task,分别在docker、docker2、docker3节点上,更新副本数为10后,docker2 上边还是只有一个task

(4)清空 task

由于某节点出现了性能问题,需要停止服务进行维修,此时最好是将该节点上的task 清空,以不影响 service 的整体性能。

通过 docker node update –availability drain 命令可以清空指定节点中的所有 task。

docker node update --availability drain <nodeId>

docker service create,云原生,docker,容器,运维

清空前每个节点有一个task,将dcoker3、docker4清空后,docker3、docker4两个节点上没有task了,但是总的toms服务的task总量没有减少。全部都分配到了docker、docker2、docker5三个节点上了,这个结果是由编排器与分发器共同维护的。

1.9 task 容错

当某个 task 所在的主机或容器出现了问题时,manager 的编排器会自动再创建出新的task,然后分发器会再选择出一台 available node 可用节点,并将该节点分配给新的 task。

# 在docker5中
docker ps
docker stop <containerID>

# 在manager节点重新查看服务的task节点信息
docker service ps toms

docker service create,云原生,docker,容器,运维

在docker5中停掉容器后,再查看服务的task节点信息可以看到,原来docker5中的task已经是Shutdown状态了,又新增了一个新的toms.5的task

2. 服务删除

通过 docker service rm [service name|service ID]可以删除指定的一个或多个 service。

删除后,该 service 消失,当然,该 service 的所有 task 也全部删除,task 相关的节点容器全部消失。

3. 滚动更新

当一个 service 的 task 较多时,为了不影响对外提供的服务,在对 service 进行更新时可采用滚动更新方式。

需求:将原本镜像为 tomcat:8.5.49 的 service 的镜像滚动更新为tomcat:8.5.39

  1. 创建一个包含 10 个副本 task 的服务,该服务使用的镜像为 tomcat:8.5.49。
docker service create \
--name toms \
--replicas 10 \
--update-parallelism 2 \
--update-delay 3s \
--update-max-failure-ratio 0.2 \
--update-failure-action rollback \
--rollback-parallelism 2 \
--rollback-delay 3s \
--rollback-max-failure-ratio 0.2 \
--rollback-failure-action continue \
-p 9000:8080 \
tomcat:8.5.49
  1. 将 service 使用的镜像由 tomcat:8.5.49 更新为 tomcat:8.5.39。

docker service create,云原生,docker,容器,运维

  1. 观察更新和创建的过程
docker service ps toms

会发现这个更新的过程就是前面在创建服务时指定的那样,每次更新 2 个 task,更新间隔为 3 秒。

3.1 更新回滚

在更新过程中如果更新失败,则会按照设置的回滚策略进行回滚,回滚到更新前的状态。但也可通过命令方式手工回滚。

# 按照前面设置的每次回滚 2 个 task,每次回滚间隔 3 秒进行回滚
docker service update --rollback toms

docker service create,云原生,docker,容器,运维

需要注意,task name 保持未变,但 task ID 与原来的 task ID 也是不同的,并不是恢复到了更新之前的 task ID。即编排器新创建了 task,并由分发器重新为其分配了 node。

4. service 全局部署模式

docker service create 命令中通过--mode 选项可以指定要使用的 service 部署模式,默认为 replicated 模式。

docker service create --name toms --mode global -p 9000:8080 tomcat:8.5.49

该模式会在每个节点上分配一个 task。

4.1 task 伸缩

对于 global 模式来说,若要实现对 service 的 task 数量的变更,必须通过改变该 servicve所依附的 swarm 集群的节点数量来改变。节点增加,则 task 会 自动增加;节点减少,则 task会自动减少文章来源地址https://www.toymoban.com/news/detail-763185.html

到了这里,关于Docker Service 创建的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 关于Docker重启出现 “Failed to restart docker.service: Unit docker.service not found.”

    环境:Linux ubuntu 5.15.0-48-generic Docker软件的版本:Docker version 20.10.14, build a224086349 使用以下命令重启: $ sudo service docker restart $ sudo systemctl restart docker 都出现了error: Failed to restart docker.service: Unit docker.service not found.   因为最开始我使用的是 snap 安装的,并未使用apt snap:是一种全

    2024年02月11日
    浏览(40)
  • 如何覆盖docker.service文件中的配置,解决一次docker.service启动不成功的问题

    服务器重启之后systemctl restart docker始终不成功,网上各种方法都试了一遍,依然没有解决问题。 systemctl restart docker 报错信息: systemctl status docker.service  查看错误信息: journalctl -xe 查看报错详细信息: vi /var/log/messages 查看日志,shift+G定位到末尾,具体报错信息: 关键报错

    2024年02月11日
    浏览(220)
  • Linux 中启动 Docker 服务时遇到错误消息 `failed to start docker.service: unit docker.service is masked` 启动失败的解决方法

    如果在 Linux 中启动 Docker 服务时遇到错误消息 `failed to start docker.service: unit docker.service is masked`,那么说明 Docker 服务已经被系统禁用了。 在 Linux 系统中,可以使用 `systemctl` 命令来管理系统服务。如果某个服务被禁用,那么该服务的 `systemd` 单元文件会被标记为 \\\"masked\\\"。标记

    2024年02月15日
    浏览(51)
  • 【Docker】swarm stack部署多service应用

    前面我们已经学习过了Docker Compose,它可以用来进行一个完整的应用程序相互依赖的多个容器的编排的,但是缺点是只能在单机模式使用,不能在分布式多机器上使用;前面我们也学习了Docker swarm,它可以将单个服务部署为多个容器,并运行在不同集群节点上,构成服务集群

    2024年01月18日
    浏览(41)
  • docker报错docker.service: Start request repeated too quickly.

    主要报错内容 情况一: 新服务器安装的docker 只要安装过程没问题,那百分百是deamon.json文件格式改错了。 像下面这例子 内容如下 定睛一看,后面多了一个逗号。删除后,使用 systemctl start docker 命令启动docker。没有报错,即恢复。 情况二:老服务器出现的报错 老服务器出现

    2024年02月15日
    浏览(42)
  • docker配置daemon.json或docker.service后重启docker报错的问题

    我们改动的配置文件通常有两种: 如果配置这两种文件后重启时出错,大概率是这两个配置文件产生了冲突。 例如: 我们在/lib/systemd/system/ docker.service 文件中配置了 又在/etc/docker/ daemon.json 文件中配置了 这样配置的话,即使配置内容相同,也会在重启docker时报错。 特此记录

    2024年02月13日
    浏览(81)
  • 踩坑!WSL2报错:docker unrecognized service

    WSL2安装Docker后执行 sudo service docker start 报错:docker: unrecognized service实录 在WSL中安装Docker要使用命令: 即原生linux docker,若使用以下命令安装则会提示unrecognized service。。。 安装过程见 [Install Docker in WSL](https://blog.csdn.net/weixin_36815313/article/details/107641262)

    2024年02月15日
    浏览(34)
  • 新机部署docker报错docker.service: Start request repeated too quickly.

    主要报错内容 情况一: 新服务器安装的docker 只要安装过程没问题,那百分百是deamon.json文件格式改错了。 像下面这例子 内容如下 定睛一看,后面多了一个逗号。删除后,使用 systemctl start docker 命令启动docker。没有报错,即恢复。 情况二:老服务器出现的报错 老服务器出现

    2024年02月14日
    浏览(45)
  • docker服务启动报错docker.service holdoff time over, scheduling restart.

    docker服务启动报错docker.service holdoff time over, scheduling restart. 卸载安装包 yum remove -y docker docker-client docker-client-latest docker-ce-cli docker-common docker-latest docker-latest-logrotate docker-logrotate docker-selinux docker-engine-selinux docker-engine rm -rf /usr/lib/systemd/system/docker.service rm -rf /etc/systemd/system/doc

    2024年01月16日
    浏览(75)
  • sudo service docker start显示[OK]但是* Docker is not running问题【Docker踩坑】

    首先必须添加 fstab 文件,因为由于某种原因不存在或无法读取: 由于网络控制器错误,所以要从nftables切换到iptables 执行上述命令后重新启动docker 再查看当前运行状态

    2024年02月11日
    浏览(55)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包