Dockerfile文件和build构建命令操作介绍
1、介绍
在Docker中创建镜像最常用的方式,就是使用Dockerfile。Dockerfile是一个Docker镜像的描述文件,我们可以理解成火箭发射的A、B、C、D…的步骤。Dockerfile其内部包含了一条条的指令,每一条指令构建一层,因此每一条指令的内容,就是描述该层应当如何构建。
下述文章结构
Dokcerfile操作基础介绍
Dockerfile的常用命令
#基于centos镜像
FROM centos
#维护人的信息
MAINTAINER The CentOS Project <303323496@qq.com>
#安装httpd软件包
RUN yum -y update
RUN yum -y install httpd
#开启80端口
EXPOSE 80
#复制网站首页文件至镜像中web站点下
ADD index.html /var/www/html/index.html
#复制该脚本至镜像中,并修改其权限
ADD run.sh /run.sh
RUN chmod 775 /run.sh
#当启动容器时执行的脚本文件
CMD ["/run.sh"]
Dockerfile的脚本命令介绍
命令 | 解释 |
---|---|
FROM | 基础镜像,指明当前新镜像是哪个镜像的 |
MAINTAINER | 镜像维护者的姓名和邮箱 |
RUN | 容器构建时需要运行的命令 |
EXPOSE | 当前容器对外暴露出的端口 |
WORKDIR | 指定在创建容器后,终端默认登录进来的工作目录,即一个登录进来后的落脚点 |
ENV | 添加环境变量到容器中 |
ADD | 将宿主机目录下的文件拷贝进镜像且ADD命令会自动处理URL和解压tar压缩包 |
COPY | 类似ADD,拷贝文件和目录到镜像中,但不解压。将从构建上下问目录中<源路径>的文件/目录复制到新的一层镜像内的<目标路径>位置---------(1)CORY src dest(2)COPY [“src”,“dest”] |
VOLUME | 容器数据卷,用于数据保存和持久工作 |
CMD | 指定一个容器时要运行的命令。Dockerfile中可以有多个CMD执行,但后面的CMD命令会覆盖前面的,最终只有最后一个生效,CMD会被docker run之后的参数替换 |
ENTRYPOINT | 指定一个容器启动时要运行的命令。其目的和CMD一样,都是在指定容器启动程序及参数,但该命令可有多个且不会覆盖,即为追加效果。 |
ONBUILD | 用于该Dockerfile被其他Dockerfile继承时启动的触发命令,当父镜像在被子镜像继承成后父镜像的onbuild将会被触发 |
2、构建示例
首先编写Dockerfile文件
Dockerfile
FROM centos
MAINTAINER zzyy<zzyy@qq.com>
ENV MYPATH /usr/local
WORKDIR $MYPATH
RUN yum -y install vim
RUN yum -y install net-tools
EXPOSE 80
CMD echo $MYPATH
CMD echo "success---------ok"
CMD /bin/bash
上述脚本命令为:
从centos获取基础镜像,
标明维护人的姓名和邮箱,
添加环境变量MYPATH=/usr/local,
在将该镜像生成容器实例话后可直接跳转到/usr/local目录下,
运行下载vim和net-tools命令,
开放80端口,
在输入命令行指令echo $MYAPTH、echo "success---------ok"和/bin/bash,而最后一个CMD将覆盖上面的CMD最终生效的为/bin/bash,即载入容器后运行bash。
docker build 常用命令
Options:-f PATH
指定要使用的Dockerfile路径,若当前路径下有Dockerfile文件,则会自动默认加载此文件
Options:-t name:tag
镜像的名字及标签,通常 name:tag 或者 name 格式;可以在一次构建中为一个镜像设置多个标签。
docker build -f /mydocker/Dockerfile -t mycentos:1.3 .
开始构建,直到出现下图
则构建成功
查看到镜像存在
再使用mycentos:1.3构建容器,发现构建完后直接进入,到/usr/local。同时,可用vim进行编译,也可以用ifconfig查询网卡地址。
通过docker history imagesID 可查看到镜像的构建历史,发现采用的是堆栈的形式,从Dockerfile文件中由上向下顺着加载放到堆栈中,而在执行过程中,则是从栈顶执行到栈尾,即Dockerfile文件中由下向上倒着执行。
ONBUILD命令
创建一个带ONBUILD命令的镜像,即该镜像可作为父镜像来被其余镜像继承。
构建一个继承myip_father(Dockerfile4构造的镜像)
当使用Dockerfile5构建镜像时,由于继承了Dockerfile4构建的镜像,则触发了Dockerfile4的ONBUILD命令,执行了RUN echo"father images onbuild---------886",将其输出到了屏幕上。
参考文章1:你必须知道的Dockerfile
参考文章2:Docker build命令
参考视频:尚硅谷Dockerfile