Switch the Ruby memory allocator from Glibc malloc to Jemalloc. Jemalloc supposedly uses less memory than Glibc malloc because it's better at handling memory fragmentation. It also has detailed internal statistics to help monitor allocator behavior. We use the LD_PRELOAD method of loading Jemalloc instead of building it into Ruby so that we can switch allocators at runtime.
78 lines
2.0 KiB
Docker
78 lines
2.0 KiB
Docker
FROM ubuntu:21.04 AS base
|
|
|
|
WORKDIR /danbooru
|
|
ENV PATH="/root/.asdf/bin:/root/.asdf/shims:$PATH:/usr/lib/postgresql/14/bin"
|
|
|
|
COPY config/docker/build-base-image.sh .
|
|
|
|
RUN \
|
|
./build-base-image.sh && \
|
|
chmod go+rx /root && \
|
|
useradd --home-dir /root --user-group danbooru && \
|
|
rm build-base-image.sh
|
|
|
|
|
|
|
|
FROM base AS development
|
|
ARG NODE_VERSION=14.15.5
|
|
|
|
RUN \
|
|
apt-get update && \
|
|
DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \
|
|
build-essential libpq-dev libvips-dev zlib1g-dev \
|
|
curl ca-certificates dirmngr git gpg && \
|
|
rm -rf /var/lib/apt/lists/*
|
|
|
|
RUN \
|
|
asdf plugin add nodejs && \
|
|
asdf install nodejs "$NODE_VERSION" && \
|
|
asdf global nodejs "$NODE_VERSION" && \
|
|
npm install --unsafe-perm=true -g yarn
|
|
|
|
COPY Gemfile Gemfile.lock ./
|
|
RUN \
|
|
bundle install --jobs "$(nproc)" && \
|
|
rm -rf "$(gem environment gemdir)/cache" && \
|
|
find "$(gem environment gemdir)" -name "*.o" -delete
|
|
|
|
COPY .yarnrc.yml package.json yarn.lock ./
|
|
COPY .yarn/ ./.yarn/
|
|
RUN yarn install
|
|
|
|
COPY postcss.config.js Rakefile ./
|
|
COPY bin/rails bin/webpack ./bin/
|
|
COPY config/application.rb config/boot.rb config/danbooru_default_config.rb config/webpacker.yml ./config/
|
|
COPY config/webpack/ ./config/webpack/
|
|
COPY public/images ./public/images
|
|
COPY public/fonts ./public/fonts
|
|
COPY app/components/ ./app/components/
|
|
COPY app/javascript/ ./app/javascript/
|
|
|
|
RUN \
|
|
bin/rails assets:precompile && \
|
|
rm -rf \
|
|
node_modules .yarn/cache tmp /usr/local/share/.cache/yarn \
|
|
/root/.yarn/berry/cache /root/.bundle/cache /root/.npm && \
|
|
ln -s /tmp tmp && \
|
|
ln -s packs public/packs-test
|
|
|
|
|
|
|
|
FROM base as production
|
|
|
|
ENV LD_PRELOAD=/usr/lib/x86_64-linux-gnu/libjemalloc.so.2
|
|
|
|
COPY --from=development /root /root
|
|
COPY --from=development /danbooru /danbooru
|
|
|
|
COPY . .
|
|
ARG SOURCE_COMMIT
|
|
RUN echo "$SOURCE_COMMIT" > REVISION
|
|
|
|
USER danbooru
|
|
ENTRYPOINT ["tini", "--"]
|
|
CMD ["bin/rails", "server"]
|
|
|
|
# https://github.com/opencontainers/image-spec/blob/main/annotations.md
|
|
LABEL org.opencontainers.image.source https://github.com/danbooru/danbooru
|