我不确定各位在使用 docker 时候的最佳实践是怎么样的。这样 build 后没有问题,但每次我 yarn add 插件进去,我比如在我的 entrypoint 里启动 server 之前必须 yarn install 一下,或者重新 build。 总觉得这里方式不太对,请问下各位是如何处理的?同理,包括 Gemfile 中新加 gem 进去,都必须重新 build?
感觉本地开发挺浪费时间的。不然就是本地开发时在 entrypoint 里加启动 server 之前主动 yarn install 以及 bundle 一下,等做完要发布,把这两行删掉,丢上去重新 build。
Dockerfile
FROM ruby:2.6.3-alpine
ENV BUNDLER_VERSION=2.2.6
RUN apk add --update --no-cache \
binutils-gold \
build-base \
curl \
file \
g++ \
gcc \
git \
less \
libstdc++ \
libffi-dev \
libc-dev \
linux-headers \
libxml2-dev \
libxslt-dev \
libgcrypt-dev \
make \
netcat-openbsd \
nodejs \
openssl \
pkgconfig \
postgresql-dev \
python \
tzdata \
yarn
RUN gem install bundler -v 2.2.6
WORKDIR /app
COPY Gemfile Gemfile.lock ./
RUN bundle config build.nokogiri --use-system-libraries
RUN bundle check || bundle install
COPY package.json yarn.lock ./
RUN yarn install --check-files
COPY . ./
ENTRYPOINT ["./entrypoints/docker-entrypoint.sh"]