Docker镜像讲解(docker基础镜像和项目镜像)
docker镜像讲解
镜像是什么
镜像是一种轻量级、可执行的独立软件包,用来打包软件运行环境和基于运行环境开发的软件,它包含运行某个软件所需的所有内容,包括代码、运行时、库、环境变量和配置文件。
所有应用,直接打包成docker镜像,就可以直接跑起来。
docker镜像获取方式
从github上获取
从别人那里拿到现成的
自己制作镜像--> dockerfile
UnionFS(联合文件系统)
当我们下载需要的镜像时,对文件系统的每次修改都会被记录下来。在docker中不同的镜像如果有相同的部分那么下载的时候就不会重复下载,相同的部分会被两个镜像共用。
镜像加载原理
docker的镜像实际上由一层层的文件系统组成,这种层级的文件系统UnionFS主要包含bootloader和kernal,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等,就是我们常说的镜像。
为什么docker安装的centos可以那么小才几百MB,一般情况下不都是几个G吗?
答:对于一个精简的os,rootfs可以很小,只需要包含最基本的命令,工具和程序库就可以了,因为底层直接用host的kernal,自己只需要提供rootfs就可以了。由此可见对于不同的linux发行版,bootfs基本是一致的,rootfs会有差别,因此不同的发行版可以公用bootfs。
而在加载一个os时耗费时间最多的就是kernal的加载,因此,虚拟机是分钟级别,容器是秒级
分层的理解
最简单的理解就是相同的文件被复用。
比如说当我们下载mysql镜像
第一步是下载centos
第二步是下载mysql相关文件
当我们再下载redis镜像时
第一步是下载centos,发现文件系统里面已经有了centos那么就不用去下载,直接使用已有的。
第二步再去下载相关的redis文件
更深层的理解:
所有的docker镜像都起始于一个基础镜像层,当进行修改或新增新的内容时,就会在当前镜像层之上,创建新的镜像层。
# 使用命令去查看详细数据 docker inspect 容器id复制代码
而我们下载过来的镜像本身也是在docker的基础镜像上增加了很多操作,在打包的时候就会被打包成一个全新的镜像,所以我们下载的时候才会有这么多的层次。因此我们也可以在下载过来的镜像上添加操作生成自己的镜像。
特点
Docker镜像都是只读的,当容器启动时,一个新的可写层被加载到镜像的顶部,这一层就是我们常说的容器层,容器之下都叫镜像层。
如何提交自己的镜像
#命令 docker commit -m="提交的描述信息" -a="作者" 容器id 目标镜像名:[TAG] #测试: # 1.启动下载的tomcat并进入 [root@Liang01 ~]# docker exec -it 5525e4559ff4 /bin/bash # 2.因为原版的tomcat的webapps文件夹中没有文件,所以将webapps.list文件夹下的所有文件拷贝过去 root@5525e4559ff4:/usr/local/tomcat# ls BUILDING.txt NOTICE RUNNING.txt lib temp work CONTRIBUTING.md README.md bin logs webapps LICENSE RELEASE-NOTES conf native-jni-lib webapps.dist root@5525e4559ff4:/usr/local/tomcat# cp -r webapps.dist/* webapps root@5525e4559ff4:/usr/local/tomcat# cd webapps root@5525e4559ff4:/usr/local/tomcat/webapps# ls ROOT docs examples host-manager manager # 3.把自己修改的镜像提交生成新的镜像 [root@Liang01 ~]# docker commit -m="add webapps remove" -a="liang" 5525e4559ff4 tomcat01 sha256:74251c36c15e0ca9235e5901edd032efbc88db5dd63976bc701c14c46a18b358 [root@Liang01 ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE tomcat01 latest 74251c36c15e 37 seconds ago 684MB nginx latest f652ca386ed1 25 hours ago 141MB tomcat 9.0 76206e3ba4b1 2 weeks ago 680MB tomcat latest 904a98253fbf 2 weeks ago 680MB hello-world latest feb5d9fea6a5 2 months ago 13.3kB centos latest 5d0da3dc9764 2 months ago 231MB
作者:小加吃雪糕
链接:https://juejin.cn/post/7037457757405970462
伪原创工具 SEO网站优化 https://www.237it.com/