桜色HelloWorld

アイマスP兼エンジニアの雑記。

DockerでRailsチュートリアル(環境構築編)

Webアプリの開発技術を身に着けるため、Ruby on Rails チュートリアル をやることにしました。 チュートリアルでは AWS Cloud9 を使って説明していますが、私はDockerの環境でやることにしましたので、やったことを残します。

私のように右も左もわからない方のために、できるだけ細かく書いておきますので参考にしていただけたら幸いです。

対象者

・どの言語でもいいからWebアプリの技術を勉強したい
RubyRails)を触ってみたいけど、何からやったらいいかわからない
・Dockerを触ってみたいけど二の足を踏んでいる

などなど

ホスト環境

OS : Windows 10 Pro 64bit
CPU : Intel Core i7
メモリ : 16GB

今回は Docker for Window を使うため、Window 10 Pro 64bit は必須です。
Windows 7 などで構築する場合は Oracle VM VirtualBox を使う必要があります)

Dockerインストールの前に

色々な所で「Dockerはコンテナ型の仮想化環境を提供するオープンソースソフトウェア」と紹介されています。
私が最初に思ったのは、コンテナ型って何だ……? でした。そして、色々と調べてみましたが、何となくのイメージを掴むのが限界でした。
こんな状態で触っても大丈夫だろうか、と心配にはなりましたが、仮にもエンジニアを名乗っています。とりあえず触ってみながら考えればいいか、と割り切ることにしました。

ということで、何となくの情報を仕入れたら体当たりで触ってみましょう。何事も trial and error です。

Docker CE インストール

まずは Docker Store へ行き、GET DOCKER CE を選択。 f:id:rikka-rt:20181027121936p:plain:w400

次に一覧の中から、Windows用の Docker CE を探して選択。 f:id:rikka-rt:20181027121944p:plain:w600

あとは、右側の Get Docker でダウンロードができます。
Get Docker が表示されていない方は、ログインしていないのが原因なので、Docker ID を取得してログインしておきましょう。 f:id:rikka-rt:20181027121950p:plain:w600

ダウンロードが終わったらさっそくインストールしましょう。
途中で、Windowsコンテナ使う? と聞かれますが、デフォルト(使わない)のまま続行。 後から変更できるようなので、もう少し理解が深まってから使用有無を決めます。

もし上手くいかない場合は、先人に倣いましょう。(Hyper-Vの設定が必要になる場合もあります)
参考:【備忘録】Docker for Windows インストール1

動作確認

インストールが終わったら、以下のアイコンから起動すると、タスクトレイにDockerが常駐します。
f:id:rikka-rt:20181027131902p:plain:w80

起動時に以下の画面が出た場合は、Docker ID でログインしておきましょう。
f:id:rikka-rt:20181027132943p:plain:w200

コマンドプロンプトPowerShellで、以下のコマンドを実行してください。
正しくバージョンが表示されていれば、インストール完了です。

> docker -v
Docker version 18.06.1-ce, build e68fc7a

Railsチュートリアル用のコンテナ作成

さっそく環境を作っていきましょう。

まずは、Ruby用のイメージを入手します。イメージというのは、コンテナを作るためのベース情報です。 今回は公式で公開されているRubyのv2.5.1を使います。
docker pull の後に「イメージ名:タグ」と入力することで、Docker Hub という場所からイメージが入手できます。 Docker Hub は Docker版の Git Hub だと思っておけば、ひとまずOKです。

> docker pull ruby:2.5.1

入手ができているか以下のコマンドで確認しましょう。一覧にrubyの2.5.1が表示されていれば大丈夫です。

> docker image ls

次はコンテナを作成しますが、いきなり長いコマンドです。指定するオプションは以下の通りです。

-it
コンテナを作った時に内部で操作することを宣言するオプションで、基本的に毎回使われるオプションです。
--name
コンテナの名前です、好きな名前を付けましょう。
-p
ホスト側とコンテナ側のポートを繋ぐためのオプションです。 Railsのサーバーを起動すると、デフォルトポートの3000がコンテナ側で使用されるそうなので、ホスト側のブラウザからアクセスする際は、 3000に対して何かしらのポート番号を紐づける必要があります。
Webで標準使用される80でも、開発でよく使われる8080などでも、好きなポートを指定しましょう。
-v
ホスト側のディレクトリをコンテナ側にマウントするためのオプションです。 先々で修正するRailsのファイルをホスト側のエディタで修正できるようにします。
また、事故でコンテナが消えてしまうとコンテナ内のファイルもすべて消えてしまいますが、 ホスト側と共有しているファイルはコンテナが消えても残るため、指定しておきましょう。
(コンテナがホストに依存するのは良くないとする論もありますが、今はそこまで気にしなくて大丈夫です)

残りは、イメージ名:タグとコンテナ作成時に実行するコマンドです。

> docker container run -it --name [コンテナ名] -p [ホスト側ポート]:3000 -v [ディレクトリパス]:/var/www/ ruby:2.5.1 /bin/bash

実行すると、コンソールが「root@xxxxx:/#」に変わるはずです。変わっている場合、無事にコンテナの中に入れた状態になります。 試しに以下のコマンドを打ってみると、WindowsではなくLinuxの中にいることがわかると思います。

# ls -l

次にコンテナ作成時に指定したディレクトリに、何でもよいのでファイルを配置してください。 その後に、以下のコマンドで同じファイルがコンテナ内にも存在するか確認しましょう。 存在していれば、マウントも正しく行われています。(確認後、ファイルは削除して構いません)

# ls /var/www
test.txt

これで、チュートリアルを始める最低限の準備ができたことになります。
最後に、コンテナから抜けたら今回はお終いです。

と言っても、exitするだけです。

# exit

exitすると、コンソールがWindowsに戻りますので、以下のコマンドでコンテナを確認しましょう。 -a は稼働していないコンテナも表示するオプションです。(run後にexitすると、コンテナが停止してしまいます)

> docker container ls -a

まだチュートリアルの最初にすらたどり着いていませんが、少しずつ進めていこうと思います。 次回は、コンテナを起動するところから始めます。