一:镜像原理
1:什么是镜像?
镜像是一种轻量级,可执行的独立软件包,用来打包软件环境和基于运行环境开发的软件,
它包含运行某个软件所需的所有内容,包括代码,运行时,库,环境变量和配置文件。
2:什么是UnionFS(联合文件系统):
特性:一次同时加载多个文件系统,但从外面看起来,只能看到一个文件系统,联合加载
会把各层文件系统叠加起来,这样最终的文件系统会包含所有底层的文件和目录。
3:docker镜像加载原理
kernel:表示内核
4:为什么docker镜像要采用这种分层结构呢?
5:特点
Docker镜像都是只读的,当容器启动时,一个新的可写层被加载到镜像的顶部。
这一层通常被称作容器层,容器层之下的都叫做镜像层。
6:docker commit操作
⑴docker commit提交容器副本使之成为一个新的镜像
⑵docker commit -m "提交的描述信息" -a="作者" +容器ID +要创建的目标镜像名:[标签名]
二:Docker容器数据卷介绍
1:什么是Docker容器数据卷
2:如何添加数据卷
⑴直接命令添加
创建或运行容器的时候,使用-v
创建一个数据卷,就是宿主机绝对路径目录
和容器内目录形成链接。
命令:docker run -it -v /宿主机绝对路径目录:/容器内目录 +镜像名
a:例如,我们直接执行下面的命令
docker run -it -v /myDataVolume:/dataVolumeContainer centos
注意: myDataVolume是宿主机的目录,可以不创建好,因为执行命令时
会自动创建
dataVolumeContainer 是镜像centos容器内部的目录,同上可以不先创建。
通过上图可以发现创建执行命令后,容器内部和主机里都生成了对应的目录。
b:下面我们查看数据卷是否挂载成功
我们通过docker inspect +容器ID查看
c:容器和宿主机直接数据共享
①首先我们进入到宿主机的数据卷目录下创建一个文件
②下面我们直接查看容器内的数据卷关联文件
③同理,如果我们在容器内修改数据卷关联目录下的文件,宿主机下的文件
也会同步改变,这个数据卷就实现了宿主机关联目录的数据同步问题。
④注意:如果我们容器被停止了,我们对主机上的同步文件进行了修改,
那么当容器重新启动之后,容器的管理目录是会自动和宿主机
上的关联目录数据同步一次的。
d:命令(带权限)
docker run -it -v /myDataVolume2:/dataVolumeContainer2:ro centos
效果:创建出来的数据卷,宿主机上的关联文件目录是存在读写的权限
的,而容器内部的文件目录是没有写的权限的,我们在宿主机上
进行写的操作生成的文件数据等都是可以同步到容器内关联的目录
下的,而容器内我们是没有写的权限的,无法进行创建文件,修改
文件等操作。
ro:表示read only的含义。
⑵DockerFile方式添加数据卷
a:首先我们在根目录下创建mydocker文件夹并且进入
b:可在Dockerfile中使用VOLUME指令来给镜像添加一个或多个数据卷
注释:比如我们在一个主机上创建了一个容器目录,那么当我们需要打包
容器到其他机器上时,无法保证其他机器上也有这个与容器关联的
宿主机目录,所以可移植行不好,我们无使用上面那种命令方式。
c:file构建,创建Dockerfile文件
d:build后生成镜像
命令:docker build -f +Dockerfile文件路径 -t +名称:版本,如果是当前目录,
就是docker build -t +名称:版本 .
那么只要我们运行刚创建的容器,它就会自动给我们创建两个数据卷
dataVolumeContainer和dataVolumeContainer2
e:运行生成的容器卷
我们在容器内的文件夹中创建一个文件test.txt
那么现在容器内部已经生成了容器卷,宿主机会不会自动生成呢?
我们查看一下刚刚在容器内dataVolumeContainer目录中创建的test1.txt在宿主机对应的
目录中有没有: