다른 아이디어를 시도했지만 우리의 요구 사항을 충족하지 못했습니다. 아이디어는 하위 정적 웹 애플리케이션을위한 기본 nginx 이미지를 만드는 것입니다. 보안, 최적화 및 표준화 이유로, 기본 이미지는 할 수 있어야 RUN
자식 이미지에 의해 추가 된 디렉토리에서 명령. 기본 이미지는 하위 이미지에 의해 추가되는 디렉토리를 제어하지 않습니다. 가정 아동 이미지가 뜻 COPY
에서 자원 곳 COMMON_DEST_ROOT
.
이 방법은 해킹이지만, 아이디어는 기본 이미지가 지원입니다 COPY
자식 이미지를 추가 한 N에 디렉토리에 대한 지시를. ARG PLACEHOLDER_FILE
그리고 ENV UNPROVIDED_DEST
만족하는 데 사용됩니다 <src>
및 <dest>
모든 요구 사항 COPY
명령이 없습니다 필요합니다.
#
# base-image:01
#
FROM nginx:1.17.3-alpine
ENV UNPROVIDED_DEST=/unprovided
ENV COMMON_DEST_ROOT=/usr/share/nginx/html
ONBUILD ARG PLACEHOLDER_FILE
ONBUILD ARG SRC_1
ONBUILD ARG DEST_1
ONBUILD ARG SRC_2
ONBUILD ARG DEST_2
ONBUILD ENV SRC_1=${SRC_1:-PLACEHOLDER_FILE}
ONBUILD ENV DEST_1=${DEST_1:-${UNPROVIDED_DEST}}
ONBUILD ENV SRC_2=${SRC_2:-PLACEHOLDER_FILE}
ONBUILD ENV DEST_2=${DEST_2:-${UNPROVIDED_DEST}}
ONBUILD COPY ${SRC_1} ${DEST_1}
ONBUILD COPY ${SRC_2} ${DEST_2}
ONBUILD RUN sh -x \
#
# perform operations on COMMON_DEST_ROOT
#
&& chown -R limited:limited ${COMMON_DEST_ROOT} \
#
# remove the unprovided dest
#
&& rm -rf ${UNPROVIDED_DEST}
#
# child image
#
ARG PLACEHOLDER_FILE=dummy_placeholder.txt
ARG SRC_1=app/html
ARG DEST_1=/usr/share/nginx/html/myapp
FROM base-image:01
이 솔루션에는 PLACEHOLDER_FILE
지원되는 더미 및 하드 코딩 된 수의 COPY 명령과 같은 명백한 단점이 있습니다 . 또한 COPY 명령어에 사용되는 ENV 변수를 제거 할 방법이 없습니다.