Docker入门六部曲——服务

原文链接:http://www.dubby.cn/detail.html?id=8735

准备

  • 已经安装好Docker 1.13或者以上的版本。
  • 安装好Docker Compose。如果你是用的是Docker for Mac和Docker for Windows,那么不用担心,这是自带的。如果是Linux,那么需要你去安装了。如果是用的是Windows10的预览版,因为没有Hyper-V,所以你需要使用Docker Toolbox
  • 阅读完《Docker入门六部曲——容器》
  • 阅读完《Docker入门六部曲——基本引导》
  • 确保你的friendlyhello镜像已经被push到注册中心了。我们会在这一篇文章中用到。
  • 确保你的镜像已经可以正常的部署。运行docker run -p 80:80 username/repo:tag(我的是docker run -p 80:80 dubbyyoung/get-started:part1,你要换成你自己的),然后浏览http://localhost/

介绍

这一篇文章,我们会伸缩我们的应用,并且开始负载均衡。为了达到这一目的,我们需要把目光提升一个层级:服务层。

  • Stack(堆栈)
  • Services(服务)——你正在看的
  • Container(容器)

理解服务

在一个分布式应用中,这个应用的不同部分,被称为一个一个服务。例如,你在做一个视频分享网站,会包含这么几个服务,把数据存储到磁盘的服务,用户上传文件后的文件转换服务,给前端调用的一个服务等等。

服务其实就是在一个应用中的容器。“一个服务只运行一个镜像,但是,他会编排镜像的运行方式——使用那个端口,需要多少个副本(replicas,就是多个实例)才能满足需要,等等”。伸缩一个服务就是改变这一个服务的运行的容器的数量。

不用担心,有了Docker,这些都可以很容易实现,我们只需要定义好docker-compose.yml就可以了。

你的第一个docker-compose.yml

docker-compose.yml文件是一个YAML文件,定义了Docker容器的行为。

docker-compose.yml

version: "3"
services:
  web:
    # 使用你自己的username/repo:tag
    image: dubbyyoung/get-started:part1
    deploy:
      replicas: 5
      resources:
        limits:
          cpus: "0.1"
          memory: 50M
      restart_policy:
        condition: on-failure
    ports:
      - "8000:80"
    networks:
      - webnet
networks:
  webnet:

上面的docker-compose.yml告诉Docker要这么做:

  • 从注册中心把镜像拉取下来。
  • 运行5个实例作为一个服务web,并且限制每个实例的CPU使用率最多只能到10%,内存最多使用50M。
  • 一旦一个容器失败就重启。
  • 把宿主机的80端口映射到web这个服务的80端口。
  • 指示web服务里的所有容器通过一个负载均衡的网络webnet来共享80端口(在内部,这些容器自己会使用一个临时的端口来映射到web服务的80端口)。
  • webnet网络作为默认网络设置。

想了解docker-compose.yml的一些其他知识吗?

version: "3",这个本质上是让它可以和Swarm mode兼容。只有在version>=3.x时,才可以用deploy,当然,没有deploy,更加不会有他的子选项;同样,只有在version>=3.x时,才可以用docker stack deploy这个命令。

当然,你的配置文件名不是必须是docker-compose.yml,这只是标准命名而已,你完全可以用有实际意义的命名来代替,比如docker-stack.yml

运行你的负载均衡应用

在执行docker stack deploy之前,先需要执行:

docker swarm init

注意:这个命名的意义,在下一篇文章会介绍。如果你不执行这个,会报”this node is not a swarm manager.”的错误的。

现在可以运行了,给你的应用起个名字吧,我们不妨叫他getstartedlab

docker stack deploy -c docker-compose.yml getstartedlab

如果这个命令执行失败,不妨尝试着把端口改成8000:80。

然后使用这个命令来看你的五个容器:

docker stack ps getstartedlab

现在你可以访问localhost(如果你的是8000:80,那就访问localhost:8000)。随着你刷新页面,你还可以看到容器ID在不断变化,这也证明了是均在均衡。

注意:你访问页面大概需要30秒钟,这不是Docker性能差,而是因为没有Redis,这个在之后我们会解决的。

伸缩你的应用

你可以修改你的docker-compose.yml中的replicas数量,保存之后,在使用docker stack deploy命令:

docker stack deploy -c docker-compose.yml getstartedlab

Docker会自动更新,不需要你手动的下容器或者手动的kill。

现在使用docker stack ps,你可以看到伸缩之后的容器数量。

下掉你的应用

下掉应用的命令是docker stack rm

docker stack rm getstartedlab

这个命令会把你的应用移除,不过在我们的单节点的swarm依然是运行中(可以使用docker node ls查看)。可以使用docker swarm leave --force来关闭swarm。

相信你也觉得使用Docker来伸缩你的应用还是很简单的。看到这里,你的Docker使用已经很接近生产使用了。下一步,我们会学习如何把你的应用部署在集群的Docker机器上。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值