重学Docker (3)

笔者了解到的图形化管理工具是Portainer,也是在Docker上运行的程序,建议跟着仓库文档走

# 必须挂载 $ docker run -d -p 9000:9000 --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer-ce

重学Docker

具体各位去摸索一下把~





8. 镜像 image

镜像一种轻量级、可执行的独立软件包,用来打包软件的运行环境和基于运行环境开发的技术。它包含运行某个软件需要的所有内容(包括代码、运行库、环境变量和配置文件)


8.1 联合文件系统

联合文件系统(UnionFS):是一个分层的、轻量级并且高性能的文件系统,它支持对文件系统的修改作为一次提交来一层层叠加(类似Git),同时可以将不同目录挂载到同一虚拟文件系统下(-v 文件挂载)


UnionFS是Docker镜像的基础,镜像可以通过分层来进行继承(分层可以共用),基于基础镜像可以制作各种具体的应用镜像

一次同时加载多个文件系统,但从外面看只能看到一个文件系统,联合加载会把各层文件系统叠加起来,这样最终的文件系统会包含所有的底层文件和目录


8.2 镜像加载原理

Docker使用UnionFS进行分层,底层是bootfs文件系统(bootloader加载最基础的内核、kernvel)

bootfs的上一层是rootfs,也就是 /dev,/bin,/etc等标准目录和文件

不同的镜像中有相同的分层,那宿主机只需在磁盘、内存中保存一份,这些镜像共享这些分层



8.3 镜像层的叠加

假如我们在Docker上安装tomcat,首先底层是bootfs层,然后在上面安装centos (rootfs),意思是修改了文件系统,那就会叠加一层文件系统、依次类推,还有jdk8层、tomcat层。最终打包成tomcat这个镜像,对外则是一个整体

重学Docker

镜像都是只读的,当容器启动时,一个新的可写层被加载到镜像的顶部(容器层,之下叫镜像层)

若我们在容器层删除了文件,那么会生成一个wihteout文件,将对应的下层文件隐藏掉



8.4 提交生成镜像

上面tomcat的案例我们已经修改过webapps的内容,因修改了联合文件系统,所以可作为一次提交来层层叠加

# 提交到本地仓库,没有add行为了 # name[:tag] 是 自己命名的 镜像名[tag] 作为镜像名 $ docker commit -m "提交信息" -a "作者" id name[:tag] # eg: $ docker commit -m "add webapps files" -a "Howl" 9c8524bxxxx mytomcat:1.0 # 然后就可看到自己打包的镜像了 $ docker images



9. 数据卷

数据卷(volume)是由docker挂载到容器(不属于UFS)存在于一个或多个容器中的目录或文件,因此能绕过UFS一些用于持续存储或共享数据的特性


卷的出现是为了数据的持久化和同步操作,其完全独立于容器的生存周期,因此在删除容器时其挂载的数据卷不会被删除。简单来说:使容器和宿主机共享独立于docker生命周期的数据、亦或者:独立于docker生命周期的目录挂载


特点:

数据卷可以容器之间共享或重用

卷中的更改直接生效

卷中的更改不会包含在镜像的更新中

数据卷的生命周期持续到没有容器使用为止



9.1 具名、匿名挂载

数据卷的默认地址 /var/lib/docker/volumes/xxx

$ docker run -v /宿主机绝对路径:/容器内目录 name[tag] # 具名挂载(不加"http://www.likecs.com/",在默认地址下起个名字而已) $ docker run -v /容器内目录 name[tag] # 匿名挂载,宿主机用默认地址(会生成唯一的32位id) # 还有只读,读写权限 $ docker run -v /宿主机绝对路径:/容器内目录:ro|rw name[tag] # 还有先创建数据卷,后面再挂载 $ docker volume create mysql_data $ docker run -d -p 3306:3360 -v mysql_data:/root/mysql_data

9.2 Dockerfile挂载

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zzspdj.html