Docker04镜像
目录
镜像是什么? #
镜像是一种轻量级,可执行的独立软件包,用来打包软件运行环境和基于运行环境开发的软件,它包含运行某个软件所需的所有内容,包括代码,运行时库,环境变量和配置文件。
如何获得镜像 #
- 从远程仓库下载
- 朋友拷贝给你
- 自己制作一个镜像
Dockerfile
UnionFS(联合文件系统) #
Docker
的镜像实际上由一层一层的文件系统组成,这种层级的文件系统UnionFS
。
这是一种分层,轻量级且高性能的文件系统,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下( Unite several directories into a single virtual filesystem
)。Union文件系统是 Docker 镜像的基础。镜像可以通过分层来进行继承,基于基础镜像,可以制作各种具体的应用镜像。
Docker镜像加载原理 #
bootfs(boot file system)
主要包含bootloader
和kernel
,bootloader主要是引导加载kernel,Linux刚启动时会加载bootfs文件系统,在Docker镜像的最底层是bootfs。这一层与我们典型的Linux/Unix系统是一样的, 包含boot加载器和内核。当boot加载完成之后整个内核就都在内存中了,此时内存的使用权已由bootfs转交给内核,此时系统也会卸载bootfs。
rootfs(root file system)
在bootfs之上。包含的就是典型Linux系统中的/dev, /proc, /bin, /etc等标准目录和文件
。rootfs
就是各种不同的操作系统发行版,比如Ubuntu,Centos等等。
镜像分层下载优点 #
- 可以精简镜像文件的大小,对于一个OS,rootfs可以很小,需要包含最基本的命令,工具库和程序库即可,因为底层直接使用 Host 和 kernel,自己只需要提供 rootfs即可,由此对于不同的 Linux 发行版本,bootfs基本是一致的。
- 资源共享,比如又多个镜像从相同的 base 镜像构建而来,主机只要在磁盘上保存一份 base 镜像,同时内存也只需加载一份 base 镜像即可为所有的容器服务了,而且镜像的每一层都能被共享。
Docker 镜像理解 #
所有的镜像都起始于一个基础镜像层,当进行修改或增加新的内容时,都会在当前镜像层上创建新的镜像层。
创建新的镜像层时,镜像始终是当前所有镜像的组合
上层镜像层的文件要覆盖底层镜像层的文件时,会使得文件的更新版本作为一个新的镜像层添加到镜像中。
所有镜像层堆叠并合并,对外提供统一的视图
Docker 镜像都是只读的,当容器启动时,一个新的可写层会被加载到镜像的顶部。(这一层称为
容器层
,容器之下的都叫镜像层
)。
commit镜像 #
#docker commit -m="提交的描述信息" -a="作者" 容器ID 目标镜像名:[tag]
发现:官方的默认 tomcat 的 webapp文件夹
并没有一些文件,需要自己手动拷贝。
解决:将我们操作过的容器 commit
提交成一个新的镜像,我们以后就直接使用我们修改过的镜像即可。
[root@izwz91mv6i3x6k12jjqh60z ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
39f11d68d64d tomcat "catalina.sh run" 18 minutes ago Up 18 minutes 0.0.0.0:8080->8080/tcp, :::8080->8080/tcp tomcat02
[root@izwz91mv6i3x6k12jjqh60z ~]# docker commit -m="这个修改了的tomcat" -a="zhang" 39f11d68d64d modified_tomcat:1.1
sha256:57cab5f1479d5c0c6f85ba59415b8c7e9563d9907d32fc5d61a54a74945e57e7
[root@izwz91mv6i3x6k12jjqh60z ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
modified_tomcat 1.1 57cab5f1479d 7 seconds ago 672MB
tomcat latest c0e850d7b9bb 3 weeks ago 667MB
nginx latest 62d49f9bab67 4 weeks ago 133MB
portainer/portainer latest 580c0e4e98b0 8 weeks ago 79.1MB
centos latest 300e315adb2f 5 months ago 209MB
总结:如果想保存当前容器的状态,可以通过 commit 来提交,获得一个镜像。