はじめに
railsを勉強しているのですが、勉強のために、サンプルコードなどを自分の環境上で動かしたかったのですが、
githubなどに上がっているサンプルコードをdocker上で立ち上げるのに苦労したのでメモします。
新規のプロジェクトを立ち上げる際のDockerFileの書き方は情報がたくさんあったのですが、
既存のものを立ち上げる際の情報はほとんど無くて、あってもRuby2.4のものだったりしたので、
いろいろなサイトを参考にして、Ruby2.5環境で既存のプロジェクトを立ち上げるためのコンテナ構築をしました。
Ruby2.5でのDocker環境構築
ディレクトリ構造(完成形)
workディレクトリでrailsアプリ(DockerFileのないもの)をクローンします。
sampleapp/
├ work
│ └ app/
│ └ config/
│ └ ...
│
├ Dockerfile
└ docker-compose.yml
作業用ディレクトリを作成し、GithubからRailsプロジェクト(DockerFileのないもの)をクローンします。
クローンしたら、dockerコマンドを入力するためにsampleappディレクトリに戻ります。
$ cd
$ mkdir sampleapp
$ cd sampleapp
$ mkdir work
$ cd work
$ git clone ....(URLを入れる)
$ cd ..
Dockerfile
FROM ruby:2.5
#日本語対応
ENV LANG C.UTF-8
#作業用ディレクトリを作成
ENV ROOT_PATH /work
RUN mkdir -p $ROOT_PATH
WORKDIR $ROOT_PATH
#Railsアプリに必要なパッケージをインストールする
RUN curl -sL https://deb.nodesource.com/setup_10.x | bash - \
&& apt-get install -y nodejs build-essential libpq-dev\
&& rm -rf /var/lib/apt/lists/*
#Rspec用chromedriver
RUN apt-get update && apt-get install -y unzip && \
CHROME_DRIVER_VERSION=`curl -sS chromedriver.storage.googleapis.com/LATEST_RELEASE` && \
wget -N http://chromedriver.storage.googleapis.com/$CHROME_DRIVER_VERSION/chromedriver_linux64.zip -P ~/ && \
unzip ~/chromedriver_linux64.zip -d ~/ && \
rm ~/chromedriver_linux64.zip && \
chown root:root ~/chromedriver && \
chmod 755 ~/chromedriver && \
mv ~/chromedriver /usr/bin/chromedriver && \
sh -c 'wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | apt-key add -' && \
sh -c 'echo "deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google-chrome.list' && \
apt-get update && apt-get install -y google-chrome-stable
ADD ./work/Gemfile $ROOT_PATH/Gemfile
ADD ./work/Gemfile.lock $ROOT_PATH/Gemfile.lock
RUN gem install bundler
RUN bundle install
ADD ./work $ROOT_PATH
docker-compose.yml
version: '3'
services:
db:
image: mysql:5.7
environment:
MYSQL_USER: root
MYSQL_ALLOW_EMPTY_PASSWORD: 1
ports:
- "3306:3306"
web:
build: .
command: bundle exec rails s -b 0.0.0.0
environment:
volumes:
- ./work:/work:cached
ports:
- "3000:3000"
links:
- db
railsアプリのconfig/database.ymlでデータベースとの接続情報を編集します。
以下、work/config/database.yml
default: &default
adapter: mysql2
encoding: utf8
pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
username: root
password:
host: db
# development環境だけ書き換えてます。
development:
<<: *default
username: root
password:
database: docker_development
test:
<<: *default
database: docker_test
production:
<<: *default
database: docker_production
username: root
password: <%= ENV['DATABASE_PASSWORD'] %>
設定が終わったらビルドします。
$ docker-compose build
$ docker-compose exec web rails db:create db:migrate
railsアプリに必要なパッケージやgemがインストールできるので、
終わったらdocker-compose upで起動させます。
localhost:3000でアプリのトップページにアクセスできます。
3306や、3000の部分はポートがかぶらないように、お好みの番号に設定できます。
※指定できないポートもあるので、エラーが出る際は下記のサイトなどを参考にするといいと思います。
開発中、ChromeでERR_UNSAFE_PORTエラーが出たときにチェックすべきこと(312エラー):http://nanoappli.com/blog/archives/7772
あとは新規からアプリを作成する時と同じように開発できます。
参考にしたサイト
既存railsプロジェクトのdocker運用開始時の作業録:https://www.dendoron.com/boards/50
Docker+既存Rails(+Puppeteer) やっぱりdockerで環境作るのを諦められなかった話:https://note.com/mick_sato/n/nfb521d6b2a4c
開発中、ChromeでERR_UNSAFE_PORTエラーが出たときにチェックすべきこと(312エラー):http://nanoappli.com/blog/archives/7772