0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

DockerでRails「Yay! You’re on Rails!」の表示

Last updated at Posted at 2018-08-15

#【目標】docker上でrailsアプリを作って初期画面を表示させます。

▼完成の概念イメージ図
docker-rails.jpg
##0.前知識・準備

▼知識
①イメージ
 →設計図のようなもの
②コンテナ(インスタンス)
 →設計図を元に建てられた家みたいなもの
 →1つのイメージから、幾つでも家を建てられる

▼前準備

デスクトップに「test_app」フォルダを作る。

ターミナルを開き、cd+フォルダを「ドラッグ・アンド・ドロップ」し、test_appフォルダに移動する。

$ cd /Users/kaz/Desktop/test_app

##1.イメージの確認

docker imagesコマンドを実行すると、Docker Machineに保存されているイメージを確認できます。

$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE

「dockerを始めて使う人」or「まだイメージを取得したことない人」は上記のように、何も表示されません。

##2.イメージの取得

今回はDocker HubにあるRailsリポジトリからコンテナイメージを取得します。

取得はdocker pull コマンドで行えます。

$ docker pull rails
Using default tag: latest
latest: Pulling from library/rails
75a822cd7888: Pull complete 
57de64c72267: Pull complete 
4306be1e8943: Pull complete 
871436ab7225: Pull complete 
afb684ad7765: Pull complete 
c2807e33cf84: Pull complete 
7025772f9b60: Pull complete 
73729083bf6c: Pull complete 
7dd42782d26e: Pull complete 
6bd3d457e27a: Pull complete 
4cd427c44fca: Pull complete 
Digest: sha256:aec52fe81ff0e99d64174001fbdf44c3bc9e1869756dec05c447f52a0fe637e7
Status: Downloaded newer image for rails:latest

(rails:バージョンでバージョン指定もできますが、何もつけないと、最新バージョンが選択されます。)

以上で取得が完了しました。

再度イメージの確認をするとREPOSITORYが"rails"という名前のイメージが取得されているのが確認できます。

$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
rails               latest              660f41442a27        15 months ago       840MB

##3.コンテナの作成

コンテナの稼働状況を確認するコマンドをまとめます。

#「現在起動しているコンテナ」の表示
$ docker ps
#「最後に起動したコンテナ」の表示
$ docker ps -l
#「最後に起動したコンテナから指定数分のコンテナ」の表示
$ docker ps -n=2
#「すべてのコンテナ」の表示
$ docker ps -a

まず、docker psコマンドで現在のコンテナの稼働状況を確認します。

$ docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES

現状、ひとつも稼働していないため、何も表示されません。

それでは、先ほど取得したイメージ(rails)からコンテナを作成します。

$ docker run -it rails /bin/bash
root@df384f27120d:/#

上記のコマンドを実行すると作成と同時にコンテナも起動し、そのタイミングで自動的にログインします。

また、ログイン状態を抜けるには"control"を押した状態で"P、Q"を順番に押します。

この抜けることを「dettach(デタッチ)」と呼びます。

サーバからログアウトする感覚でexitコマンドを実行すると、起動したコンテナも停止します。

それでは、"control + P、Q"で抜けた後に再度docker psコマンドで稼働状況を確認します。

$ docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
2a33039ddd24        rails               "irb"               2 minutes ago       Up 3 minutes                            peaceful_chatterjee

STATUSがUPになっているのが確認できます。

先ほどdettachしたrailsコンテナに再度ログインするには、docker attach <CONTAINER IDまたはNAME>を実行します。

$ docker attach peaceful_chatterjee
root@df384f27120d:/#

それでは一旦、exitコマンドでコンテナを抜けて停止させましょう。

root@df384f27120d:/# exit
exit

確認してみると表示されなくなりました。

$ docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES

先ほど案内しましたが、これはdocker psコマンドが「現在稼働中のコンテナのみを表示する」からです。

"-a"オプションを付けることで、停止中のも含めて全てのコンテナを表示します。

$ docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                      PORTS               NAMES
df384f27120d        rails               "/bin/bash"         4 minutes ago       Exited (0) 27 seconds ago                       peaceful_chatterjee

ここでは停止しているのでSTATUSがExitedとなっています。

「Exited=停止」という意味です。

##4.コンテナの起動

コンテナイメージを作成した後はdocker start で起動することができます。

$ docker start peaceful_chatterjee
peaceful_chatterjee

STATUSがUpとなり、起動しているのが確認できます。

$ docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                      PORTS               NAMES
df384f27120d        rails               "/bin/bash"         9 minutes ago       Up 25 seconds                                   peaceful_chatterjee

##5.コンテナの停止

起動と同様に、docker stop で停止することができます。

$ docker stop peaceful_chatterjee
peaceful_chatterjee

STATUSがExitedとなり、停止しているのが確認できます。

$ docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                      PORTS               NAMES
df384f27120d        rails               "/bin/bash"         12 minutes ago      Exited (0) 51 seconds ago                       peaceful_chatterjee

また、docker startコマンドで起動させた場合でも、docker attach後にexitコマンドで抜けると停止します。

##6.コンテナに名前をつける

先程railsイメージからコンテナを作成する際docker run -it rails /bin/bashとしました。

そうすると「peaceful_chatterjee」のように勝手にコンテナ名をつけられてしまいます。

体験していただいた通りコンテナ名を指定する機会は多いです。

これでは、コンテナ名を覚えるのも管理するのも大変ですよね?

コンテナ名を指定するには、コンテナ作成の際に--name=<コンテナ名>で指定してあげる必要があります。

今回は「rails_app」という名前をつけてみます。

$ docker run -it --name=rails_app rails /bin/bash
root@9c512fc4a48f:/#

それでは、"control + P、Q"で抜けた後に再度docker psコマンドで稼働状況を確認します。

$ docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED              STATUS              PORTS               NAMES
9c512fc4a48f        rails               "/bin/bash"         About a minute ago   Up About a minute                       rails_app

NAMEを確認してください。ちゃんと「rails_app」と名付けられています。

##7.「ポート番号の共有」と「ボリュームの共有」

誤解を恐れず説明します…

コンテナとは、別PCだと思ってください。

root@9c512fc4a48f:/#と表示されたら、別PCにいる状態です。


▼ポート番号の共有

別PCで表示している内容を、ローカルの環境で表示させてあげる

▼ボリュームの共有

別PCでの変更を、ローカルの環境で反映させてあげる


「ポート番号の共有-p」と「ボリュームの共有-v」も、コンテナ作成時に行います。

「ローカルの環境:コンテナ」です。今回は「rails_app2」という名前をつけてあげましょう。

$ docker run -it --name=rails_app2 -p 3000:3000 -v /Users/kaz/Desktop/test_app:/home rails /bin/bash

##8.Railsアプリの作成

Railsで「hello_rails」というアプリを作成します。

root@f4ecef8f214c:/# cd home
root@f4ecef8f214c:/home# rails new hello_rails

…省略…

         run  bundle exec spring binstub --all
* bin/rake: spring inserted
* bin/rails: spring inserted
root@f4ecef8f214c:/home# 

コンテナ(別PC)で、Railsアプリの作成ができました。

これは、別PCで行われたことですので、通常ローカル環境には反映されませんが、

ローカルの「test_app」とコンテナの「home」のボリュームの共有を行っているため、

「test_app」にもアプリが作成されています。確認してみてください。

test_app_rails.jpg

作成した、アプリ(hello_rails)に移動します。

root@f4ecef8f214c:/home# cd hello_rails

ここで、Railsサーバーを起動します。

root@f4ecef8f214c:/home/hello_rails# rails s
=> Booting Puma
=> Rails 5.0.7 application starting in development on http://localhost:3000
=> Run `rails server -h` for more startup options
Puma starting in single mode...
* Version 3.11.4 (ruby 2.3.3-p222), codename: Love Song
* Min threads: 5, max threads: 5
* Environment: development
* Listening on tcp://0.0.0.0:3000
Use Ctrl-C to stop

先程、ローカル環境の「local:3000」とコンテナ(別PC)の「local:3000」を共有したので、

今、別PC上の「local:3000」に表示されている、画面がローカル環境の「local:3000」にも表示されているはずです。確認してください。

スクリーンショット 2018-04-18 19.00.55.png

##9.補足:execでコンテナに入る(attachとの違い)

先ほどdettachしたrailsコンテナに再度ログインするには、docker attach を実行すると言いました。attachでログインした場合exitでログアウトすると、コンテナのSTATUSがExitedになってしまいます。

しかし、コンテナにdocker exec -it /bin/bashで入ると、exitしてもSTATUSがUpのままなので、好きな方を使ってください。

$ docker exec -it rails_app2 /bin/bash
root@49fb59dc1879:/# exit
exit
$ docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS                    NAMES
49fb59dc1879        rails               "/bin/bash"         5 minutes ago       Up About a minute   0.0.0.0:3000->3000/tcp   rails_app2

以上、です!

0
1
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
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?