Dockerであそぶ(2)Centos7を実行する


ここ1,2年で注目を集めている仮想化技術の1つ「Docker」について、今更感がありますが試していきたいと思います。
他の仮想化技術との違いや特徴、開発環境として使っていくにはどうすればいいかなどを紹介していきたいと考えています。

これまでの連載

イメージを取得する

前回はHelloWorldを出力し動作確認をするところにとどめましたが、いよいよコンテナを起動してみたいと思います。
まずは、コンテナのイメージを取得します。自分で1から作ることもできるはず(未確認)ですが、公式サイト(Docker Hub)からよく使われるディストリビューションであればダウンロードすることが可能です。
Centosの最新版(7.1)を使ってみます。

以下のURLにアクセスします。
https://hub.docker.com/

ページ上部のSearchで「centos」と入力します。
スクリーンショット 2015-11-13 15.49.48

一番上に表示されているものが「official(公式)」のイメージになります。「centos」というのがイメージの名前になります。
スクリーンショット 2015-11-13 15.50.04

一般ユーザーが作成したイメージもこのサイトに登録することができ、その場合は「ユーザー名/任意の名前」とするのが慣例のようです。
たとえば私であれば「sudoy/centos7」といった具合です。

では、イメージの名前がわかりましたのでDocker Quickstart Terminalを起動します。
起動したら、以下のコマンドを実行してください。

$ docker pull centos:latest

イメージ名の後ろに付いている「latest」は「タグ」と呼ばれるもので、この場合は最新版ということを表します。詳しくはDocker Hubで検索した時に「DETAILS」をクリックしてみてください。

実行結果は以下のようになるはずです。

sudoy@SUDOY-NOTE MINGW64 ~
$ docker pull centos:latest
latest: Pulling from library/centos
fa5be2806d4c: Pull complete
0cd86ce0a197: Pull complete
e9407f1d4b65: Pull complete
c9853740aa05: Pull complete
e9fa5d3a0d0e: Pull complete
Digest: sha256:c96eeb93f2590858b9e1396e808d817fa0ba4076c68b59395445cb957b524408
Status: Downloaded newer image for centos:latest

ちゃんとイメージを取得できたか確認しましょう。以下のコマンドを実行してください。

$ docker images
sudoy@SUDOY-NOTE MINGW64 ~
$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
hello-world         latest              0a6ba66e537a        4 weeks ago         960 B
centos              latest              e9fa5d3a0d0e        4 weeks ago         172.3 MB

前回HelloWorldを出力するときに使ったイメージと、いま取得した「centos」のイメージが登録されていることがわかります。
一番右の「VIRTUAL SIZE」をみると、centosのイメージがわずか172MB程度であることもわかります。(少ない!!)

イメージを実行する

イメージを取得することができましたので、実行してみましょう。以下のコマンドを実行してください。

$ docker run -it centos:latest bash
sudoy@SUDOY-NOTE MINGW64 ~
$ docker run -it centos:latest bash
[root@fdc464d19656 /]#

コマンドを実行するとすぐにプロンプトが変わり、centosへ接続されたことが確認できたかと思います。
この一瞬で仮想マシンが起動したことになります。(早い!!)

オプションの意味はそれぞれ以下のようになっていますが、ひとまずおまじないと思ってください。

オプション 意味
-i (–interactive) コンテナの標準入力を開く。/bin/bashなどでコンテナを操作する際に指定。
-t (–tty) tty(端末デバイス)を確保する。/bin/bashなどでコンテナを操作する際に指定。

以下のコマンドを実行してコンテナに足あとを残しておきましょう。

# touch techprojin
[root@15ad0cb87291 /]# touch techprojin
[root@15ad0cb87291 /]# ls
bin  etc   lib    lost+found  mnt  proc  run   srv  techprojin  usr
dev  home  lib64  media       opt  root  sbin  sys  tmp         var

exitでコンテナから抜けます。

コンテナに再接続する…?

では、もう一度同じようにコンテナを起動し、先ほど作成したファイルが存在するか確認してみましょう。

sudoy@SUDOY-NOTE MINGW64 ~
$ docker run -it centos:latest bash
[root@d68d43f3676f /]# ls
bin  etc   lib    lost+found  mnt  proc  run   srv  tmp  var
dev  home  lib64  media       opt  root  sbin  sys  usr

先ほどルートディレクトリに作成したはずの「techpjin」ファイルがなくなっているのがわかります。
Dockerでは、「docker run」コマンドを実行するたびに新しいコンテナ(仮想マシン)が作成され、exitで終了するとそこでコンテナは停止します。
1回目にファイルを作成したコンテナと、2回目にrunコマンドで実行したコンテナは別の仮想マシン(コンテナ)という扱いになります。
そのため、作成したはずの「techpjin」ファイルはなくなってしまったのです。

では最後に、これまで作成しコンテナの一覧を参照するコマンドを紹介します。

$ docker ps -a
sudoy@SUDOY-NOTE MINGW64 ~
$ docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                      PORTS               NAMES
d68d43f3676f        centos:latest       "bash"              4 minutes ago       Exited (0) 6 seconds ago                        silly_stallman
15ad0cb87291        centos:latest       "bash"              20 minutes ago      Exited (0) 10 minutes ago                       fervent_wright
cf1e6811679d        hello-world         "/hello"            2 hours ago         Exited (0) 2 hours ago                          desperate_lichterman

これまで作成したコンテナは全部で3つ。第1回で作成した「Hello World」、今回作成した「centos」が2つということがわかります。
上から2つ目のコンテナが「techpjin」ファイルを作成したコンテナ、一番上のコンテナが2回目のコマンドによって作成されたコンテナになります。

なお、-aオプションをつけずに実行すると現在実行中のコンテナの一覧が表示されます。
今はコンテナを起動していませんので、何も表示されないはずです。

では今回はここまでにしたいと思います。

  • このエントリーをはてなブックマークに追加

PAGE TOP