1、docker 与 虚拟机 的区别

  1. 传统虚拟机技术是虚拟出一套硬件后,在其上运行一个完整操作系统,然后再在该系统上再运行所需应用
  2. 进程
  3. 容器内的应用进程直接运行于宿主的内核,容器内没有自己的内核且也没有进行硬件虚拟因此容器要比传统
  4. 虚拟机更为轻便。每个容器之间互相隔离,每个容器有自己的文件系统 ,容器之间进程不会相互影响,能区
  5. 分计算资源

2、Docker 为什么比虚拟机快

  1. docker有着比虚拟机更少的抽象层
  2. docker利用的是宿主机的内核,而不需要加载操作系统OS内核

3、docker虚悬镜像是什么

  1. 仓库名、标签都是<none>的镜像,俗称虚悬镜像dangling image

image.png

4、UnionFS 联合文件系统了解吗

  1. 是一种分层、轻量级并且高性能的文件系统,它支持对文件系统的修改作为一次提交来一层层的叠加
  2. docker 的镜像由一层层的联合文件系统构成,下载镜像时联合加载会把各层文件系统叠加起来,最终的
  3. 文件系统会包含所有底层的文件和目录

image.png

5、docker 镜像加载原理

  1. docker 的镜像实际上由一层一层的文件系统组成,这种层级的文件系统叫作 UnionFS
  2. Docker 镜像由 bootfs rootfs 构成,最底层是引导文件系统 bootfs,当 boot 加载完成之后整个
  3. 内核就都在内存中了,此时内存的使用权已由 bootfs 转交给内核,此时系统也会卸载 bootfs
  4. rootfs (root file system) 包含的就是典型 Linux 系统中的 /dev, /proc, /bin, /etc 等标准目
  5. 录和文件。实质就是各种不同的操作系统发行版,比如 UbuntuCentos 等等

image.png

6、为什么 docker 镜像体积都很小

  1. Docker 镜像由 bootfs rootfs 构成,在下载安装镜像时,底层直接用本机的kernel,自己只需要
  2. 提供 rootfs 就行。且 docker 镜像一般只需要包括最基本的命令、工具和程序库,所以 rootfs 体积也很

7、为什么 Docker 镜像要采用这种分层结构

  1. 共享资源,方便复制迁移,就是为了复用
  2. 比如有多个镜像都从相同的 base 镜像构建而来,那么 Docker Host 只需在磁盘上保存一份 base 镜像
  3. 同时内存中也只需加载一份 base 镜像就可以为所有容器服务了,而且镜像的每一层都可以被共享

image.png

8、如何理解镜像层与容器层

  1. 当容器启动时,一个新的可写层被加载到镜像的顶部。这一层通常被称作“容器层”
  2. “容器层”之下的都叫“镜像层”。
  3. 所有对容器的改动(添加、删除、修改文件)都只会发生在容器层中
  4. 只有容器层是可写的,容器层下面的所有镜像层都是只读的

9、docker run 进行了什么操作

  1. 在本地查找是否有目标镜像,如果没有找打将从仓库下载最新版镜像(默认的registry是Docker Hub)
  2. 基于镜像来创建一个新的容器,并且准备运行
  3. docker engine 分配给容器一个虚拟IP地址
  4. 根据镜像中的 Dockerfile 的 CMD 或 ENTRYPOINT 操作启动容器

10、如何获取镜像

  1. 从docker仓库中pull镜像
  2. 使用 Dockerfile 构建镜像
  3. 使用 docker import 导入容器通过 docker export 导出的 tar 文件生成镜像
  4. 使用 docker load 导入image文件生成镜像