营销-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. 降成本:容器具有很好的隔离性,能在一台服务器上部署不同平台的服务且不会导致冲突,增加服务器的复用。