🌟
Rails のコンテナイメージを作成
目的
Railsの実行環境・デプロイ環境を整えてみたい。
暇なので、KubernetesやDocker、Gitlab Runner、Railsを勉強。
やりたいこと
- Railsを動かすコンテナイメージを自力で作成する。
- KubernetesのManifestを作成して、Railsを動かすPodを立ててみる。
- 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