#初めに
Docker上でRails環境を構築してみます。
以下の記事を参考にし過ぎています。m(_ _)m
https://qiita.com/takaeda/items/956e2cda03d289fe4630
railsのバージョン指定とgem install bundleが失敗してしまう部分(*)が修正点が差分になります。
*gem install bundlerだと途中で、ねえねえbundleに読み替えてもいい?と入力が求められて,
buildが失敗してします。
+で以下を参照
centosの公式リポジトリ
https://hub.docker.com/_/centos/
Dockerfile リファレンス
http://docs.docker.jp/v1.12/engine/reference/builder.html
#ゴール
Docker上で以下の環境を作ることをゴールにします。
- CentOS 7
- ruby 2.4.2
- rails 5.1.4
CentOSは実際にはなくても良いが普段yumに慣れているため構築する。
普段CentOS系を使っていればDockerfileの内容を理解し易いと思う。
#Docker環境
Docker version 17.06.1-ce, build 874a737
※DockerはDocker for Macを利用しています。
#結論
結論を先に書いてしまうと、以下のDockerfileを作ってbuildするだけ。(まじでDocker便利すぎ)
Dockerfileの作成
以下のようにDockerfileを作る
vi Dockerfile
FROM centos:7
# rubyとrailsのバージョンを指定
ENV ruby_ver="2.4.2"
ENV rails_ver="5.1.4"
# 必要なパッケージをインストール
RUN yum -y update
RUN yum -y install epel-release
RUN yum -y install git make autoconf curl wget
RUN yum -y install gcc-c++ glibc-headers openssl-devel readline libyaml-devel readline-devel zlib zlib-devel sqlite-devel bzip2
RUN yum clean all
# rubyとbundleをダウンロード
RUN git clone https://github.com/sstephenson/rbenv.git /usr/local/rbenv
RUN git clone https://github.com/sstephenson/ruby-build.git /usr/local/rbenv/plugins/ruby-build
# コマンドでrbenvが使えるように設定
RUN echo 'export RBENV_ROOT="/usr/local/rbenv"' >> /etc/profile.d/rbenv.sh
RUN echo 'export PATH="${RBENV_ROOT}/bin:${PATH}"' >> /etc/profile.d/rbenv.sh
RUN echo 'eval "$(rbenv init --no-rehash -)"' >> /etc/profile.d/rbenv.sh
# rubyとrailsをインストール
RUN source /etc/profile.d/rbenv.sh; rbenv install ${ruby_ver}; rbenv global ${ruby_ver}
RUN source /etc/profile.d/rbenv.sh; gem update --system; gem install --version ${rails_ver} --no-ri --no-rdoc rails; gem install bundle
docker buildでイメージを生成
Dockerfileを作成したディレクトリでbuildコマンドを実行
-t my_project/railsはタブ名なので任意
git clone部分は結構時間かかるかも
$ docker build -t my_project/rails .
最後にこんな感じで表示されれば成功
Successfully tagged my_project/rails:latest
ふむふむちゃんとできている。
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
my_project/rails latest f45aa2897fea About a minute ago 1.04GB
docker runでコンテナ起動
ドキドキしながらdockerコンテナを起動してみます。
あらかじめ3000ポートは割り当てておく。
$ docker run -i -d -p 3000:3000 --name rails my_project/rails
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
44ffd087b9e7 my_project/rails "/bin/bash" 4 seconds ago Up 2 seconds 0.0.0.0:3000->3000/tcp rails
railsでプロジェクト作成
docker execでコンテナ内へ
$ docker exec -it rails /bin/bash
rails newしてみると・・・
# rails new myapp
# cd myapp/
# ls -l
total 68
-rw-r--r-- 1 root root 1974 Dec 6 12:53 Gemfile
-rw-r--r-- 1 root root 4772 Dec 6 12:53 Gemfile.lock
-rw-r--r-- 1 root root 374 Dec 6 12:53 README.md
-rw-r--r-- 1 root root 227 Dec 6 12:53 Rakefile
drwxr-xr-x 10 root root 4096 Dec 6 12:53 app
drwxr-xr-x 2 root root 4096 Dec 6 12:53 bin
drwxr-xr-x 5 root root 4096 Dec 6 12:53 config
-rw-r--r-- 1 root root 130 Dec 6 12:53 config.ru
drwxr-xr-x 2 root root 4096 Dec 6 12:53 db
drwxr-xr-x 4 root root 4096 Dec 6 12:53 lib
drwxr-xr-x 2 root root 4096 Dec 6 12:53 log
-rw-r--r-- 1 root root 63 Dec 6 12:53 package.json
drwxr-xr-x 2 root root 4096 Dec 6 12:53 public
drwxr-xr-x 9 root root 4096 Dec 6 12:53 test
drwxr-xr-x 3 root root 4096 Dec 6 12:53 tmp
drwxr-xr-x 2 root root 4096 Dec 6 12:53 vendor
できたできた!
Gemfileのgem 'therubyracer'のコメントアウトを外してbundle install
(説明は省きますがtherubyracerがないと「Could not find a JavaScript runtime」を起こしちゃいます。)
# vi Gemfile
# bundle install
# rails s
=> Booting Puma
=> Rails 5.1.4 application starting in development
=> Run `rails server -h` for more startup options
Puma starting in single mode...
* Version 3.11.0 (ruby 2.4.2-p198), codename: Love Song
* Min threads: 5, max threads: 5
* Environment: development
* Listening on tcp://0.0.0.0:3000
Use Ctrl-C to stop
これでdocker環境があればチームで同じ開発環境を作れそう。
便利な世の中になったなぁ。