docker入门01--基础概念及关键技术

1.前言

Docker 容器是一个开源的应用容器引擎,Docker基于镜像,可以秒级启动各种容器。

1.1 虚拟机

在容器技术流行之前,业界主流是虚拟机技术,主要代表包括VMWare和OpenStack等,使用虚拟机可以同时运行多个相互隔离的应用,如下图:

(图片来自https://www.jianshu.com/p/50f48eb25215

  1. 基础设施(Infrastructure): 个人PC、服务器、云主机等;
  2. 主操作系统(Host Operating System): 基础设施上运行的操作系统,如Mac OS, windows, Linux等
  3. 虚拟机管理系统(Hypervisor): 一种运行在基础物理服务器和操作系统之间的中间软件层,可允许多个操作系统和应用共享硬件。Hypervisors是一种在虚拟环境中的“元”操作系统。他们可以访问服务器上包括磁盘和内存在内的所有物理设备。Hypervisors不但协调着这些硬件资源的访问,也同时在各个虚拟机之间施加防护。当服务器启动并执行Hypervisor时,它会加载所有虚拟机客户端操作系统同时会分配给每一台虚拟机适量的内存CPU网络磁盘等计算资源。
  4. 从操作系统(Guest Operating System):虚拟机操作系统,由Hypervisor启动。

可见,虚拟机管理系统是实现硬件虚拟化的关键,通过仿真出一台或者多台计算机的各种硬件,用户可以在这一台虚拟机上安装、运行操作系统(一般叫来宾操作系统,Guest OS)和各种应用,并且把Guest OS和上面应用软件对硬件资源的访问转发到底层的硬件上来实现。对于Guest OS和上面的应用程序来说,这台虚拟机和普通的物理计算机可能是没有任何区别的(当然性能可能要差一点)。

1.1.1 虚拟机的主要特性

分区

  1. 可在一台物理机上运行多个操作系统。
  2. 可在虚拟机之间分配系统资源。

隔离

  1. 可在硬件级别进行故障和安全隔离。
  2. 可利用高级资源控制功能保持性能。

封装

  1. 可将虚拟机的完整状态保存到文件中。
  2. 移动和复制虚拟机就像移动和复制文件一样轻松。

独立于硬件

  1. 可将任意虚拟机调配或迁移到任意物理服务器上。

1.1.2 虚拟机的缺点

占用硬件资源过多

每一个被虚拟化创建的Guest OS作为一个独立的操作系统,同时为了保证应用的正常运行,需要占用大量的硬件资源,以本机电脑vmware workstation中先前创建的虚拟机看,最小的内存也为2GB,磁盘被分配了20GB。对于大多数的普通个人PC,在保证计算机正常运行其他应用软件的前提下,单机可能最多能创建上述4个虚拟机。

启动缓慢

虚拟机启动时,因为需要进行虚拟机硬件的初始化,同时还需要经过OS的启动流程,所以启动时间一般比较长(少则几十秒、多则几分钟甚至更久)

 

1.2Docker

不同于虚拟机,如果通过Docker来运行多个应用,则不再需要虚拟机管理系统(Hypervisor),取而代之的是Docker守护进程(Docker Daemon),如下图所示:

(图片来自https://www.jianshu.com/p/50f48eb25215

Docker守护进程(Docker Daemon)同主操作系统(Host Operating System)直接通信,为各个Docker容器分配资源,各容器共享主机内核,在将应用同主操作系统隔离的同时,也保证了各个应用相互间的隔离。而对每个应用来说,各自的源代码和其自身依赖都打包封装在Docker镜像中,由于不涉及OS的启动,所以容器可在很短时间内启动运行。容器是镜像的运行实例,当被运行时有镜像状态和用户进程,可以使用docker ps 查看。

1.2.1 Docker的主要特性

  • 灵活:即使是最复杂的应用也可以集装箱化。
  • 轻量级:容器利用并共享主机内核,能够迅速启动,只需占用很少的计算和内存资源。镜像是通过文件系统层进行构造的,并共享一些公共文件。这样就能尽量降低磁盘用量,并能更快地下载镜像。
  • 可互换:可以即时部署更新和升级。
  • 便携式:基于开放式标准,能够在所有主流Linux版本、Microsoft Windows以及包括VM、裸机服务器和云在内的任何基础设施上运行。
  • 可扩展:可以增加并自动分发容器副本。
  • 可堆叠:可以垂直和即时堆叠服务。
  • 安全:Docker赋予应用的隔离性不仅限于彼此隔离,还独立于底层的基础设施。Docker默认提供最强的隔离,因此应用出现问题,也只是单个容器的问题,而不会波及到整台机器

1.2.2 Docker关键概念及技术

Docker 是通过名称空间(namespace)实现资源的隔离,通过控制组(control Group ,简写:cgroup)来实现资源的限制,通过写时复制技术(copy-on-write)实现了高效的文件操作。

(1)Namespace 名称空间

Linux提供的一种内核级别环境隔离的方法。在Linux系统中,可以同时存在多个用户多个进程,PID,IPC,Network等系统资源不再是全局性的,而是属于某个特定的Namespace。每个namespace下的资源对于其他namespace下的资源都是透明不可见的。因此在操作系统层面上看,就会出现多个相同pid的进程。系统中可以同时存在两个进程号为0,1,2的进程,由于属于不同的namespace,所以它们之间并不冲突。而在用户层面上只能看到属于用户自己namespace下的资源,例如使用ps命令只能列出自己namespace下的进程。这样每个namespace看上去都像一个单独的Linux系统,有自己的init进程(PID为0),其他进程的PID依次递增,A和B空间也都有PID为0的init进程,子容器的进程映射到父容器的进程上,父容器可以知道每一个子容器的运行状态,而子容器与子容器之间是隔离的。

Linux提供了如下几种Namespace

  • Namespace     变量                                         隔离资源
  1. Cgroup            CLONE_NEWCGROUP          Cgroup 根目录
  2. IPC                  CLONE_NEWIPC                    System V IPC, POSIX 消息队列等
  3. Network           CLONE_NEWNET                   网络设备,协议栈、端口等
  4. Mount              CLONE_NEWNS                      挂载点
  5. PID                  CLONE_NEWPID                     进程ID
  6. User                CLONE_NEWUSER                  用户和Group ID
  7. UTS                CLONE_NEWUTS                      Hostname和NIS域名

[有关namespace更详细的内容,准备在深入学习后单独写入一篇博文中]

(2)Control Group 控制组    

资源限制:可以对任务使用的资源总额进行限制
优先级分配:通过分配的cpu时间片数量以及磁盘IO带宽大小,实际上相当于控制了任务运行优先级
资源统计:可以统计系统的资源使用量,如cpu时长,内存用量等
任务控制:cgroup可以对任务执行挂起、恢复等操作

(3)Image镜像

一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等)。 镜像不包含任何动态数据,其内容在构建之后也不会被改变。

(4)Container容器

容器是镜像运行时的实体,它可以被启动,开始、停止、删除、每个容器都是互相隔离的。

(5)Repostory仓库

镜像构建完成后,为了能够在别的宿主机都能够下载它、使用它,需要对其进行统一的管理,仓库就是集中存放镜像文件的地方。一个仓库会包含一个软件不同版本的镜像,通过标签来对应于各个版本。我们可以通过<仓库名>:<标签>的格式来指定具体是这个软件哪个版本的镜像。如果不给出标签,将以latest作为默认标签。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值