Dockerfile构建Nginx-1.18.0

Dockerfile 每执行一次都会在 docker 上新建一层,过多无意义的层,会造成镜像膨胀过大。

[root@zhupengfei04-docker-centos7-shanghai-area2 ~]# mkdir /docker_demo
[root@zhupengfei04-docker-centos7-shanghai-area2 ~]# cd /docker_demo/
[root@zhupengfei04-docker-centos7-shanghai-area2 docker_demo]# touch Dockerfile
[root@zhupengfei04-docker-centos7-shanghai-area2 docker_demo]# rz # 或者wget http://nginx.org/download/nginx-1.18.0.tar.gz
[root@zhupengfei04-docker-centos7-shanghai-area2 docker_demo]# ll
total 1016
-rw-r--r-- 1 root root       0 Mar  7 16:36 Dockerfile
-rw-r--r-- 1 root root 1039530 Mar  7 16:36 nginx-1.18.0.tar.gz
[root@zhupengfei04-docker-centos7-shanghai-area2 docker_demo]# vim Dockerfile # 编写Dockerfile文件
# base image
FROM centos  # 定制的镜像都是基于 FROM 的镜像,centos 就是定制需要的基础镜像

# MAINTAINER
MAINTAINER xiaoshuai.zhu@ponfey.com

# put nginx-1.18.0.tar.gz into /usr/local/src and unpack nginx
ADD nginx-1.18.0.tar.gz /usr/local/src

# running required command 
RUN yum install -y gcc gcc-c++ glibc make autoconf openssl openssl-devel epel-release  
RUN yum install -y libxslt-devel -y gd gd-devel GeoIP GeoIP-devel pcre pcre-devel net-tools vim wget git bash-completion yum-utils # 执行后面跟着的命令行命令
RUN useradd -M -s /sbin/nologin nginx

# mount a dir to container
VOLUME ["/data"]

# change dir to /usr/local/src/nginx-1.18.0
WORKDIR /usr/local/src/nginx-1.18.0 # WORKDIR 行表示会把接下来的构建步骤都在哪一个相应的具体目录下进行,其类似于 Shell 的 cd

# execute command to compile nginx
RUN ./configure --user=nginx --group=nginx --prefix=/usr/local/nginx --with-file-aio  --with-http_ssl_module  --with-http_realip_module    --with-http_addition_module    --with-http_xslt_module   --with-http_image_filter_module    --with-http_geoip_module  --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_stub_status_module && make && make install

# setup PATH
ENV PATH /usr/local/nginx/sbin:$PATH

# EXPOSE
EXPOSE 80

# the command of entrypoint
ENTRYPOINT ["nginx"]

CMD ["-g"] # 镜像时的默认程序名字

[root@zhupengfei04-docker-centos7-shanghai-area2 docker_demo]# docker build -t centos_nginx:v1 .  # 有了 Dockerfile 之后,就可以通过 docker build 命令构建出所需要的应用。构建出的结果存储在本地,一般情况下,镜像构建会在打包机或者其他的隔离环境下完成,开始进行构建
[root@zhupengfei04-docker-centos7-shanghai-area2 docker_demo]# docker images
REPOSITORY     TAG       IMAGE ID       CREATED          SIZE
centos_nginx   v1        2e130e36863d   53 seconds ago   671MB
centos         latest    300e315adb2f   2 months ago     209MB
[root@zhupengfei04-docker-centos7-shanghai-area2 docker_demo]# docker run -d -p 18080:80 --name=nginx1 centos_nginx:v1 -g "daemon off;" # 利用该镜像启动一个container容器
8e2127bcb16eb4914de3b66c1e58401fd2e3c99c3c6d5d31b9d8ba90c97fb5b3
[root@zhupengfei04-docker-centos7-shanghai-area2 docker_demo]# docker ps -l # 查看启动的容器状态
CONTAINER ID   IMAGE             COMMAND                  CREATED          STATUS          PORTS                   NAMES
8e2127bcb16e   centos_nginx:v1   "nginx -g 'daemon of…"   39 seconds ago   Up 38 seconds   0.0.0.0:18080->80/tcp   nginx1 
[root@zhupengfei04-docker-centos7-shanghai-area2 docker_demo]# docker exec -it 8e2127bcb16e /bin/bash # 到容器内查看是否存在/data

终端浏览器访问

上一篇
下一篇