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

本文详细讲述了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并点击几次刷新。

无论哪种方式,都能看到容器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容器的使用有所帮助

(0)

相关推荐

  • Docker简单安装与应用入门教程

    本文实例讲述了Docker简单安装与应用.分享给大家供大家参考,具体如下: 作为一个初次接触Docker的人来说,最大的问题是Docker是什么?Docker是一个开源的引擎,可以轻松的为任何应用创建一个轻量级的.可移植的.自给自足的容器.比如,我们在笔记本上编译测试通过的容器可以批量地在生产环境中部署,可以用于自动化测试和持续集成.发布. 还可以用于web应用的自动化打包和发布:在服务型环境中部署和调整数据库或其他的后台应用:从头编译或者扩展现有的OpenShift或Cloud Foundry

  • 详解如何在 Docker 中设置 Go 并部署应用

    嗨,在本教程中,我们将学习如何使用 docker 部署 golang web 应用程序. 你可能已经知道,由于 golang 的高性能和可靠性,docker 是完全是用 golang 写的.在我们详细介绍之前,请确保你已经安装了 docker 以及 golang 并对它们有基本了解. 关于 docker Docker 是一个开源程序,它可以将应用及其完整的依赖包捆绑到一起,并打包为容器,与宿主机共享相同的 Linux 内核.另一方面,像 VMware 这样的基于 hypervisor 的虚拟化操

  • 在Docker上开始部署Python应用的教程

    几周前, Elastic Beanstalk声明在AWS云中配置和管理Docker容器.在本文中,我们通过一个简单的注册表单页面应用去理解Docker部署过程,该表单使用Elastic Beanstalk Python环境. 关于注册表单应用 几个月之前,我们就已经开发完这个应用并且发表在博客上.有4部分视频和一篇文章"Using DynamoDB and SNS with Elastic Beanstalk in any Supported AWS Region".今天,我们将在这部

  • Docker搭建简单的应用栈与容器Hello World访问详解

    本文实例讲述了Docker搭建简单的应用栈与容器Hello World访问.分享给大家供大家参考,具体如下: 这里参考<Docker容器和容器云> 2.3.2章节应用栈搭建过程,对原书中出现的问题 -镜像不断的更新导致- 做了修改,特此说明. 系统环境 操作系统版本 $ cat /etc/issue Debian GNU/Linux 8 \n \l 内核版本 $ uname -r 3.16.0-4-amd64 Docker版本 docker version Client: Version: 1

  • Docker 搭建lamp应用实例详解

    Docker 搭建lamp应用 LAMP 指的 Linux(操作系统).ApacheHTTP 服务器,MySQL(有时也指MariaDB,数据库软件) 和 PHP(有时也是指 Perl 或 Python) 的第一个字母,一般用来建立 web 服务器. 虽然这些开放源代码程序本身并不是专门设计成同另几个程序一起工作的,但由于它们的免费和开源,这个组合开始流行(大多数Linux发行版本捆绑了这些软件).当一起使用的时候,它们表现的像一个具有活力的解决方案包.下面介绍如何使用Docker来搭建一个包含

  • 详解使用docker搭建hadoop分布式集群

    使用Docker搭建部署Hadoop分布式集群 在网上找了很长时间都没有找到使用docker搭建hadoop分布式集群的文档,没办法,只能自己写一个了. 一:环境准备: 1:首先要有一个Centos7操作系统,可以在虚拟机中安装. 2:在centos7中安装docker,docker的版本为1.8.2 安装步骤如下: <1>安装制定版本的docker yum install -y docker-1.8.2-10.el7.centos <2>安装的时候可能会报错,需要删除这个依赖 r

  • Docker 实现浏览器里开发Android应用的功能

    在浏览器里开发Android应用          这里需要用到Docker的知识, Che 发布后对Android应用开发多了一个工具,这里就对如何实现该功能就行详细介绍: Eclipse Che 最近Che发布了正式版,那我就介绍下在Che上开发Android吧-- 使用Che需要懂得一些Docker的知识,只需要一点点即可,因为Che是基于Docker的,所以了解Docker有助于理解Che的工作方式. 不废话,教程只有四步,开始. 第一步:部署docker服务器 我选择的是digital

  • 在Docker快速部署Node.js应用的详细步骤

    一.前言 可能还有一些同学不了解docker这个项目,docker是由go语言编写的,一个快速部署的轻量级虚拟技术项目,他允许开发人员将自己的程序和运行环境一起打包,制作成一个docker的image(镜像),这样部署到服务器上,也只需要下载这个image就可以将程序跑起来,免去每次都安装各种依赖和环境的麻烦,还能够做到应用程序之间的隔离 二.实现准备 我会先创建一个简单的Node.js web app,来构建一个镜像.然后基于这个Image运行一个container.从而实现快速部署. 由于网

  • Docker相关命令应用汇总

    Docker命令 1.命令格式: docker run -it --name mydocker1 [image1] bash #对image1取个别名为mydocker1 docker run -it --link mydocker1:mydocker1 [image2] bash  把两个image连通,使得image1和image2可以互相通讯 2.命令功能: 把两个container相互连通通信 3.命令参数: -it --name 先对第一个image1取名称 -it --link 连接

  • 详解在Docker容器中运行Spring Boot应用

    spring Boot简化了Spring应用的开发过程,遵循约定优先配置的原则提供了各类开箱即用(out-of-the-box)的框架配置.另一方面,Spring Boot还具备将代码直接构建为可执行jar包的能力,这个jar包是一个可以独立运行的部署单元.基于以上特性,现在普遍认为Spring Boot提供了一种快速构造微服务(Micro-Service)的能力. Docker与Spring Boot Docker是一种Linux容器的实现,Linux容器是基于进程的轻量级资源隔离技术,每一个

  • 详解基于docker 如何部署surging分布式微服务引擎

    1.前言 转眼间surging 开源已经有1年了,经过1年的打磨,surging已从最初在window 部署的分布式微服务框架,到现在的可以在docker部署利用rancher 进行服务编排的分布式微服务引擎,再把业务进行剥离, 通过配置路径就能驱动加载业务模块,这样的细粒度设计,能更加灵活从业务中针对于对象加以细分,能更加灵活的拆分聚合服务.而这篇文章我们来谈谈基于docker 如何部署 surging源码下载 2.概述 容器,就是用来存放镜像的器皿,而镜像是构建成的一个轻量的.独立的.可执行

随机推荐