もちろん、以下にMarkdown形式で記事を出力いたします。
Dockerを利用したRuby/Railsの開発環境の作り方
目次
Dockerを利用したRuby/Railsの開発環境の作り方
はじめに
Dockerのメリット
Dockerを使用する最大のメリットは、環境の再現性です。Dockerを使用することで、開発環境を短時間で構築でき、その環境を他のメンバーや環境で簡単に再現することが可能です。これにより、「私のマシンでは動くけど…」という問題が大幅に減少します。
この記事の対象読者
この記事は、RubyやRailsでの開発経験はあるものの、Dockerについては初心者で、その利用方法や設定に迷っている方を対象としています。
Dockerの基本
基本的な用語
-
イメージ (Image): イメージは、アプリケーションやサービスを実行するための静的なテンプレートであり、必要なファイルや依存関係をすべて含んでいます。一般に、Dockerfileからイメージをビルドします。
-
コンテナ (Container): コンテナは、イメージを実行中の状態、つまり動的なインスタンスです。コンテナは軽量で、迅速に起動でき、分離されているため他のコンテナとの干渉はありません。
-
Dockerfile: Dockerfileは、Dockerイメージを構築するためのスクリプトファイルです。このファイルには、ベースとなるイメージ、インストールするソフトウェア、実行するコマンドなど、イメージの作成に関する指示が書かれています。
-
ボリューム (Volume): ボリュームは、コンテナの外部でデータを保持するための仕組みで、コンテナが破棄されてもデータが残るように設計されています。これにより、コンテナ間でデータを共有したり、永続的なデータストレージとして使用することができます。
-
Docker Hub: Docker Hubは、Dockerイメージの公開リポジトリで、多くのオープンソースやコミュニティのイメージがホスティングされています。自分で作成したイメージを公開したり、他のユーザーが公開しているイメージを取得して使用することができます。
Dockerfileの基礎
Dockerfileは、Dockerイメージの作成手順を記述するためのファイルです。ここでは、基本的な命令や構文について詳しく見ていきましょう。
FROM
FROM ubuntu:latest
この命令は、ベースイメージを指定します。ここではubuntu:latest
をベースイメージとして使用しています。
ENV
ENV RUBY_VERSION 2.7.6
ENV DEBIAN_FRONTEND=noninteractive
ENV TIMEZONE="Asia/Tokyo"
環境変数を設定します。上記の例では、後の命令で使用するRUBY_VERSION
やタイムゾーン、非対話型インターフェースを指定しています。
RUN
RUN apt-get update && apt-get install -y ...
RUN命令は、イメージの作成中にコマンドを実行します。この例では、Ubuntuのパッケージを更新し、必要なパッケージをインストールしています。
環境変数はアプリケーションの設定や動作を調整するための重要な要素です。ENV
を使用して、これらの変数を設定できます。
Dockerfileの作成フロー
Dockerfileの作成は、実際の手作業のような逐次的なフローで行います。まず、ベースとなるイメージを選択し、その上で必要な設定やソフトウェアのインストールを行いながら、その都度Dockerfileを更新していきます。以下はその具体的な手順です。
-
ベースイメージの選定: まず、
ubuntu:latest
のようなベースとなるイメージを選択してDockerfileに記述します。FROM ubuntu:latest
-
イメージのビルド: 下記のコマンドを使用してDockerfileからイメージをビルドします。
docker build -t myimage .
-
コンテナの起動: ビルドしたイメージからコンテナを起動します。
docker run -it --name mycontainer myimage /bin/bash
これでコンテナ内のシェルに入ることができます。
-
ソフトウェアのインストール: コンテナ内で、例えば
npm
をインストールします。apt-get update apt-get install npm
-
Dockerfileの更新: 上記の手順でインストールしたソフトウェアのコマンドをDockerfileに追記します。
RUN apt-get update && apt-get install -y npm
-
再度イメージのビルドとコンテナの起動: 新しい設定やソフトウェアをDockerfileに追加した後は、再度イメージをビルドし、新しいコンテナを起動して動作を確認します。
このようなフローを繰り返すことで、RubyやRailsの開発に必要な環境を段階的に整えていくことができます。初めは手間がかかるかもしれませんが、このフローに慣れると、新しい環境の構築や既存の環境の更新が非常にスムーズに行えるようになります。
Ruby/Railsの開発環境の構築
ここでは、最終的に作成したDockerfileを使用して、Ruby/Railsの開発環境の構築手順を説明します。
rbenvとruby-buildのインストール
RUN git clone https://github.com/rbenv/rbenv.git ~/.rbenv && \
echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bashrc && \
echo 'eval "$(rbenv init -)"' >> ~/.bashrc && \
git clone https://github.com/rbenv/ruby-build.git ~/.rbenv/plugins/ruby-build && \
echo 'export PATH="$HOME/.rbenv/plugins/ruby-build/bin:$PATH"' >> ~/.bashrc && \
. ~/.bashrc && \
rbenv install $RUBY_VERSION && \
rbenv global $RUBY_VERSION
上記のコードは、rbenv
とruby-build
をインストールし、設定して指定したRubyバージョンをインストールします。これにより、コンテナ内でRubyが利用できるようになります。
付録: 完成したDockerfile
以下は、この記事を通じて完成したDockerfileの内容です。このDockerfileを使用することで、Ruby/Railsの開発環境を効率的に構築することができます。
# ベースイメージとしての指定
FROM ubuntu:latest
# 環境変数の設定
ENV RUBY_VERSION 2.7.6
ENV DEBIAN_FRONTEND=noninteractive
ENV TIMEZONE="Asia/Tokyo"
# 必要なパッケージのインストールとタイムゾーンの設定
RUN apt-get update && \
apt-get install -y \
tzdata \
curl \
build-essential \
default-libmysqlclient-dev \
nodejs \
npm \
imagemagick && \
ln -fs /usr/share/zoneinfo/${TIMEZONE} /etc/localtime && \
dpkg-reconfigure --frontend noninteractive tzdata && \
apt-get clean && \
rm -rf /var/lib/apt/lists/*
# Node.jsのパッケージをインストール
RUN npm install -g gulp-cli \
bower \
eslint \
yarn \
babel-eslint \
eslint-plugin-angular
# rbenvとruby-buildのインストール、そしてRubyのインストール
RUN git clone https://github.com/rbenv/rbenv.git ~/.rbenv && \
echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bashrc && \
echo 'eval "$(rbenv init -)"' >> ~/.bashrc && \
git clone https://github.com/rbenv/ruby-build.git ~/.rbenv/plugins/ruby-build && \
echo 'export PATH="$HOME/.rbenv/plugins/ruby-build/bin:$PATH"' >> ~/.bashrc && \
. ~/.bashrc && \
rbenv install $RUBY_VERSION && \
rbenv global $RUBY_VERSION
このDockerfileを自身のプロジェクトにコピーして、docker build
コマンドを使用してDockerイメージをビルドすることができます。