Docker镜像是什么?
是一种轻量级、可执行的独立软件包,用来打包软件运行环境和基于运行环境开发的软件,它包含运行某个软件所需的所有内容,包括代码、运行时、库、环境变量和配置文件。
UnionFS(联合文件系统)
是一种分层、轻量级并且高性能的文件系统,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下。Union文件系统是Docker镜像的基础。镜像可以通过分层来进行继承,基于基础镜像,可以制造各种具体的应用镜像。
特性:一次同时加载多个文件系统,但从外面来看,只能看到一个文件系统,联合加载会把各层文件系统叠加起来,这样最终的文件系统会包含所有底层的文件和目录
Docker镜像加载原理
实际上由一层一层的文件系统组成,这种层级的文件系统UnionFS。
bootfs(boot file system)主要包含bootloader和kernel,bootloader主要引导加载kernel,Linux启动时会加载bootfs文件系统,在Docker镜像的最底层就是bootfs。这一层和我们典型的Liunx/Unix系统是一样的,包含boot加载器和内核。当boot加载完成之后整个内核就都在内存中了,此时内存的使用权已由bootfs转交给内核,此时系统也会卸载bootfs。
rootfs(root file system),在bootfs之上。包含的就是典型的/dev,/proc,/bin,/etc等标准目录和文件。rootfs就是各种不同的操作系统发行版,比如Centos ,Ubuntu等等。
Docker镜像特点
Docker镜像都是只读的。
当容器启动时,一个新的可写层被加载到镜像的顶部。这一层通常被称为“容器层”,“容器层”之下的都叫“镜像层”。
Docker commit
提交容器副本使之成为一个新的镜像
docker commit -m=“提交的描述信息” -a=“作者” 容器ID 要创建的目标镜像名:[标签名]
Docker容器数据卷
容器之间共享数据,为了保存数据持久化使用数据卷
特点:
1:数据卷可在容器之间共享或重用数据
2:卷中的更改不会包含在镜像的更新中
3:卷中的更改可以直接生效
4:数据卷的生命周期一直持续到没有容器使用它为止
数据卷在容器内添加
1.直接命令添加
docker run -it -v /宿主机绝对路径目录:/容器内目录 镜像名
执行
docker run -it -v /myDataVolume:/dataVolumeContainer centos
出现了这个文件夹
宿主机和容器内创建了相应的文件夹
验证挂载成功
docker inspect 49e11a6aa287
2.dockerFile添加
-
根目录下新建mydocker文件夹
-
使用VOLUME指令来给镜像添加一个或多个数据卷
-
File构建(Dockerfile)
FROM centos
VOLUME ["/dataVolumnContainer1","/dataVolumnContainer2"]
CMD echo “finished,--------success1”
CMD /bin/bash
-
build后生成镜像
-docker build -f /mydocker/Dockerfile -t wzh/centos .
-
run容器
在宿主机中会有默认的数据卷
容器间传递共享(–volumes-from)
命名的容器挂载数据卷,其他容器通过挂载这个(父容器)实现数据共享,挂载数据卷的容器,称之为容器数据卷
docker run -it --name dc02 --volumes-from dc01
只要容器还有使用的,剩下的容器都可以全部备份数据卷