Docker实现分布式应用功能教程

作者:何小有 时间:2023-09-29 20:43:38 

本文详细讲述了Docker实现分布式应用功能。分享给大家供大家参考,具体如下:

这里接着前面一篇《Docker简单安装与应用入门教程》后面扩展应用程序。实现负载平衡,要做到这一点,必须在分布式应用程序的层次结构中的服务层实现。

在分布式应用程序中,应用程序的不同部分被称为“服务”。例如,一个视频共享站点,它可能包括一个用于将应用程序数据存储在数据库中的服务、后面的视频转码服务、用户上传东西、为前端服务等等。

服务实际上只是“生产中的容器”,服务只运行一个镜像,但它编码镜像运行的方式,例如,应该使用哪个端口,容器应该运行多少个副本,以便服务具有所需的容量等。缩放服务会更改运行该软件的容器实例的数量,从而为流程中的服务分配更多的计算资源。幸运的是,使用Docker平台定义、运行和扩展服务非常简单,只需编写一个docker-compose.yml文件即可。

创建docker-compose.yml文件

创建docker-compose.yml文件,并放在与Dockerfile相同的目录下,docker-compose.yml文件是一个YAML文件,它定义了Docker容器在生产中的行为方式。


version: "3"
services:
web:
 # 用你的用户名和镜像细节替换username/repo:tag命令
 image: username/repo:tag
 deploy:
  replicas: 5
  resources:
   limits:
    cpus: "0.1"
    memory: 50M
  restart_policy:
   condition: on-failure
 ports:
  - "80:80"
 networks:
  - webnet
networks:
webnet:

这个docker-compose.yml文件告诉Docker执行以下操作:

- 从注册表中取出我们在《Docker简单安装与应用入门教程》中上传的镜像。
- 运行该镜像的5个实例作为一个名为web的服务,限制每个服务器最多使用10%的CPU(跨所有核心)和50MB的RAM。
- 如果一个失败,立即重新启动容器。
- 将主机上的端口80映射到Web的端口80。
- 指示Web容器通过称为webnet的负载平衡网络共享端口80(在内部,容器本身将在临时端口上发布到Web的端口80)。
- 使用默认设置(这是一个负载平衡覆盖网络)定义webnet网络。

运行新的负载平衡应用程序

在使用docker stack deploy命令之前,先运行以下命令。


$ docker swarm init

打开一个命令行终端,确保仍然在新目录的顶层,现在来运行它,必须给应用程序一个名称,在这里它被设置为getstartedlab


$ docker stack deploy -c docker-compose.yml getstartedlab

单个服务堆栈在一台主机上运行了5个部署镜像的容器实例,在应用程序中获取一项服务的服务ID。


$ docker service ls

您将看到Web服务的输出,并以您的应用程序名称作为前缀。如果您将其命名为与此示例中所示的相同,则名称将为getstartedlab_web。还列出了服务ID以及副本数量,镜像名称和暴露端口。

在服务中运行的单个容器称为任务。任务会被赋予唯一的数字增加的ID,最多可以运行在docker-compose.yml中定义的replicas数量。使用以下命令可以列出服务中的任务。


$ docker service ps getstartedlab_web

如果只列出系统上的所有容器,也会显示任务,但不会被服务过滤。


$ docker container ls -q

可以连续多次运行curl -4 http://localhost,或者在浏览器中转到该URL并点击几次刷新。

Docker实现分布式应用功能教程

无论哪种方式,都能看到容器ID的更改,演示负载平衡。在每个请求中,以循环方式选择5个任务中的一个来响应,容器ID将匹配您以前的docker container ls -q命令的输出。

缩放应用程序

可以通过更改docker-compose.yml中的replicas值,保存更改并重新运行docker stack deploy命令来扩展应用程序。


$ docker stack deploy -c docker-compose.yml getstartedlab

Docker会做一个更新操作,不需要先删除堆栈或杀死任何容器。现在,重新运行docker container ls -q来查看重新配置的已部署实例。明显因为扩大了replicas值,即副本,有了更多的任务和容器。

接下来,结束应用程序和集群,使用docker stack rm把应用程序结束,使用docker swarm leave把集群结束。


$ docker stack rm getstartedlab
$ docker swarm leave --force

希望本文所述对大家docker容器的使用有所帮助

来源:https://blog.csdn.net/hekaiyou/article/details/79074360

标签:Docker,分布式应用
0
投稿

猜你喜欢

  • DDoS拒绝服务攻击和安全防范技术

    2011-06-06 09:50:00
  • 高效配置Linux代理服务器 Squid介绍

    2008-10-13 18:45:00
  • DEDE seo小技巧 加个百度搜索本篇文章

    2009-02-20 15:51:00
  • 避开华丽外表 借助口碑力量选主机商

    2009-10-26 09:26:00
  • 信息过量抓取有限:谈搜索引擎相关性技

    2008-11-12 11:28:00
  • 使用VSCode和SSH进行远程开发

    2023-10-13 01:58:03
  • 网站盈利只要做好三件事

    2008-01-23 14:30:00
  • 适合新手做的网赚项目总结

    2010-05-10 15:24:00
  • 在线拍照---网页flash启动不了摄像头的解决方法

    2011-06-25 19:44:41
  • Virtual Box的host-only网络,文件共享

    2021-01-20 15:05:09
  • WAP网站建设全攻略教程

    2010-03-21 09:12:00
  • Linux (Ubuntu 18.04) 下安装vim编辑器的方法

    2023-05-26 01:54:35
  • 如何做一个面向用户的网站

    2008-07-23 13:02:00
  • 详解Linux下crontab的使用与注意事项

    2023-03-30 04:59:27
  • 快播网吧版 内网环境点播新方案

    2009-07-23 10:58:00
  • 一句话问答 搜索引擎优化的常见问题整理

    2009-01-13 11:58:00
  • 配置WEB服务器的步骤

    2007-03-26 10:35:00
  • Godaddy域名管理面板中文使用说明

    2009-11-21 13:21:00
  • VMware下CentOS6.4网卡设置为桥接模式静态IP配置方法详解

    2023-11-04 02:08:37
  • 服务器管理最容易犯的十大错误(上)

    2010-08-17 18:51:00
  • asp之家 网站运营 m.aspxhome.com