Docker-服务(4)
服务定义
在分布式应用程序中,应用程序的不同部分称为“服务”。例如,如果您想象一个视频共享站点,它可能包括一个用于在数据库中存储应用程序数据的服务,一个用户在上传内容后在后台进行视频转码的服务,一个用于前端的服务,等等。
服务实际上只是“生产中的容器”。服务只运行一个镜像,但它定义了镜像运行的方式 - 它应该使用哪些端口,应该运行多少个容器副本,服务所需的容量等等。扩展服务会更改运行该软件的容器实例的数量,从而为流程中的服务分配更多计算资源。
幸运的是,使用Docker平台定义,运行和扩展服务非常容易 - 只需编写一个docker-compose.yml
文件即可。
前提条件
已经完成了前面一章的内容,分享镜像到了Docker Hup。
1. 安装Docker Compose
curl -L https://github.com/docker/compose/releases/download/1.24.0-rc1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose chmod +x /usr/local/bin/docker-compose
2. 编写docker-compose.yml
注意修改image: scottcho/flask:v1
version: "3"
services:
web:
# replace username/repo:tag with your name and image details
image: scottcho/flask:v1
deploy:
replicas: 5
resources:
limits:
cpus: "0.1"
memory: 50M
restart_policy:
condition: on-failure
ports:
- "4000:80"
networks:
- webnet
networks:
webnet:
该docker-compose.yml
文件告诉Docker执行以下操作:
拉我们的镜像从版本库。
将该映像的5个实例作为调用的服务运行
web
,限制每个实例使用,最多10%的CPU(跨所有内核)和50MB的RAM。如果一个失败,立即重启容器。
将主机上的端口4000映射到
web
端口80。指示
web
容器通过称为负载平衡的网络共享端口80webnet
。(在内部,容器本身web
在短暂的端口发布到 80端口。)webnet
使用默认设置(负载平衡的覆盖网络)定义网络。
3. 运行新的负载均衡应用
在我们docker stack deploy
首先运行命令之前,这个命令意味着该机器作为集群的管理节点
docker swarm init
创建服务
docker stack deploy -c docker-compose.yml getstartedlab
查看服务
我们的单个服务堆栈在一台主机上运行已部署映像的5个容器实例。我们来查看下吧。
在我们的应用程序中获取一项服务的服务ID:
[root@docker ~]# docker service ls
ID NAME MODE REPLICAS IMAGE PORTS
g744u428v194 getstartedlab_web replicated 5/5 scottcho/flask:v1 *:4000->80/tcp
查看任务
在服务中运行的单个容器称为任务。任务被赋予以数字递增的唯一ID,最多为replicas
您定义 的数量docker-compose.yml
。列出您的服务任务:
[root@docker ~]# docker service ps getstartedlab_web
ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS
kjtlmtaict0c getstartedlab_web.1 scottcho/flask:v1 docker Running Running 16 minutes ago
z3uulg9o5zdx getstartedlab_web.2 scottcho/flask:v1 docker Running Running 16 minutes ago
6nrmivw0jwki getstartedlab_web.3 scottcho/flask:v1 docker Running Running 16 minutes ago
om6dv5bu0h9u getstartedlab_web.4 scottcho/flask:v1 docker Running Running 16 minutes ago
klgv8zjienz4 getstartedlab_web.5 scottcho/flask:v1 docker Running Running 16 minutes ago
查看负载均衡是否生效
访问:http://localhost:4000,不断的刷新页面,可以看见机器名不断的在发生变化。达到了负载均衡的作用。
4. 拓展应用程序
您可以通过更改replicas
值docker-compose.yml
,保存更改并重新运行docker stack deploy
命令来扩展应用程序:
docker stack deploy -c docker-compose.yml getstartedlab
5. 关闭应用程序和退出群
关闭服务
docker stack rm getstartedla
节点退出集群
docker swarm leave --force
Docker-服务(4)的更多相关文章
- docker 服务注册
docker 服务注册 etcd docker run -d --name etcd -p 4001:4001 -p 7001:7001 elcolio/etcd
- Docker服务端防护
运行一个容器或应用程序的核心是通过 Docker 服务端.Docker 服务的运行目前需要 root 权限,因此其安全性十分关键. 首先,确保只有可信的用户才可以访问 Docker 服务.Docker ...
- Docker 服务
1. Docker服务 作为一名后端攻城狮,对“服务”这个概念一定不陌生.比如,我们做一个会员系统,它可能会需要数据库.缓存.消息队列,这些都是中间件服务,除此以外可能还需要依赖其它的Dubbo服务 ...
- 安装指定版本的docker服务
参考博客:Docker CE 镜像源站 参考博客:docker启动异常driver not supported 1. 说明 之前部署docker服务的时候都是安装最新的docker版本,并使用dock ...
- docker学习-----docker服务的安装
docker 以下观点个人理解,只做参考 一.docker本身的优势 1.docker他本身是一个容器,用来方便我们项目打包,做服务器虚拟化,统一开发者环境等多种优势:运行于docker上的项目可以快 ...
- Docker 随 docker服务重启
在创建时添加 重启 docker run --restart=always -d --name web -p : -v /data/web:/usr/local/tomcat/webapps tom ...
- 【实战】Docker入门实践二:Docker服务基本操作 和 测试Hello World
操作环境 操作系统:CentOS7.2 内存:1GB CPU:2核 Docker服务常用命令 docker服务操作命令如下 service docker start #启动服务 service doc ...
- reboot 后 Docker服务及容器自动启动设置
https://blog.csdn.net/wxb880114/article/details/82904765 重启reboot操作系统后,发现docker 服务未启动,容器也未启动,天生反骨,怎么 ...
- CentOS 7安装Docker服务详细过程
---恢复内容开始--- Docker 简介 Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟 ...
- 重启docker服务应用,自启停命令.
#重启docker服务应用,不自动开启docker容器 docker update --restart=no (docker容器CONTAINER ID 或 docekr容器NAMES) #重启doc ...
随机推荐
- UIAlertController简单使用
UIAlertView 在iOS2 的时候开始使用,在iOS9 的时候被摒弃 NS_CLASS_DEPRECATED_IOS(2_0, 9_0, "UIAlertView is depr ...
- swal() 弹出层的用法
swal()方法是一个提示框: swal({ title: "", text: "请扫描用户手机上的付款码", type: "input", ...
- 关于UITableView的一些老是忘记的小杂碎
1:如何取消单元格的选中状态 简简单单的一句 [TableView deselectRowAtIndexPath:[TableView indexPathForSelectedRow] animate ...
- python之函数第二篇
一.名称空间与作用域 名称空间分类: 内置名称空间 import this dir(buil-in) 查看全部内置 全局名称空间 局部名称空间 在函数体内等 查询全局和局部 globals()方法可以 ...
- Quartz 定时器任务调度配置(以及如何配置quartz启动执行一次)
1. 添加maven依赖.pom.xml 中添加jar文件 <!-- 作业任务调度机制 --> <dependency> <groupId>org.quartz-s ...
- JS_高程7.函数表达式(1)
定义函数的两种常见的方法: 1 . 函数声明 2. 函数表达式 # 差异 (1)函数声明 ,具有函数声明提升的特征. (2)函数声明的函数的name属性为函数的名称:使用函数表达式定义的函数在ES5中 ...
- GMA Round 1 极坐标的愤怒
传送门 极坐标的愤怒 我也想被积分啊!可是为什么你们从来不知道我的心意!——极坐标 愤怒会夺走理智,哪怕是被迫的也好,请为极坐标方程$r=t$(也写作$ρ=θ$)积分吧. 为了考验你的忠诚,你需要回答 ...
- JSAP106
JSAP106 一.clientX.clientY 点击位置距离当前body可视区域的x,y坐标 二.pageX.pageY 对于整个页面来说,包括了被卷去的body部分的长度 三.screenX.s ...
- 咏南中间件支持JWT TOKEN
咏南中间件支持JWT TOKEN
- Caffe-SSD相关源码说明和调试记录
1 对Blob的理解及其操作: Blob是一个四维的数组.维度从高到低分别是: (num_,channels_,height_,width_) 对于图像数据来说就是:图片个数,彩色通道个数, ...