2.6.3 Dockerfile常用命令及编写
Dockerfile是按照Docker Build语法约定的顺序结构规则脚本文件。通过Dockerfile的编写可以实现Docker镜像的自动化制作,本章所介绍的编译过程均可被编写在Dockerfile中,使用Docker命令打包为Nginx的Docker镜像。
Dockerfile常用命令如下。
1)FROM用于指定构建当前镜像的基础镜像名,使用方法如下。
FROM centos
2)MAINTAINER用于填写作者声明的描述信息,使用方法如下。
MAINTAINER Nginx Dockerfile Write by John.Wang
3)ADD命令会向Image中添加文件,支持文件、目录、URL的源,使用方法如下。
ADD /tmp/init_nginx.sh /usr/local/nginx/sbin/
4)COPY用于向镜像内复制文件夹,使用方法如下。
COPY . /tmp
5)ENV设置Container启动后的环境变量,使用方法如下。
ENV PATH $PATH:/usr/local/nginx/sbin
6)EXPOSE设置Container启动后对外开放的端口,它只相当于一个防火墙开放端口的概念,与实际运行的服务无关,使用方法如下。
EXPOSE 8080
7)RUN用于在制作Image时执行指定的脚本或shell命令,使用方法如下。
RUM yum -y install net-tools
8)USER设置运行Image或Container的系统用户,使用方法如下。
USER nginx:nginx
9)VOLUME定义Image挂载点,该挂载点可被其他Container使用,且目录中的内容是共享的,将会同步更新,使用方法如下。
VOLUME ["/data1","/data2"]
10)WORKDIR设置CMD参数指定命令的运行目录,使用方法如下。
WORKDIR ~/
11)CMD命令是设定于Container启动后执行的命令,可被外部docker run命令参数覆盖,使用方法如下。
CMD "Hello Nginx"
12)ENTRYPOINT命令是设定于Container启动后执行的命令,不可被外部docker run命令参数覆盖。
ENTRYPOINT /usr/local/nginx/sbin/init_nginx.sh
现在,可以按照Dockerfile的命令格式编写Dockerfile了,基础镜像选用CentOS 7,Nginx选用Nginx的扩展版本OpenResty 1.15.8.2。
Nginx镜像Dockerfile脚本如下:
FROM centos:centos7 MAINTAINER Nginx Dockerfile Write by John.Wang RUN yum -y install epel-release && yum -y install wget gcc make pcre-devel \ zlib-devel openssl-devel libxml2-devel libxslt-devel luajit GeoIP-devel \ gd-devel libatomic_ops-devel luajit-devel perl-devel perl-ExtUtils-Embed RUN cd /tmp && wget https://openresty.org/download/openresty-1.15.8.2.tar.gz && \ tar zxmf openresty-1.15.8.2.tar.gz && \ cd openresty-1.15.8.2 && \ ./configure \ --with-threads \ --with-file-aio \ --with-http_ssl_module \ --with-http_v2_module \ --with-http_realip_module \ --with-http_addition_module \ --with-http_xslt_module=dynamic \ --with-http_image_filter_module=dynamic \ --with-http_geoip_module=dynamic \ --with-http_sub_module \ --with-http_dav_module \ --with-http_flv_module \ --with-http_mp4_module \ --with-http_gunzip_module \ --with-http_gzip_static_module \ --with-http_auth_request_module \ --with-http_random_index_module \ --with-http_secure_link_module \ --with-http_degradation_module \ --with-http_slice_module \ --with-http_stub_status_module \ --with-stream=dynamic \ --with-stream_ssl_module \ --with-stream_realip_module \ --with-stream_geoip_module=dynamic \ --with-libatomic \ --with-pcre-jit \ --with-stream_ssl_preread_module && \ gmake && gmake install ENV PATH $PATH:/usr/local/nginx/sbin RUN ln -s /usr/local/openresty/nginx /usr/local/nginx RUN ln -sf /dev/stdout /usr/local/nginx/logs/access.log &&\ ln -sf /dev/stderr /usr/local/nginx/logs/error.log EXPOSE 80 ENTRYPOINT ["nginx", "-g", "daemon off;"]
在Dockerfile文件的同一目录下,执行如下命令构建Nginx的Dokcer镜像。
docker build -t nginx:v1.0 .
在脚本执行结束后,当尾行出现“Successfully tagged nginx:v1.0”时表示Dokcer镜像已经构建成功,可以通过Docker命令docker images查看镜像是否已经存在于本地的镜像仓库中,查询结果如图2-3所示。
图2-3 本地镜像仓库中的所有Docker镜像