首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Docker入门教程 Part 3 Services

Docker入门教程 Part 3 Services

作者头像
twowinter
发布2020-04-17 15:08:23
7670
发布2020-04-17 15:08:23
举报
文章被收录于专栏:twowintertwowintertwowinter

前言

本篇笔记是官方Get Started入门教程的Part3 Services,主要演示如何使用 docker-compose.yml 来定义应用服务,docker-compose 可以很方便地对 app 进行调整,并且很容易地实现负载均衡。

我正在学习Docker容器技术,相关笔记汇总在Docker容器技术 学习笔记汇总 本系列笔记作者twowinter,转载请注明作者:http://blog.csdn.net/iotisan/

要求

  • 安装Docker 1.13或更高版本。
  • 安装Docker Compose,在 Docker for Mac 和 Docker for Windows 平台上,都是预装了,linux 系统的话就需要直接安装
  • 阅读第一步的基础知识。
  • 了解Part2如何创建容器。
  • 确保已将 friendlyhello 推送到 registry 仓库,我们将在这里使用它。
  • 通过运行此操作并访问 http://localhost/ 来确保镜像正常工作:docker run -p 80:80 username/repo:tag

介绍

在 Part3 中,我们调整了应用程序容量,并启用了负载均衡。为此,我们必须在分布式应用程序的层次结构中研究更高一层的东西:Services。

关于Services

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

服务就是“生产环境中容器”。一个服务只运行一个镜像,但它定义了镜像运行的方式 - 应该使用哪些端口,应该运行多少容器副本因此服务也有容量要求,等等。 扩展服务会更改运行该软件的容器实例数量,并为该过程中的服务分配更多的计算资源。

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

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

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

docker-compose.yml

将此文件另存为 docker-compose.yml,存在任意地方。确保已将创建的镜像按照第2步推送到 registry 仓库,并使用这个 .yml 文件而不是 username/repo:tag 来描述镜像细节:

version: "3"
services:
  web:
    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:

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

  • 从远程仓库拉取 Part2中上传的镜像。
  • 运行5个镜像实例作为称为 Web 的服务,限制每个实例使用至多10%的CPU(跨所有内核)和50MB RAM。
  • 一旦任意一个镜像发生故障,立即重新启动容器。
  • 将主机上的端口80映射到 web 服务的端口80。
  • 通知 web 服务相关容器都通过 webnet 这样一个负载均衡网络来共享端口80。(在内部,容器将自身的临时端口发布到 web 服务的80端口。)
  • 定义 webnet 这样一个负载均衡网络来做为默认网络。

运行新的负载均衡app

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

docker swarm init

注意:我们将在 Part4 中介绍该命令的含义。如果不运行 docker swarm init,你将收到一个错误提示“this node is not a swarm manager”。

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

docker stack deploy -c docker-compose.yml getstartedlab

我们的 service stack 在主机上运行了镜像的5个实例。让我们来研究下。

在 service 中获取 service ID。

docker service ls

你会看到以你的 app 名字为前缀的 web service。如果你按照示例中的命名,那你会看到名字是 getstartedlab_web。同时也会列出 service ID、副本数量、镜像名以及暴露端口。

Docker swarms run tasks that spawn containers. Tasks have state and their own IDs. Let’s list the tasks:

docker service ps <service>

Note: Docker’s support for swarms is built using a project called SwarmKit. SwarmKit tasks do not need to be containers, but Docker swarm tasks are defined to spawn them.

Let’s inspect one of these tasks, and limit the output to container ID:

docker inspect --format='{{.Status.ContainerStatus.ContainerID}}' <task>

Vice versa, you can inspect a container ID, and extract the task ID.

首先运行 docker container ls 来获得容器ID,然后:

docker inspect --format="{{index .Config.Labels \"com.docker.swarm.task.id\"}}" <container>

现在列出了所有5个容器:

docker container ls -q

你可以续多次运行 curl -4 http://localhost 或者在浏览器中转到该URL,并点击刷新几次。

无论哪种方式,可以看到容器ID发生变化,这就是负载均衡;随着每次请求,从五个副本中轮询选择一个来进行响应。容器ID会和之前 (docker container ls -q) 命令得到的结果相一致。

twowinter注:Round Robin (轮询调度) 是一种以轮询的方式依次将一个域名解析到多个IP地址的调度不同服务器的计算方法。

调整 app 容量

你可以调整 app ,通过更改 docker-compose.yml 中的 replicas 值,保存更改并重新运行 docker stack deploy 命令:

docker stack deploy -c docker-compose.yml getstartedlab

Docker将进行就地更新,无需关掉 stack 和 任何容器。

现在,重新运行 docker container ls -q,将会看到部署实例重新配置了。如果你是增加副本,将会启动更多的tasks、hence、容器。

关闭 app 和 swarm

  • 使用 docker stack rm 关闭 app :
docker stack rm getstartedlab
  • 关闭 swarm。
docker swarm leave --force
这样就移除了 swarm,这样做的目的是为了准备下一步操作时能有个纯净的状态,具体是你用相同的命令行shell直接再创建一个 swarm。保证 Docker 主机会清晰地知道你正在使用哪个 swarm。

使用 Docker 来给 app 增减容变得特别方便。现在你已经大体掌握了如何将容器运行于生产环境。接下来你会学习如何利用 Docker 机器集群 上的 bonafide swarm 来运行你的app。

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

End


本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 要求
  • 介绍
  • 关于Services
  • 你的第一个 docker-compose.yml 文件
  • 运行新的负载均衡app
  • 调整 app 容量
  • 关闭 app 和 swarm
  • End
相关产品与服务
容器镜像服务
容器镜像服务(Tencent Container Registry,TCR)为您提供安全独享、高性能的容器镜像托管分发服务。您可同时在全球多个地域创建独享实例,以实现容器镜像的就近拉取,降低拉取时间,节约带宽成本。TCR 提供细颗粒度的权限管理及访问控制,保障您的数据安全。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档