当前位置: 首页 > 编程日记 > 正文

Docker入门六部曲——服务

原文链接:http://www.dubby.cn/detail.html?id=8735

准备

  • 已经安装好Docker 1.13或者以上的版本。
  • 安装好Docker Compose。如果你是用的是Docker for Mac和Docker for Windows,那么不用担心,这是自带的。如果是Linux,那么需要你去安装了。如果是用的是Windows10的预览版,因为没有Hyper-V,所以你需要使用Docker Toolbox。
  • 阅读完《Docker入门六部曲——容器》。
  • 阅读完《Docker入门六部曲——基本引导》。
  • 确保你的friendlyhello镜像已经被push到注册中心了。我们会在这一篇文章中用到。
  • 确保你的镜像已经可以正常的部署。运行docker run -p 80:80 username/repo:tag(我的是docker run -p 80:80 dubbyyoung/get-started:part1,你要换成你自己的),然后浏览http://localhost/

介绍

这一篇文章,我们会伸缩我们的应用,并且开始负载均衡。为了达到这一目的,我们需要把目光提升一个层级:服务层。

  • Stack(堆栈)
  • Services(服务)——你正在看的
  • Container(容器)

理解服务

在一个分布式应用中,这个应用的不同部分,被称为一个一个服务。例如,你在做一个视频分享网站,会包含这么几个服务,把数据存储到磁盘的服务,用户上传文件后的文件转换服务,给前端调用的一个服务等等。

服务其实就是在一个应用中的容器。“一个服务只运行一个镜像,但是,他会编排镜像的运行方式——使用那个端口,需要多少个副本(replicas,就是多个实例)才能满足需要,等等”。伸缩一个服务就是改变这一个服务的运行的容器的数量。

不用担心,有了Docker,这些都可以很容易实现,我们只需要定义好docker-compose.yml就可以了。

你的第一个docker-compose.yml

docker-compose.yml文件是一个YAML文件,定义了Docker容器的行为。

docker-compose.yml

version: "3"
services:web:# 使用你自己的username/repo:tagimage: dubbyyoung/get-started:part1deploy:replicas: 5resources:limits:cpus: "0.1"memory: 50Mrestart_policy:condition: on-failureports:- "8000:80"networks:- webnet
networks:webnet:

上面的docker-compose.yml告诉Docker要这么做:

  • 从注册中心把镜像拉取下来。
  • 运行5个实例作为一个服务web,并且限制每个实例的CPU使用率最多只能到10%,内存最多使用50M。
  • 一旦一个容器失败就重启。
  • 把宿主机的80端口映射到web这个服务的80端口。
  • 指示web服务里的所有容器通过一个负载均衡的网络webnet来共享80端口(在内部,这些容器自己会使用一个临时的端口来映射到web服务的80端口)。
  • webnet网络作为默认网络设置。

想了解docker-compose.yml的一些其他知识吗?

version: "3",这个本质上是让它可以和Swarm mode兼容。只有在version>=3.x时,才可以用deploy,当然,没有deploy,更加不会有他的子选项;同样,只有在version>=3.x时,才可以用docker stack deploy这个命令。

当然,你的配置文件名不是必须是docker-compose.yml,这只是标准命名而已,你完全可以用有实际意义的命名来代替,比如docker-stack.yml

运行你的负载均衡应用

在执行docker stack deploy之前,先需要执行:

docker swarm init

注意:这个命名的意义,在下一篇文章会介绍。如果你不执行这个,会报”this node is not a swarm manager.”的错误的。

现在可以运行了,给你的应用起个名字吧,我们不妨叫他getstartedlab

docker stack deploy -c docker-compose.yml getstartedlab

如果这个命令执行失败,不妨尝试着把端口改成8000:80。

然后使用这个命令来看你的五个容器:

docker stack ps getstartedlab

现在你可以访问localhost(如果你的是8000:80,那就访问localhost:8000)。随着你刷新页面,你还可以看到容器ID在不断变化,这也证明了是均在均衡。

注意:你访问页面大概需要30秒钟,这不是Docker性能差,而是因为没有Redis,这个在之后我们会解决的。

伸缩你的应用

你可以修改你的docker-compose.yml中的replicas数量,保存之后,在使用docker stack deploy命令:

docker stack deploy -c docker-compose.yml getstartedlab

Docker会自动更新,不需要你手动的下容器或者手动的kill。

现在使用docker stack ps,你可以看到伸缩之后的容器数量。

下掉你的应用

下掉应用的命令是docker stack rm

docker stack rm getstartedlab

这个命令会把你的应用移除,不过在我们的单节点的swarm依然是运行中(可以使用docker node ls查看)。可以使用docker swarm leave --force来关闭swarm。

相信你也觉得使用Docker来伸缩你的应用还是很简单的。看到这里,你的Docker使用已经很接近生产使用了。下一步,我们会学习如何把你的应用部署在集群的Docker机器上。

相关文章:

AngularJs学习笔记--Forms

控件(input、select、textarea)是用户输入数据的一种方式。Form(表单)是这些控件的集合,目的是将相关的控件进行分组。 表单和控件提供了验证服务,所以用户可以收到无效输入的提示。这提供了更好的用户体验…

天秤座的爱情(转)

若不是秤子们爱上了爱情,或许,也就不用独自承受那么多。他们的爱情就像在上演的一部电影,他们就在这出戏里,眼看着它从开始到结束。落幕并不可怕,秤子们在乎的是他们成就了一部电影。 秤子们不喜欢落入俗套中的爱情。与…

虚幻引擎C++终极射手教程 Unreal Engine C++ The Ultimate Shooter Course

虚幻引擎C终极射手教程 Unreal Engine C The Ultimate Shooter Course MP4 |视频:h264,1280720 |音频:AAC,44.1 KHz,2 Ch 语言:英语中英文字幕(根据原英文字幕机译更准确) |时长:55节课(8小时53分钟)|大小…

Nio得知3——该示范基地:多路复用器模式

Reactor模式和NIO 本文可以看作是Doug Lea Scalable IO in Java一文的翻译。当前分布式计算 Web Services盛行天下,这些网络服务的底层都离不开对socket的操作。他们都有一个共同的结构: 1. Read request 2. Decode request 3. Process service 4. Enco…

c语言随机数生成0 99函数,C语言生成随机数的函数、延时函数

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼下面C语言代码使用了生成随机数的函数、延时函数。请大家仔细观察其显示效果。从以下代码,我们可以得出一个重要的结论:当上述两类函数被放入循环时,应作出一定修改。同时还应关注其参数的定义位…

2022-2028年中国乙酸钴行业发展现状调研及市场前景规划报告

【报告类型】产业研究 【报告价格】4500起 【出版时间】即时更新(交付时间约3个工作日) 【发布机构】智研瞻产业研究院 【报告格式】PDF版 本报告介绍了中国乙酸钴行业市场行业相关概述、中国乙酸钴行业市场行业运行环境、分析了中国乙酸钴行业市场…

MS UI Automation Introduction

MS UI Automation Introduction 2014-09-17 MS UI Automation是什么 UIA架构 UI自动化模型 UI自动化树概述 UI自动化控件模式概述 UI 自动化属性概述 UI 自动化事件概述 示例 使用UISpy工具 UI自动化提供者 常见问题分析解决 控件无法识别 Timing issue 本地化问题 自动化技术和…

spring+mybatis事务的readonly属性无效

在Spring配置事务中设置的read-only"true"不起作用,仍可以执行写操作;但是其他的正常。查看了一下DataSourceTransactionManager这个类的doBegin方法中没有判断read-only。HibernateTransactionManager.doBegain方法中则有一判断 if(!definiti…

ue5新手零基础学习教程 Unreal Engine 5 Beginner Tutorial - UE5 Starter Course

ue5新手零基础学习教程 Unreal Engine 5 Beginner Tutorial - UE5 Starter Course! 教程大小解压后:4.96G 语言:英语中英文字幕(机译)时长:4小时56分 1920X1080 mp4 虚幻引擎5新手教程!在这个教程中&…

C语言科学计算器思路,大神教你如何用C语言实现科学计算器

i;*leni;return temp;}/*功能:翻译操作数* 如果运算符非法,则返回0,合法则返回非零标志*/int translateopt(char *p,int *len){char fu[NUM_OPT][LEN_OPT]{"","-","*","/","^","(&qu…

BZOJ4292 : [PA2015]Równanie

注意到f(n)不会超过1459&#xff0c;于是暴力枚举f(n)&#xff0c;检验nk*f(n)是否合法即可。 #include<cstdio> long long k,a,b,t;int i,j,ans; int main(){scanf("%lld%lld%lld",&k,&a,&b);for(i1;i<1459&&k<b/i;i){tk*i;if(a<…

Docker入门六部曲——Stack

原文链接&#xff1a;http://www.dubby.cn/detail.html?id8739 准备知识 安装Docker&#xff08;版本最低1.13&#xff09;。阅读完Docker入门六部曲——Swarm&#xff0c;并且完成其中介绍的内容。拷贝一份docker-compose.yml。确保你的虚拟机都是可用的&#xff0c;使用do…

SVD神秘值分解

SVD分解 SVD分解是LSA的数学基础&#xff0c;本文是我的LSA学习笔记的一部分&#xff0c;之所以单独拿出来&#xff0c;是由于SVD能够说是LSA的基础&#xff0c;要理解LSA必须了解SVD&#xff0c;因此将LSA笔记的SVD一节单独作为一篇文章。本节讨论SVD分解相关数学问题&#xf…

ebook download websites (to be continue...)

http://free-ebook-collection.blogspot.com/转载于:https://www.cnblogs.com/jerryhong/archive/2008/10/24/1318469.html

Blender模块化建筑环境地形场景制作视频教程 Creating modular environments

Blender模块化建筑环境地形场景制作视频教程 Creating modular environments Blender模块化建筑环境地形场景制作视频教程 Creating modular environments 流派:电子学习| MP4 |视频:h264&#xff0c;1280720 |音频:AAC&#xff0c;44.1 KHz 语言&#xff1a;英语中英文字幕&…

文件系统演示C语言,基于C语言的简单文件系统的实现

1 题目介绍通过具体的文件存储空间的管理、文件物理结构、目录结构和文件操作的实现&#xff0c;加深对文件系统内部的数据结构、功能以及实现过程的理解。在内存中开辟一个虚拟磁盘空间作为文件存储分区&#xff0c;在其上实现一个简单的基于多级目录的单用户单任务系统中的文…

深度学习 vs 机器学习 vs 模式识别

http://www.csdn.net/article/2015-03-24/2824301 【编者按】本文来自CMU的博士&#xff0c;MIT的博士后&#xff0c;vision.ai的联合创始人Tomasz Malisiewicz的个人博客文章&#xff0c;阅读本文&#xff0c;你可以更好的理解计算机视觉是怎么一回事&#xff0c;同时对机器学…

2022-2028年中国乙丙橡胶行业市场全景调查及投资潜力研究报告

【报告类型】产业研究 【报告价格】4500起 【出版时间】即时更新&#xff08;交付时间约3个工作日&#xff09; 【发布机构】智研瞻产业研究院 【报告格式】PDF版 本报告介绍了中国乙丙橡胶行业市场行业相关概述、中国乙丙橡胶行业市场行业运行环境、分析了中国乙丙橡胶行…

ubuntu 下利用ndiswrapper安装无线网卡驱动

本文转载自 http://kangxincai.is-programmer.com/posts/10488.html 首先 安装 ndiswrapperubuntu下也就是 ndisgtk (用于安装无线网卡驱动)sudo apt-get install ndisgtk安装好了之后&#xff0c;找到你的无线网卡在windows下的驱动文件(含有.inf的目录)&#xff08;可以从网…

TSP问题——动态规划

Traveling Salesman Problem Description&#xff1a; Time Limit: 4sec Memory Limit:256MB 有编号1到N的N个城市&#xff0c;问从1号城市出发&#xff0c;遍历完所有的城市并最后停留在N号城市的最短路径长度。 Input&#xff1a;…

Blender从头到尾创建一辆宝马轿车视频教程

Blender从头到尾创建一辆宝马轿车视频教程 Blender: Create Realistic BMW 507 From Start to Finish 流派:电子学习| MP4 |视频:h264&#xff0c;1280720 |音频:AAC&#xff0c;44.1 KHz 语言&#xff1a;英语中英文字幕&#xff08;根据原英文字幕机译更准确&#xff09;|大…

OC学习笔记之Foundation框架NSNumber、NSValue和NSDate(转)

一、NSNumber OC数组类NSArray&#xff0c;它只能存放 OC的对象&#xff0c;对于基本的数据类型确无能为力&#xff0c;但是实际编程中经常要把基本的数据如int、float&#xff0c;结构体存放的OC数组中&#xff0c;怎么办&#xff1f;这里的 NSNumber就有用了&#xff0c;它能…

android读取xml 字符串,Android 读取本地Xml文件,并转换成String

问题不是解析本地 xml 文件&#xff0c;而是要将 xml 文件中的所有内容(包含格式&#xff0c;标签等)&#xff0c;直接转换成 String。与前端H5页面交互时&#xff0c; iOS 在请求远程 xml 文件耗时太长(有时需要4~5s)&#xff0c;所以采用本地下载&#xff0c;然后传给前端的方…

Docker入门六部曲——容器

原文链接&#xff1a;http://www.dubby.cn/detail.html?id8734 准备 已经安装好Docker 1.13或者以上的版本。读完的上一篇文章&#xff08;基本引导&#xff09;。简单的测试一下你的本地环境是否已经OK了&#xff1a;docker run hello-world。 介绍 让我们开始构建一个Doc…

window.name实现的跨域数据传输

2019独角兽企业重金招聘Python工程师标准>>> 这篇文章是对 JavaScript跨域总结与解决办法 的补充。 有三个页面&#xff1a; a.com/app.html&#xff1a;应用页面。a.com/proxy.html&#xff1a;代理文件&#xff0c;一般是一个没有任何内容的html文件&#xff0c;需…

ajax frameworks(转贴)

Thinking in AJAX(三) —— AJAX框架汇总 引 此文原出于AJAX Patterns网站的一篇《Ajax Frameworks》的wiki文章&#xff0c;很早前我就注意到&#xff0c;后来在国内也有人翻译了&#xff0c;不过最近发现此wiki还是在不断添加维护中&#xff0c;截止此文发布前&#xff0c;作…

Maya角色面部表情动画制作视频教程 Maya: Facial Rigging

Maya角色面部表情动画制作视频教程 Maya: Facial Rigging Maya角色面部表情动画制作视频教程 Maya: Facial Rigging Maya角色面部表情动画制作视频教程 Maya: Facial Rigging MP4 |视频:h264&#xff0c;1280x720 |音频:AAC&#xff0c;44.1 KHz&#xff0c;2 Ch 语言&#x…

(一三〇)UITextField的光标操作扩展

简介 在iOS开发中&#xff0c;有时候需要完全自主的定义键盘&#xff0c;用于完整的单词输入&#xff0c;例如计算机应用中&#xff0c;需要一次性的输入sin(&#xff0c;在移动光标时要完整的跳过sin(&#xff0c;在删除时也要完整的删除&#xff0c;这就需要对光标的位置进行…

android 多个占位符,Android多语言支持:由于占位符计数不同导致的字符串格式问题...

我正在制作一个法语Android应用程序,我正在努力支持英语.我使用“占位符”来格式化我的字符串,因此我可以将它们调整为男性和女性用户.例如,我的s​​trings.xml文件中的这个字符串&#xff1a;Les %1$s sont compliqu%2$ss...将成为“Les hommessontcompliqus”(“男人很复杂”…

Docker入门六部曲——Swarm

原文链接&#xff1a;http://www.dubby.cn/detail.html?id8738 准备工作 安装Docker&#xff08;版本最低1.13&#xff09;。安装好Docker Compose&#xff0c;上一篇文章介绍过的。安装好Docker Machine&#xff0c;上一篇文章也提到了&#xff0c;Mac和Windows已经预先安装…