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も利用できるかもしれないので楽しみです。
こういう実験にはスポットインスタンスだといいですね!
ありがとうスポットインスタンス。
スポットインスタンスを知るもの来たれ!!・・・・プスッ