0
0

More than 1 year has passed since last update.

dockerとdocker composeでwebアプリをdocker化する方法

Posted at

Railsアプリをdocker化する方法をまとめてます。

環境

  • docker: 20.10.12
  • Ruby: 3.2.2
  • Rails: 7.0.6
  • DB: PostgreSQL 12

Docker化の手順

  1. Dockerfileの作成
    Dockerfileを作成し、以下を記述する。

    Dockerfile
    FROM ruby:3.2.2
    RUN apt-get update -qq && apt-get install -y build-essential libpq-dev nodejs
    WORKDIR /myapp
    ADD Gemfile Gemfile.lock /myapp/
    RUN bundle install
    
  2. docker-compose.ymlの作成
    docker-compose.ymlを作成し、以下を記述する。

    docker-compose.yml
    version: '3'
    
    volumes:
      db-data:
    
    services:
      web:
        build: .
        command: bundle exec rails s -p 3000 -b '0.0.0.0'
        environment:
          - 'DATABASE_PASSWORD=${POSTGRES_PASSWORD}'
        volumes:
          - .:/myapp
        ports:
          - "3000:3000"
        depends_on:
          - db
      db:
        image: postgres:12
        environment:
          - 'POSTGRES_PASSWORD=${POSTGRES_PASSWORD}'
        volumes:
          - 'db-data:/var/lib/postgresql/data'
    
  3. DBの設定
    config/database.yml を以下のように書き換える。

    config/database.yml
    default: &default
      adapter: postgresql
      encoding: unicode
      host: db
      user: postgres
      port: 5432
      password: <%= ENV.fetch("DATABASE_PASSWORD") %>
      pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>  
    
    development:
      <<: *default
      database: myapp_development
    
    test:
      <<: *default
      database: myapp_test  
    
  4. DBパスワードの設定
    .envを作成し、以下を記述する。

    .env
    POSTGRES_PASSWORD=任意のパスワードを記述
    

動作確認

  1. イメージの作成
    以下コマンドを実行し、イメージを作成する。

    $ docker-compose build
    
  2. DB 作成
    以下コマンドを実行し、DB を作成する。

    $ docker-compose run web rake db:create
    $ docker-compose run web rails db:migrate
    
  3. コンテナの作成・起動
    以下コマンドを実行し、コンテナを作成・起動する。

    $ docker-compose up
    
  4. 動作確認
    http://localhost:3000/ にアクセスする

0
0
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
0
0