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

1.什么是容器

docker必需要要说容器,因此咱们须要首先来讲一下容器的概念。linux

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

常见的容器:算法

  • 瓶子docker

  • 篮子apache

  • ubuntu

  • 集装箱windows

  • 柜子后端

2.虚拟化技术

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

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

方式1:主机虚拟化

这里所虚拟化的是整个硬件平台,好比vmwarevirtual box,他们所虚拟出来的是一个完整的裸机,咱们能够再这个裸机上随意的安装os和软件。

主机虚拟化是分为两类的

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

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

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

  • 复用:好比须要运行两个tomcat,让其工做在虚拟机中,就能够实现8080套接字不冲突了

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

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

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

  • 默认全部的用户进程都是在同一个用户空间的,那么此时咱们要想隔离多个进程的运行环境,就能够建立多个用户空间,并且多个用户空间是互相隔离的

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

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

  • UTS:主机名和域名

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

  • IPCipc是必需要进行隔离的,若是不隔离IPC,那么多个进程就能够互相通讯,那么就不存在隔离了

  • PID:隔离PID也是必须的

  • user 和group:在容器中也要有独立的用户,好比都要有root ,可是这个root确定不能都是真正的root,由于若是是真root用户的话,就有权限删除其余容器中的内容了。

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

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

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

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

图片1.png

  • 从这里能够看到,若是想更好的使用容器技术,centos6就不适合了。

3.LXC

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

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

4.什么是Docker

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

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

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

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

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

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

  • 好比在一个容器中仅仅运行nginx,若是要用apache,就须要下载另外一个容器了,此时的nginxapache就可会经过容器间的通讯逻辑进行通讯。

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

 

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

  • 如今咱们的生成环境中,都是多版本并行的,如同时用着centos5 6 7,同时还用着windowsubuntu等系统,若是这个时候要开发一个程序在全部的平台都能运行,这个时候每每是须要有好几个团队分别开发面向不一样系统的版本。

  • 而有了docker之后,就只须要开发一个版本,并将这个软件作到一个docker镜像中,这样只须要将这个镜像放到任意的平台上,只要这个平台有docker,那么就能够运行这个镜像,同时这个程序也就能够开始运行了,因此,软件开发的难度大大下降了。

 

再来讲docker镜像的构建方式

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

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

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

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

注意,构建的镜像只包含nginx自己,而不包含centos操做系统内容

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

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

  • 若是须要启动多个镜像,其中有nginxtomcatapache等,如都是基于centos的,因此在下载的时候,只须要下载一个centos,再分别下载须要层就能够了。

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

  • 是由于底层的centostomcat都是只读的。

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

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

关于容器编排工具

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

  • 再好比,咱们要运行amp的环境,这里三个程序就是三个容器,这三个容器的启动顺序是有关系的,因此就须要设置启动的顺序,这样编排工具还须要能够根据顺序依次启动。

编排有不少:

  • 第一个:docker本身的编排工具:这里实际上是三个工具的组合,machine+swarm+compose

  • 第二个:ASF的,meos+marathon

  • 第三个:google的,kubbernets,简称k8s,这是由于ks间有8个字母

5.对比kvm虚拟化

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

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

图片3.png

6.对比openstack虚拟化

图片4.png

  • 真正的docker是不该该当作虚拟机用的(虽然能够)

7.docker架构

图片5.png

整个架构分为了三个部分

1:客户端:cient

2:服务器端:docker_hosts

3:仓库端:registery

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

docker_host部分

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

ipv4套接字

ipv6套接字

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

docker仓库

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

  • 另外dockerregistery中,还包括repository,一个repository就是一个目录,在一个目录中只存储一个应该程序的镜像,好比要建立的nginx的镜像,那么就建立一个目录,这个目录名就是nginx全部的nginx的镜像都是放在同一个目录下。

  • 由于如今有多个镜像,那么若是想惟一的标识一个镜像,就须要借助于 tag(标签),好比第一个1.9 1.11 1.23,这样经过repo名称和标签名的组合,就能够惟一的标识一个镜像。

图片6.png

  • docker官方提供有docker仓库,可是其实也有第三方提供的,并且也能够本身作docker仓库。

5.docker的应用场景

1.简化配置

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

  • 这么多的环境,环境不一样,配置也就不一样,若是配置不一样,那么就可能会致使上线失败,使用docker就能够简化配置,作一个镜像,使用这个镜像就能够完成部署上线。

2.代码流水线管理

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

3.开发效率

  • 新员工入职后配置各类环境,这个过程就每每是比较麻烦的,那么这里,咱们就能够用docker作个容器轻松来实现。

4.应用隔离

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

5.服务器整合

  • 也就是说一个服务器能够跑多个容器实例

6.调试能力

  • 处理bug的能力

7.多租户

8.快速部署

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

  • 好比以前说过,春晚的微信抢红包,用的是docker,说是能够1秒启动1000docker程序。

大中型公司选择docker的理由

技术储备

跟上节奏,提高自身技术

符和当前业务需求

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

相关文章
相关标签/搜索