LoginSignup
28
34

More than 5 years have passed since last update.

Docker上でRails環境をバージョン指定して構築

Last updated at Posted at 2017-12-06

初めに

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

問題なく起動しましたね!
image.png

これでdocker環境があればチームで同じ開発環境を作れそう。
便利な世の中になったなぁ。

28
34
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
28
34