rails Dockerコンテナ の gem インストール

Ruby on Rails をコンテナを使って開発をするときには、ベースになる gem までがインストールされたコンテナに対して、開発するソースコードや追加の gem(rails含む) については volume でコンテナ以外に保持して永続化すると開発中にコンテナを更新する必要が無いため効率的だと考えている。

環境構築

Ruby と gemをインストールした コンテナ生成

Ruby のインストールを、DockerHubの公式を参考にdockerfileを作成。
サンプルのタイミングでの最新だった ruby : 3.2.2rails : 7.0.5 で作成する。
docker image build でイメージを作成する。

FROM debian:bullseye-slim
    
ENV LANG C.UTF-8
ENV user you
    
RUN \
  # 必要なパッケージインストール
	apt update && apt upgrade -y \
	&& apt install -y --no-install-recommends \
		make \
		gcc \
		g++ \
		sudo \
		openssl \
		ca-certificates \
		libssl-dev \
		zlib1g-dev \
		curl \
		wget \
		apt-transport-https \
		aria2 \
		git \
		vim \
		libyaml-dev \
		xz-utils \
		zlib1g-dev \
		locales \
		sqlite3 \
		libpq-dev \
		patch \
  # ユーザの追加
	&& groupadd -g 1111 ${user} \
	&& useradd -m -u 1111 -g 1111 ${user}  \
  # rails アプリ用のディレクトリ作成
	&& mkdir /app /app/forest/bundle_dir \
	&& chown -R ${user}:${user} /app \
    && chown -R ${user}:${user} /app/bundle_dir

USER ${user}

RUN \
  # 日本語化
	locale-gen ja_JP.UTF-8 \
  # rbenv用 ディレクトリ作成
	&& mkdir /home/${user}/.rbenv \
  # rbenv インストール
    && export GIT_SSL_NO_VERIFY=1 \
	&& git clone https://github.com/rbenv/rbenv.git /home/${user}/.rbenv \
	&& cd ~/.rbenv \
	&& src/configure \
	&& make -C src \
  # ruby-build & ruby3.2.2 
    && export PATH="/home/${user}/.rbenv/bin:$PATH" \
	&& eval "$(/home/${user}/.rbenv/bin/rbenv init - bash)" \
	&& echo 'export PATH="~/.rbenv/bin:$PATH"' >> ~/.bashrc \
	&& echo 'eval "$(rbenv init - bash)"' >> ~/.bashrc \
    && export GIT_SSL_NO_VERIFY=1 \
	&& git clone https://github.com/rbenv/ruby-build.git /home/${user}/.rbenv/plugins/ruby-build \
 	&& /home/${user}/.rbenv/bin/rbenv install 3.2.2 \
	&& /home/${user}/.rbenv/bin/rbenv global 3.2.2 \

    && gem update --system 


EXPOSE 3000
ENV APP_ROOT /app
WORKDIR $APP_ROOT

CMD ["/bin/bash"]

コンテナで rails 環境 作成

コンテナを作成し、コンテナ内に入る。

docker run -it -p 3000:3000 -v /path_to/app:Z -v ~/path_to/bundle-dir:/app/bundle_dir:Z -v <コンテナイメージ名> /bin/bash"

Rails の実行、アプリの生成

/app に Gemfile を作成。まずは rails を指定。

<Gemfile>

ruby '3.2.2'
gem "rails", "7.0.5"
gem "pg"  # postgresを使う場合  DBに応じて変更

gem のインストール先を設定。

bundle config set path /app/bundle_dir
gem のインストール

railsは、Gemfileで一気にインストールできないみたい。以下のエラーが出る。

Could not find gem 'rails (= 7.0.5)' in locally installed gems.
Run bundle install to install missing gems.

なので、最初にrailsのみインストール

gem install rails -v 7.0.5

その後に、bundle install でGemfile記載のものをインストール

bundle install
rails アプリの生成
bundle exec rails new <アプリ名>

このようにすることで、新たに追加していくgemも docker の volume の機能で永続化できて開発中の追加や削除に対してもコンテナは影響を受けない。
また、アプリのソースコードもホストと共有できるので、ホスト側でソースコードの作成・編集を行いコンテナはサーバの実行(bundle exec rails s)などのrailsコマンドの実行だけを行えば開発が成立する。

Xserver が お友達紹介割引 で申込みが可能になります。

コメント

タイトルとURLをコピーしました