DockerでRailsを動かす完全入門|マルチステージDockerfileとdocker-compose雛形を初心者向けに徹底解説
生徒
「Railsを本番環境で動かすときに、Dockerを使うと良いと聞いたんですが、そもそもDockerって何ですか?」
先生
「Dockerは、アプリを動かすための環境を“箱”にまとめる仕組みです。パソコンが初めてでも、同じ箱を使えば同じ動きをします。」
生徒
「箱にまとめると、Railsのデプロイや運用が楽になるんですか?」
先生
「そうです。さらにマルチステージDockerfileとdocker-composeを使うと、速くて安全なRails環境を作れます。」
1. Dockerとは何か?Rails初心者向けの超基本
Dockerとは、アプリケーションと実行環境をひとまとめにして動かす技術です。Railsアプリの場合、RubyやRails、ライブラリ、設定ファイルを全部まとめて一つの環境として扱えます。これは「引っ越し用の段ボール」に例えられます。中身を全部詰めておけば、どこへ持って行っても同じ状態で使える、というイメージです。Dockerを使うことで、開発環境と本番環境の差によるトラブルを防げます。
Railsの仕組みを根本から理解し、現場で通用する 「設計のセオリー」を身につけたいならこの一冊。 MVC、テスト、Docker対応など、実践的な内容が凝縮されています。
パーフェクト Ruby on RailsをAmazonで見る※ Amazon広告リンク
2. RailsとDockerの関係|なぜデプロイで使われるのか
Railsのデプロイや運用では、環境差分が大きな問題になります。Dockerを使うと、開発時と本番時で同じDockerイメージを利用できます。これにより「手元では動くのにサーバーでは動かない」といった問題が減ります。DockerはRails、Heroku、CI/CD、Docker Composeなどと相性が良く、現代的なRails運用では定番の技術です。
3. マルチステージDockerfileとは?初心者向け解説
マルチステージDockerfileとは、Dockerfileの中で複数の段階を作る方法です。最初の段階でビルドや準備を行い、最後の段階には必要なものだけを残します。これは「料理の下ごしらえ」と「盛り付け」を分けるような考え方です。不要な道具を皿に乗せないことで、軽くて安全なRailsコンテナを作れます。
4. Rails用マルチステージDockerfileの基本例
FROM ruby:3.2 AS builder
WORKDIR /app
COPY Gemfile Gemfile.lock ./
RUN bundle install
FROM ruby:3.2
WORKDIR /app
COPY --from=builder /usr/local/bundle /usr/local/bundle
COPY . .
CMD ["rails", "server", "-b", "0.0.0.0"]
最初のステージでGemのインストールを行い、次のステージでは必要な結果だけをコピーしています。これがマルチステージDockerfileの基本構造です。
5. docker-composeとは?Rails初心者でも安心
docker-composeは、複数のDockerコンテナをまとめて管理するためのツールです。Railsでは、Webサーバーやデータベースを同時に起動する必要があります。docker-composeを使うと、コマンド一つでRailsとデータベースを一緒に起動できます。これは「電源タップ」に似ています。一つのスイッチで複数の機械を動かせます。
6. docker-compose.ymlの雛形(Rails用)
version: "3.9"
services:
web:
build: .
ports:
- "3000:3000"
volumes:
- .:/app
command: rails server -b 0.0.0.0
この雛形を使えば、RailsアプリをDocker上で簡単に起動できます。初心者はまずこの形を覚えるだけで十分です。
7. DockerでRailsを起動する流れを整理
DockerfileでRailsの箱を作り、docker-composeで起動方法を決めます。実行するときは、決められた手順通りに箱を組み立てて起動します。この流れを理解すると、Railsのデプロイや運用が一気に楽になります。難しい操作はDockerが肩代わりしてくれます。
8. 初心者がつまずきやすいポイントと考え方
初心者がつまずきやすいのは「Docker用語が多い」ことです。イメージ、コンテナ、ビルドといった言葉は、すべて「箱を作る」「箱を動かす」という意味に置き換えると理解しやすくなります。Rails、Docker、docker-composeは役割分担がはっきりしているので、一つずつ覚えることが大切です。
まとめ
この記事では、DockerでRailsを動かすための基本から、マルチステージDockerfileやdocker-composeの雛形までを初心者向けに整理してきました。Dockerは難しそうに見えますが、本質は「Railsを動かす環境を箱にまとめて、どこでも同じように動かす仕組み」です。RubyやRails、Gem、設定ファイルを一つの環境として管理できるため、開発環境と本番環境の差分によるトラブルを大きく減らせます。
特にマルチステージDockerfileは、Railsアプリを軽量かつ安全に運用するために重要な考え方です。ビルド用の段階と実行用の段階を分けることで、不要なファイルやツールを含まないRailsコンテナを作成できます。これにより、Dockerイメージのサイズ削減やセキュリティ向上につながり、本番運用でも安心して利用できます。
また、docker-composeを使うことで、Railsアプリとデータベースなど複数のサービスをまとめて管理できます。Rails開発ではWebサーバーだけでなく、データベースやキャッシュなど複数の要素が必要になる場面が多いため、docker-composeの存在は欠かせません。設定ファイルに起動方法をまとめておくことで、コマンド一つでRails環境を立ち上げられるようになります。
Dockerfileとdocker-compose.ymlの役割を理解し、「箱を作る」「箱をどう動かすか決める」という視点で整理すると、DockerとRailsの関係がぐっと分かりやすくなります。Railsのデプロイ、Docker運用、CI/CD、クラウド環境への展開など、今後学ぶ内容の土台としても非常に重要な知識です。
最初は用語や設定が多く感じられるかもしれませんが、基本の雛形を使いながら少しずつ触れることで、DockerでRailsを動かす流れが自然と身についていきます。Dockerを理解することは、Railsエンジニアとしてのスキルの幅を大きく広げる第一歩と言えるでしょう。
Rails用マルチステージDockerfileの振り返りサンプル
FROM ruby:3.2 AS builder
WORKDIR /app
COPY Gemfile Gemfile.lock ./
RUN bundle install
FROM ruby:3.2
WORKDIR /app
COPY --from=builder /usr/local/bundle /usr/local/bundle
COPY . .
CMD ["rails", "server", "-b", "0.0.0.0"]
この構成では、最初のステージでGemのインストールを行い、実行に必要な成果物だけを次のステージへコピーしています。Rails初心者は、この形をそのまま使いながら「なぜ二段階に分けているのか」を意識すると理解が深まります。
docker-compose.yml雛形の振り返り
version: "3.9"
services:
web:
build: .
ports:
- "3000:3000"
volumes:
- .:/app
command: rails server -b 0.0.0.0
docker-composeでは、Railsコンテナの起動方法やポート設定をまとめて管理できます。RailsをDockerで動かすときの基本形として覚えておくと、今後の学習がスムーズになります。
生徒
「Dockerって難しいと思っていましたが、Railsを動かす箱だと考えると分かりやすいですね」
先生
「その通りです。Dockerは仕組みよりも考え方が大事で、Railsの環境をまとめて扱うための道具なんですよ」
生徒
「マルチステージDockerfileは、最初はなぜ分けるのか分かりませんでした」
先生
「Railsを本番で動かすときは、必要なものだけを残すことが重要です。マルチステージは、そのための基本テクニックですね」
生徒
「docker-composeを使うと、Railsと他のサービスを一緒に管理できるのも便利ですね」
先生
「ええ。Rails開発やデプロイでは必須の考え方です。まずは雛形を使って、DockerでRailsを動かす流れに慣れていきましょう」