5
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

RailsでDockerfile設定しながら、コマンド一つひとつ丁寧に読んでみた

Last updated at Posted at 2021-08-15

この記事の内容

Railsで新規プロジェクトを立ち上げることになりました。
Docker周りも一から設定するのは初めてだったため、公式のRailsの設定ガイドを参考にしつつ、バージョン等を最新版(2021年8月時点)にアップデートして作成しました。

今後自分でカスタマイズしていくことが予想されたので、下記ガイドのコマンドも一つ一つ丁寧に読んで理解してみることにしました。

以下は、その時のノートです。
なおDockerfileだけではなくRailsの環境構築全体を解説した記事には以下の素晴らしい記事があります。

また、途中で出てくるDockerfileのコマンドに関しては、全てこちらの公式ガイドの日本語訳の方が詳しいです。

この記事は、あくまでもRailsを立ち上げるための最低限の機能を細かく読み解きながら記載しているものになります。

【追記:この記事の続きの環境構築を書きました!】

Define the project (プロジェクトの定義)

序盤

下記のコードは、公式のDefine the projectの最初の部分を最新版にアレンジしたものです。(以下、同じ)

# syntax=docker/dockerfile:1
FROM ruby:3.0.2
RUN apt-get update -qq && apt-get install -y nodejs postgresql-client
WORKDIR /myapp
COPY Gemfile /myapp/Gemfile
COPY Gemfile.lock /myapp/Gemfile.lock
RUN bundle install

1行ずつ読み解いていきます。

FROM ruby:3.0.2
  • FROM ... 使用するイメージを定義します。
  • **イメージ名:タグ**の順に記載します。
  • どんなタグが存在するかは、dockerhubのrubyのページで調べます。
RUN apt-get update -qq && apt-get install -y nodejs postgresql-client
  • RUN ... 実行するコマンドを指定します。
  • apt-get update -qq ... ライブラリをアップデートします。-qq はquietモードで実行。エラー以外を表示しないオプションです。
  • apt-get install -y nodejs postgresql-client ... 全て承諾(-yオプション)で必要なライブラリを入れます

postgresql-clientを入れると、psqlコマンドが使えるようになるんですね。へー。。。

WORKDIR /myapp # アプリ名
COPY Gemfile /nanairo/Gemfile
COPY Gemfile.lock /nanairo/Gemfile.lock
RUN bundle install

ローカルのGemfile及びGemfile.lockをDockerコンテナ内にコピーして、bundle installします。

中盤

# Add a script to be executed every time the container starts.
COPY entrypoint.sh /usr/bin/
RUN chmod +x /usr/bin/entrypoint.sh
ENTRYPOINT ["entrypoint.sh"]
EXPOSE 3000
COPY entrypoint.sh /usr/bin/
  • entrypoint.shをコンテナ内の/usr/bin/にコピーします。
  • entrypoint.shにはコンテナ立ち上げ時に実行するスクリプトを書きます。何を書けば良いかは、先に取り上げた公式のRailsの設定ガイドの下方に書いてあります。
RUN chmod +x /usr/bin/entrypoint.sh
  • ファイル所有者にentrypoint.shの実行権限を付与します。
ENTRYPOINT ["entrypoint.sh"]
EXPOSE 3000
  • EXPOSE ... コンテナがリッスン(待機)するポート番号を指定します。

終盤

# Configure the main process to run when running the image
CMD ["rails", "server", "-b", "0.0.0.0"]

で、途中に出てきた entrypoint.sh って何よ?

コンテナ立ち上げ時に実行するコマンドをここでは entrypoint.sh というファイルに記していましたね。こちらのファイルを手動で作成したのち、以下のように記します。

entrypoint.sh
#!/bin/bash
set -e

# Remove a potentially pre-existing server.pid for Rails.
rm -f /myapp/tmp/pids/server.pid

# Then exec the container's main process (what's set as CMD in the Dockerfile).
exec "$@"

終了!

以上でした!シンプルなサンプルだったからかもしれませんが、意外と簡単でした^^;
実際に使うには、他docker-compose.ymlの作成など色々必要ですが、そちらは作成し次第随時追記していきます。

【シリーズの他の記事】

5
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?