🌟

Rails のコンテナイメージを作成

2023/05/20に公開

目的

Railsの実行環境・デプロイ環境を整えてみたい。

やりたいこと

  • Railsを動かすコンテナイメージを自力で作成する。
  • Railsのコードに更新が入ると、Pod上のスクリプトに自動で更新される。

今回やりたいこと

  • Railsを動かすコンテナイメージを自力で作成する。

Dockerとは

1台のサーバー上で様々なアプリケーションを動かすことができるコンテナ仮想化を実現するOSS。

サンプルアプリを作成

# とりあえず不要なコンテナイメージを削除
$  docker rmi -f $(docker images -q)
# 適当にGemfileとDockerfileを作成
$  echo "source 'https://rubygems.org'\ngem 'rails', '7.0.0'" > app/Gemfile
$  echo "FROM ruby:3.0.0" > Dockerfile
# コンテナをビルドする
$  docker build -t app .

# 作成されたビルドイメージを利用して、コンテナを起動
# -t: tty -> コンテナの標準出力をホストの標準入力に繋げる(実行終了しない)
# -v: volume -> コンテナ側とホスト側のディレクトリを共有
$  docker run --rm -it -v `pwd`/manifest/app:/myapp -p 3001:3000  [build_image] /bin/bash
[container]$ bundle install

# サンプルアプリを作成
[container]$  rails new sampleApp
# サンプルアプリをコンテナ内で動作 
# -> ホスト環境で http://localhost:3001 でアクセス確認。
[container]$  rails s -b 0.0.0.0
[container]$  exit

Dockerfile

Dockerfileはこんな感じ。Gemfile.lock と サンプルアプリmyapp/sampleAppディレクトリが作成されていることが大前提である。

# ベースイメージの指定
FROM ruby:3.1.2

# 必要なパッケージのインストール
RUN apt-get update && apt-get install -y nodejs yarn

# プロジェクトのディレクトリを作成して、作業ディレクトリに指定
RUN mkdir /myapp
WORKDIR /myapp

# GemfileとGemfile.lockをコピーして、依存関係をインストール
COPY manifest_file/app/Gemfile /myapp/Gemfile
COPY manifest_file/app/Gemfile.lock /myapp/Gemfile.lock
RUN gem install bundler
RUN bundle install

# プロジェクトのファイルをコピー
WORKDIR /myapp/sampleApp
COPY manifest_file/app/sampleApp /myapp/sampleApp
RUN bundle install
EXPOSE 3000

# コンテナ内で実行するコマンドを指定
CMD ["rails", "server", "-b", "0.0.0.0"]

Dockerfileをビルドする

# Dockerfileが存在しているか -> 0
$ test -e Dockerfile; echo $#
0 
$  docker build -t myapp:[tagname] .

Discussion