LoginSignup
59
58

More than 5 years have passed since last update.

【RHEL7.1】Dockerでoverlayfsが便利すぎるので乗り換えるべき!

Last updated at Posted at 2015-07-31

Dockerでoverlayfsを使ってみた

overlayfsはRHEL7.1には正式に導入されているUnionFilesystemで、Docker1.6.2では対応しています。

RHEL7.1のデフォルト構成は、DeviceMapper+thin-volumeとなっており、各コンテナの最大サイズは10Gと制限されています。
※ちなみにこちらにて制限を拡張する方法がありました

overlayfsはこちらを参照

とりあえず設定してみる

事前準備として/var/lib/docker配下を全て削除しておきましょう。

設定はこちら。/etc/sysconfig/docker内のOPTION-s overlayといれるだけです。

/etc/sysconfig/docker

OPTIONS='--selinux-enabled -s overlay'

その後systemctl start dockerとコマンドを発行するとoverlayで起動しています。


[root ~]# docker info
Containers: 3
Images: 41
Storage Driver: overlay
 Backing Filesystem: xfs
Execution Driver: native-0.2
Kernel Version: 3.10.0-229.7.2.el7.x86_64
Operating System: Red Hat Enterprise Linux
CPUs: 8
Total Memory: 19.45 GiB
Name: test
ID: 43IZ:AW2E:LBT5:O52P:JTKE:S54D:L7HI:NDGB:V2QS:R7XS:SUDQ:NMRE

比較してみる

DeviceMapperを使用したディスクの確保はこちらでまとめました。

まあ、こんなかんじになっています。

[root@master mnt]# lsblk
NAME                                 MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
fd0                                    2:0    1     4K  0 disk
sda                                    8:0    0   200G  0 disk
sda1                                   8:1    0   500M  0 part /boot
sda2                                   8:2    0 199.5G  0 part
  centos-swap                        253:0    0  10.8G  0 lvm  [SWAP]
  centos-root                        253:1    0    50G  0 lvm  /
  centos-home                        253:2    0 138.8G  0 lvm  /home
sr0                                   11:0    1  1024M  0 rom
loop0                                  7:0    0   100G  0 loop
docker-253:1-6851-pool               253:3    0   100G  0 dm
  docker-253:1-6851-22f3507a1...     253:4    0    10G  0 dm
  docker-253:1-6851-2cf034932...     253:5    0    10G  0 dm
loop1                                  7:1    0     2G  0 loop
docker-253:1-6851-pool               253:3    0   100G  0 dm
  docker-253:1-6851-22f3507a1...     253:4    0    10G  0 dm
  docker-253:1-6851-2cf034932...     253:5    0    10G  0 dm

しかし、overlayfsではこんな感じ。

[root ~]# lsblk
NAME          MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
sda             8:0    0   300G  0 disk
sda1          8:1    0   500M  0 part /boot
sda2          8:2    0 299.5G  0 part
  rhel-swap 253:0    0   9.8G  0 lvm  [SWAP]
  rhel-root 253:1    0    50G  0 lvm  /
  rhel-home 253:2    0 239.6G  0 lvm  /home
sdb             8:16   0   100G  0 disk
sr0            11:0    1  1024M  0 rom

Dockerが確保している領域がないぞ!!!

どういうことだ…ということで、コンテナ上でdf -hをしてみます。

[root@0f3e378b0c35 /]# df -h
Filesystem             Size  Used Avail Use% Mounted on
rootfs                  50G   32G   19G  64% /
overlay                 50G   32G   19G  64% /
tmpfs                  9.8G     0  9.8G   0% /dev
shm                     64M     0   64M   0% /dev/shm
tmpfs                  9.8G   92K  9.8G   1% /run/secrets
/dev/mapper/rhel-root   50G   32G   19G  64% /etc/hosts
tmpfs                  9.8G     0  9.8G   0% /proc/kcore
tmpfs                  9.8G     0  9.8G   0% /proc/timer_stats

50Gも見える…(前回はlimitの10Gでした)

わかりやすくしてみる

LVMで100Gほどディスクを作り、/var/lib/dockerに100Gほどマウントしました

[root lib]# df -h
ファイルシス             サイズ  使用  残り 使用% マウント位置
/dev/mapper/rhel-root       50G   29G   22G   58% /
devtmpfs                   9.8G     0  9.8G    0% /dev
tmpfs                      9.8G     0  9.8G    0% /dev/shm
tmpfs                      9.8G  8.9M  9.8G    1% /run
tmpfs                      9.8G     0  9.8G    0% /sys/fs/cgroup
/dev/mapper/rhel-home      240G   91M  240G    1% /home
/dev/sda1                  497M  168M  330M   34% /boot
/dev/mapper/docker-lvol0   100G   41M  100G    1% /var/lib/docker

この状態で適当なコンテナを起動しdf -hを実行します。
するとこんな感じに100Gと見えています。

[root@89cd550ba075 /]# df -h
Filesystem                Size  Used Avail Use% Mounted on
rootfs                    100G  394M  100G   1% /
overlay                   100G  394M  100G   1% /
tmpfs                     9.8G     0  9.8G   0% /dev
shm                        64M     0   64M   0% /dev/shm
tmpfs                     9.8G   92K  9.8G   1% /run/secrets
/dev/mapper/docker-lvol0  100G  394M  100G   1% /etc/hosts
tmpfs                     9.8G     0  9.8G   0% /proc/kcore
tmpfs                     9.8G     0  9.8G   0% /proc/timer_stats

つまり、overlayを使用すると/var/lib/dockerの領域をまるごとコンテナはアサインされるわけです。しかも、複数コンテナで同じ領域を共有します。
※厳密には/var/lib/docker/overlayのようです

さて、ここで疑問が生じますが、同じ領域を共有すると変なことになりそうな感じがしませんか?

これを解決するのがoverlayfsの仕組みです。解説はこちらにまかす!

そして、このoverlayfsはパフォーマンスが優れています。解説はこちらにまかす!

何が良いか

  • パフォーマンスが良い

画像
転載元:http://developerblog.redhat.com/2014/09/30/overview-storage-scalability-docker/

 

  • 監視が楽

10G制限があるとコンテナ内のディスク閾値監視をコンテナ単位で行う必要があるが、overlayであればホストOSの/var/lib/docker領域を見るだけで良い!

59
58
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
59
58