10章
省略!!!
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
|
# Node.jsダウンロード用ビルドイメージ
FROM ruby:2.6.6 AS nodejs
WORKDIR /tmp
RUN curl -LO https://nodejs.org/dist/v12.14.1/node-v12.14.1-linux-x64.tar.xz
RUN tar xvf node-v12.14.1-linux-x64.tar.xz
RUN mv node-v12.14.1-linux-x64 node
# Railsプロジェクトインストール
FROM ruby:2.6.6
# nodejsをインストールしたイメージからnode.jsをコピーする
COPY --from=nodejs /tmp/node /opt/node
ENV PATH /opt/node/bin:$PATH
# アプリケーション起動用のユーザーを追加
RUN useradd -m -u 1000 rails
RUN mkdir /app && chown rails /app
USER rails
# yarnのインストール
RUN curl -o- -L https://yarnpkg.com/install.sh | bash
ENV PATH /home/rails/.yarn/bin:/home/rails/.config/yarn/global/mode_modules/.bin:$PATH
# ruby2.7系以上のbundlerと2.6系のbundlerのメジャーバージョンが異なる
# 明示的にbundlerのバージョンを最新にする
RUN gem install bundler
WORKDIR /app
# Dockerのビルドステップキャッシュを利用するため、先にGemfileを転送し、bundle installする
COPY --chown=rails Gemfile Gemfile.lock package.json yarn.lock /app/
RUN bundle install
RUN yarn install
COPY --chown=rails . /app
RUN bin/rails assets;precompile
VOLUME /app/public
# 実行時にコマンド指定がない場合に実行されるコマンド
CMD ["bin/rails", "s", "-b", "0.0.0.0"]
|
Dockerはビルドのステップ毎にファイルシステムの変更差分を組み重ねることでイメージを作成する。らしい。
先にGemfileをイメージに組み込んでbundle installをすることで、ソースコードを変更した際にはbundle install
されないようにしておく。
node_modulesについても同様にyarn install
を先に実行する。