DockerFile理解

 

DockerFile是什么

      Docker的使用主要如下步骤:

       1)手动按规则编制DockerFile的文件

       2)使用docker build命令从DockerFile生成docker镜像

       3)执行docker run命令从docker镜像构建docker容器

     DockerFile是用来构建镜像的构建文件,是由一系列命令和参数组成的构建脚本。

     centos的DockerFile例子如下:

FROM scratch
MAINTAINER The CentOS Project <cloud-ops@centos.org>
ADD c68-docker.tar.xz /
LABEL name="CentOS Base Image" \
    vendor="CentOS" \
    license="GPLv2" \
    build-date="2016-06-02"

# Default command
CMD ["/bin/bash"]

        其中,scratch镜像为基础镜像,俗称元镜像,为所有镜像的祖先。

        上述FROM、MAINTAINER、ADD、LABEL、CMD为保留字。保留字都必须为大写字母,并且后面必须至少有一个参数。指令按从上到下执行。每条指令都会创建一个新的镜像层,并对镜像进行提交。

        #代表注释行。

 

DockerFile构建过程

        docker执行的大致流程如下:

        1)docker从基础镜像运行一个容器。

        2)执行一条指令并对容器进行修改。

        3)执行类似docker commit的命令提交,形成一个新的镜像。

        4)docker基于新的镜像运行新的容器。

        5)执行DockerFile中的下一条指令,直至所有指令执行完成。

      

 

DockerFile保留字指令

保留字指令
FROM当前新镜像基于哪个镜像进行构建
MAINTAINER镜像维护者以及邮箱
RUN容器构建时需要运行的命令
EXPOSE容器运行对外暴露的端口号
WORKDIR客户端登录后所默认的工作目录
ENV在构建过程中设置环境变量
ADD

把文件复制到指定目录下

ADD的功能为COPY+unzip

COPY把文件复制到指定目录下
VOLUME容器数据卷,用于保存数据和持久化
CMD

指定一个容器在运行时,要运行的命令。

如果DockerFile中有多条CMD,则只有最后一条生效。

CMD命令的优先级低于docker run中的参数,所以会被替换掉。

ENTRYPOINT

指定一个容器在运行时,要运行的命令。

CMD命令的优先级与docker run中的参数相同,所以命令会追加执行。

ONBUILD当构建一个被继承的DockerFile时运行的命令,也就是说,如果DockerFile中有这一个保留字,并且其子镜像被重新构建时,其会被重新构建。该方法类似于钩子。

           命令也可以用图表示如下:

          

 

DockerFile案例

      1)定制一个centos,实现包含vim和ifconfig组件。

FROM centos

MAINTAINER zhanhai <232549864@qq.com>
ENV mypath /tmp
WORKDIR $mypath

RUN yun -y install vim
RUN yun -y install net-tools

EXPOSE 80
CMD /bin/bash

    完成后执行如下命令构建镜像以及运行容器,build命令的最后的“.”是指当前路径:

docker build -f /tmp/dockerfile2 -t haylen/centos:1.3 .
docker images haylen/centos
docker run -it haylen/centos

     2)定制一个centos,实现可以curl命令下载网页中内容,实践ENTRYPOINT命令。

FROM centos
RUN yum install -y curl
ENTRYPOINT ["curl", "-s", "http://ip.cn"]

      完成后执行如下命令构建镜像以及运行容器。

docker build -f /tmp/dockerfile3 -t haylen/queryip .
docker images haylen/queryip
docker run -it haylen/queryip -i

      在该场景下,使用“-i”,则会在命令“curl -s http://ip.cn”后追加了“-i”,相当于“curl -s http://ip.cn -i”,实现显示请求头的打印。

      3)定制一个centos,实践ONBUILD命令。

      首先创建father的镜像/tmp/dockerfile4:

FROM centos
RUN yum install -y curl
ENTRYPOINT ["curl", "-s", "http://ip.cn"]
ONBUILD RUN echo "father is onbuild..."

      对父镜像进行build:

docker build -f /tmp/dockerfile4 -t fatherimage .

      然后创建子镜像的dockerfile文件dockerfile5:

FROM fatherimage
RUN yum install -y curl
CMD ["curl", "-s", "http://ip.cn"]

      对子镜像进行build:

docker build -f /tmp/dockerfile5 -t sonimage .

      在构建过程中,会有父镜像的构建打印"father is onbuild..."

 

 

 

如果您喜欢这篇文章,别忘了点赞和评论哦!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值