Docker系列1:Docker与容器基础知识介绍

1.什么是容器

说docker必须要要说容器,所以我们需要首先来说一下容器的概念。

站在用户的角度思考问题,与客户深入沟通,找到个旧网站设计与个旧网站推广的解决方案,凭借多年的经验,让设计与互联网技术结合,创造个性化、用户体验好的作品,建站类型包括:网站设计制作、成都网站制作、企业官网、英文网站、手机端网站、网站推广、国际域名空间、网站空间、企业邮箱。业务覆盖个旧地区。

  • 其实容器就是一工具,泛指可以容纳其他的物品工具,可以用来存储、运输物品;物品可以放在容器中的,而容器可以保护物品。

常见的容器:

  • 瓶子

  • 篮子

  • 集装箱

  • 柜子

2.虚拟化技术

说容器,就必须对比容器和虚拟化技术,首先就说虚拟化技术。

我们实现虚拟化技术主要有两种

方式1:主机虚拟化

这里所虚拟化的是整个硬件平台,比如vmware、virtual box,他们所虚拟出来的是一个完整的裸机,我们可以再这个裸机上随意的安装os和软件。

主机虚拟化是分为两类的

l type-I(类型1的虚拟化)

l type-ii(类型2的虚拟化)

程序运行在虚拟机中,肯定比运行在物理机中性能差,那么为什么还要将其运行在虚拟机中?

  • 复用:比如需要运行两个tomcat,让其工作在虚拟机中,就可以实现8080套接字不冲突了

  • 隔离:一个进程在虚拟机中做任何操作,对于其他虚拟机中的进程和物理机中的进程都是没有影响的

那么我们怎么即实现隔离,又不影响性能呢?

  • 一个主机在运行起来之后,分为内核空间和用户空间,在用户空间中就是运行用户空间进程。

  • 默认所有的用户进程都是在同一个用户空间的,那么此时我们要想隔离多个进程的运行环境,就可以创建多个用户空间,而且多个用户空间是互相隔离的

  • 这里一个一个性对独立的用户空间就是我们所谓的linux 容器

使用容器,目的是为了创建一个隔离的环境,在这个隔离环境环境中,应该至少包括隔离如下几个层面

  • UTS:主机名和域名

  • Mount:工作目录,也称之为安装树

  • IPC:ipc是必须要进行隔离的,如果不隔离IPC,那么多个进程就可以互相通信,那么就不存在隔离了

  • PID:隔离PID也是必须的

  • user 和group:在容器中也要有独立的用户,比如都要有root ,但是这个root肯定不能都是真正的root,因为如果是真root用户的话,就有权限删除其他容器中的内容了。

  • network:隔离网络是最为重要的,因为一个容器作为一个独立的单元工作,那么就需要为每个容器准备一个网卡、接口、tcp/IP协议栈。

这里有个概念就是namespaces(名称空间)

  • linux的内核原生就支持了6种名称空间,在构建容器的时候,就是从这6个名称空间中抽取出来一部分构成一个容器。

各种名称空间与所支持的内核版本

Docker系列1:Docker与容器基础知识介绍

  • 从这里可以看到,如果想更好的使用容器技术,centos6就不适合了。

3.LXC

所谓的LXC,其实就是linux Container,这是一种基于模板的方式实现容器技术应用的解决方案 ,在LXC中包含了一组工具

  • lxc-create:快速创建容器的命令

4.什么是Docker

  • 其实docker就是lxc的二次封装发行版,他是用lxc作为容器引擎,同时使用镜像技术,将一个操作类型容器所需要的文件提取安装好,并打成一个包

  • 当创建容器的时候,只需要将这个包复制N份并启动容器,这样就好了,速度很快。

  • 当用docker创建容器的时候,其实就是用lxc create来创建一个容器。

  • docker极大的降低了容器的使用难度

用来存放镜像的服务器,我们称之为docker仓库,在这个仓库中有我们几乎能想到的全部的容器

  • docker使用了一种更为精巧的设计,那就是每个容器中仅仅运行一个进程。

  • 比如在一个容器中仅仅运行nginx,如果要用apache,就需要下载另一个容器了,此时的nginx和apache就可会通过容器间的通信逻辑进行通信。

  • 这里让每个进程运行在一个独立的容器中,而且我们也知道容器是一个隔离的环境,那么这样一来,一个进程出现了问题,对于其他的进程是不会受到影响的。

 

使用docker另个一好处:真正的实现的一次编写,到处运行了

  • 现在我们的生成环境中,都是多版本并行的,如同时用着centos5 6 7,同时还用着windows、ubuntu等系统,如果这个时候要开发一个程序在所有的平台都能运行,这个时候往往是需要有好几个团队分别开发面向不同系统的版本。

  • 而有了docker以后,就只需要开发一个版本,并将这个软件做到一个docker镜像中,这样只需要将这个镜像放到任意的平台上,只要这个平台有docker,那么就可以运行这个镜像,同时这个程序也就可以开始运行了,所以,软件开发的难度大大降低了。

 

再来说docker镜像的构建方式

  • docker镜像的构建方式是很特殊的,称之为:分层构建、联合挂载

以构建nginx镜像为例解释一下

  • 先做一个最底层、纯净的系统,比如最小化的centos6系统

  • 在这个centos系统的基础上安装一个nginx就构成了镜像

注意,构建的镜像只包含nginx本身,而不包含centos操作系统内容

  • 这个镜像就包含了两层,这两层共同构成了运行在了linux上的centos

  • 当启动容器的时候,需要将这两层都挂载上去就可以用了,这就是分层构建、联合挂载,

  • 如果需要启动多个镜像,其中有nginx、tomcat、apache等,如都是基于centos的,所以在下载的时候,只需要下载一个centos,再分别下载需要层就可以了。

为何能实现多个上层应用公用底层系统?

  • 是因为底层的centos和tomcat都是只读的。

  • 当用户在所创建的容器中执行写操作的时候,底层是只读无法修改

  • 所以,这个时候就会底层的资源复制一份上来,然后在复制的这层中进行修改,这种机制称之为:写时复制

关于容器编排工具

  • 比如我们有100个主机可以运行docker,当需要启动容器的时候,只需要编排工具发送指令,这个编排工具根据算法从后端的这几种找一个来启动docker

  • 再比如,我们要运行amp的环境,这里三个程序就是三个容器,这三个容器的启动顺序是有关系的,所以就需要设置启动的顺序,这样编排工具还需要可以根据顺序依次启动。

编排有很多:

  • 第一个:docker自己的编排工具:这里其实是三个工具的组合,machine+swarm+compose

  • 第二个:ASF的,meos+marathon

  • 第三个:google的,kubbernets,简称k8s,这是因为k和s间有8个字母

5.对比kvm虚拟化

  • kvm:基于硬件虚拟化技术,是需要cpu支持的,是虚拟出来一个虚拟机,虚拟机管理器是需要占用额外的系统资源的,也就是即使不跑任何虚拟机,都需要占用6%左右的系统资源

  • docker:基于内核虚拟化技术,没有虚拟任何东西,但是是通过隔离技术实现的,所以不会对系统带来额外的开销。

Docker系列1:Docker与容器基础知识介绍

6.对比openstack虚拟化

Docker系列1:Docker与容器基础知识介绍

  • 真正的docker是不应该当做虚拟机用的(虽然可以)

7.docker架构

Docker系列1:Docker与容器基础知识介绍

整个架构分为了三个部分

l 1:客户端:cient

l 2:服务器端:docker_hosts

l 3:仓库端:registery

l 各个部分之间通信是基于http或者https进行通信的

docker_host部分

    服务器端就是靠运行docker daemon来运行在守护进程模式的下的,此时的docker就会监听在一个套接字之上了,而且docker是支持三种套接字的

l ipv4套接字

l ipv6套接字

l unix socket套接字:也就是监听在一个本地文件上。

docker仓库

  • 首先docker的registery中提供了docker镜像的存储功能,而且还提供了用户登录下载镜像时候的认证功能。

  • 另外docker的registery中,还包括repository,一个repository就是一个目录,在一个目录中只存储一个应该程序的镜像,比如要创建的nginx的镜像,那么就创建一个目录,这个目录名就是nginx,所有的nginx的镜像都是放在同一个目录下。

  • 因为现在有多个镜像,那么如果想唯一的标识一个镜像,就需要借助于tag(标签),比如第一个1.9 1.11 1.23,这样通过repo名称和标签名的组合,就可以唯一的标识一个镜像。

Docker系列1:Docker与容器基础知识介绍

  • docker官方提供有docker仓库,但是其实也有第三方提供的,而且也可以自己做docker仓库。

5.docker的应用场景

1.简化配置

  • 工作中的环境有生产环境、测试环境、开发环境测试环境又分为功能测试、性能测试;生产环境又分为预生产环境和生成环境。

  • 这么多的环境,环境不同,配置也就不同,如果配置不同,那么就可能会导致上线失败,使用docker就可以简化配置,做一个镜像,使用这个镜像就可以完成部署上线。

2.代码流水线管理

  • 开发人员在开发完成以后,将代码传递到服务器上,然后测试人员可以从服务器上拉去代码进行测试,测试完成以后,开始进行发布,首先就是进行灰度发布,然后才是正事发布。

3.开发效率

  • 新员工入职后配置各种环境,这个过程就往往是比较麻烦的,那么这里,我们就可以用docker做个容器轻松来实现。

4.应用隔离

  • 各个应用之间互相是隔离的。

5.服务器整合

  • 也就是说一个服务器可以跑多个容器实例

6.调试能力

  • 处理bug的能力

7.多租户

8.快速部署

  • docker是秒级的,启动速度极其快。

  • 比如之前说过,春晚的微信抢红包,用的是docker,说是可以1秒启动1000个docker程序。

大中型公司选择docker的理由

l 技术储备

l 跟上节奏,提升自身技术

l 符和当前业务需求

    (目前普遍都是第二个,根本都不是第一个和第三个)


文章题目:Docker系列1:Docker与容器基础知识介绍
文章URL:http://ybzwz.com/article/gscosh.html