面试系统化学习和准备(二)——docker篇

一、docker概念

本节要点

  1. 什么是容器与镜像?如何构建容器与镜像
  2. 容器的生命周期
  3. 容器项目的架构
  4. 容器 VS.VM

 

1.容器

定义:一个视图隔离、资源可限制、独立文件系统的进程集合

(1)视图隔离 指的是容器之间的系统资源是是隔离的,一个容器中你只能看见一部分进程,每个容器有独立的主机名。

(2)资源可限制 指的是可以给每个容器限制资源,比如2个CPU 2G内存

(3)独立文件系统 指的是每个容器有自己的根目录,在自己的文件系统中做增删改查操作,不会影响到其他容器中的文件。

2.镜像

定义:容器运行所需要的所有文件集合称为容器镜像

3.如何构建和运行镜像

(1)DockerFile定义:相当于一个指令文档,docker可以读取dockerFile来构建容器。它有自己特定的便利语法糖。

(2)changeset:DockerFile可以描述构建容器的每个步骤,每个步骤对已有文件系统的操作所带来的变化,称为changeset。

当把changeset依次作用到一个空文件夹就能得到一个完整的镜像。

它的好处是可以提高分发效率和节省空间,一个大的镜像可以拆成多个小块,进行并行下载。节省空间这个还没看懂。

有了Dockerfile,就可以docker build构建出镜像了。然后push到镜像仓库,pull下载镜像,docker images查看本地镜像。docker run可以运行镜像。

(这里最好从构建到运行完整操作一次)

 

容器就是和系统其它部分隔离开来的进程集合,这里的其他部分包括进程、网络资源以及文件系统等。而镜像就是容器所需要的所有文件集合,其具备一次构建、到处运行的特点。

 

二、容器的生命周期

1.生命周期:容器是一组具有隔离特性的进程集合,再运行时会选择一个镜像来提供独立的文件系统并指定相应的运行程序,称之为initial进程。initail进程启动,则容器随之启动,initial进程退出,则容器随之退出。容器的生命周期与initial进程完全相同。

2.容器数据持久化:通过数据卷的方式,挂载到容器内,容器将数据写入这个特殊的目录。数据卷不会因为容器的退出而导致数据丢失。

提问,数据卷如何管理?bind的方式或者运行引擎的方式是怎么管理?这里最好也实践一下

 

三、容器项目架构(这次只是简单介绍,后面再详细学)

1.moby:是最流行的容器管理引擎,moby daemon会对上管理容器、镜像、网络以及Volume的管理。它依赖于containerd。

2.containerd:一个容器运行时管理引擎,可以对上提供容器、镜像的相关管理。

3.containerd shim:是containerd shim底层的模块,类似于一个守护进程。

 

四、容器和VM优劣对比

1.启动速度:docker快,因为只是进程级别的隔离,没有操作系统。虚拟机有操作系统。

2.所占用的计算资源和空间:docker少,虚拟机因为需要将计算资源交给虚拟化,所以浪费了很多计算自由。空间方面也是很浪费,一个Guest OS安装ubuntu需要5-6G的空间。

3.隔离效果:VM强,每个应用都是完全独立。但是docker也在向着强隔离方向发展。

容器可以解决物理机里面,多个进程修改同一个文件的冲突情况,比如别人还需要用的文件被更高级的进程删掉了,还有多个进程之间会有依赖冲突。

 

总结:

  • 容器是一个进程集合,具有自己独特的视图视角;
  • 镜像是容器所需要的所有文件集合,其具备一次构建、到处运行的特点;
  • 容器的生命周期和 initial 进程的生命周期是一样的;
  • 容器和 VM 相比,各有优劣,容器技术在向着强隔离方向发展。

 

五、自己构建和运行docker

参考教程:https://www.jianshu.com/p/c4c6d1196156

ubuntu基础命令:

(1)查看ip:首先sudo apt-get install net-tools ,然后ifconfig

(2)

 

1.安装docker

 

posted @ 2022-03-25 23:09  写代码是唯一安静独处  阅读(54)  评论(0编辑  收藏  举报