<ol id="yjpmm"><object id="yjpmm"></object></ol>

  • <dd id="yjpmm"><pre id="yjpmm"></pre></dd>

    <dd id="yjpmm"><noscript id="yjpmm"></noscript></dd>

    营销-SEO-头部优化文字

    400-928-0260

    上海帝联信息科技股份有限公司

    帝联动态
    首页 > 帝联动态 > 企业新闻

    帝联云平台容器化之镜像规划

    2017-05-25 12:11:31

    随着CDN牌照的发放,激烈的行业竞争即将迎来拐点。在激烈竞争中,技术创新、精细运营成为不少厂商的制胜秘诀。帝联科技镜像规划方案就是其精细化运营的一个缩影。


    图片关键词


    Docker是一个轻量级,开销很低的虚拟化技术,他在github上有4万个Star,被Fork了1万多次,更新提交3万多次从这些数字可以看出Docker社区非常活跃更新速度很快也很火。


    Docker可以在短短几秒钟内构件一个完整的服务,对于需要快速部署,持续交付的应用场景中常常能看到他的身影。


    基于Docker的应用场景很多:有持续集成(CI) 直接飞跃到持续交付(CD)(Jenkins+Docker)的应用;有支持多用户,弹性伸缩安全隔离的PassS云平台(Mesos+Marathon+Docker)(Kubernetes+Docker)的应用;有小巧灵活的微服务(Docker+REST)的应用。


    图片关键词

    Jeinkins+Docker应用架构

     

    CDN是一个内容分发网络,需要在全国各地的不同运营商机房部署上千台服务器,并需要根据机房割接变动,服务迭代升级,客户带宽突发,带宽成本等因素不停的进行服务部署。而Docker的最大特点就是“一处构件处处部署且以秒级的速度部署”,非常适合CDN快速服务部署的需求。


    Docker的另一个特点“安全隔离”又能让不同的服务混跑在一台物理服务器上变得非常简单,大大提高了CDN服务器的利用率。


    Docker这些丰富的应用都需要来自同一个地方“Docker镜像的家”-Docker Registry。下面我们一起看看镜像(Image),容器(Container),之间的关系,为我们后面构建一个基于CDN服务镜像做好铺垫。


    镜像Image


    镜像就是一堆只读(read-only layer)按照一定的顺序叠加在一起的集合。除最下面一层,其他层都会有一个指针指向下面一层。统一文件系统技术能够将不同层的整合成一个文件系统,让用户看起来像是一个文件系统。

    图片关键词


    我们可以通过一些命令来查看这些镜像中每一层都做了些什么,Docker早期版本命令:docker images –tree ,而现在官方推荐使用:docker history 命令。


    首先需要查看当前宿主机上的镜像列表。docker images

    图片关键词


    Docker image命令输出字断说明:


    REPOSITORY          #镜像名称

    TAG                 #标签、版本等

    IMAGE ID            #镜像ID

    CREATED             #创建时间

    VIRTUAL SIZE        #镜像大小

     

    查看特定的镜像层次:docker history 镜像名称

    图片关键词


    Docker history命令输出字断说明:


    IMAGE              # 新增一层后新生成的ID

    CREATED            # 添加时间

    CREATED BY    # 该层执行的命令                            

    SIZE               # 在镜像里占的大小

     

    创建一个镜像通常需要掌握如下命令:


    # 检索image

    $docker search image_name


    # 下载image

    $docker pull image_name


    # 列出镜像列表

    $docker images


    # 删除一个或者多个镜像

    $docker rmi image_name


    # 显示一个镜像的历史

    $docker history image_name

     

    #当需要把一台机器上的镜像迁移到另一台机器的时候,需要保存镜像与加载镜像。

    #保存镜像到一个tar包

    $docker save image_name -o file_path

     

    # 加载一个tar包格式的镜像;

    $docker load -i file_path

     

    # 机器打包

    $docker save image_name > /home/save.tar


    # 使用scp将save.tar拷到机器b上:

    $docker load < /home/save.tar

     

    # 发布docker镜像

    $docker push new_image_name

     

    # 根据Dockerfile 构建出一个容器

    docker build -t image_name Dockerfile_path

     

    容器Container


    容器在概念上和镜像一摸一样,只是容器的最上面一层是可读写的。我们可以将容器理解为:容器=镜像+读写层。

    图片关键词


    CDN服务是一个综合的需要各种系统设置,服务安装,服务配置的过程,一般情况下一台服务器要能提供CDN服务能力,需要安装基础运维标准化服务,服务配置,堡垒机客户端,标准10项服务,修改主机名,DNS配置,ARP绑定,均衡机器软中断,SNMP,Monitor,BandWidth,FiveMin,PushNode,Redis,ATS, Nginx, CloudApp等软件和配置文件。


    按照变动时间分类:


    1. 1-3年才会有一次的服务和配置。

    2. 2-6个月变动一次的服务和配置。

    3. 30天以内变动一次的服务和配置。


    根据镜像是按照顺序一层一层的堆砌的,而且镜像每次编译都是从最底层开始一层一层的编译执行的概念,归纳后将镜像分成三类:基础镜像,业务镜像,需求镜像。


    基础镜像:是长时间固化不便并且能全产品线通用的镜像,大部分是系统设置或者系统配置调优如:基础运维标准化服务,服务配置,堡垒机客户端,标准10项服务,修改主机名,DNS配置,ARP绑定,SNMP。


    业务镜像:是变动很少,适合全平台通用的服务,大部分是支撑服务类如:BandWidth,FiveMin,PushNode,Redis。


    需求镜像:是30天内会变动的服务或设置,大部分是客户的定制化需求如:ATS,Nginx ,CloudApp。

    图片关键词

    CDN平台中根据不同的服务,我们也可以将镜像分成:


    1. 平台服务镜像

    2. 支撑服务镜像

     

    平台服务镜像:主要提供平台级的服务,如:ATS服务,Nginx服务,这类服务镜像可以在同一台宿主机上跑相同镜像的多个容器,也可以跑多个镜像的多个容器。


    支撑服务镜像:包含例如5分钟或1分钟带宽采集,推送服务,这类支撑服务镜像在一台宿主机上只能启用1个容器。若需要强制一台宿主机只启动一个镜像的容器,可以通过编排工具Kubernetes的DaemonSet来实现。下图是一个宿主机的镜像容器示意图。

    图片关键词

    根据CDN的服务部署特点将Docker镜像更新变动分为三大类的目的,主要是在服务编译过程中提高编译速度以及服务的稳定性。按照服务的维度进行细分类,方便快速部署,当服务更新时将影响范围降到最低。


    操作容器常用的命令:


    # 在容器中运行"echo"命令,输出"hello word"

    $docker run image_name echo "hello word"

     

    # 交互式进入容器中

    $docker run -i -t image_name /bin/bash

     

    # 在容器中安装新的程序

    $docker run image_name apt-get install -y app_name


    Note:在执行apt-get 命令的时候,要带上-y参数。如果不指定-y参数的话,apt-get命令会进入交互模式,需要用户输入命令来进行确认,但在docker环境中是无法响应这种交互的。apt-get 命令执行完毕之后,容器就会停止,但对容器的改动不会丢失。

     

    # 列出当前所有正在运行的container

    $docker ps

     

    # 列出所有的container

    $docker ps -a

     

    # 列出最近一次启动的container

    $docker ps –l

     

    # 删除所有容器

    $docker rm `docker ps -a -q`

     

    # 删除单个容器;

    $docker rm Name/ID

     

    #删除所有的容器

    docker rm `docker ps -a -q`

     

    # 停止、启动、杀死一个容器

    $docker stop Name/ID

    $docker start Name/ID

    $docker kill Name/ID

     

    # 从一个容器中取日志

    $docker logs Name/ID

     

    # 显示一个运行的容器里面的进程信息

    $docker top Name/ID

     

    # 从容器里面拷贝文件/目录到本地一个路径

    $docker cp Name:/container_path to_path

    $docker cp ID:/container_path to_path

     

    # 重启一个正在运行的容器;

    $docker restart Name/ID

     

    # 附加到一个运行的容器上面

    $docker attach ID


    总的来说,上述镜像规划方案对CDN主要有三点益处:


    1. 轻量级:一个百兆大小的容器就能具备一个完整的CDN节点需要的服务软件,且能在单台服务器上运行几十个CDN节点,在测试环境中非常方便。


    2. 标准化:容器具有“一处构件处处部署”的能力,让CDN节点部署变的更加标准化。


    3. 降成本:容器具有很好的隔离性,能在一台服务器上部署不同平台的服务且不会导致冲突,增加服务器的复用。