memo.log

技術情報の雑なメモ

Railsアプリ(+PostgreSQL)を Docker で動かすまでを1歩1歩確認していくメモ(docker-compose は使わない)

たいてい、出来合いの docker-compose を up して動かしていて、便利は便利なのだが、基本的なところがよくわからなくなるので、Dockerで1歩1歩動かしていってみる。

以下の Docker 公式ドキュメントを主に参考にしている。 docs.docker.jp

まずはデータベースの準備

PostgreSQLを起動する。以下のコマンドを実行すると 5432 ポートで接続を受け付けるようになる

  • POSTGRES_HOST_AUTH_METHOD = trust にすることで、ローカルからの接続にパスワードは不要になるようだ。
  • コンテナは使い捨てで (--rm) とする
docker run --rm --name postgres -e POSTGRES_HOST_AUTH_METHOD=trust -p 5432:5432 postgres:15

次にRailsの準備

database.yml の準備

以下あたりを編集しておく:

host: x.x.x.x # localhost だとDockerコンテナ内に向かってしまうみたいなので、ホストのIPアドレスを直打ちする。このへんはなにか別に上手いやり方ありそうだけど一旦ベタ書きで。
username: postgres # PostgreSQLのデフォルト
# password # なし `POSTGRES_HOST_AUTH_METHOD=trust` にしとけばいらないらしい

Docker イメージの準備

まず、Dockerfileを準備して、イメージを作成する。 docker run ruby:3.2.1 とかで、コンテナ内で色々と作業してからイメージとして保存するという手もあるのかもしれない(以下リンク参照)が、提携作業ならDockerfileに定義しておくのが定石かと。あと、 ADD とかでホストの資材をDocker内に入れるのを、コンテナの中に入ってから取ってこれるのかはよくわからないし。

Dockerに慣れる : 変更したコンテナイメージを保存する

というわけで今回のDockerfile:

FROM ruby:3.2.1
RUN apt-get update -qq && apt-get install -y build-essential libpq-dev nodejs
# My Hobby :)
RUN apt-get install -y iputils-ping net-tools
RUN mkdir /myapp
WORKDIR /myapp
ADD Gemfile /myapp/Gemfile
ADD Gemfile.lock /myapp/Gemfile.lock
RUN bundle install
ADD . /myapp

これをビルド

docker build -t [image name] ./

そしたらコンテナを実行

docker run --rm -p 3000:3000 [image name] bundle exec rails s -p 3000 -b '0.0.0.0'

一旦ここまででアプリの起動とDBへの接続はできたはず。 次からDBの中身を準備していく。