Docker镜像原理
镜像是一种轻量级、可执行的独立软件包,用来打包软件运行环境和基于运行环境开发的软件,它包含运行某个软件所需要的全部内容,包括代码、运行时、库、环境变量和配置文件
UnionFS(联合文件系统):Union文件系统(unionFS)是一种分层、轻量级并且高性能的文件系统,它支持对文件系统修改一次特教来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下,unionFS文件系统是Docker镜像的基础。镜像可以通过分层来进行继承,基础镜像(没有父镜像),可以制作各种具体的应用镜像。
特性:一次同时加载多个文件系统,但从外面看起来只能看到一个文件系统,联合加载会把各层文件系统叠加起来,这样最终文件系统会包含所有底层的文件和目录。
Docker镜像加载原理:
docker的镜像实际上由一层一层的文件系统组成,这种层级的文件系统UnionFs。
bootfs主要包含bootloader和kernel,bootloader主要是加载引导kernel,linux刚启动会加载bootfs文件系统,在Docker镜像的最底层是bootfs。这一层与我们的典型是Linux/Unix系统是一样的,包含boot加载器和内核。当boot加载完成之后整个内核都在内存中了,此时内存的使用权已由bootfs转交给内核,此时系统也会卸载bootfs
rootfs,在bootfs之上,包含的就是典型Linux系统中的/dec,/proc,/bin,/etc等标准目录和文件。rootfs就是各种不同的操作系统发行版,比如Ubantu,centos等等。
为什么分层,最大好处就是-共享资源。比如:有多个镜像都从相同的base镜像构建而来,那么宿主机只需在磁盘上保存一份base镜像。同时内存中也只需加载一份base镜像,就可以为所有容器服务了。而且惊醒的每一曾都可以被共享。
Docker镜像commit
提交容器副本使之成为一个新的镜像。
docker commit -m="提交描述信息" -a=“作者” 容器ID 要创建的目标镜像名:[标签名]
docker commit -a=d"zzyy" -m="tomcat withoutdocs" atguigu/tomcat02:1.2
Docker容器数据卷
docker容器产生的数据,如果不通过docker commit 生产新的镜像,使得数据作为镜像的一部分保存下来,那个当容器删除后,数据自然也就没有了,为了能保存数据在docker中保存数据 使用容器数据卷。容器持久化和容器间继承+数据共享。相当于外置持久硬盘。
特点
1、数据卷可在容器之间共享或者重用数据
2、卷中的更改可以直接生效
3、数据卷中的更改不会包含在镜像的更新中
4、数据卷的生命周期一直持续到没有容器使用它为止
容器数据卷的添加
1.命令添加
docker run -it -v /宿主机绝对露禁目录:/容器内目录 镜像名
docker run -it -v /myDatevolume:/tmp centos
查看是否挂载成功
docker inspect 容器id
"HostConfig": { "Binds": [ "/myDatevolume:/tmp" ],
容器和宿主之间数据共享
容器停止退出后,主机修改后数据是否同步
命令(带权限) 只有主机能进行修改文件,容器内不能操作 ro代表reayonly
docker run -it -v /宿主机绝对路径目录:/容器内目录:ro 镜像名
docker run -it -v /myDatevolume:/tmp:ro centos
2.DockerFile添加
Docker image ==>DockerFile
根目录下新建docker文件夹并进入
可在Dockerfile中使用VOLUME指令来给镜像添加一个或多个数据卷
VOLUME["/dataVolumecontainer","/dataVolumeContainer2","/dataVolumeContainer3"]
docker run
dockerfile构建
第一步: vim Dockerfile
#volume test FROM centos VOLUME ["/dataVolumeContainer1","/dataVolumeContainer2"] CMD echo "finished,-------success1" CMD /bin/bash
第二部:docker build 后生成镜像 获得一个新镜像zzyy/centos
docker build -f /mydocker/Dockerfile -t zzyy/centos .
第三部: docker run -it -name 容器名 镜像名
docker run -it --name dc01 zzyy/centos
容器数据卷 特性实例
Docker容器数据卷:命名的容器挂载数据卷,其他容器通过挂载这个(父容器)实现数据共享,挂载数据卷的容器,称之为数据卷容器。
docker run -it --name dc01 zzyy/centos
docker run -it --name dc02 --volumes-from dc01 zzyy/centos
docker run -it --name dc03 --volumes-from dc01 zzyy/centos
1、删除01,dc02修改后,dc03可访问。
2、删除02后,dc03可访问。
3、新建dc04继承dc03后再删除,dc03也可访问。
结论:容器之间配置信息的传递,数据卷的生命周期一直持续到没有容器使用它为止。
容器就是一个视图隔离、资源可限制、独立文件系统的进程集合。
容器运行时所需要的所有的文件集合称之为容器镜像
小结:容器就是和系统其它部分隔离开来的进程集合,这里的其他部分包括进程、网络资源以及文件系统等。而镜像就是容器所需要的所有文件集合,其具备一次构建、到处运行的特点。