Docker 镜像加载原理简述 带 commit镜像

Docker镜像讲解

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

将所有的应用,直接打包docker镜像,就可以直接跑起来

如何得到镜像

  • 远程仓库下载
  • 拷贝来的
  • 自己制作镜像dockerfile

Docker镜像加载原理

UnionFS(联合文件系统)

  • dockerimage下载时看到的一层一层的就是使用的这个文件系统,查看每次下载的一层是叠加还是修改,当两个镜像中的某一层已经相同就不会下载第二次

  • 是一种分层、轻量级、高性能的文件系统,支持文件系统的修改作为一次提交来层层叠加,同时可以将不同的目录挂载在同一个虚拟文件系统下,Union文件系统是docker镜像的基础

  • 镜像通过分层来进行继承,基于基础镜像,可以制作各种具体的应用镜像

  • 特性:一次同时加载多个文件系统,从外面看起来,只能看到一个文件系统,联合加载会把各层文件系统叠加起来,最终的文件系统会包含所有底层的文件文件和目录

docker镜像原理

  • docker镜像是由一层层的文件系统组成,这种层级的文件系统UnionFS
  • BootFS(boot file system)
    • 主要包含boot loader、kernel,bootlocker主要是引导加载kernel
    • linux启动时会加载bootfs文件系统,在docker镜像的最底层是bootfs,这点linux和unix是一样的,boot加载器和内核,当boot加载完成之后,整个内核都在内存中,此时内存的使用权已由bootfs转交给内核,此时系统会卸载bootfs
  • rootFS,在bootfs之上,包括的就是典型的linux系统中的/dev、/proc、/bin、/etc等标准文件和目录,rootfs就是不同操作系统发行版,拨入ubuntu,centos等等
  • Docker 镜像加载原理简述 带 commit镜像_第1张图片
  • 先是from来一个debian,然后run了一层emacs在原来的基础上多叠加了一层,之后的apache是跟emacs是共用底层的,不需重复下载
  • 因为是一个精简的os,rootfs很小,只保留了一些基本的命令,底层的kernel还是使用的主机的kernel,只需要提供rootfs就行,不同的linux版本呢bootfs是一致的,rootfs会有差别,因此发型版本可以公用bootfs
  • Docker 镜像加载原理简述 带 commit镜像_第2张图片
  • 有些层已经下载过就不会再下载
  • Docker 镜像加载原理简述 带 commit镜像_第3张图片
  • 叠加和替换,分层下载,提高了复用能力
  • Docker 镜像加载原理简述 带 commit镜像_第4张图片
  • 从docker hub远程下载来的镜像是只读的,对其进行的操作只是在原有的基础上增加一层,并不改变原来的镜像,改动再进行打包,可以发布成为一个新的镜像

docker commit

docker run -it -p 8080:8080 --name tomcat01 tomcat

docker exec -it tomcat01 /bin/bash

mv webapps.dist webapps
||
cp webapps.dist webapps


docker commit -a="haoyun" -m="add webapps app" tomcat01 tomcathaoyun:1.0
#commit自己的image

Usage:	docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]

Create a new image from a container's changes

Options:
  -a, --author string    Author (e.g., "John Hannibal Smith ")
  #提交镜像的作者
  -c, --change list      Apply Dockerfile instruction to the created image
  #使用dockerfile指令来创建镜像
  -m, --message string   Commit message
  #说明文字
  -p, --pause       
  #在commit时将容器暂停


docker images

image-20201207165829334

现在打包出的就是自定义的一个新的镜像

你可能感兴趣的:(docker,docker,内核,linux)