はじめに
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(グループ名)
次に、Dockerfile
とGemfile
に書き込んでいく。
(vimを使っても良いが今回は省略)
# コメントは削除してください
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
source 'https://rubygems.org'
gem 'rails', '5.2.2'
Gemfile.lock
は空で良いので特にいじりません。
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
というフォルダの中に入っています。
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 コンテナ内に一般ユーザーを作成する