Dockerを使ってみる

前回、CoreOSをインストールしたので、とりあえず、Dockerを使ってみます。

イメージの取得

ここでは、Ubuntu14.04のイメージを取得します。

core@localhost ~ $ docker pull ubuntu:14.04

取得したイメージは、以下のコマンドで確認できます。

core@localhost ~ $ docker images
REPOSITORY                       TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
ubuntu                           14.04               6cc0fc2a5ee3        4 weeks ago         187.9 MB

参考
https://hub.docker.com/_/ubuntu/

コンテナの開始

とりあえず、コンテナを開始ししてみます。

core@localhost ~ $ docker run ubuntu:14.04 /bin/echo 'Hello World!'
Hello World!

このコマンドでは、以下のことが行われました。

  • イメージからコンテナが作成され、コマンドに echo 'Hello World!'が指定された。(docker create)
  • コンテナ(Ubuntu14.04)が開始され、コンテナ内でコマンド(echo 'Hello World!')が実行された。(docker start)
  • コンテナが終了した。(docker stop)

ここで、コンテナを参照してみましょう。

core@localhost ~ $ docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                      PORTS                    NAMES
4b0a702d40c2        ubuntu:14.04        "/bin/echo 'Hello Wor"   24 seconds ago      Exited (0) 24 seconds ago                            modest_blackwell

先程実行したコンテナが終了した状態(Exited)で残っているので、削除しておきましょう。

core@localhost ~ $ docker rm 4b0a702d40c2
4b0a702d40c2
core@localhost ~ $ docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                      PORTS                    NAMES

削除できました。

対話型コンテナ

今度は、対話型コンテナを作成し、コンテナが勝手に終了しないようにします。

$ docker run -t -i --name=hoge ubuntu:14.04 /bin/bash
root@3e6834b9be7f:/#

コンテナが開始され、rootでログインした状態となりました。

-t と-i は対話型コンテナを作成する際のおまじないのようなものなので、必ず付けるようにして下さい。
また、--name=で名前を指定しています。名前をしておくと、dockerコマンドを実行する際にコンテナIDではなく、名前で指定できるので、扱いやすくなります。

では、ファイルを作成してみましょう。

root@2b2b4749fc71:/# touch /tmp/test.txt
root@2b2b4749fc71:/# ls /tmp
test.txt

ファイルが作成できました。

イメージの作成

それでは、コンテナを抜けてみましょう。

Ctrl+p Ctrl+q と入力しましょう。
※ exitで抜けると、コンテナが停止します。

root@3e6834b9be7f:/# core@localhost ~ $

コンテナを抜けました。

コンテナが実行中であることを確認しましょう。

core@localhost ~ $ docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS                    NAMES
3e6834b9be7f        ubuntu:14.04        "/bin/bash"         7 minutes ago       Up 7 minutes                                 hoge

ステータスが実行中(Up)であることが確認できました。

それでは、コンテナを停止してみましょう。

core@localhost ~ $ docker stop hoge
hoge
core@localhost ~ $ docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                      PORTS                    NAMES
3e6834b9be7f        ubuntu:14.04        "/bin/bash"         10 minutes ago      Exited (0) 24 seconds ago                            hoge

ステータスが終了(Exited)になりました。

それでは、現在の状態をイメージとして、コミットしてみましょう。

core@localhost ~ $ docker commit hoge hogehoge/hoge:test
573d208139f650db54ee35937648d1497633e3960907fadf744027cafba3efc8

それでは、作成したイメージを確認してみましょう。

core@localhost ~ $ docker images
REPOSITORY                       TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
hogehoge/hoge                    test                573d208139f6        23 seconds ago      187.9 MB
ubuntu                           14.04               6cc0fc2a5ee3        4 weeks ago         187.9 MB

作成できていることが確認できました。

コンテナへの再接続

コンテナを再開し、再開したコンテナに接続してみましょう。

core@localhost ~ $ docker start hoge
hoge
core@localhost ~ $ docker attach hoge
root@2b2b4749fc71:/#

接続できました。

ホストOS再起動

再度、ファイルを作成してみます。

root@2b2b4749fc71:/# touch /tmp/test2.txt
root@2b2b4749fc71:/# ls /tmp
test.txt  test2.txt

それでは、コンテナを終了し、CoreOS自体を再起動してみましょう。

root@2b2b4749fc71:/# exit
core@localhost ~ $ sudo reboot now
Connection to 192.168.56.101 closed by remote host.
Connection to 192.168.56.101 closed.

コンテナを確認してみましょう。

core@localhost ~ $ docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                     PORTS               NAMES
2b2b4749fc71        ubuntu:14.04        "/bin/bash"         About an hour ago   Exited (0) 43 seconds ago                       hoge

コンテナが停止状態で残っています。
それでは、コンテナを再開し、再開したコンテナに接続し、先程作成したファイルを確認してみましょう。

core@localhost ~ $ docker start hoge
hoge
core@localhost ~ $ docker attach hoge
root@2b2b4749fc71:/# ls /tmp
test.txt  test2.txt

最後に作成したファイルが残っているのが確認できました。
このように、ホストOS再起動後も、コンテナの状態は保持されています。

それでは、このコンテナを削除します、

root@2b2b4749fc71:/# exit
core@localhost ~ $ docker rm hoge
hoge

作成したイメージからコンテナの開始

先程作成したイメージから開始してみたいと思います。

$ docker run -t -i --name=hoge hogehoge/hoge:test /bin/bash
root@3e6834b9be7f:/#

先程作成したファイルを確認してみましょう。

root@35fff3d2180d:/# ls /tmp
test.txt

イメージ作成時の状態になっていることが確認できました。

それでは、このコンテナも削除しておきます。

root@2b2b4749fc71:/# exit
core@localhost ~ $ docker rm hoge
hoge

次回は、Dockerを使用し、Ubuntu14.04のデスクトップ環境を作成し、RDPで接続してみたいと思います。