docker集群部署:第3部分:服务

  1. 介绍
    在第3部分中,我们将扩展应用程序并实现负载平衡。
  2. 关于服务
    在分布式应用程序中,应用程序的不同部分被称为“服务”。例如,一个视频共享站点,它可能包括一个用于将应用程序数据存储在数据库中的服务,后面的视频转码服务用户上传东西,为前端服务等等。
    服务实际上只是“生产中的容器”。服务只运行一个镜像,但它定义镜像运行的方式 - 应该使用哪个端口,容器应该运行多少个实例,以便服务具有所需的容量,以及等等。缩放服务会更改运行该软件的容器实例的数量,从而为流程中的服务分配更多的计算资源。
    幸运的是,使用Docker平台定义,运行和扩展服务非常简单 - 只需编写一个docker-compose.yml文件即可。
  3. docker-compose.yml文件
    docker-compose.yml文件是一个YAML文件,它定义了Docker容器在生产中的行为方式。
    #cat docker-compose.yml
    version: "3"
    services:
    web:
    #replace username/repo:tag with your name and image details
    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:

    说明:我在vmware虚拟机测试时,使用的是如下脚本:

    version: "3"
    services:
    web:
    image: friendlyhello:latest
    deploy:
      replicas: 5
      restart_policy:
        condition: on-failure
    ports:
      - "80:80"
    networks:
      - webnet
    networks:
    webnet:

    这个docker-compose.yml文件告诉Docker执行以下操作:
    (1)从注册表中取出我们在第2部分:容器中上传的镜像。
    (2)运行该镜像的5个实例作为一个服务调用web,限制每个使用,最多10%的CPU(跨所有核心)和50MB的RAM。(我未使用)
    (3)如果一个失败,立即重新启动容器。
    (4)指示Web容器通过称为webnet的负载均衡网络共享端口80。 (在内部,容器本身将在临时端口上发布到网站的端口80)。
    (5)定义webnet网络使用默认设置(这是一个负载均衡覆盖网络)。

  4. 运行新的负载均衡应用程序
    在我们使用docker stack deploy命令之前,我们先运行:
    #docker swarm init

    注意:我们将在第4部分中介绍该命令的含义。如果不运行docker swarm init,则会显示“此节点不是swarm manager”的错误。

    现在让我们来运行它。你必须给你的应用程序起个名称。在这里,它被命名为getstartedlab。
    #docker stack deploy -c docker-compose.yml getstartedlab

    我们的单个服务堆栈在一台主机上运行了5个部署映像的容器实例。让我们来查看下。

    在我们的应用程序中获取一项服务的服务ID:
    #docker service ls (或docker ps)

    将看到Web服务的输出,并以你的应用程序名称作为前缀。如果你将其命名为与此示例中所示的相同,则名称将为getstartedlab_web。还列出了服务ID以及实例数量,镜像名称和暴露端口。
    在服务中运行的单个容器称为任务。任务会被赋予唯一的数字增加的ID,可以在docker-compose.yml中定义的实例数量。列出你的服务的任务:

    #docker service ps getstartedlab_web
    ID                  NAME                  IMAGE                  NODE                DESIRED STATE       CURRENT STATE         ERROR               PORTS
    pyjg9hjmiubl        getstartedlab_web.1   friendlyhello:latest   swarm1              Running             Running 2 hours ago
    l4dze4ykna53        getstartedlab_web.2   friendlyhello:latest   swarm1              Running             Running 2 hours ago
    wv49dwr41uyt        getstartedlab_web.3   friendlyhello:latest   swarm1              Running             Running 2 hours ago
    eten7ue4sace        getstartedlab_web.4   friendlyhello:latest   swarm1              Running             Running 2 hours ago
    djtvjvv0012q        getstartedlab_web.5   friendlyhello:latest   swarm1              Running             Running 2 hours ago

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

    #``docker container ls -q
    552750f13021
    f0709bdbbca2
    913c2ead1b86
    9b3874094b67
    c51e8021f0ee
    feddb2fff6c5

    你可以连续多次运行curl -4 http:// localhost,或者在浏览器中转到该URL并点击几次刷新。
    无论哪种方式,你将看到容器ID更改,演示负载均衡;在每个请求中,以循环方式选择5个任务中的一个来响应。容器ID将匹配您以前的命令(docker container ls -q)的输出。

  5. 缩放应用程序
    你可以通过更改docker-compose.yml中的实例值,保存更改并重新运行docker stack deploy命令来扩展应用程序:
    如将 replicas(实例): 5 更改为3
    #docker stack deploy -c docker-compose.yml getstartedlab
    Updating service getstartedlab_web (id: f4pqg1x8eznhxu6bb897t6l3v)``
    Docker会立即更新,不需要拆除原有集群或杀死任何容器。

    现在,重新运行docker container ls -q来查看重新配置的已部署实例。

    #docker container ls -q
    abc6e8347046
    99e75109a749
    03ddf96a5934
  6. 关闭应用服务堆栈(stack)
    #docker stack rm getstartedlab    ##stack 堆
    Removing service getstartedlab_web
    Removing network getstartedlab_default
    Removing network getstartedlab_webnet
  7. 删除集群(swarm)
    #docker swarm leave --force

原文地址:http://blog.51cto.com/wutengfei/2063998

时间: 2024-07-31 16:02:15

docker集群部署:第3部分:服务的相关文章

Docker集群部署SpringCloud应用

docker环境准备 # linux下的安装,自行百度 # windows docker toolbox下载地址 https://download.docker.com/win/stable/DockerToolbox.exe # 创建myvm3 这个虚拟机内存尽量大,6g以上最好 # https://0eenj1uv.mirror.aliyuncs.com这个是阿里云加速器的地址. docker-machine create --virtualbox-memory "6144" --

docker集群部署:第1部分:定位和设置

在这个由六部分组成的教程中:(1)在此页面上获取设置和导向.(2)建立并运行你的第一个应用程序(3)把你的应用变成一个扩展服务(4)跨多台机器跨越您的服务(5)添加一个持久数据的访客计数器(6)部署生产用的集群说明:应用程序本身非常简单,所以你不会被代码干扰太多.毕竟,Docker的价值在于它如何构建,发布和运行应用程序;对于你的应用程序实际上做什么是完全不可知的. 前提条件虽然我们将一路定义概念,但在开始之前,了解Docker的含义是非常好的.在继续之前,我们还需要熟悉一些概念:(1)IP地址

docker集群部署:第2部分:容器

介绍现在是开始构建Docker应用程序.我们将从这个应用程序的层次结构的底部开始,这个应用程序是一个容器.在这个层次上面是一个服务,它定义了容器在生产中的行为方式,将在第3部分中进行讨论.最后,在顶层是堆栈,定义了所有服务的交互,将在第5部分进行讨论. docker开发环境在过去,如果你要开始编写一个Python应用程序,你的第一步就是在你的服务器上安装一个Python运行库.但是,这会造成你的服务器上的环境必须如此,以使你的应用程序能够按预期运行.使用Docker,docker具有可移植性,你

Memcached 集群部署

一.Memcached简介 Memcached 是一个高性能的分布式内存对象缓存系统,Memcached的高性能源于两阶段哈希(two-stage hash)结构,Memcached基于一个存储键/值对的HashMap,减轻数据库负载,它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提供动态.数据库驱动网站的速度.当内存容量达到指定设定的值时,LRU算法自动删除不使用的缓存. 二.Memcached应用的场景 (1)Memcached大部分是应用在作为数据库前端缓存,减少了连接数据库次数

docker 集群二(docker1.7)centos6.8 离线安装

一切都以客户为上帝,相信做实施的都遇到过,客户给的环境都是不让连接互联网的,是企业内网,那么离线安装docker就变的必要了. 1.首先说可以联网的安装docker yum install -y docker-engine service docker start 就是这么简单,你说要是让联网我们的效率能提高多少. 2.离线安装docker a.准备离线安装包 yum install --downloadonly --downloaddir=/root/docker http://dl.fedo

Docker Swarm集群部署应用

在Docker Swarm集群部署应用 我们过去使用docker run的命令创建容器, 把前面替换成docker service create就行了. 建议搭建一个registry,为所的docker主机提供镜像下载,否则你需要在每个docker主机本地存在容器镜像. 所以搭建一个私有仓库,由私有仓库提供所需要的镜像, 本实验环境中用node1同时作为registry. 拉取本地私有仓库registry,查看registry镜像 基础环境 全部为CentOS7系统,Docker 版本为1.12

Kubernetes集群部署DNS服务

Kubernetes集群部署DNS服务在kubernetes中每一个service都会被分配一个虚拟IP,每一个Service在正常情况下都会长时间不会改变,这个相对于pod的不定IP,对于集群中APP的使用相对是稳定的. 但是Service的信息注入到pod目前使用的是环境变量的方式,并且十分依赖于pod(rc)和service的创建顺序,这使得这个集群看起来又不那么完美,于是kubernetes以插件的方式引入了DNS系统,利用DNS对Service进行一个映射,这样我们在APP中直接使用域

Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列之部署master/node节点组件(四)

0.前言 整体架构目录:ASP.NET Core分布式项目实战-目录 k8s架构目录:Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列目录 1.部署master组件 master 服务器的组件有:kube-apiserver.kube-controller-manager.kube-scheduler 因此需要下载k8s master,下载地址:https://github.com/kubernetes/kubernetes/blob/master/CHANGE

Docker Swarm集群部署实战

基本概念: Swarm介绍:Swarm是Docker公司在2014年12月初发布的一套较为简单的工具,用来管理Docker集群,它将一群Docker宿主机变成一个单一的虚拟的主机.Swarm使用标准的Docker API接口作为其前端访问入口,换言之,各种形式的Docker Client(dockerclient in Go, docker_py,docker等)均可以直接与Swarm通信.Swarm几乎全部用Go语言来完成开发,Swarm0.2版本增加了一个新的策略来调度集群中的容器,使得在可