読者です 読者をやめる 読者になる 読者になる

農園

Something is missing.

DockerとRailsのメモ

Docker

Linux向けのコンテナ技術。

https://docs.docker.com/compose/railsを元に以下の文章を作成

Dockerfile

イメージの構築を行うファイル。イメージ作成に関する命令を全て記載する必要がある。

命令の詳細はhttps://docs.docker.com/engine/reference/builder

Docker Machineとは

WindowsMac OSでDockerの実行環境を構築する機能。VirtualBoxを使う。

$ docker-machine create --driver virtualbox <マシン名>

ドライバーがvirtualboxの<マシン名>を作成する

$ docker-machine ls

マシンの一覧を表示する

$ docker-machine env <マシン名> 

<マシン名>に関する環境変数の確認

$ eval "$(docker-machine env <マシン名>)"

環境変数のセット

Docker Composeとは

複数のコンテナからなるサービスの構築を自動化する機能

Rails on Docker

DBコンテナとWebコンテナのみの簡単な設定だけど、詰まったのでメモ

Docker

Dockerfile:

FROM ruby:2.3.3
RUN apt-get update -qq && apt-get install -y build-essential libpq-dev nodejs
RUN mkdir /myapp
WORKDIR /myapp
ADD Gemfile /myapp/Gemfile
ADD Gemfile.lock /myapp/Gemfile.lock
RUN bundle install
ADD . /myapp

docker-compose.yml:

version: '2'
services:
  <DBコンテナ名>:
    image: postgres
  <WEBコンテナ名>:
    build: .
    command: bundle exec rails s -p 3000 -b '0.0.0.0'
    volumes:
      - .:/myapp
    ports:
      - "3000:3000"
    depends_on:
      - db

Railsを入れる準備

Gemfile:

source 'https://rubygems.org'

gem 'rails', '5.0.0.1'

Gemfile.lock:

$ touch Gemfile.lock

Dockerfileのビルド

rails newをする

$ docker-compose run <WEBコンテナ名> rails new . --force --database=postgresql --skip-bundle

docker-compose.ymlを通じDocker imageを作る。

$ docker-compose build

Railsの設定

database.ymlにhost名を記載する。

config/database.yml

default: &default
  adapter: postgresql
  encoding: unicode
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>

development: &development
  <<: *default
  database: app_development
  username: postgres
  host: <DBコンテナ名>

test:
  <<: *development
  database: app_test

DBの構築

$ docker-compose run web rake db:create

サービス用のコンテナの構築と起動

docker-compose up

DBコンテナのあれそれが出たあとにWebコンテナが立ち上がる

web_1  | * Listening on tcp://0.0.0.0:3000

http://0.0.0.0:3000にアクセスすると嬉しい