Docker镜像详解
什么是镜像
镜像是一种轻量级、可执行的独立软件包,用来打包软件运行环境和基于运行环境开发的软件,它包含运行某个软件所需要的所有内容,包括代码,运行时(一个程序在运行或者在被执行的依赖)、库,环境变量和配置文件。
Docker镜像加载原理
Docker的镜像实际上由一层一层的文件系统组成,这种层级的文件系统是UnionFS联合文件系统。
分层理解
分层的镜像
我们去下载一个镜像,观察下方的日志输出,可以看到一层一层的在下载
[root@vdevops ~]# docker pull redis
Using default tag: latest
latest: Pulling from library/redis
e5ae68f74026: Already exists
37c4354629da: Pull complete
b065b1b1fa0f: Pull complete
6954d19bb2e5: Pull complete
6333f8baaf7c: Pull complete
f9772c8a44e7: Pull complete
Digest: sha256:2f502d27c3e9b54295f1c591b3970340d02f8a5824402c8179dcd20d4076b796
Status: Downloaded newer image for redis:latest
docker.io/library/redis:latest
为啥 镜像要采用这种分层结构
最大的好处,莫过于资源共享,比如有多个镜像都从相同的Base镜像构建而来,那么宿主机只需在磁盘上保留一份base镜像,同时内存中只需要加载一份base镜像,这样就可以为所有的容器服务,而且镜像的每一层都可以被共享。查看镜像分层的方式可以通过 docker image inspect
commit 镜像
如何提交自己的一个镜像
docker commit 提交容器成为一个新的副本
docker commit -m="提交的描述信息" -a="作者" 容器id 目标镜像名: [TAG]
#1.启动一个默认的tomcat
#2. 发现这个默认的 tomcat 是没有webapps 应用的 官方的镜像默认 webapps下面是没有文件的
#3.自己拷贝
#4. 将操作后的容器 通过 commit 提交 我们以后就是要修改过的镜像
[root@vdevops ~]# docker commit -a="syyy" -m="add webapps app" a5538129234d tomcat1.0
sha256:c6e64ee3642d487261c131892dd668fffd484600b3464ff378bde1547dff89ea
[root@vdevops ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
tomcat1.0 latest c6e64ee3642d 7 seconds ago 684MB
tomcat 9.0 3f3cadde9a68 12 days ago 680MB