RoR (rails) Dockerfile tip
루비 온 레일즈 (Ruby on Rails)를 Docker 로 배포할 때 간단 팁입니다.
Rails 를 도커로 배포할 때 가장 큰 문제는 Rebuild 시간이 오래걸린다는 것입니다.
원인은 바로 bundler !!
$ bundle install
이놈이 오래걸립니다.
하여 예전에 이 Article 을 보고 적용해서 쓰던 중 보다 괜찮은 방법이 있어서 기록합니다.
Prerequisite
- ruby 2.3.4
- Rails 5.1.2
- docker 17.06-ce
Rails on Docker
제가 쓰는 Dockerfile
을 아래 공유합니다.
FROM ruby:2.3.4-slim
LABEL maintainer="9to5, ktk0011+dev@gmail.com"
RUN apt-get update && \
apt-get install -y --no-install-recommends \
build-essential git libpq-dev nodejs vim libxslt-dev libxml2-dev cron && \
rm -rf /var/lib/apt/lists/*
ENV INSTALL_PATH /app
WORKDIR $INSTALL_PATH
ENV BUNDLE_FROZEN=1 BUNDLE_DISABLE_SHARED_GEMS=true BUNDLE_WITHOUT=development:test
ADD ./bin $INSTALL_PATH/bin
COPY Gemfile Gemfile.lock ./
RUN bin/bundle install --deployment
ADD . $INSTALL_PATH
기존과의 차이점은 BUNDLE_FROZEN
을 이용해서 더이상 Gem변경을 허용하지 않으며,
BUNDLE_DISABLE_SHARED_GEMS
설정으로 번들 path를 고정하고,
BUNDLE_WITHOUT
을 이용해서 오직 deployment 환경을 대상으로만 bundle 을 관리합니다.
Conclusion
이런 형태로 사용한다면 docker
로 변경된 내용을 배포할 때 마다 bundler 때문에 시간이 소모되는 문제를 쉽게 해결 가능합니다.