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

GitHub に上がっている Rails アプリを Docker 化した手順をまとめてみました。

使用環境
OS Windows
エディタ VSCode

エラー

shebang line ending with \r may cause problems

上記のエラーが docker-compose build の際に発生しました。

上記のエラーが発生する理由は LinuxWindows の改行コードの違いによるものです

そのため お使いの OS が Windows の場合エラーが発生しないように事前にターミナルから設定を行いエラーを回避します。

$ git config --global core.autocrlf false

上記の設定を行うことで git clone を行う際に改行コードが LF から CRLF に自動で変換されるのを防ぎます。

1. リポジトリをクローンしてローカルの環境を作成

$ git clone <リポジトリ名>

2. クローンしたリポジトリディレクトリに移動する

$ cd <リポジトリ名>

3. Dockerfile を作成

$ code Dockerfile

Dockerfileの内容

FROM ruby:3.2.2

RUN apt-get update -qq && apt-get install -y \
 build-essential \
 libpq-dev \
 nodejs \
 postgresql-client \
 yarn

WORKDIR /rails-docker

COPY Gemfile Gemfile.lock /rails-docker/

RUN bundle install

4. docker-compose.yml を作成

$ code 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'
    ports: - '3000:3000'
    volumes: - '.:/rails-docker'
    environment: - 'DATABASE_PASSWORD=postgres'
    tty: true
    stdin_open: true
    depends_on: - db
    links: - db

  db:
    image: postgres:12
    volumes: - 'db-data:/var/lib/postgresql/data'
    environment:
     - 'POSTGRES_USER=postgres'
     - 'POSTGRES_PASSWORD=postgres'
     - 'POSTGRES_HOST_AUTH_METHOD=trust'

5.database.yml を編集する

$ code config/database.yml

database.ymlの内容

  default: &default
    adapter: postgresql
    encoding: unicode
+   host: db
+   user: postgres
+   port: 5432
+   password: <%= ENV.fetch("DATABASE_PASSWORD") %>
    # For details on connection pooling, see Rails configuration guide
    # https://guides.rubyonrails.org/configuring.html#database-pooling
    pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>

6. docker-compose

1. docker-compose build を行い Docker image を作成します

$ docker-compose build

2. docker-compose up -d を行いコンテナを作成

$ docker-compose up -d

3. docker-compose exec web bash コンテナを起動しコンテナに入る

$ docker-compose exec web bash

7. DB の作成

1. DataBase を作成する

$ rails db:create

2. DataBase を更新する

$ rails db:migrate

8. 動作確認を行う

localhost:3000 にアクセスを行い動作を確認する

https://localhost:3000

参照

Docker について

https://docs.docker.jp/compose/rails.html

https://www.udemy.com/course/aidocker/

改行コードについて

https://wa3.i-3-i.info/word11576.html

https://zenn.dev/gekal/articles/git-line-endings-practices