orenoblog

エンジニアになりたいExcel方眼紙erの物語

Dockerのbtrfs driverを試す

なんとなくDockerでbtrfs driverを利用してみようと、

CentOS6.5(x86_64)にbtrfs-progsとDocker(0.8)をインストールしてみたのですがDockerが起動せず・・・

  • エラー
root@ip-10-167-0-14:/etc/init.d# docker -d -s btrfs
2014/03/05 12:09:28 WARNING: You are running linux kernel version 3.2.0-58-virtual, which might be unstable running docker. Please upgrade your kernel to 3.8.0.
[/var/lib/docker|4f1def43] +job serveapi(unix:///var/run/docker.sock)
[/var/lib/docker|4f1def43] +job initserver()
[/var/lib/docker|4f1def43.initserver()] Creating server
2014/03/05 12:09:28 Listening for HTTP on unix (/var/run/docker.sock)
/var/lib/docker is not a btrfs filesystem[/var/lib/docker|4f1def43] -job initserver() = ERR (1)
2014/03/05 12:09:28 initserver: /var/lib/docker is not a btrfs filesystem

ソースを眺めるbtrfsでも動作しそうな雰囲気でしたが

うごかんもんはうごかーん・・・メイクしたら動くのかも。

CentOSは諦めてUbuntu 12.04.4 LTS(x86_64)で試した所動きましたよっと。

  • 起動

EC2よりUbuntuを選択しました。Instance typeはc3.largeです。

インスタンスストレージにbtrfsを作成し、マウントしてDockerを起動します。

root@ip-10-167-0-14:~# mkfs -t btrfs /dev/xvdc

WARNING! - Btrfs Btrfs v0.19 IS EXPERIMENTAL
WARNING! - see http://btrfs.wiki.kernel.org before using

fs created label (null) on /dev/xvdc
        nodesize 4096 leafsize 4096 sectorsize 4096 size 15.25GB
Btrfs Btrfs v0.19
root@ip-10-167-0-14:~# mkdir /var/lib/docker && mkfs -t btrfs /dev/xvdc 
root@ip-10-167-0-14:~# mount -t btrfs /var/lib/docker
root@ip-10-167-0-14:/etc/init.d# apt-get update
root@ip-10-167-0-14:/etc/init.d# sudo sh -c "echo deb http://get.docker.io/ubuntu docker main /etc/apt/sources.list.d/docker.list"
root@ip-10-167-0-14:/etc/init.d# apt-get update
root@ip-10-167-0-14:/etc/init.d# apt-get install lxc-docker
ubuntu@ip-10-167-0-14:~$ df -T
Filesystem     Type     1K-blocks    Used Available Use% Mounted on
/dev/xvda1     ext4       8256952 1039764   6797760  14% /
udev           devtmpfs   1911892       8   1911884   1% /dev
tmpfs          tmpfs       768064     184    767880   1% /run
none           tmpfs         5120       0      5120   0% /run/lock
none           tmpfs      1920156       0   1920156   0% /run/shm
/dev/xvdb      ext3      15744924  170268  14774836   2% /mnt
cgroup         tmpfs      1920156       0   1920156   0% /sys/fs/cgroup
/dev/xvdc      btrfs     15996416  646880  13260736   5% /var/lib/docker
root@ip-10-167-0-14:/var/lib# docker -d -s btrfs
WARNING: You are running linux kernel version 3.2.0-58-virtual, which might be unstable running docker. Please upgrade your kernel to 3.8.0.[/var/lib/docker|1538f053] +job serveapi(unix:///var/run/docker.sock)
[/var/lib/docker|1538f053] +job initserver()
[/var/lib/docker|1538f053.initserver()] Creating server
2014/03/05 12:17:35 Listening for HTTP on unix (/var/run/docker.sock)[/var/lib/docker|1538f053] +job init_networkdriver()
[/var/lib/docker|1538f053] -job init_networkdriver() = OK (0)
Loading containers: : done.
[/var/lib/docker|1538f053.initserver()] Creating pidfile
[/var/lib/docker|1538f053.initserver()] Setting up signal traps
[/var/lib/docker|1538f053] -job initserver() = OK (0)
[/var/lib/docker|1538f053] +job acceptconnections()
[/var/lib/docker|1538f053] -job acceptconnections() = OK (0)
2014/03/05 12:17:52 GET /v1.9/info
[/var/lib/docker|1538f053] +job info()
[/var/lib/docker|1538f053] -job info() = OK (0)
  • 確認

slをインストールして動かしてみます。

ubuntu@ip-10-167-0-14:~$ sudo docker pull centos
ubuntu@ip-10-167-0-14:~$ sudo docker info
Containers: 0
Images: 0
★Driver: btrfs★
ubuntu@ip-10-167-0-14:~$ sudo docker pull centos
Pulling repository centos
539c0211cd76: Download complete
ubuntu@ip-10-167-0-14:~$ sudo docker images
REPOSITORY          TAG                 IMAGE ID            CREATED
VIRTUAL SIZE
centos              6.4                 539c0211cd76        11 months ago
300.6 MB
centos              latest              539c0211cd76        11 months ago
300.6 MB
ubuntu@ip-10-167-0-14:~$ sudo docker run -i -t centos:6.4 /bin/bash
bash-4.1# rpm -ivh ftp://ftp.pbone.net/mirror/ftp5.gwdg.de/pub/opensuse/reposito
ries/home:/smite:/repo-repo/CentOS_CentOS-6/noarch/epel-release-6-8.1.noarch.rpm
bash-4.1# yum install --enablerepo=epel -y sl
bash-4.1# exit
ubuntu@ip-10-167-0-14:~$ sudo docker ps -a
CONTAINER ID        IMAGE               COMMAND                CREATED             STATUS              PORTS               NAMES
60ae07547290        centos:6.4          /bin/bash              3 minutes ago       Exit 0                                  silly_engelbart
ubuntu@ip-10-167-0-14:~$ sudo docker commit 60ae07547290 centos:sl
0307e9e17a28596151bc713326c69c5f02bbbb5227ec5031388ed5dcd4a06b9a
ubuntu@ip-10-167-0-14:~$ sudo docker run -t centos:sl sl
                      (@@) (  ) (@)  ( )  @@    ()    @     O     @     O      @
                 (   )
             (@@@@)
          (    )

        (@@@)
      ====      = ______=_                ___________
  _D _|  |_______/        \__I_I_____===__|_________|
   |(_)---  |   H\________/ |   |        =|___ ___|      _________________
   /     |  |   H  |  |     |   |         ||_| |_||     _|                \_____
  |      |  |   H  |__--------------------| [___] |   =|
  | ________|___H__/__|_____/[][]~\_______|       |   -|
  |/ |   |-----------I_____I [][] []  D   |=======|____|________________________
__/ =| o |=-~~\  /~~\  /~~\  /~~\ ____Y___________|__|__________________________
 |/-=|___|=    ||    ||    ||    |_____/~\___/          |_D__D__D_|  |_D__D__D_|
  \_/      \_O=====O=====O=====O/      \_/               \_/   \_/    \_/   \_/
  • btrfsスナップショットの確認

btrfsはどのように扱っているのでしょうか。

どうやらイメージIDやコンテナID名でサブボリューム/スナップショットを保存している模様です。

試しに先ほどCOMMITしたslイメージを壊してみます。

ubuntu@ip-10-167-0-14:~$ sudo docker images
REPOSITORY          TAG                 IMAGE ID            CREATED
VIRTUAL SIZE
centos              sl                  0307e9e17a28        14 minutes ago 367.6 MB
centos              6.4                 539c0211cd76        11 months ago 300.6 MB
centos              latest              539c0211cd76        11 months ago 300.6 MB
ubuntu@ip-10-167-0-14:~$ sudo btrfs subvolume list /var/lib/docker|grep 0307e9e17a28
ID 305 top level 5 path btrfs/subvolumes/0307e9e17a28596151bc713326c69c5f02bbbb5227ec5031388ed5dcd4a06b9a
ubuntu@ip-10-167-0-14:~$ sudo btrfs subvolume delete /var/lib/docker/btrfs/subvolumes/0307e9e17a28596151bc713326c69c5f02bbbb5227ec5031388ed5dcd4a06b9a
Delete subvolume '/var/lib/docker/btrfs/subvolumes/0307e9e17a28596151bc713326c69c5f02bbbb5227ec5031388ed5dcd4a06b9a'
ubuntu@ip-10-167-0-14:~$ sudo docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
centos              6.4                 539c0211cd76        11 months ago       300.6 MB
centos              latest              539c0211cd76        11 months ago       300.6 MB
ubuntu@ip-10-167-0-14:~$ sudo docker images
CONTAINER ID        IMAGE               COMMAND                CREATED             STATUS              PORTS               NAMES
97987d76e6e7        centos:sl           sl                     26 minutes ago

作成したslイメージが消えてしまいました。

駄菓子菓子、何度でもよみがえるさ。停止しているコンテナからイメージに変換します。

ubuntu@ip-10-167-0-14:~$ sudo docker ps -a
ubuntu@ip-10-167-0-14:~$ sudo docker commit 60ae07547290 centos:sl
af265571ced29f95dee55e508ad4412af3ba4542fb31c9f75fd203a82c4aa79e
ubuntu@ip-10-167-0-14:~$ sudo docker run -t centos:sl sl
                      (@@) (  ) (@)  ( )  @@    ()    @     O     @     O      @
                 (   )
             (@@@@)
          (    )

        (@@@)
      ====      = ______=_                ___________
  _D _|  |_______/        \__I_I_____===__|_________|
   |(_)---  |   H\________/ |   |        =|___ ___|      ________________________
   /     |  |   H  |  |     |   |         ||_| |_||     _|                \_____
  |      |  |   H  |__--------------------| [___] |   =|
  | ________|___H__/__|_____/[][]~\_______|       |   -|
  |/ |   |-----------I_____I [][] []  D   |=======|____|_________________________
__/ =| o |=-~~\  /~~\  /~~\  /~~\ ____Y___________|__|__________________________
 |/-=|___|=    ||    ||    ||    |_____/~\___/          |_D__D__D_|  |_D__D__D_|
  \_/      \_O=====O=====O=====O/      \_/               \_/   \_/    \_/   \_/

btrfsのsubvolumeを利用していることがわかりました。

今後zfsも利用できるかもしれないので楽しみです。

こういう実験にはスポットインスタンスだといいですね!

ありがとうスポットインスタンス

スポットインスタンスを知るもの来たれ!!・・・・プスッ