赞
踩
Linux文件系统由bootfs和rootfs两部分组成
bootfs:包含bootloader(引导加载程序)和kernel(内核)
rootfs:root文件系统,包含的就是典型Linux系统中的/dev,/proc,/bin,/etc等标准目录和文件
不同的linux发行版,bootfs基本一样,而rootfs不同,如ubuntu、centos等
Docker镜像是由特殊的文件系统叠加而成,最底端是bootfs,并使用宿主机的bootfs;第二层是root文件系统rootfs,称为base image(基础镜像);然后在往上可以叠加其它的镜像文件,如下为tomcat镜像的结构层次图:
上述这种叠加镜像的操作称为“统一文件系统(Union File System)”,该技术能够将不同的层整合成一个文件系统,为这些层提供了一个统一的视角,这样就隐藏了多层的存在,在用户的角度看来,只存在一个文件系统。
一个镜像可以放在另一个镜像的上面,位于下面的镜像称为父镜像,最底部的镜像称为基础镜像。
只读镜像:如上图所示,存在三个只读镜像:镜像(tomcat)、镜像(JDK)、root基础镜像(centos/ubuntu),只读的意思是说这三个镜像是不能被修改,修改了以后便不能被其它镜像所复用。
只读镜像是不能被镜像的,但是如果真的想更改tomcat镜像,应该怎么办?
答:当一个镜像启动容器时,Docker会在最顶层加载一个读写的文件系统作为容器。如果想更改tomcat镜像,则可以先启动tomcat容器,然后在此容器里面做修改,修改完了以后再把容器打包为一个新的镜像。
Docker镜像这种分层叠加的文件系统的好处是:复用
docker commit 容器id 自定义的镜像名称:自定义版本号
docker save -o 压缩文件名称 自定义的镜像名称:自定义版本号
docker load -i 压缩文件名称
应用背景:开发人员将容器转化为镜像,然后将该镜像打包为压缩文件,提供给测试人员。测试人员将压缩文件加载为镜像,创建并启动容器进行测试。
以下为实操部分:
第一步:使用docker commit a0f9f284899a new_tomcat:1.0命令将tomcat容器转化为镜像
提示:通过docker commit命令生成镜像时,原容器的挂载目录中的内容不会放到新的镜像中
第二步:使用docker save -o new_tomcat.tar new_tomcat:1.0命令将镜像压缩为文件
第三步:删除已存在的new_tomcat镜像
第四步:通过docker load -i new_tomcat.tar命令将压缩文件还原为一个镜像
再次查看可以看到镜像已经还原,如下所示:
1.Dockerfile的概念
Dockerfile是一个文本文件,包含了一条条的指令。每一条指令构建一层,基于基础镜像,最终构建出一个新的镜像。
对于开发人员:可以为开发团队提供一个完全一致的开发环境。
对于测试人员:可以直接拿开发时所构建的镜像或者通过Dockerfile文件构建一个新的镜像开始工作了。
对于运维人员:在部署时,可以实现应用的无缝移植。
2.Dockerfile的关键字
FROM:指定父镜像,指定dockerfile基于哪个image构建
MAINTAINER:用来标明这个dockerfile谁写的
WORKDIR:定义默认的工作目录
RUN:执行一段命令,默认是/bin/bash,格式为:RUN command 或者RUN ["command","param1","param2"]
CMD:容器启动时执行
3.Dockerfile自定义centos镜像
案例需求:自定义centos7镜像,要求:1.默认登录路径为/usr、2.可以使用vim
第一步:创建centos_dockerfile文件
touch centos_dockerfile
第二步:往centos_dockerfile文件中写入下述内容
- FROM centos:7
- MAINTAINER 123456789@163.com
- RUN yum install -y vim
- WORKDIR /usr
- CMD /bin/bash
第三步:使用docker build命令通过dockerfile文件来构建镜像
docker build -f ./centos_dockerfile -t test_centos:1 .
第四步:查看使用dockerfile构建的镜像并创建启动容器
docker images
docker run -it --name=c2 test_centos:1
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。