docker_part2

创建一个 docker-compose.yml 文件 内容如下:

version: "3"
services:
  web:
    # 将 username/repo:tag 替换为您的名称和镜像详细信息
    image: persy/get-starrted:part1
    deploy:
      replicas: 3
      resources:
        limits:
          cpus: "0.1"
          memory: 50M
      restart_policy:
        condition: on-failure
    ports:
      - "80:80"
    networks:
      - webnet
networks:
  webnet:

docker-compose.yml 文件会告诉 Docker 执行以下操作:

从镜像库中拉取我们在步骤 2 中上传的镜像。

将该镜像的五个实例作为服务 web 运行,并将每个实例限制为最多使用 10% 的 CPU(在所有核心中)以及 50MB RAM。

如果某个容器发生故障,立即重启容器。

将主机上的端口 80 映射到 web 的端口 80。

指示 web 容器通过负载均衡的网络 webnet 共享端口 80。(在内部,容器自身将在临时端口发布到 web 的端口 80。)

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

想了解关于 Compose 文件版本、名称和命令的信息?

请注意,将 Compose 文件设置为 version:”3″。本质上,这会使其兼容 swarm mode。我们可以使用 deploy key(仅可用于 Compose 文件格式版本 3.x 及更高版本)及其子选项对每项服务(例如,web)进行负载均衡和优化性能。我们可以使用 docker stack deploy 命令(仅在 Compose 文件版本 3.x 及更高版本上受支持)运行此文件。您可以使用 docker-compose up 运行具有_非 swarm_ 配置的版本 3 文件,但由于我们将构建 swarm 示例,因此会专注于技术栈部署。

您可以将 Compose 文件命名为任何所需内容,以使其在逻辑上具有意义;docker-compose.yml 仅为标准名称。我们可以简单地将此文件命名为 docker-stack.yml 或更特定于项目的内容。

运行新的负载均衡的应用

docker swarm init
docker stack deploy -c docker-compose.yml getstartedlab

查看您刚才启动的五个容器的列表:

docker stack ps getstartedlab

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

注:在此阶段,容器最多可能需要 30 秒来响应 HTTP 请求。这并不代表 Docker 或 swarm 的性能,而是一项未满足的 Redis 依赖关系,我们稍后将在本教程中讨论此依赖关系。

扩展应用
您可以通过在 docker-compose.yml 中更改 replicas 值,保存更改并重新运行 docker stack deploy 命令来扩展应用:

docker stack deploy -c docker-compose.yml getstartedlab

Docker 将执行原地更新,而无需先清除技术栈或终止任何容器。

现在,重新运行 docker stack ps 命令以查看经过重新配置的已部署实例。例如,如果您扩展了从节点,将有更多处于运行状态的容器。

清除应用和 swarm
使用 docker stack rm 清除应用:

docker stack rm getstartedlab

这将删除应用,但我们的单节点 swarm 仍处于正常运行状态(如 docker node ls 所示)。使用 docker swarm leave –force 清除 swarm。

这与使用 Docker 启动并扩展应用一样简单。您已朝向了解如何在生产中运行容器前进了一大步。下面您将了解如何在 Docker 机器集群上将此应用作为真正的 swarm 运行。

Leave a Comment

电子邮件地址不会被公开。 必填项已用*标注