Dcokerfile内容如下:
FROM alpine:3.14 as relay_nginx
RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/' /etc/apk/repositories && \
apk add gcc libgcc libc-dev zlib-dev pcre-dev wget make && \
wget -c http://nginx.org/download/nginx-1.22.0.tar.gz && \
tar xf nginx-1.22.0.tar.gz && \
cd nginx-1.22.0 && \
./configure --prefix=/usr/local/nginx && \
make && \
make install && \
cd ../ && \
rm -rf nginx-1.22.0* /var/cache/apk/*
FROM alpine:3.14 as alpine_nginx
RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/' /etc/apk/repositories && \
apk add zlib-dev pcre-dev && \
rm -rf /var/cache/apk/*
COPY --from=relay_nginx /usr/local/nginx /usr/local/nginx
EXPOSE 80
EXPOSE 443
ENTRYPOINT ["/usr/local/nginx/sbin/nginx","-g","daemon off;"]
构建命令:
docker build -t alpine_nginx:1.22.0 .
说明:
构建体积比较小的镜像,除了减少构建层外,最重要的还是使用自身体积小的基础镜像
可见dockerfile文件内有两个阶段,第一个阶段是编译nginx阶段,第二个阶段是将第一阶段的成果拿来用,只是运行nginx,因此镜像体积就小得多
这里只是一个案例,主要还是要理解其中的思想和思路。