DockerでRailsの検証用環境を作る
背景
Railsに限らず、何かを手元で気軽に検証したいっていうことないですか???
今回は、Railsで色々と実験するための環境作りをDockerコンテナでやっていきます。
ちなみに、今回は業務でwebpackerやらSProcketsやらを本格的に改修するために、フロントエンドの実験をやろうと思って作りました。
ツールのインストールはDockerfile
railsはフレームワークなので、さまざまなツールが必要になります。
その中で、webpackerを動かすにはnode.jsのバージョン14以上が必要だとか、バージョンの縛りがあって、サクッと立ち上がりません。
そこで、必要なツールのインストールやバージョン指定はDockerfileで行います。
まさにこんな感じ
FROM ruby:3.1.2
# 必要最低限のツールを入れる
## yarnはバージョン指定
RUN curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add -
RUN echo "deb https://dl.yarnpkg.com/debian/ stable main" | tee /etc/apt/sources.list.d/yarn.list
## nodeはwebpackerを動かすために最新LTSを指定
RUN curl -fsSL https://deb.nodesource.com/setup_current.x | -E bash -
## 実際にインストール
RUN apt-get update -qq && apt-get install -y sqlite3 vim nodejs yarn
なぜ専用のimageを使わないの?
Railsのx6に必要な環境なら、それ専用のDocker imageとかあるのでは?と思いますよね。多分あります。でも、使いません。
Docker imageはあくまで最低限、本当はubuntuイメージとかOSイメージだけで使いたいくらいです。
理由としては、環境に柔軟性がなくなるからです。
業務では、「常に最新のツール群で構成された王道のツールセットで開発」というわけにはいきません。
基本は、古いツールを使っていたり、言語のバージョンが古かったり、DBだけ特殊だったり、API接続していたりと、プロジェクトごとに事情が大きく異なります。
そのため、ベースとなるdocker imageは極力シンプルにして、シェルコマンドで必要なツールを継ぎ足していくというやり方をとっています。
その方が色々勉強にもなりますし。
マルチビルドっていう手段もありますが、同様の理由であまり利用しません。