Docker中使用Dockerfile文件构建镜像

一、Docker镜像原理

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容器转为镜像

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命令将压缩文件还原为一个镜像

再次查看可以看到镜像已经还原,如下所示:

三、Dockerfile文件生成镜像

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值