Motomichi Works Blog

モトミチワークスブログです。その日学習したことについて書いている日記みたいなものです。

vagrantその0029 Windows10 Home + Vagrant + centos-7.3.boxで作った環境にdockerをインストールする

参考にさせて頂いたページ

Vagrantのインストールについて

centos7にdockerをインストールする手順について

railsの環境構築について

今日の環境

はじめに

WSLでdocker試したけど上手くいかなかったので、vagrantにdockerをインストールしてrailsの環境構築までしてみました。

VirtualBoxVagrantをインストール

Vagrant久しぶりなので、新しいバージョンをインストールしなおしました。

以下のページを参考にさせていただきました。

Vagrant+Virtualboxを使いWindows10上にCentOS7.3+php7+MySQL5.7の環境を構築する - Qiita

適当に vagrant up して、 vagrant ssh するところまでやりました。

あとはVagrantに関してやったのはVagrantfileの以下行をコメントインしたぐらいです。

config.vm.network "private_network", ip: "192.168.33.10"

コンテナ内と同期するディレクトリを作成する

$ su
  パスワード入力(vagrant)
# cd /var/
# mkdir www
# chown root:vagrant www
# exit
$ cd /var/www/
$ mkdir rails_projects

dockerをインストール

以下のページを参考にさせていただきました。

CentOS7にDockerをインストールする - Qiita

vagrantの環境自体にはapacheなどのアプリケーションは入れていません。

yum -y update
yum -y vim

してから、あとは参考ページにならってリポジトリの追加と、docker-ceの最新バージョンをインストールしました。

centosイメージをpullする

docker pull centos:7

Dockerfileを作成する

移動します。

cd /var/www/rails_projects

Dockerfileを作ります。

vim Dockerfile

以下の記述内容です。

FROM centos:7
MAINTAINER motomichi

# set ruby version to be installed
ENV ruby_ver="2.6.2"

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
RUN yum -y install vim sudo

# install ruby & bundler
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

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

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 bundler; gem install --no-ri --no-rdoc rails;

# make workdir for rails projects
RUN mkdir -p /work

上記したDockerfileはRUN source /etc/profile.d/rbenv.sh; gem update --system; gem install rails -v '5.1.2';の方が良いかもしれない。

Dockerfileをもとにrailsがインストールされたdockerイメージを作成する

docker buildします。 motomichi/railsの部分は任意のタグ名です。

docker build -t motomichi/rails ./

imageが作成されたか確認してみます。

docker images

以下のように表示されて、イメージが追加されたのがわかります。

REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
motomichi/rails     latest              281f5fc96ae7        41 seconds ago      1.09GB
centos              7                   5182e96772bf        4 weeks ago         200MB

コンテナを作成して起動する

今のディレクトリを一応確認しておきます。

pwd

以下のように表示されました。

/var/www/rails-projects

さきほど作成したイメージからコンテナを作成して起動します。

docker run -i -d -p 8080:3000 -v "${PWD}:/work" --name 'rails' motomichi/rails

コンテナ一覧を確認します。

docker ps -a

以下のように表示されました。

CONTAINER ID         IMAGE           COMMAND        CREATED          STATUS              PORTS               NAMES
16e3a93c10d4    motomichi/rails   "/bin/bash"      14 seconds ago    Up 13 seconds     0.0.0.0:8080->3000/tcp   rails

新しくRails projectを作成する場合

コンテナに入ります。

$ docker exec -it rails /bin/bash

コンテナ内でrails newします。

# cd /work
# rails new project_1

gem 'mini_racer', platforms: :rubyの下あたりに gem 'therubyracer', platforms: :ruby をGemfileに追記します。
ここはrailsのバージョンによって微妙に違います。

bundle installします。

# bundle install

railsします。

# rails s

コンテナを作成するときに、8080 => 3000 にしているので、
http://192.168.33.10:8080/ にアクセスするとrailsのスタートページが表示されるはず。

既にrails projectがある場合

何かGemfileとかあると思いますのでrails newせずにbundle installすると思います。