服务简介

先决条件

  • 安装Docker 1.13或更高版本。
  • 阅读完Docker简介
  • 了解如何创建容器容器简介
  • 确保已按照指示将您创建的容器推送到远程仓库; 我们将在这里使用它。
  • 通过运行此操作并访问http://localhost/,确保您的镜像正常工作:
    docker run -p 80:80 username/repo:tag

介绍

在这一章中,我们将扩展应用程序并启用负载均衡。为此,我们必须在分布式应用程序的层次结构中更进一步: 服务。

理解服务

在分布式应用程序中,应用程序的不同部分称为“服务”。例如,想像一个视频共享站点,则可能存在将应用程序数据存储在数据库中的服务,将用户上传东西在后台进行视频转码的服务,前端服务等等。

一个服务是指“一个在生产中的容器”。一个服务只运行一个镜像,但它编码规定了镜像运行的方式 - 应该使用哪些端口,容器应该运行多少副本,以便服务具有所需的资源, 等等。扩展服务只会更改运行该软件的容器实例的数量,并为该过程中的服务分配更多的计算资源。

幸运的是,使用Docker平台,运行和扩展服务非常简单 - 只需编写一个docker-compose.yml文件。

你的第一个docker-compose.yml文件

一个docker-compose.yml文件是一个YAML文件,用于定义Docker容器在生产过程中的行为。

docker-compose.yml
将此文件保存到docker-compose.yml并存储到您想要的位置。确保您在上一章中创建的镜像已经推送到远程仓库,并使用以下信息替换username/repo:tag:

version: "3"
services:
  web:
    image: username/repository: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执行以下操作:

  • 运行我们上一章上传的镜像的五个实例作为调用的web服务,限制每个实例最多使用10%的CPU(跨所有内核)和50MB的RAM。
  • 如果发生故障,立即重新启动容器。
  • 将80端口映射到主机web80端口。
  • 指示web容器通过webnet负载均衡网络共享80端口 。
  • webnet使用默认设置(这是一个负载均衡的重叠网络)来定义网络。

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

在我们可以使用docker stack deploy命令之前,我们先运行

docker swarm init

注意:第4部分(下一章)将介绍该命令的含义。如果你不运行,会收到一个错误。

现在我们来运行它 ,你必须给你的应用程序一个名字 - 这里设置为 getstartedlab

docker stack deploy -c docker-compose.yml getstartedlab

看到刚刚推出的五个容器的列表:

docker stack ps getstartedlab

您可以连续运行多次curl http://localhost,或者在浏览器中转到该URL,并点击刷新几次。无论哪种方式,您将看到容器ID随机更改,因为负载均衡,每个请求,五个副本中的一个被随机选择来进行响应。

缩放应用程序

您可以通过更改docker-compose.yml中的replicas值,重新运行docker stack deploy命令来缩放应用程序:

docker stack deploy -c docker-compose.yml getstartedlab

Docker将进行就地更新,无需停止服务或kill任何容器。

移除应用程序

执行以下命令docker stack rm

docker stack rm getstartedlab

发布和移除应用程序非常的容易。您在学习如何使用容器方面迈出了巨大的一步。接下来,您将学习如何在一组计算机上运行此应用程序。

注意:docker-compose.yml文件用于使用Docker定义应用程序,并可以使用Docker Cloud上传到云提供商,也可以使用Docker Enterprise Edition选择的任何硬件或云提供商。

以下是本章用到的或有关的一些命令:

docker stack ls              # List all running applications on this Docker host
docker stack deploy -c <composefile> <appname>  # Run the specified Compose file
docker stack services <appname>       # List the services associated with an app
docker stack ps <appname>   # List the running containers associated with an app
docker stack rm <appname>                             # Tear down an application

-- END

Docker基础 2017-05-11
部署程序 2017-05-13
Docker容器 2017-05-11
Swarms的使用 2017-05-12
Docker Stack 2017-05-12

暂无评论~~