たいてい、出来合いの 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の中身を準備していく。