Dockerfile是构建Docker镜像的命令文件,文件中的每一行指令会构建为一层的镜像,理解这点很重要,因为这是后续我们做镜像缩减的重要手段。
Dockerfile可以通过 docker build 命令来构建镜像,运行该命令需要指定DockerFile的位置以及要构建的镜像名称。
下面列出我们经常使用的DockerFile命令作为参考:
FROM # 构建自己所需镜像使用的基础镜像
MAINTAINER # 即将构建镜像的作者,格式为: 姓名<邮箱>
ENV # 设置环境变量
USER # 为RUN、CMD、ENTRYPOINT执行命令指定运行用户
WORKDIR # 镜像启动后在哪个工作目录
RUN # 镜像构建时需要的命令
COPY # 拷贝文件或目录到镜像中
ADD # 需要向镜像中注入的配置文件或者压缩包等
VOLUME # 挂载的目录,可以是匿名挂载或者具名挂载
EXPOSE # 声明容器中运行的服务的端口
CMD # 容器启动的时候运行的指令,若写多个的话,只有一个生效,可以运行时在容器外部重新指定
ENTRYPOINT # 与CMD命令类似,但ENTRYPOINT可以在容器外追加命令
ONBUILD # 当构建一个被继承DockerFile,这时会运行ONBUILD命令
简单示例如下:
[root@k8s-node2 ~]# cat Dockerfile
FROM scratch
MANTAINER sean<sean@163.com>
ADD alpine-minirootfs-3.8.4-x86_64.tar.gz
ENV MYPATH /usr/local
WORKDIR $MYPATH
RUN yum -y install httpd
EXPOSE 80
CMD ['echo','$MYPATH']
通过这个Dockerfile我们构建了一个包含httpd的小镜像,然后我们进入到Dockerfile所在的目录,运行如下命令即可构建成功。
[root@k8s-node2 ~]# docker build -t myhttp . # 注意最后的点代表当前目录
是不是很简单?这样我们不论在哪台服务器上需要安装http,直接运行构建的镜像一个简单的http服务就启动了。