パーフェクトRails読んでたら「まずはDockerイメージを作成する前に、サンプル用のRails アプリケーションを作成しましょう」と出てきたので、それすらも俺はDocker出やりたいんだ!と思ったので頑張ってみた
前提
dockerは使えるが、ローカルのrubyのバージョンやgemが操作できない(いじりたくない)状態のMac
手順
- dockerでrails newをするコンテナをbuildする
- 1でbuildしたコンテナを立ち上げる
- 立ち上げたコンテナからファイルをコピーする
1. dockerでrails newをするコンテナをbuildする
以下のようなDockerfileを作る
ARG ruby_version ARG rails_version FROM ruby:${ruby_version} # nodejsをインストール RUN curl -LO https://nodejs.org/dist/v12.18.3/node-v12.18.3-linux-x64.tar.xz RUN tar xvf node-v12.18.3-linux-x64.tar.xz RUN mv node-v12.18.3-linux-x64 node ENV PATH /node/bin:$PATH # yarnをセットアップする # 公式ドキュメントまま https://classic.yarnpkg.com/ja/docs/install/#alternatives-stable RUN curl -o- -L https://yarnpkg.com/install.sh | bash ENV PATH /root/.yarn/bin:/root/.config/yarn/global/node_modules/.bin:$PATH RUN gem install rails -v "${rails_version}" ARG rails_option RUN rails new ${rails_option} rails_app
引数として以下の値を渡してbuildする
Rubyは2.6.2、Railsは6.0.1、オプション引数としてmysqlを使いたい場合は以下のように実行する。
後続の処理を完結にするためにrails_new
というタグもつけておきたいので -t rails_new
も設定する
docker build . -t rails_new --build-arg ruby_version=2.6.3 --build-arg rails_version=6.0.1 --build-arg rails_option='--database=mysql'
2. 1でbuildしたコンテナを立ち上げる
これ普通通り行う、この際に出力されるIDを控える
$ docker run -d rails_new
33506da9526624ff6dbc3eff77a8b597ce26d9dba70c2fb3fb7b40f7bcc78942
3.立ち上げたコンテナからファイルをコピーする
立ち上がっているコンテナからは docker cp
でファイルが取得できるので取得する。
docker cp 31506da9126667ff6bbc3e2f77a8b597ce26d9dba70c2fb3fb7b40f7bcc78942:rails_app ./
こうすれば rails_app
というディレクトリがコピーされる。
参考リンク
- Dockerfile ARG入門 - Qiita - ARGの取り回しに思いの外苦労した…