第1章:docker介绍

1.容器的介绍

  容器是一种基础工具,可以部分或完全能封闭数据使其做到数据隔离的作用。

2.容器的发展

  FreeBASE Jail --> Linux vserver --> LXC --> docker

  开始:隔离一些功能,但是想使用还需用C语言其调用,所以想用好容器还需精通C语言

  • chroot:完整的根系统(FHS)功能
  • UTSCLONE_NEWUTS主机名与域名
  • IPCCLONE_NEWIPC信号量、消息队列和共享内存
  • PIDCLONE_NEWPID进程编号
  • NetworkCLONE_NEWNET网络设备、网络栈、端口等
  • MountCLONE_NEWNS挂载点(文件系统)
  • UserCLONE_NEWUSER用户和用户组

  LXC:

  • 将功能封装方便做容器的生命周期

       docker 

  •  镜像安装实现功能

3.容器一般隔离的什么功能

  • chroot:完整的根系统(FHS)功能
  • UTSCLONE_NEWUTS主机名与域名
  • IPCCLONE_NEWIPC信号量、消息队列和共享内存
  • PIDCLONE_NEWPID进程编号
  • NetworkCLONE_NEWNET网络设备、网络栈、端口等
  • MountCLONE_NEWNS挂载点(文件系统)
  • UserCLONE_NEWUSER用户和用户组

4.容器为什么能够实现这些功能的隔离

   容器技术的核心功能就是通过约束和修改进程的动态表现,从而为其创造出一个“边界”。其中,Cgroups 技术是用来制造约束的主要手段,而 Namespace 技术则是用来修改进程视图的主要方法

  • 1. Namespace 隔离

    Linux Namespace是Linux提供的一种内核级别环境隔离的方法。Linux内核中提供了6种namespace隔离的系统调用,如下所示:(官方文档在这里Namespace in Operation

namespace系统调用参数隔离内容
UTS CLONE_NEWUTS 主机名与域名
IPC CLONE_NEWIPC 信号量、消息队列和共享内存
PID CLONE_NEWPID 进程编号
Network CLONE_NEWNET 网络设备、网络栈、端口等
Mount CLONE_NEWNS 挂载点(文件系统)
User CLONE_NEWUSER 用户和用户组

  2. Cgroups 资源限制

  通过linux namespace,我们已经能够创建出一个资源隔离的进程了,也就是所谓的“容器”,但这个“容器”尚不完整,还需要对其进行资源限制。为什么呢?这里通过PID namespace为例进行说明。

  虽然容器内的第 1 号进程在“障眼法”的干扰下只能看到容器里的情况,但是从宿主机的角度来看,它作为第 100 号进程与其他所有进程之间依然是平等的竞争关系这就意味着,虽然第 100 号进程表面上被隔离了起来,但是它所能够使用到的资源(比如 CPU、内存),却是可以随时被宿主机上的其他进程(或者其他容器)占用的

5.传统虚拟化与容器的区别

  • 传统虚拟化

  传统虚拟化分为基于硬件和基于软件,软件中又分为应用虚拟化和平台虚拟化(包含虚拟技术),平台虚拟化中又分为完全虚拟化部分虚拟化。

  传统的虚拟化是在硬件层面实现虚拟化:需要有额外的虚拟机管理应用和虚拟操作层。

       需要硬件的支持,需要模拟硬件,可以运行不同的操作系统,启动时间分钟级(开机启动流程)

  • 容器

       共用宿主机内核,运行服务,损耗少,启动快,性能高

  不需要硬件的支持。不需要模拟硬件,共用宿主机的内核,启动时间秒级(没有开机启动流程)

  docker容器时在操作系统层面上实现需要虚拟化直接复用本地的操作系统。

最大的缺点就是隔离不彻底。

  • 1)容器知识运行在宿主机上的一种特殊的进程,那么多个容器之间使用的就还是同一个宿主机的操作系统内核。
  • 2)在Linux内核中,有很多资源和对象是不能被Namespace化的,最典型的例子是:时间,即如果某个容器修改了时间,那整个宿主机的时间都会随之修改。
  • 3)容器给应用暴露出来的攻击面比较大,在生产环境中,没有人敢把运行在物理机上的Linux容器暴露在公网上。

  下面是两者的差别解析:

6.docker的三大核心概念

  • 镜像(image):  类似于虚拟机的快照,只能读不能写,每条命令都会产生一个层,层越少越好   
  • 容器(Container) : 轻量级的沙箱,docker利用容器来运行和隔离应用
  •  仓库(Repository): 类似于代码仓库,放镜像文件的场所,仓库注册服务器(库)上有多个仓库,每个仓库可以放多个镜像,每个镜像都有不同的标签,运行多个容器。仓库分为私有仓库和公有仓库(最大的公有仓库hub.docker.com)不管是公有的还是私有的,都可以上传(push)下载(pull)镜像。

  注意:镜像只能读,容器在启动时会创建一层可写层作为最上层。

  三大核心关系:仓库(私有仓库和公有仓库)中保存着镜像,镜像运行起来的为容器。

  如图所示:

7.docker的构想

     实现:“Build ,Ship and Run Any App ,Any-Where”,及通过应用封装,分发,部署,运行的生命周期进行管理,达到“一次分装,到处运行”。

8.docker的优点

  • 更加快捷的交付和部署
  • 更加有效的资源利用
  • 更加轻松的迁移和扩展

更加简单的更新和管理(涉及到dickerfile配置文件)

下一章,我们会有docker的安装

原文地址:https://www.cnblogs.com/hanjiali/p/14077929.html