初老のボケ防止日記

おっさんのひとりごとだから気にしないようにな。

スポンサーリンク

今更だけどVagrantでも使ってみるか(3)



前回までのあらすじ

Dockerを使ってみようと思っていたら、なぜか今度はPackerでVagrantのboxを作り出すところからはじめてしまい、ようやくDockerを使うところまでやってきたのである。

今更だけどVagrantでも使ってみるか(2) - 初老のボケ防止日記


環境

既にVirtualBoxとVagrantは使ってる状態。

OS Windows 8.1(x64)
VirtualBox 4.3.20
Vagrant 1.6.5


でもって、前回作成したboxを使ったVMを起動してDockerが使える状態。

$ vagrant ssh
Welcome to Ubuntu 14.04.1 LTS (GNU/Linux 3.13.0-40-generic x86_64)

 * Documentation:  https://help.ubuntu.com/
Last login: Fri Dec  5 13:18:14 2014 from 10.0.2.2
vagrant@ubuntu1404-docker:~$ docker info
Containers: 0
Images: 0
Storage Driver: aufs
 Root Dir: /var/lib/docker/aufs
 Dirs: 0
Execution Driver: native-0.2
Kernel Version: 3.13.0-40-generic
Operating System: Ubuntu 14.04.1 LTS
vagrant@ubuntu1404-docker:~$

はじめてのDocker

公式にオンラインで体験できるチュートリアルがある。

Online Tutorial - Try It! | Docker

でも正直「ふーん。で?」っていう感じなのでVM環境でやったほうが色々と得るものが多い。

現在登録されているイメージを確認する

vagrant@ubuntu1404-docker:~$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE

当然まだない。

コンテナイメージを取ってくる

vagrant@ubuntu1404-docker:~$ docker pull ubuntu
ubuntu:latest: The image you are pulling has been verified
511136ea3c5a: Pull complete
5bc37dc2dfba: Pull complete
61cb619d86bc: Pull complete
3f45ca85fedc: Pull complete
78e82ee876a2: Pull complete
dc07507cef42: Pull complete
86ce37374f40: Pull complete
Status: Downloaded newer image for ubuntu:latest
vagrant@ubuntu1404-docker:~$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
ubuntu              latest              86ce37374f40        9 days ago          192.7 MB
vagrant@ubuntu1404-docker:~$

公式?からイメージをpullしてきて登録された。

現在作成済のコンテナ一覧を表示する

vagrant@ubuntu1404-docker:~$ docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES

当然まだない。

イメージを指定してコンテナを起動

vagrant@ubuntu1404-docker:~$ docker run -it --name osatest1 ubuntu /bin/bash
root@2123570f407f:/#

先ほど登録したイメージ(ubuntu)を指定してコンテナを"osatest1"という名前を指定して生成、bashを起動した。

vagrant@ubuntu1404-docker:~$ docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
2123570f407f        ubuntu:latest       "/bin/bash"         38 seconds ago      Up 38 seconds                           osatest1
vagrant@ubuntu1404-docker:~$

ホスト側で別ターミナルで状態をみるとこんな感じ。

コンテナを停止

root@2123570f407f:/# (Ctrl-D)
vagrant@ubuntu1404-docker:~$ docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                       PORTS               NAMES
2123570f407f        ubuntu:latest       "/bin/bash"         54 seconds ago      Exited (127) 5 seconds ago                       osatest1

bash指定で起動したから抜けたら停止する?

コンテナを起動してbashで接続

vagrant@ubuntu1404-docker:~$ docker start -i osatest1
root@2123570f407f:/#
vagrant@ubuntu1404-docker:~$ docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
2123570f407f        ubuntu:latest       "/bin/bash"         4 minutes ago       Up 6 seconds                            osatest1

またUPした。VMみたいに起動にOSブートとかしないで瞬時につながるのでちょっと不思議な感じ。

IPアドレスを確認してみる

  • ホスト側
vagrant@ubuntu1404-docker:~$ hostname -I
10.0.2.15 172.17.42.1
  • コンテナ側
root@2123570f407f:/# hostname -I
172.17.0.10

当然IP通信はできる

vagrant@ubuntu1404-docker:~$ ping 172.17.0.10
PING 172.17.0.10 (172.17.0.10) 56(84) bytes of data.
64 bytes from 172.17.0.10: icmp_seq=1 ttl=64 time=0.050 ms
64 bytes from 172.17.0.10: icmp_seq=2 ttl=64 time=0.071 ms
^C
--- 172.17.0.10 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1000ms
rtt min/avg/max/mdev = 0.050/0.060/0.071/0.013 ms

別PCからコンテナと通信する場合はコンテナ起動時にポートフォワーディングとか指定するらしい。面倒くさい。

ファイルシステムの確認

  • ホスト側
vagrant@ubuntu1404-docker:~$ python -V
Python 2.7.6
vagrant@ubuntu1404-docker:~$ which python
/usr/bin/python
  • コンテナ側
root@2123570f407f:/# python -V
bash: python: command not found
root@2123570f407f:/# which python
root@2123570f407f:/#

ホスト側とコンテナ側はファイルシステムが異なる。ベースとするイメージによるがPythonすら入ってない。

コンテナにPyhton入れてみる

root@2123570f407f:/# apt-get install python
Reading package lists... Done
Building dependency tree
Reading state information... Done
E: Unable to locate package python

ファイルシステムが違うのでapt-get updateからしないといけないらしい。

root@2123570f407f:/# apt-get update
root@2123570f407f:/# apt-get upgrade
root@2123570f407f:/# apt-get install python
root@2123570f407f:/# python -V
Python 2.7.6
root@2123570f407f:/# python -c "print 'hoge'"
hoge

ようやく入った。

vagrant@ubuntu1404-docker:~$ sudo -s
root@ubuntu1404-docker:~# ls -F /var/lib/docker/
aufs/        execdriver/  init/         repositories-aufs  trust/
containers/  graph/       linkgraph.db  tmp/               volumes/

各コンテナの実ファイルは上記ディレクトリ配下のaufs以下にコンテナ単位にある模様

感想

Dockerは初めて触ったのだけど、触る前まではファイルシステム丸ごと異なるというイメージがなかったのでちょっと面食らった。でもchrootしてる(のかどうかまだよくわかってない)と思えばああなるほどという感じでもある。それと、コンテナはOSじゃないのでOSブートやシャットダウンがないので一瞬で起動・停止する。でもファイルシステムが違う。ちょっとキモい。
まだ少し触っただけで判断するのは時期尚早だけれど、自分の係る案件に今後使えるかどうかは正直微妙。わざわざDocker経由で稼働させるなら、ansibleとかの構成管理ツールでOSインストール後に自動構築するほうがシンプルな気もする。

Docker入門 Immutable Infrastructureを実現する

Docker入門 Immutable Infrastructureを実現する

次回予告

次回はansibleとかやってみようかなと考え中。

今更だけどVagrantでも使ってみるか(4) - 初老のボケ防止日記

スポンサーリンク