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,因此镜像体积就小得多
这里只是一个案例,主要还是要理解其中的思想和思路。
alpine-nginx.tar.gz-Linux文档类资源-CSDN下载
FROM alpine:latest as relay_nginx
RUN mkdir -p /MYAPP/ && sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/' /etc/apk/repositories && apk update && \
apk add --no-cache ca-certificates && \
apk add --no-cache curl bash tzdata && \
apk add --no-cache \
gcc \
libc-dev \
make \
openssl-dev \
pcre-dev \
zlib-dev \
linux-headers \
curl \
gnupg \
libxslt-dev \
gd-dev \
geoip-dev \
wget && \
cd /MYAPP/ && \
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=/MYAPP/nginx --with-compat --with-file-aio --with-threads --with-http_addition_module --with-http_auth_request_module --with-http_dav_module --with-http_flv_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_mp4_module --with-http_random_index_module --with-http_realip_module --with-http_secure_link_module --with-http_slice_module --with-http_ssl_module --with-http_stub_status_module --with-http_sub_module --with-http_v2_module --with-mail --with-mail_ssl_module --with-stream --with-stream_realip_module --with-stream_ssl_module --with-stream_ssl_preread_module --with-ipv6 && \
make && make install && \
rm -rf nginx-1.22.0* /var/cache/apk/*
FROM alpine:latest as alpine_nginx
RUN mkdir -p /MYAPP && sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/' /etc/apk/repositories && \
apk add zlib-dev pcre-dev bash curl && apk add --no-cache ca-certificates && \
apk add --no-cache tzdata && \
cp -rf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && \
rm -rf /var/cache/apk/*
COPY --from=relay_nginx /MYAPP/nginx /MYAPP/nginx
ENV PATH /MYAPP/nginx/sbin:$PATH
EXPOSE 80 443
ENTRYPOINT ["/MYAPP/nginx/sbin/nginx","-g","daemon off;"]
# 构建多CPU架构的nginx镜像
# 前提条件:
# 1. docker-ce版本19.03+
# 2. 内核版本4.8+
# 3. 基础镜像是多架构的
docker buildx create --use --name=mybuilder-cn --driver docker-container --driver-opt image=dockerpracticesig/buildkit:master
docker buildx build --platform=linux/amd64,linux/arm64 -t nginx:1.23.2-alpine-root -f Dockerfile . --push
# Dockerfile示例
FROM nginx:1.23.2-alpine
RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/' /etc/apk/repositories && apk update && \
apk add --no-cache ca-certificates fping tzdata bash curl wget vim && \
rm -rf /var/cache/apk/*
COPY nginx.conf /etc/nginx/
ENV TZ=Asia/Shanghai \
LANG=C.UTF-8
EXPOSE 80 443