镜像底层实现的原理
-
- [docker 镜像](#docker 镜像)
-
- 镜像是什么?
- 分层的镜像
- UnionFS(联合文件系统)
- 为什么Docker镜像要采用这种分层结构呢?
- [打包镜像 docker commit ⭐⭐](#打包镜像 docker commit ⭐⭐)
docker 镜像
镜像是什么?
是一种轻量级、可执行的独立软件包,它包含运行某个软件所需的所有内容,我们把应用程序和配置依赖打包好形成一个可交付的运行环境(包括代码、运行时需要的库、环境变量和配置文件等),这个打包好的运行环境就是image镜像文件。
只有通过这个镜像文件才能生成Docker容器实例(类似Java中new出来一个对象)。
分层的镜像
通过上述 得知 镜像是分层的
UnionFS(联合文件系统)
为什么Docker镜像要采用这种分层结构呢?
镜像分层最大的一个好处就是共享资源,方便复制迁移,就是为了复用。
比如说有多个镜像都从相同的base镜像构建而来,那么Docker Host只需在磁盘上保存一份base镜像;同时内存中也只需加载一份base镜像,就可以为所有容器服务了。而且镜像的每一层都可以被共享。
打包镜像 docker commit ⭐⭐
docker commit:提交容器副本使之成为一个新的镜像
ubuntu安装vim
- 从Hub上下载ubuntu镜像到本地并成功运行
clike
docker run ubuntu
- 原始的默认Ubuntu镜像是不带着vim命令的
clike
root@d594d28e292d:/# vim --help
bash: vim: command not found
root@d594d28e292d:/#
- 外网连通的情况下,安装vim
clike
docker?容器内执行上述两条命令:
apt-get update # 更新包管理工具
apt-get -y install vim # 安装所需要的vim
- 测试
在 a.txt 输入语句 使用cat输出命令
- 安装完成后,commit我们自己的新镜像
clike
[root@localhost zyan]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d594d28e292d ubuntu "bash" 5 hours ago Up 5 hours magical_knuth
[root@localhost zyan]# docker commit -m='+vim' -a='zyan' d594d28e292d zyan/hgubuntu:1.1
sha256:ca7abefb7af77901ddb84af423a3f7e50d6a30807224670e3239487120899f04
[root@localhost zyan]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d594d28e292d ubuntu "bash" 5 hours ago Up 5 hours magical_knuth
[root@localhost zyan]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
zyan/hgubuntu 1.1 ca7abefb7af7 31 seconds ago 191MB
ubuntu latest 59ab366372d5 2 weeks ago 78.1MB
redis 6.0.8 16ecd2772934 4 years ago 104MB
- 启动我们的新镜像并和原来的对比