LoginSignup
0
2

More than 3 years have passed since last update.

Docker-compose+Rails

Last updated at Posted at 2020-03-29

はじめに

Laravelで環境を構築するときは、Laradockが使えてとても楽だった。だけどrailsになると自分で作成しないといけないので、備忘録として作った。

目標

使いたいホストユーザーに合わせてユーザーを作成し、そのユーザーにsudo権限を付与したい。

環境構築

それでは環境を構築していく。パートは以下のように分かれる。
1.下準備
2.コマンド実行

下準備

フォルダとファイルを用意していく。またここで使いたいユーザーを確認しておく。

$ mkdir ディレクトリ名
$ cd ディレクトリ名
$ touch Dockerfile
$ touch Gemfile
$ touch Gemfile.lock
$ touch docker-compose.yml
$ id
uid=xxx(ユーザー名) gid=xxx(グループ名) groups=xxx(グループ名)

次に、DockerfileGemfileに書き込んでいく。
(vimを使っても良いが今回は省略)

Dockerfile
# コメントは削除してください
FROM ruby:2.5.3

# ユーザーを作成
ARG DOCKER_UID=1000 # IDとUSERは好みで変えてください
ARG DOCKER_USER=ubuntu
RUN useradd -m --uid ${DOCKER_UID} --groups sudo ${DOCKER_USER}

# インストールはrootで行う
RUN apt-get update -qq && \
    apt-get install -y build-essential \
                       libpq-dev \
                       nodejs

RUN mkdir /app # アプリ名は好みで変えてください
ENV APP_ROOT /app
WORKDIR $APP_ROOT

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

RUN bundle install

# 作成したユーザーに切り替える
USER ${DOCKER_USER}

ADD . $APP_ROOT
Gemfile
source 'https://rubygems.org'
gem 'rails', '5.2.2'

Gemfile.lockは空で良いので特にいじりません。

docker-compose.yml
version: '3'
services:
  db:
    image: mysql:5.7
    environment:
      MYSQL_ROOT_PASSWORD: password
      MYSQL_DATABASE: root
    ports:
      - "3306:3306"

  web:
    build: .
    command: rails s -p 3000 -b '0.0.0.0'
    volumes:
      - .:/app # アプリ名は対応さててください
    ports:
      - "3000:3000"
    links:
      - db

これで準備は完了です。

コマンド実行

$ docker-compose run web rails new . --force --database=mysql --skip-bundle

ここでdatabase.ymlを修正します。ファイルはconfigというフォルダの中に入っています。

database.yml
default: &default
  adapter: mysql2
  encoding: utf8
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
  username: root
  password: password # 追加
  host: db # docker-composeに合わせて変更

コンテナのビルド

$ docker-compose build
$ docker-compose up -d
$ docker-compose run web rails db:create
$ docker-compose up -d

このままではRailsのコマンドを叩くことができません。なのでそのためにコンテナに入ります。

$ docker ps
CONTAINER ID   IMAGE     PORTS                   NAMES
xxxxxxxxxxxx   app_web  0.0.0.0:3000->3000/tcp  app_web_1
# ここのコンテナIDをコピーしておいてください

$ docker exec -it xxxxxxxxxxxx /bin/bash
又は
$ docker exec -it app_web_1 /bin/bash
rootで入りたいときは
$ docker exec -it --user=root app_web_1 /bin/bash

# 以下のようになれば成功
ユーザー名@英数字12桁:/アプリ名$ railsのコマンド打ち込めます

# よく使うもの
$ docker-compose up -d # 起動
$ docker-compose restart # 再起動
$ docker-compose stop # 停止

おわりに

プログラミング初心者でもroot権限というのはなんか怖い。
抜けや、これは危ないんじゃないかというところはあると思うので、気づいた方はコメントお願いします。

参考

1.丁寧すぎるDocker-composeによるrails5 + MySQL on Dockerの環境構築(Docker for Mac)
2.とにかく簡単にDockerでRuby on Railsを動かしてみる(初心者向け)
3.Docker コンテナ内に一般ユーザーを作成する

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