0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

DockerでのRails環境構築(個人的黙示録)

Posted at

Dockerfileの作成

-# ビルドコンテキスト
% mkdir product-register
% cd product-register
-# GemfileとGemfile.lockの作成
% touch Gemfile Gemfile.lock
-# Gemfileの編集
% vim Gemfile
product-register/Gemfile
source 'https://rubygems.org'
gem 'rails', '~>5.2'
-# Dockerfileの編集
% vim Dockerfile
product-register/Dockerfile
FROM ruby:2.5
RUN apt-get update && apt-get install -y && \
    buile-essential \
    libpq-dev \
    nodejs \
    postgresql-client \
    yarn
WORKDIR /product-register
COPY Gemfile Gemfile.lock /product-register/
RUN bundle install
-# コンテナの作成
% docker build .

##docker-compose.ymlの記述

-# docker-compose.ymlの編集
% vim docker-compose.yml
docker-compose.yml

version: '3'

services:
  web:
    build: .
    ports:
      - '3000:3000'
    volumes:
      - '.:/product-register'
    tty: true
    stdin_open: true
-# コンテナの立ち上げ
% docker-compose up -d
-# コンテナ内に入って作業をする場合 
% docker-compose exec web bash

##Railsのセットアップ

-# アプリの作成、DBの設定、bundleはDockerfileで行うので—skip
# rails new . —force —database=postgresql —skip-bundle
-# ホスト側でGemfileの内容が変わっていることを確認する
% cat Gemfile
-# bundle installする必要があるので一度停止する
# exit
$ docker-compose down
-# docker-compose upをすると前のイメージが使われるので再度buildを行う
$ docker-compose up —build -d
% docker-compose exec web bash
-# railsのサーバを起動
$ rails s -b 0.0.0.0

localhost:3000で接続できるがDBの設定を行っていないのでエラーページとなる。

##DBのセットアップ

config/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
  # http://guides.rubyonrails.org/configuring.html#database-pooling
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>

Passwordはセキュリティ的に直接書くのは望ましくないので環境変数で呼び出すようにする。

##docker-compose.ymlの変更

docker-compose.yml
version: '3'
# dockervolumeここにデータが保存される
volumes: 
  db-data:

services:
  web:
    build: .
    ports:
      - '3000:3000'
    volumes:
      - '.:/product-register'
# コンテナの環境変数設定、本来は直接パスワードを書いてはいけない。
    environment:
      - 'DATABASE_PASSWORD=postgres'
    tty: true
    stdin_open: true
# dbサービスが作られたら作成される
    depends_on:
      - db
# webからdbにアクセスできる
    links:
      - db
# postgresのコンテナ
  db:
    image: postgres
# ホストのdb-dataにデータを保管
    volumes:
      - 'db-data:/var/lib/postgresql/data'
    environment:
      - 'POSTGRES_USER=postgres'
      - 'POSTGRES_PASSWORD=postgres'

##docker-composeで起動

% docker-compose up -d
-# 2つのサービスが起動しているのが確認できる
Creating product-register_db_1 ... done
Recreating product-register_web_1 ... done
% docker-compose exec web bash
-# DBの作成
# rails db:create
Created database 'product-register_development'
Created database 'product-register_test'

データベースが作られているのが確認できる。
ここからRailsのアプリを作成することができる。

##アプリを作り動作を確認する

-# scaffoldで簡単なアプリを作る
# rails g scaffold product name:string price:integer vender:string
-# 作成したテーブルを定義する
# rails db:migrate
-# サーバを立ち上げる
# rails s -b 0.0.0.0

localhost:3000で接続でき、railsのページが表示されていることが確認できる。
localhost:3000/productsで作られたアプリに接続できる。

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?