服务定义

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

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

  幸运的是,使用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容器通过称为负载平衡的网络共享端口80 webnet。(在内部,容器本身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. 拓展应用程序

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

docker stack deploy -c docker-compose.yml getstartedlab

  

5. 关闭应用程序和退出群

关闭服务

docker stack rm getstartedla

节点退出集群

docker swarm leave --force

  

 

Docker-服务(4)的更多相关文章

  1. docker 服务注册

    docker 服务注册 etcd docker run -d --name etcd -p 4001:4001 -p 7001:7001 elcolio/etcd

  2. Docker服务端防护

    运行一个容器或应用程序的核心是通过 Docker 服务端.Docker 服务的运行目前需要 root 权限,因此其安全性十分关键. 首先,确保只有可信的用户才可以访问 Docker 服务.Docker ...

  3. Docker 服务

    1.  Docker服务 作为一名后端攻城狮,对“服务”这个概念一定不陌生.比如,我们做一个会员系统,它可能会需要数据库.缓存.消息队列,这些都是中间件服务,除此以外可能还需要依赖其它的Dubbo服务 ...

  4. 安装指定版本的docker服务

    参考博客:Docker CE 镜像源站 参考博客:docker启动异常driver not supported 1. 说明 之前部署docker服务的时候都是安装最新的docker版本,并使用dock ...

  5. docker学习-----docker服务的安装

    docker 以下观点个人理解,只做参考 一.docker本身的优势 1.docker他本身是一个容器,用来方便我们项目打包,做服务器虚拟化,统一开发者环境等多种优势:运行于docker上的项目可以快 ...

  6. Docker 随 docker服务重启

     在创建时添加 重启 docker run --restart=always -d --name web -p : -v /data/web:/usr/local/tomcat/webapps tom ...

  7. 【实战】Docker入门实践二:Docker服务基本操作 和 测试Hello World

    操作环境 操作系统:CentOS7.2 内存:1GB CPU:2核 Docker服务常用命令 docker服务操作命令如下 service docker start #启动服务 service doc ...

  8. reboot 后 Docker服务及容器自动启动设置

    https://blog.csdn.net/wxb880114/article/details/82904765 重启reboot操作系统后,发现docker 服务未启动,容器也未启动,天生反骨,怎么 ...

  9. CentOS 7安装Docker服务详细过程

    ---恢复内容开始--- Docker 简介 Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟 ...

  10. 重启docker服务应用,自启停命令.

    #重启docker服务应用,不自动开启docker容器 docker update --restart=no (docker容器CONTAINER ID 或 docekr容器NAMES) #重启doc ...

随机推荐

  1. servlet 表单加上multipart/form-data后request.getParameter获取NULL(已解决)

    先上结论(可能不对,因为这是根据实践猜测而来,欢迎指正) 表单改为multipart/form-data传值后,数据就不能通过普通的request.getParameter获取. 文件和文件名通过Fi ...

  2. python标准库大全(转)

    3. 清晰的标准库大全,带例子 2. 必会标准库 http://lizhenliang.blog.51cto.com/7876557/1872538 1. 标准库大全,链接版 http://blog. ...

  3. pygame 笔记-8 背景音乐&子弹音效

    游戏哪能没有音效?这节我们研究下如何加背景音乐,其实也很简单: # 加载背景音乐 pygame.mixer.music.load(music_base_path + "music.mp3&q ...

  4. 附近有什么?8款可以查周边的App

    如今科技发达的时代,手机的功能不仅仅只是能通讯聊天,而是逐渐的走进了人们的生活中.因为有了APP,我们的生活才更丰富,并且有很多是我们生活中不可缺少的软件,而这些软件便是根据手机中的GPS定位系统而来 ...

  5. [asp.net core]The requested page cannot be accessed because the related configuration data for the page is invalid.

    bug HTTP Error 500.19 - Internal Server Error The requested page cannot be accessed because the rela ...

  6. 虚拟串口VSPD破解版 亲测win10 64可用

    虚拟串口VSPD破解版 亲测win10 64可用 点击下载

  7. Python3 与 C# 网络编程之~ 网络基础篇

    最新版本查看:https://www.cnblogs.com/dotnetcrazy/p/9919202.html 入门篇 官方文档:https://docs.python.org/3/library ...

  8. u3d不显示阴影的处理方法

    正常情况下都会显示的,如果没有显示,尝试以下几种方案: 1)缩小模型看一看 2)旋转灯光试试,看是否有阴影 3)检查阴影设置 菜单栏Edit –> Project Settings –> ...

  9. LIN 笔记

    LIN 使用了 1 根线来进行通信,但是,它必须要参考 VBat 和 GND.离开这两个参考电平,并没有办法来判断线上的 bit 状态. 另外,根据经典的 LIN 驱动电路(一个 OC 门),RX 接 ...

  10. OpenLayers WorkShop 快速学习通道

    学习地址:https://openlayers.org/workshop/en/ OpenLayers Workshop Introduction Basics Creating a map Zoom ...