利用 docker compose.yml文件 实现负载均衡

docker中的服务

我们将扩展应用并启用负载均衡。在分布式应用中,应用的不同部分称为“服务”。例如,假设有一个视频共享网站,它可能提供用于在数据库中存储应用程序数据的服务、用于在用户上传一些内容后在后台进行视频转码的服务、用于前端的服务等。

服务实际上是“生产中的容器”。一项服务仅运行一个镜像,但它会编制镜像的运行方式 - 它应使用的端口、容器的多少个从节点应运行才能使服务的容量满足其需求等。扩展服务将更改运行该软件的容器实例数,并将多个计算资源分配给进程中的服务。

幸运的是,很容易使用 Docker 平台定义、运行和扩展服务 – 只需编写一个 docker-compose.yml 文件即可。

docker-compose.yml文件

docker-compose.yml是一个YAML文件,用于定义Docker容器在生产中的行为方式,编排应用以及其中服务的方式。

以下为docker-compose.yml文件的一个样例,通过将username/repository:tag替换为自己的镜像详细信息来更新此文件

version: "3"
services: 
  web:
    # 将 username/repo:tag 替换为您的名称和镜像详细信息
    # image: waldenz/imagesample:v1
    image: username/repository:tag
    deploy:
      replicas: 5
      resources: 
        limits:
          cpus: "0.1"
          #memory:50M
      restart_policy:
        condition: on-failure
    ports:
      - "1002:5003"
    networks:
      - webnet
networks:
  webnet:

yml文件解析:

1. 从waldenz/imagesample:v1镜像库中拉取镜像;

2. 将该镜像的五个实例作为服务web运行,并将每个实例限制为最多10%的cpu以及50M RAM;

3. restart_policy: 重启策略, 如果某个容器发生故障,立即重启容器;

4. 将主机上的1002端口映射到web容器中的5003;

5. 指示web容器通过负载均衡的网络 webnet 共享端口1002;

6. 使用默认设置定义 webnet网络(此为负载均衡的overlay网络)

运行新的负载均衡的应用

首先需要运行一下命令,才可以使用 docker stack deploy 

docker swarm init

为应用指定一个名称。例子中取名为 myapp0416

docker stack deploy -c docker-compose.yml myappname

 查看启动的该应用下的所有容器的列表,

docker stack ps myappname

您可以多次在一行中运行 curl http://localhost:1002,也可以在浏览器中转至该 URL 并多次点击“刷新”。无论采用哪种方式,您都将看到容器 ID 更改,从而说明负载均衡;借助每项请求,将以循环方式选择五个从节点之一做出响应。 

扩展应用

更改docker-compose.yml中的replicas值,保存更改并重新运行 docker stack deploy 命令来扩展应用。如下图

利用 docker compose.yml文件 实现负载均衡_第1张图片

docker将执行原地更新,而无需先清除技术栈或终止任何容器。将之前文件中 replicas 由5改为7,重新运行 docker stack deploy   可以发现节点67是刚启动的。

另一种方法扩展应用中的服务

水平扩展副本,用 docker service scale命令。

举例: 服务名为myapp_web,即myappname应用下的web服务,扩展为5个副本,相当于修改yml文件中的replicas个数。

docker service scale myappname_web=5

清除应用和swarm

docker stack rm myappname

相关命令

docker stack ls                    #列出docker主机上所有正在运行的应用

docker stack deploy -c  #运行指定的compose文件,启动应用appname

docker stack services   #列出与应用关联的服务

docker stack ps       #列出与应用关联的正在运行的容器

docker stack rm      #清除应用

你可能感兴趣的:(Docker,Docker)