• Docker技术使用场景主要特性等相关资源整理
  • OpenStack与Docker集成:使用openstack管理docker
  • Docker的隔离性和安全性问题
  • docker使用的技术之Container内核原理介绍
  • Docker详细的应用与实践架构举例说明
  • ​基于Docker的大数据开发实践
  • ​docker之轻量虚拟化技术——docker实战分享
  • 什么是docker?Docker技术详细介绍
  • 基于Docker容器的云计算平台搭建实战
  • docker和VM虚拟机的区别以及如何用docker搭建基础设施
  • ​Docker容器术语以及docker的特点
  • Docker & Docker Hub
  • Introduction to Swarm, a Docker-native clustering system
  • Docker、Kubernetes、Neutron中的网络简介
  • ​James Turnbull:《The Docker Book》
  • Docker on AWS:Running Containers in the Cloud
  • Introduction docker Container Security
  • docker应用之利用Docker构建自动化运维
  • Docker基本原理简介和详细安装步骤介绍
  • Docker 基础用法和常用命令及选项介绍
  • Docker 端口映射,端口绑定操作介绍
  • Docker 四种网络模式及网络配置详细介绍
  • docker下通过Dockerfile指令构建镜像的指令选项介绍
  • ​Docker 容器数据管理,链接容器,构建私有库
  • Docker容器分析----好处和缺点介绍
  • 如何实现 coreos 下Docker 与分布式数据库结合
  • 应对 Docker 网络功能难题的挑战与思考
  • Docker着手将容器部署到私有云与公有云
  • 为现在和未来改善Docker安全
  • Docker容器与企业存储的结合思考
  • Docker监控以及cAdvisor和Prometheus监控工具的对比
  • ​有关Docker的八个令人难以置信的事实
  • ​部署 Docker 前必须问自己的四个问题
  • 程序猿,千万别说你不了解Docker!
  • 将要改变IT世界的的docker技术是什么?
  • Docker支持更深入的容器日志分析
  • Docker宣布支持Windows 10和Azure Windows Server
  • Docker 1.12.0到底有哪些不同之处
  • 云计算之Docker容器技术如何落地?
  • Docker v1.12.0-rc5 普通版实验版本下载,高级容器引擎
  • 针对Docker容器的监控指标
  • ​Docker 的步伐:DevOps 与 OS 化
  • 八个问题帮你快速了解Docker
  • ​什么是Docker以及docker的 诞生技术演进
  • ​Docker v1.12.1-rc1各种版本发布下载,高级容器引擎
  • ​Docker 1.12.0 改进了服务的负载均衡参数
  • Windows下Docker应用部署相关问题详解
  • Docker1.12 引擎使用体验 ​
  • Docker官方镜像将会使用Alpine Linux替换Ubuntu
  • ​Windows Server 2016提供Docker原生运行的企业级支持
  • ​传统应用的docker化迁移
  • Docker携手Windows Server
  • Docker扁平化网络设计与实现
  • Plesk 中操作和设置 Docker 容器
  • 如何通过 Docker 在 Linux 上托管 .NET Core
  • Docker 1.12.4应用容器引擎发布及下载地址
  • Docker v1.13.0 应用容器引擎正式版发布及下载地址
  • docker源码分析之容器日志处理与log-driver实现
  • 如何在win7,win8下面启动docker
  • win7,win8安装Docker具体过程
  • win7, win8安装docker需要了解的概念
  • win7,win8安装docker的依赖条件
  • Docker Toolbox 介绍
  • Arch下面安装启动及删除docker介绍
  • Debian 7(Wheezy)下面如何安装docker
  • Debian 8(Jessie )下面如何安装docker
  • 红帽RHEL下如何删除docker详细步骤介绍
  • 红帽RHEL下面设置docker服务自动启动
  • linux下不使用sudo命令执行docker的操作步骤
  • 红帽redhat下通过脚本和yum安装docker容器引擎的详细步骤
  • 红帽RHEL下安装docker依赖性检查
  • Ubuntu Vivid 15.04 下面安装docker的详细步骤
  • Ubuntu Trusty 14.04 (LTS) 下面安装docker及依赖关系检查
  • Ubuntu Raring 13.04 和 Saucy 13.10 (64 bit)下面安装docker
  • Ubuntu Precise 12.04 (LTS) (64-bit)下面安装docker
  • Docker支持的安装方式
  • 通过docker ps命令检查运行中的docker镜像
  • 关于docker入门教程
  • 通过docker search命令搜索可用docker镜像
  • 在docker容器中运行hello world!
  • 在docker容器中通过apt-get安装新的程序
  • 通过docker commit命令保存对docker容器的修改
  • 通过docker run命令运行新的docker镜像
  • 准备学习docker: docker version命令查看版本
  • 什么是Docker?Docker通常用于如下场景
  •  
    当前位置:  教程>docker中文入门学习手册

    Docker1.12 引擎使用体验 ​

     
    分享到:
        发布时间:2017-2-20  


        本文导语: Docker1.12 引擎使用体验背景凭借敏捷开发部署理念的推行,相信对于很多人来说docker这项容器技术已经并不陌生,Docker 1.12引擎发布了快两个月,新引擎中包含了许多特性。诸如: Swarm模式,容器集群的健康检查,节点的身份加密...

    Docker1.12 引擎使用体验


    Docker1.12 引擎使用体验

    背景

    凭借敏捷开发部署理念的推行,相信对于很多人来说docker这项容器技术已经并不陌生,Docker 1.12引擎发布了快两个月,新引擎中包含了许多特性。诸如: Swarm模式容器集群的健康检查,节点的身份加密,docker Service API调用,容器启动的过滤匹配方式(constraint), docker的内建路由,以及支持在多平台系统上运行docker(MACWindowsAWSAZURE),以及一些插件升级等等. 特性之多,就连Docker 自己的产品经理也表示这次的新版本可能是公司有史以来变化最大的一次产品发布。

    很长一段时间里,docker在集群模式的管理上一直广受外界诟病。Docker服务自身只能在单台host上进行操作,官方并没有真正意义上的集群管理方案。直到现在1.12的出现, 引擎在多主机、多容器的集群管理上才有了进一步的改进和完善,版本自身内嵌了swarm mode集群管理模式。


    本文主要是介绍一下swarm 集群管理模式的新特性,以及如何该模式下如何实现集群的搭建和服务部署。

    Swarm cluster 模式新特性介绍

    1. 批量创建服务

    1.12引擎中多了docker service命令,和之前的docker run命令类似,但不同的是它能同时对多主机中的容器进行管理操作。下面就以1台manager节点,5台worker节点的swarm集群来阐述这些特性。

    首先看下容器的创建:

    $ docker network create -d overlay mynet

    $ docker service create –replicas 3 –name frontend –network mynet –publish 80:80/tcp frontend_image:latest

    $ docker service create –name redis –network mynet redis:latest

    建立容器之前先创建一个overlay的网络,用来保证在不同主机上的容器网络互通的网络模式,后面两条命令用来在同一个名叫mynet的overlay网络里新建三个相同的web容器副本,和一个 redis副本,并且每个web容器都提供统一的端口映射关系。就像这样:

    Docker1.12 引擎使用体验

    2. 强大的集群的容错性

    既然是集群,当然难免会出现某几个节点故障的情况:

    Docker1.12 引擎使用体验

    当三个web副本中的其中两台web节点宕机后,cluster会根据自己的服务注册发现机制,以及之前设定的值–replicas 3,在集群中剩余的空闲节点上,重新拉起两个web副本。不难看出,docker service其实不仅仅是批量启动服务这么简单,而是在集群中定义了一种状态。Cluster会持续检测服务的健康状态并维护集群的高可用性。

    新节点的分布示意图如下:

    Docker1.12 引擎使用体验

    3. 服务节点的可扩展性

    Swarm Cluster不光只是提供了优秀的高可用性,同时也提供了节点弹性扩展的功能。当web这个容器组想动态扩展至六个节点个数时,只需执行$ docker service scale frontend=6就能立刻复制出三个新的副本出来。

    Docker1.12 引擎使用体验

    眼尖的朋友可能注意到了,所有扩展出来的新web副本节点都run在原先的web节点下面,如果有需求想在每台节点上都run一个相同的副本有没有办法呢?答案也是肯定的:

    $ docker service create –mode=global –name extend_frontend frontend_image:latest

    一条命令分分钟搞定!

    Docker1.12 引擎使用体验

    4. 调度机制

    Docker1.12的调度机制也值得一提。

    所谓的调度其主要功能是cluster的server端去选择在哪个服务器节点上创建并启动一个容器实例的动作。它是由一个装箱算法过滤器组合而成。每次通过过滤器(constraint)启动容器的时候,swarm cluster 都会调用调度机制筛选出匹配约束条件的服务器,并在这上面运行容器。

    还是拿刚刚那个例子来说,再加上–constraint参数,就能指定容器只run在服务器硬盘SSD的节点上(前提是加入到cluster的节点,在启动daemon时,本身需要加上参数 --label com.example.storage=”ssd”):

    $ docker service create –replicas 3 –name frontend –network mynet –publish 80:80/tcp –constraint engine.labels.com.example.storage=ssd frontend_image:lastest

    搭建一个swarm集群

    有了以上这些介绍,我们对swarm cluster 的一些新特性应该有了初步的了解 ,下面再看一个模拟网站rolling_update的实例,相信这也是许多平时做版本发布devops们真正想要看到的东西。

    1. 搭建一个swarm集群

    准备三台机器

    Node1:192.168.133.129

    Node2:192.168.133.137

    Node3:192.168.133.139

    在构建一个swarm cluster,需在cluster节点的防火墙上放行2377/tcp(cluster 管理端口)、7946/udp(节点间通信端口)、4789/udp(overlay 网络端口)

    首先在node1上运行 $docker swarm init 去启动一台cluster manager节点,然后在任意需要添加进集群的节点上运行docker swarm jointoken *** 192.168.133.129:2377 就能将节点加入到cluser(加入到集群里的节点身份可在后面自由设置成worker或manager)。现在swarm cluster的节点就像下面的一样,箱子都准备好了,就差货物往里面装了。

    Docker1.12 引擎使用体验

    通过$docker node ls能看到所有swarm节点的运行状态:

    Docker1.12 引擎使用体验

    P.S.Swarm cluster的创建过程包含以下三个步骤:

    1. 发现Docker集群中的各个节点,收集节点状态、角色信息,并监视节点状态的变化

    2. 初始化内部调度(scheduler)模块

    3. 创建并启动API监听服务模块

    一旦创建好这个cluster,就可以用命令docker service批量对集群内的容器进行操作。搭建cluster只有两步,是不是非常酷?

    Docker1.12 引擎使用体验

    2. 制作一个演示用的demo镜像

    镜像中存放一个python写的简单的http web服务:env.py,目的是显示容器的containerID:

    Docker1.12 引擎使用体验

    from flask import Flask

    import os

    app = Flask(__name__)

    @app.route("/")

    def env():

    return os.environ["HOSTNAME"]

    app.run(host="0.0.0.0")

    Docker1.12 引擎使用体验

    3. 用swarm mode创建service task

    有了这个镜像,然后通过docker service create命令去创建一个名叫test的task:

    $ docker service create --name test -p 5000:5000 demo python env.py

    用docker ps看一眼

    Docker1.12 引擎使用体验

    欸?为什么没有起来呢?再用docker service ls 查看task的状态:

    Docker1.12 引擎使用体验

    注意这个REPOLICAS的值,0/1说明docker create 已经创建了一个副本但是还没有起来,稍等一会再运行一遍命令:

    Docker1.12 引擎使用体验

    补充:

    一些情况下已经运行了容器,可是运行docker ps在本机还是看不到容器,为什么呢?

    Docker1.12 引擎使用体验

    其实,docker 会根据当前每个swarm节点的负载判断,在负载最优的节点运行这个task任务,用docker service ps + taskID 可以看到任务运行在哪个节点上。

    好了container已经起来了并且运行在node1上

    Docker1.12 引擎使用体验

    浏览器打开地址能看到容器对应的ID:

    Docker1.12 引擎使用体验

    4. 增加service节点

    有了单个容器实例之后,下一步再尝试下动态扩展实例个数

    $ docker service scale test=6

    Node1:

    Docker1.12 引擎使用体验

    Node2

    Docker1.12 引擎使用体验

    Node3

    Docker1.12 引擎使用体验

    一条命令让现在swarm cluster里三台节点,每台都运行了两个test副本实例。

    Docker1.12 引擎使用体验

    此时你是不是已经留意到,一个天然的HA集群出现了。docker会把对每个host的http请求依据轮询算法,均匀地发送到每个task副本上。

    Docker1.12 引擎使用体验

    5. 模拟其中一个swarm cluster节点离线的情况

    正常来讲让一个swarm cluster中的一个node退出集群的方式,是在要推出的节点上运行$ docker swarm leave命令,但是为了让实验更疯狂,我在node3上直接stop docker的daemon

    Docker1.12 引擎使用体验

    再去剩余两个节点上任意一个查看task状态:

    Docker1.12 引擎使用体验

    原本在node3上运行的两个test任务:test3、test4,分别在node1和node2两台host上被来起来了。整个副本迁移的过程无需人工干预,迁移后原本的集群的load balance依旧好使!



      您可能感兴趣的文章:

    • 本站(WWW.169IT.COM)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
      本站(WWW.169IT.COM)站内文章除注明原创外,均为转载,整理或搜集自网络.欢迎任何形式的转载,转载请注明出处.
      转载请注明:文章转载自:[169IT-IT技术资讯]
      本文标题:Docker1.12 引擎使用体验 ​
    相关文章推荐:


    站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2017,169IT.COM,E-mail:www_169it_com#163.com(请将#改为@)

    浙ICP备11055608号