不求甚解

此博客为个人学习之用,如与其他作品雷同,纯属巧合。

导航

docker学习笔记二

Posted on 2021-03-03 09:31  三年三班王小朋  阅读(37)  评论(0编辑  收藏  举报

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也可访问。 

结论:容器之间配置信息的传递,数据卷的生命周期一直持续到没有容器使用它为止。

容器就是一个视图隔离、资源可限制、独立文件系统的进程集合。

容器运行时所需要的所有的文件集合称之为容器镜像

小结:容器就是和系统其它部分隔离开来的进程集合,这里的其他部分包括进程、网络资源以及文件系统等。而镜像就是容器所需要的所有文件集合,其具备一次构建、到处运行的特点。