Skip to content

Commit ed1042a

Browse files
committed
feat(docker): improve debian-dev Dockerfile build caching
Optimize Docker layer caching to significantly reduce rebuild time when only source code changes: - Separate dependency installation from source code copy - Build brotli in build stage instead of runtime stage - Copy only dependency-related files before running make deps Signed-off-by: Sihyeon Jang <sihyeon.jang@navercorp.com>
1 parent 00f18aa commit ed1042a

File tree

1 file changed

+22
-10
lines changed

1 file changed

+22
-10
lines changed

docker/debian-dev/Dockerfile

Lines changed: 22 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -22,27 +22,38 @@ ARG CODE_PATH
2222
ENV DEBIAN_FRONTEND=noninteractive
2323
ENV ENV_INST_LUADIR=/usr/local/apisix
2424

25-
COPY ${CODE_PATH} /apisix
26-
2725
WORKDIR /apisix
2826

27+
ARG INSTALL_BROTLI=./install-brotli.sh
28+
2929
RUN set -x \
3030
&& apt-get -y update --fix-missing \
3131
&& apt-get install -y \
3232
make \
3333
git \
3434
sudo \
3535
libyaml-dev \
36-
&& ls -al \
37-
&& make deps \
36+
cmake \
37+
wget \
38+
unzip
39+
40+
COPY ${CODE_PATH}/Makefile ${CODE_PATH}/apisix-master-0.rockspec ${CODE_PATH}/.requirements /apisix/
41+
COPY ${CODE_PATH}/utils/install-dependencies.sh /apisix/utils/
42+
43+
RUN make deps \
3844
&& mkdir -p ${ENV_INST_LUADIR} \
39-
&& cp -r deps ${ENV_INST_LUADIR} \
40-
&& make install
45+
&& cp -r deps ${ENV_INST_LUADIR}
46+
47+
COPY ${INSTALL_BROTLI} /install-brotli.sh
48+
RUN chmod +x /install-brotli.sh && /install-brotli.sh
49+
50+
COPY ${CODE_PATH} /apisix
51+
52+
RUN make install
4153

4254
FROM debian:bullseye-slim
4355

4456
ARG ENTRYPOINT_PATH=./docker-entrypoint.sh
45-
ARG INSTALL_BROTLI=./install-brotli.sh
4657
ARG CHECK_STANDALONE_CONFIG=./check_standalone_config.sh
4758

4859
# Install the runtime libyaml package
@@ -54,11 +65,12 @@ RUN apt-get -y update --fix-missing \
5465
COPY --from=build /usr/local/apisix /usr/local/apisix
5566
COPY --from=build /usr/local/openresty /usr/local/openresty
5667
COPY --from=build /usr/bin/apisix /usr/bin/apisix
68+
COPY --from=build /usr/local/brotli /usr/local/brotli
5769
COPY --chown=nobody:root ui/ /usr/local/apisix/ui/
5870

59-
COPY ${INSTALL_BROTLI} /install-brotli.sh
60-
RUN chmod +x /install-brotli.sh \
61-
&& cd / && ./install-brotli.sh && rm -rf /install-brotli.sh
71+
RUN echo /usr/local/brotli/lib | tee /etc/ld.so.conf.d/brotli.conf \
72+
&& ldconfig \
73+
&& ln -sf /usr/local/brotli/bin/brotli /usr/bin/brotli
6274

6375
ENV PATH=$PATH:/usr/local/openresty/luajit/bin:/usr/local/openresty/nginx/sbin:/usr/local/openresty/bin
6476

0 commit comments

Comments
 (0)