制作小体积的docker镜像nginx案例—— 筑梦之路

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

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值