转载请标明出处:

https://blog.csdn.net/forezp/article/details/80171723

本文出自方志朋的博客

第三部分: 服务

准备工作

  • 安装Docker 1.13及以上版本。
  • 安装Docker Compose
  • 阅读第一部分和第二部分的内容。
  • 确保你已经发布friendlyhello镜像到docker公共仓库。
  • 确保你的镜像能够作为一个可以部署的容器。 运行这个命令,在你的信息中插入用户名,repo和tag:docker run -p 80:80 username / repo:tag,然后访问http:// localhost /。

介绍

第3部分,我们扩展了我们的应用并实现了负载均衡。 要做到这一点,我们必须在分布式应用程序的层次结构中升级一级:服务。



服务(你在这里)

容器(在第2部分涵盖)

关于服务

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

服务实际上只是“生产中的容器”。一个服务只运行一个镜像,但它编码镜像运行的方式 - 应该使用哪个端口,容器应运行多少个副本,以便服务具有所需的容量,以及 等等。 缩放服务会更改运行该软件的容器实例的数量,从而为流程中的服务分配更多计算资源。

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

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

docker-compose.yml文件是一个YAML格式的文件,它定义了Docker容器在生产中的行为方式。

docker-compose.yml

将这个文件保存为docker-compose.yml,无论你在什么时候想用。 确保你已将第2部分中创建的图像推送到注册仓库中,并通过用你的镜像,替换username / repo:标签来更新此.yml。

version: "3"
services:
web:
# replace username/repo:tag with your name and image details
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执行以下操作:

  • 从注册表中拉出我们在第二部分中上传的镜像。
  • 运行该镜像的5个实例作为名为web的服务,限制每个实例使用最多10%的CPU(所有的内核)和50MB的RAM。
  • 如果一个失败,立即重启容器。
  • 将主机上的端口80映射到Web的端口80。
  • 指示web容器通过称为webnet的负载平衡网络共享端口80。 (在内部,容器本身在临时端口上发布到web的端口80)。
  • 使用默认设置(这是一个负载平衡覆盖网络)定义webnet网络。

运行你的负载均衡应用

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

docker swarm init

现在我们来运行它。 你需要给你的应用一个名字。在这里,取名为getstartedlab:

docker stack deploy -c docker-compose.yml getstartedlab

我们的单一服务堆栈在一台主机上运行了5个我们部署映像的容器实例。

在我们的应用程序中获取一项服务的服务ID:

docker service ls

查找Web服务的输出,并以你的应用程序名称作为前缀。如果你将其命名为与此示例中显示的相同,则名称为getstartedlab_web。还列出了服务ID以及副本数量,映像名称和端口暴露量。

在服务中运行的单个容器称为任务。任务会获得数值增加的唯一ID,最大数量为您在docker-compose.yml中定义的副本数量。 列出您的服务的任务:

docker service ps getstartedlab_web

如果您只列出系统中的所有容器,但也不会显示服务过滤的任务,任务也会显示出来:

docker container ls -q

您可以连续多次运行curl -4 http:// localhost,或者在浏览器上访问该URL并刷新几次。

无论哪种方式,容器ID都会发生变化,从而表明有负载均衡的功能; 在每个请求中,以循环的策略选择5个任务中的一个来响应。 容器ID与前一个命令(docker container ls -q)的输出相匹配。

扩展你的应用

你可以通过更改docker-compose.yml中的副本数量的值,保存更改并重新运行docker stack deploy命令来扩展应用程序:

docker stack deploy -c docker-compose.yml getstartedlab

Docker执行一个就地更新,不需要先撕下堆栈或杀死任何容器。

现在,重新运行docker container ls -q以查看重新配置的已部署实例。 如果你扩大了副本数,则会启动更多任务,从而启动更多容器。

关闭应用程序和swarm

  • 关闭应用用docker stack rm命令:
docker stack rm getstartedlab
  • 关闭swarm
docker swarm leave --force

使用Docker来升级和扩展应用程序同样简单。 你已经朝着学习如何在生产中运行容器迈出了一大步。 接下来,您将学习如何将这个应用程序作为Docker机器集群上的真正群体运行。

复习

总而言之,在输入docker run是非常简单的,生产环境中的容器的真正实现就是将其作为服务来运行的。 服务在Compose文件中编写了容器的行为,此文件可用于容器扩容,限制和重新部署我们的应用程序。 对服务的更改可以在运行时适用,使用启动服务的相同命令:docker stack deploy。

现阶段需要探索的一些命令如下:

docker stack ls                                            # List stacks or apps
docker stack deploy -c <composefile> <appname> # Run the specified Compose file
docker service ls # List running services associated with an app
docker service ps <service> # List tasks associated with an app
docker inspect <task or container> # Inspect task or container
docker container ls -q # List container IDs
docker stack rm <appname> # Tear down an application
docker swarm leave --force # Take down a single node swarm from the manager

关注我:




扫码关注公众号有惊喜

(转载本站文章请注明作者和出处 方志朋的博客

docker官方文档翻译3的更多相关文章

  1. Docker官方文档翻译1

    转载请标明出处: https://blog.csdn.net/forezp/article/details/80098675 本文出自方志朋的博客 本系列教程翻译于docker文档,文档地址:http ...

  2. Docker官方文档翻译之入门

    转自:http://www.cnblogs.com/vikings-blog/p/3958091.html Docker学习总结之docker入门 Understanding Docker 以下均翻译 ...

  3. docker官方文档翻译5

    转载请标明出处: https://blog.csdn.net/forezp/article/details/80244682 本文出自方志朋的博客 堆栈(Stacks) 准备工作 安装Docker 1 ...

  4. docker官方文档翻译4

    转载请标明出处: https://blog.csdn.net/forezp/article/details/80186178 本文出自方志朋的博客 第四篇:Swarms 准备工作 安装Docker版本 ...

  5. Docker官方文档翻译2

    转载请标明出处: https://blog.csdn.net/forezp/article/details/80158062 本文出自方志朋的博客 容器 准备工作 安装Docker,版本为1.13或者 ...

  6. Ubuntu安装Docker(官方文档翻译)

    翻译自Docker官方文档 https://docs.docker.com/engine/installation/linux/ubuntulinux/ 之前因为看不懂官方文档,卡在某个步骤无法完成安 ...

  7. 关于Docker官方CentOS镜像无法启动mysqld的总结

    很多童鞋反映,在Docker官方CentOS镜像中安装了Mysql server后,无法正常启动. 无法正常启动表现为两种情况: 1> 初始完数据库后,mysqld启动报错 2> syst ...

  8. Flume官方文档翻译——Flume 1.7.0 User Guide (unreleased version)中一些知识点

    Flume官方文档翻译--Flume 1.7.0 User Guide (unreleased version)(一) Flume官方文档翻译--Flume 1.7.0 User Guide (unr ...

  9. Flume官方文档翻译——Flume 1.7.0 User Guide (unreleased version)(二)

    Flume官方文档翻译--Flume 1.7.0 User Guide (unreleased version)(一) Logging raw data(记录原始数据) Logging the raw ...

随机推荐

  1. ASP.NET MVC 生命周期

    本文的目的旨在详细描述ASP.NET MVC请求从开始到结束的每一个过程.我希望能理解在浏览器输入URL并敲击回车来请求一个ASP.NET MVC网站的页面之后发生的任何事情. 为什么需要关心这些?有 ...

  2. 如何将git上的代码迁移到Coding上

    1.首先需要找到项目的.git文件 2..git文件下的config中的url修改成新的地址 3.打开.ssh文件夹 4.将文件下的.pub后缀的文件里面的内容复制到Coding平台的key设置里面即 ...

  3. ThenJS

    安装ThenJs:  npm i thenjs 史上最快,与 node callback 完美结合的异步流程控制库 <!doctype html> <html lang=" ...

  4. HttpClient请求工具类

    package com.yangche.utils; import org.apache.http.NameValuePair; import org.apache.http.client.Clien ...

  5. ssh命令使用

    ssh是什么 ssh是一种通信协议,用于与另一台计算机通信,有多个实现版本,openssh属于开源实现 usage: ssh [-B bind_interface] [-b bind_address] ...

  6. 【数据库】6.0 MySQL入门学习(六)——MySQL启动与停止、官方手册、文档查询

    1.0 MySQL主要有四种启动方式:直接启动.安全启动.服务启动.多实例启动. 直接启动: 服务器启动: 安全启动(最常用): 多实例启动: 2.0如何获得MySQL帮助 2.1官方手册 下面提供百 ...

  7. js实现手风琴效果

    之前在慕课网上有练习手风琴效果,但是老师使用jquery简简单单的两三行实现了,今天自己用js练习一下效果 <div id="divbox"> <ul> & ...

  8. PHP接口对方(C#)接收不到数据?ContentLength=-1

    工作时遇到的问题.浏览器可以查看到json数据,但是对方死活收不到数据. 最后发现发现ContentLength=-1. 找到问题:为什么.NET程序下载获得的ContentLength=-1? 摘抄 ...

  9. 2018年哔哩哔哩bilibili前端开发工程师在线笔试1

    ##基础编程能力考查(共1题) 给定一个数组,其中有n(1<n<10000)个整数,检查是否能通过修改不多余一个元素就能让数组从小到大排列. 例1: 输入:[4,2,3] 输出:true ...

  10. AOP的实现

    AOP基于xml配置方式实现 Spring基于xml开发AOP 定义目标类(接口及实现类) /** * 目标类 */ public interface UserService { //业务方法 pub ...