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上に、以下のように仮想マシンを作成します。
名前とオペレーティングシステム
メモリーサイズ
- 2048MB ← 多めにしておいた方がいいと思います。
ハードディスク
- 仮想ハードディスクを作成する(C)
ハードディスクのファイルタイプ
- VDI (VirtualBox Disk Image)
物理ハードディスクにあるストレージ
- 可変サイズ(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を使ってみたいと思います。