我正在使用
ruby:3.1.3-slim-bullseye
来 dockerize Rails 7 应用程序。
图像大小约为2Gb,没有明确原因。
我正在使用使用 vips 的主动存储(这就是我使用 libvips-dev 的原因)。
我尝试用
docker history
检查图像层,
输出表明与这些 docker 命令相关的两个巨大层。
RUN bash -c "set -o pipefail && apt-get install -y --no-install-recommends build-essential curl git libpq-dev "
RUN bash -c "set -o pipefail && apt-get install -y libvips-dev"
docker history my_image --no-trunc
、的输出
..... other entries
sha256:bf2ec68f81ba5fea38089b6a09d60786f296776b76f8083c9e3c94eae64533f5 24 minutes ago |3 GID=1000 NODE_ENV=production UID=1000 /bin/sh -c bash -c "set -o pipefail && apt-get install -y libvips-dev" 667MB
sha256:1f778f131d692203d3918ea0fbc8e91c2466fadc7bd42ac8d333b8cf34cdae2b 25 minutes ago |3 GID=1000 NODE_ENV=production UID=1000 /bin/sh -c bash -c "set -o pipefail && apt-get install -y --no-install-recommends build-essential curl git libpq-dev " 258MB
...... other entries
我的 Dockerfile
FROM ruby:3.1.3-slim-bullseye
WORKDIR /app
.... Other docker entries
#
RUN bash -c "set -o pipefail && apt-get update "
RUN bash -c "set -o pipefail && apt-get install -y --no-install-recommends build-essential curl git libpq-dev "
RUN bash -c "set -o pipefail && apt-get install -y libvips-dev"
RUN bash -c "set -o pipefail && groupadd -g \"${GID}\" ruby && useradd --create-home --no-log-init -u \"${UID}\" -g \"${GID}\" ruby"
RUN bash -c "set -o pipefail \
&& chown ruby:ruby -R /node_modules /app \
&& apt-get clean \
&& rm -rf /var/lib/apt/lists/* /usr/share/doc /usr/share/man "
.... Other docker entries
apt-get install
出了什么问题,导致libvips-dev占用了667MB而build-essential curl git libpq-dev
占用了258MB?
我在 ruby-vips 上提出了一个问题 (https://github.com/libvips/ruby-vips/issues/370#issuecomment-1716933820)。
以下是建议:
1 - 我们可以使用普通的
libvips-dev
,而不是安装 libvips
。 (最初不知道使用libvips-dev
的确切原因)
2 - 将
--no-install-recommends
添加到命令
所以命令是
apt-get install -y --no-install-recommends libvips
现在的图像层大小为130MG,与667MB相比,这是ok