初心者インフラエンジニアが困ったときに試行錯誤するブログ

インフラエンジニアが,開発の勉強をするときのログを残します

DockerでRailsを動かす その2

実現したいこと

Docker上でRailsを動かしたい.その2です.

前回の戦いはこちら

ktaka.hatenablog.com

やったこと

以下のファイルを変更,追加してローカルDBに接続できるかを調整

docker-compose.yml

version: '3'
services:
  web:
    container_name: rails-sample-app
    build: .
    command: bundle exec rails s -p 3000 -b '0.0.0.0'
    volumes:
      - .:/usr/src/app
    ports:
      - "3000:3000"

database.yml

default: &default
  adapter: postgresql
  encoding: utf8
  pool: 5
  # 以下の3つを追加
  username: <%= ENV.fetch('DB_USERNAME', 'root') %>
  password: <%= ENV.fetch('DB_PASSWORD', 'dummy') %>
  # RailsサーバとPostgreSQLサーバが同じ場合
  host:     <%= ENV.fetch('DB_HOST', 'db') %>
development:
  <<: *default
  database: sample-db
test:
  <<: *default
  database: sample-db
production:
  <<: *default
  database: hello_rails_production
  username: hello_rails
  password: <%= ENV['HELLO_RAILS_DATABASE_PASSWORD'] %>

env.dev

DB_USERNAME= <usernamehoge>
DB_PASSWORD= <passwordhoge>
DB_HOST=docker.for.mac.localhost
~

なんかうまくいかないよう.すぐコンテナがダウンしてしまう.

Could not locate Gemfile or .bundle/ directory

とのこと.パスがおかしいのか?

Dockerfileを編集してみる

Dockerfile

FROM ruby:2.3.7
ENV LANG C.UTF-8

RUN apt-get update -qq && apt-get install -y build-essential libpq-dev nodejs

ENV APP_ROOT /usr/src/app
RUN mkdir $APP_ROOT
WORKDIR $APP_ROOT

ADD app/Gemfile $APP_ROOT
ADD app/Gemfile.lock $APP_ROOT

RUN gem install bundler #追加.これが必要?
RUN bundle install

ADD app $APP_ROOT
$ docker compose build
$ docker compose up

また失敗.同じエラーがでる.全然クリティカルな解決ができない...

修正

Dockerfile

FROM ruby:2.3.7
ENV LANG C.UTF-8

RUN apt-get update -qq && apt-get install -y build-essential libpq-dev nodejs

ENV APP_ROOT /usr/src/app
RUN mkdir $APP_ROOT
WORKDIR $APP_ROOT

ADD app/Gemfile $APP_ROOT/Gemfile # ここじゃないか...?
ADD app/Gemfile.lock $APP_ROOT/Gemfile.lock

RUN gem install bundler #追加.これが必要?
RUN bundle install

ADD app $APP_ROOT

また失敗

Dockerfile

FROM ruby:2.3.7
ENV LANG C.UTF-8

RUN apt-get update -qq && apt-get install -y build-essential libpq-dev nodejs

ENV APP_ROOT /app #ここのパスがappであればうまくいく
RUN mkdir $APP_ROOT
WORKDIR $APP_ROOT

ADD app/Gemfile $APP_ROOT/Gemfile 
ADD app/Gemfile.lock $APP_ROOT/Gemfile.lock 

RUN gem install bundler 
RUN bundle install

ADD app $APP_ROOT

成功した...

理由がよくわかっていないのが残念だが,コピー先がうまくいっていなかったのだろうか.ディレクトリがうまく作成できていなかったのだろうか

localhost:3000でつなぐと,Railsの初期画面が...!!!

やっとのことでRailsをDocker上で動かせました.

続く...

ktaka.hatenablog.com

参考

以下の記事を参考にさせていただきました.

既存のRailsアプリをDocker化し、ローカルのDBに接続する方法 | Enjoy IT Life

本記事について

本記事は,学習を目的に書かれています.

間違い,改良案などございましたら,コメントしていただけると幸いです.

基本的に編集途中ですので,何を書いてほしいかもコメントいただけると,

その情報を中心に追記します.