37
27

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Alpine LinuxベースのDockerでRails5.1を動かす

Last updated at Posted at 2017-08-14

以前DockerでRails5.1&React.js&es6な環境を構築するというのを書いたけど、これだとRubyがおデブちゃんなせいで簡単に800MB超えする。開発が進んでいくと更に酷いことになる。

なので、Alpine Linuxベースで作ることでダイエットを図ろうという魂胆。

Dockerfileを書き換える

元々の記事だとだいたいこんな感じに書いていた。(関係ない所は端折ってます)

Dockerfile
FROM ruby:2.4.1
LABEL maintainer 'kazuya Hara <kazuya@example.com>'

ENV LANG C.UTF-8
ENV ROOT_PATH /appname

RUN apt-get update -qq && apt-get install -y build-essential libpq-dev

RUN mkdir $ROOT_PATH
WORKDIR $ROOT_PATH

ADD Gemfile $ROOT_PATH/Gemfile
ADD Gemfile.lock $ROOT_PATH/Gemfile.lock
RUN bundle install

ADD . $ROOT_PATH

これを以下の通りに書き換える。

Dockerfile
FROM ruby:2.4.1-alpine
LABEL maintainer 'kazuya Hara <kazuya@example.com>'

ENV LANG C.UTF-8
ENV ROOT_PATH /appname

RUN mkdir $ROOT_PATH
WORKDIR $ROOT_PATH
ADD Gemfile $ROOT_PATH/Gemfile
ADD Gemfile.lock $ROOT_PATH/Gemfile.lock

RUN apk update && \
    apk upgrade && \
    apk add --update --no-cache --virtual=.build-dependencies \
      build-base \
      curl-dev \
      linux-headers \
      libxml2-dev \
      libxslt-dev \
      postgresql-dev \
      ruby-dev \
      yaml-dev \
      zlib-dev && \
    apk add --update --no-cache \
      bash \
      git \
      openssh \
      postgresql \
      ruby-json \
      tzdata \
      yaml && \
    bundle install -j4 && \
    apk del .build-dependencies

ADD . $ROOT_PATH

解説

ruby2.4.1-alpineを使っている

見た通りだけど、alpine版を指定してます。指定するかしないかで、ruby部分でこれくらいサイズが違ってきます。

REPOSITORY              TAG                 SIZE
ruby                    2.4.1-alpine        61.5MB
ruby                    2.4.1               679MB

なんと1/10になる。

apt-getのかわりにapkを使う

apkはAlpineで使えるパッケージマネージャ。apt-getは使えない。

**--no-cache--virtual**のオプション

--no-cacheはその名の通りキャッシュしないためのオプションで、不要なゴミがイメージに残るのを防ぐ。--virtualは、後に続くやつら(上記で言えばbuild-baseからzlib-dev)をグルーピングする。事前に.build-dependenciesとグルーピングしておいて、最後にapk del .build-dependenciesで纏めて削除している。

Alpineは無駄なものがかなり削ぎ落とされているので、使いたいGemによっては追加でapk addしてあげる必要が出てくる。適宜お好きなものを足したり引いたりして下さい。

37
27
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
37
27

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?