Docker容器

Less Interests
More Interest

Docker镜像是什么?(千层饼)

镜像是一种轻量级、可执行的独立软件包,用来打包软件运行环境开发的软件,它包含运行某个软件所需要的所有内容,包括代码,运行时需要的库,环境变量和配置文件等。

联合文件系统(UnionFS)

Union文件系统是一种分层、轻量级并且高性能的文件系统,它支持对文件系统的修改作为一次提交来一层层叠加,同时可以将不同的目录挂载到同一个虚拟文件系统下(unite several directories into a single virtual filesystem)。Union文件系统是Docker镜像的基础。镜像可以通过分层来继承,基于基础镜像(没有父镜像),可以制作各种具体的应用镜像.
特点:
    一次同时加载多个文件系统,但从外面看起来,只能看到一个文件系统,联合加载会把各层文件系统叠加起来,这样最终的文件系统包含了所有底层的文件和目录。

Docker镜像加载原理

docker的镜像实际上是由一层一层的文件系统组成,这种层级的文件系统叫联合文件系统。

  • bootfs(boot file system)主要包含了bootloader和kernel,bootloader主要是引导加载kernel,Linux刚启动是会加载bootfs文件系统。在docker镜像最底层就是bootfs。这一层与我们典型的Linux/Unix系统是一样的。包含boot加载器和内核。当boot加载完成之后整个内核就都在内核中了。此时内存的使用权已由bootfs转交给内核,此时系统也会卸载bootfs。
  • rootfs(root fie system),在bootfs之上。包含的就是典型Linux系统中的/dev,/proc,/bin,/etc等标准目录和文件。rootfs就是各种不同的操作系统发行版,比如Ubuntu,Centos等等。
    Docker容器_第1张图片
    镜像构成

    对于一个精简的OS,rootfs可以很小,只需要包含最基本的命令,工具和程序库就可以了。底层统一使用Host的kernel,自己只需要提供rootfs就行了,所以对于不同的镜像,bootfs基本是一致的,rootfs有所差别,大家一起共用bootfs,所以docker镜像很小,如centos只有200M左右。

分层的镜像

docker是分层的,在pull镜像时,下载过程中也是一层一层的下载


Docker容器_第2张图片
docker镜像分层下载

Docker镜像采用分层结构的原因

共享资源
比如:有很多镜像都是从相同的base镜像构建而来,那么宿主机只需要在磁盘上保存一份base镜像即可,运行时也只需要加载一份base镜像在容器中,就可以为所有的镜像提供服务,并且,镜像的每一层都可以共享。

特点

Docker镜像都是只读的;
当容器启动时,一个新的可写层被加载到镜像的顶部。这一层通常叫做容器层,容器层之下的都叫镜像层。

Docker镜像的commit操作

  • docker commit 提交容器副本使之称为一个新的镜像
  • docker commit -m="提交的描述信息" -a="作者" 容器ID 要创建的目标镜像名:[标签]
    如:启动一个tomcat之后把webapps中的docs文档删掉在commit,以后以这个镜像生成容器运行,都会咩有docs这个文档
      docker run -it -p 8888:8080
      cd webapps
      rm -rf docs
      docker commit -a="zhazha" -m="delete docs" ca6fd1a3bf91 dokcer/tomcat:1.0


    Docker容器_第3张图片
    本地提交的镜像

    此时在以这个镜像生成容器运行,这个容器也咩有docs文档。

你可能感兴趣的:(Docker容器)