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で接続してみたいと思います。

VirtualBoxへのCoreOSのインストール

CoreOSをVirtualBoxにインストールします。
尚、インストール完了まで、(SSHを含め)他のツールは何も使用しません。
※リモートからログインする為のパスワード以外、何も設定しません。

ダウンロード

以下のURLより、最新のStable ISO版をダウンロードします。 https://coreos.com/os/docs/latest/booting-with-iso.html
※ 2016/02/09現在 : CoreOS 835.12.0.

仮想マシンの作成

VirtualBox上に、以下のように仮想マシンを作成します。

名前とオペレーティングシステム

  • 名前 : CoreOS ← 任意です。
  • タイプ : Linux
  • バージョン : Other Linux (64-bit) ← これでいいと思うのですが...

メモリーサイズ

  • 2048MB ← 多めにしておいた方がいいと思います。

ハードディスク

  • 仮想ハードディスクを作成する(C)

ハードディスクのファイルタイプ

物理ハードディスクにあるストレージ

  • 可変サイズ(D)

ファイルの場所とサイズ

  • CoreOS
  • 40GB ← 多めにしておいた方がいいと思います。

ネットワークアダプターの追加

ホスト側からSSHによるアクセスがをする必要がありますので、ホストオンリーアダプターを追加します。

ネットワーク

  • アダプター 1 : NAT
  • アダプター 2 : ホストオンリーアダプター

ISOファイルのマウント

先程ダウンロードしたISOファイルをマウントします。

ストレージ

仮想マシンの起動

仮想マシンを起動します。

  :
localhost login: core (automatic login)
CoreOS stable (855.12.0)
Update Strategy: No Reboots
core@localhost ~ $ _

※ この状態では、まだインストールされていません。

IPアドレスの確認

IPアドレスを確認します。

core@localhost ~ $ ip addr show
1: lo: <LOOPBACK,UP,LOWER_UP> ...
        :
    inet 127.0.0.1/8 scope host lo
        :
2: enp0s3 <BROADCAST,MULTICAST,UP,LOWER_UP> ...
        :
    inet 10.0.2.15/24 brd 10.0.2.255 scope global dynamic enp0s3
        :
3: enp0s8 <BROADCAST,MULTICAST,UP,LOWER_UP> ...
        :
    inet 192.168.56.101/24 brd 192.168.56.255 scope global dynamic enp0s8
        :

IPアドレスは、それぞれ、以下のネットワークとなっています。

  • 10.0.2.15 : NAT
  • 192.168.56.101 : ホストオンリーアダプター

cloud-config.ymlの生成

パスワードを暗号化した文字列を生成し、cloud-config.ymlの元とします。

core@localhost ~ $ openssl passwd -1 > cloud-config.yml
Password:
Verifying - Password:

この段階のcloud-config.yml

$1$OM8XuhTK$n7uS5SdF3ZMuyxX9tuo1n1 

cloud-config.ymlを以下のように編集します。

core@localhost ~ $ vi cloud-config.yml
#cloud-config
users:
  - name: core
    passwd: $1$OM8XuhTK$n7uS5SdF3ZMuyxX9tuo1n1 
    groups:
      - sudo
      - docker

※ キーボート設定は英語になっていると思います。日本語キーボードの場合、コロン「:」は、「Shift」+「;」で入力できます。

インストール

CoreOSをインストールします。

core@localhost ~ $ sudo coreos-install -d /dev/sda -C stable -c cloud-config.xml

シャットダウン

シャットダウンします。

core@localhost ~ $ sudo shutdown now

ISOファイルのマウント解除

ISOファイルのマウントを解除します。

仮想マシンの起動

仮想マシンを起動します。

  :
localhost login: _

ログイン画面が表示されていますが、ローカルではログインできません。

ホストマシンからログイン

ホストマシンより、SSHを使用してログインします。

$ ssh core@192.168.56.101

ログインできれば、成功です。

次回は、とりあえず、Dockerを使ってみたいと思います。