说明
在本文章之前,我还写了一篇‘Docker学习笔记01’,这篇文章是对之前的补充。若没有看过之前的文章,请先看之前的文章,连接如下:
https://www.freebuf.com/articles/web/266888.html
Docker镜像讲解
什么是镜像?
镜像是一种轻量级,可执行的独立软件包,它包含运行某个软件所所需要的所有内容,包括:代码,运行时需要的库,环境变量和配置文件等
镜像加载原理
1.什么是联合文件系统?
一种分层,轻量化并且高性能的文件系统。docker基于联合文件系统,镜像可以通过分层来镜像继承,基于基本镜像,可以制作各种具体的应用镜像
2.docker镜像分层的好处
a.通过镜像分层,可以使不同的容器之间共享相同的镜像层,从而节省存储空间,并且只需要在内存中运行一份相同的镜像层,就可以为不同的容器提供服务。例如:镜像A:由镜像层1,2,4,6组成;而镜像B:由1,2,5,7,8组成。在已经下载了镜像A的情况下,下载镜像B,就只需要下载镜像层5,7,8。因为镜像层1,2已经存在于本地。运行时也一样,只需要在内存中运行一份镜像层1,2,就可以为两个容器提供服务。
b.当在升级镜像中版本时,上层镜像层中的文件就会覆盖底层中的文件,就可以使得文件的更新版本作为一个新镜像层被添加到镜像中
3.镜像分层的特点
a.docker镜像为只读文件,当容器启动时,一个新的可写层会被添加到镜像的顶部
b.运行起来的容器,由镜像层(我们直接使用docker pull下载下来的镜像,只读)和容器层(我们直接操作的层次,可读可写)组成
4.commit的使用
作用:将我们操作过的容器提交成一个镜像,我们以后就可以直接使用这个镜像创建容器(注意:该容器与原有容器的状态一致),类似于vmware虚拟机的快照功能
命令:docker commit -m=’描述信息’ -a=‘作者名’ 容器id 目标镜像:[版本]
容器数据卷技术
为什么要提出容器数据卷技术?
前面我们说过,容器之间是相互隔离的,拥有独立的文件系统。在容器中的应用或服务产生的数据,会保存在容器自身的文件系统中。当不小心把容器删了,里面的数据也会丢失。难搞………
于是,就提出了容器数据卷技术。
可以将docker容器内存储的数据,同步到本地计算机上,加以保存。实现容器中数据的持久化和同步。注意,不同容器之间也可以实现数据同步共享奥。
使用方式
命令:docker run -it -v 主机目录:容器内目录 镜像名
实例:docker run -it -v /home/ceshi:/home centos
可以使用 ’docker inspect 容器id‘ 来在mount中查看挂载情况
{
“Type”:“bind”,
“Source”:”/home/ceshi”, #物理主机的目录
“Destination”:“/home”, #容器内目录
“Mode”:“”,
“Propagation”:“rprivate”
}
补充知识:
1.匿名挂载:
命令:docker run -it -v 容器内路径 镜像名
docker会随机生成一个目录名,并将其挂载到物理主机的/var/lib/docker/volumes目录下
可以使用 “docker volume ls” 来查看匿名目录名 #方法1
也可以使用 “docker volume inspect 匿名目录名“ 来查看其在物理主机上的挂载路径 #方法2
2.具名挂载
命令:docker run -it -v 目录名称:容器内路径 镜像名
docker会生成一个指定的目录名,并将其挂载到/var/lib/docker/volumes目录下
可以使用同上的方法(1,2)来查看具体挂载信息
3.三种挂载的区别:
-v 容器内路径名 #匿名
-v 目录名:容器内目录名 #具名
-v 物理主机路径:容器内路径 #指定路径挂载
4.扩展知识
在挂载是时,可以在指定的容器后面加上 “:ro/rw” ,用来改变容器内目录或文件的读写权限
ro #表示在容器内对挂载目录或文件只读,只可在物理主机的挂载点处进行写入
rw #表示在容器内对挂载目录或文件具有读写权限
来源:freebuf.com 2021-03-24 21:43:26 by: hu666666
请登录后发表评论
注册