一切福田,不離方寸,從心而覓,感無不通。

聊聊云计算:5分钟弄清楚我们为什么需要容器

除了云主机,不少应用也部署在容器里面。容器云服务也是现在云服务商的主要业务,阿里云、腾讯云等都会提供相应的容器服务。那么,我们为什么需要容器呢?

我们经常会遇到这样的问题:

1 程序在我这儿跑得好好的,怎么到你那里就不行了?

2 系统好卡,是哪个进程把CPU给吃光了?

3 这套系统我已经搭建好了,要不你再重新搭建一遍?

相信这些问题,大家平常都会遇到。容器技术是帮助我们解决这些问题的好办法。那么容器究竟是什么呢?

容器技术是这些问题的最佳解决方案

容器也是一种虚拟化技术,与虚拟机不同之处在于,虚拟机是硬件虚拟化(Hypervisor的作用),容器是对操作系统虚拟化。

虚拟机本身是不带有操作系统的,在虚拟机上部署应用时,还需要安装操作系统(一般是通过虚拟机镜像)以及其他需要的执行环境,如Tomcat等。

容器把应用以及应用的执行环境打包在一起。部署应用的时候,直接整个容器进行部署。因为容器自带应用执行环境,所以就不存在部署过程中由于环境变化,导致应用出现部署异常,可以说是“一次构建,到处执行”。

虚拟机 VS 容器

从头在虚拟机或物理机上搭建一遍环境,包括安装程序以及配置脚本,往往是非常麻烦的事情。相比于虚拟机(云主机),利用(云)容器来部署应用要更方便。

总结起来,容器有三大特点:

容器内部的东西是不可变的

相比虚拟机更轻量级,可以实现秒级启动,容器可以运行在物理机上,也可以在虚拟机上。

创建速度快,不需要复杂的环境配置

目前最常用的容器就是就是Docker,以至于大家一谈到容器,一般默认就认为是Docker。那么Docker技术与容器有什么关系呢?

Docker究竟是什么?

容器技术其实已经出现十多年了,Linux2.6版本就已经支持LXC。而Docker技术的最早0.1版本直到2013年才出现,现在已经成为云计算领域一个非常常用的技术了。

Docker是以容器技术为核心的一套应用构建、部署和执行的技术体系。其中包括了Docker Daemon守护进程、Docker Container容器、Docker Client客户端以及Docker Image镜像等。

Docker守护进程本身就是一个普通的应用进程,不过是用来操作Docker镜像文件的。Docker守护进程与镜像文件一起就组成了Docker容器。

Docker容器、守护进程与镜像的关系

那这个Docker镜像文件(Docker File)里面有什么呢?Docker镜像和虚拟机快照(镜像文件)类似,分不同的层级,比如有基础镜像,仅仅包含操作系统,比如CentOS镜像;有中间件镜像,比如redis数据库镜像;还有应用镜像,就是指含有具体的应用服务的镜像了。

Docker如何部署应用

当我们需要部署应用的时候,可以从镜像中创建容器,这如同从快照中创建虚拟机,不过更轻量,启动更快,秒启。

应用是在容器中运行的。比如我们要通过容器部署一个应用:

首先下载了一个Ubuntu的镜像;

然后又安装mysql和Django应用及其依赖,来完成对它Ubutun镜像的修改;

最后通过这个镜像生成一个容器;

容器启动之后就会运行Django服务了。

容器不是完全封闭的,也需要对外提供服务,所以Docker允许公开容器的特定端口。

在启动Docker的时候,我们就可以将容器的特定端口映射到宿主机上面的任意一个端口。如果一个宿主机(虚拟机或物理机)上面要部署多个Docker容器,而且几个服务都需要80端口,那么容器的对外端口都是80,但是映射到宿主机上面就可以是任意端口,不会产生冲突。

基于Docker仓库的工作流程

Docker仓库(Registry)是用来存放Docker镜像的地方。仓库存在公有和私有之分,公有仓库docker hub提供了非常多的镜像文件,这些镜像直接拉取下来就可以运行了。

我们也可以上传自己的镜像到docker hub上,同时也可以自己搭建私有仓库用于团队项目管理。

基于Docker仓库的开发运维工作流程

基于Docker仓库,整个开发团队的DevOp工作流程大致是这样的:

开发人员构建镜像并将镜像提交到Docker仓库;

测试人员从Docker仓库拷贝镜像到测试环境进行测试;

运维人员从Docker仓库拷贝镜像部署到生产环境,通过镜像开启容器并对外提供服务

 

from:http://baijiahao.baidu.com/s?id=1588183340989045106&wfr=spider&for=pc