Oracle 社が Red Hat Enterprise Linux の互換カーネルとして開発しているカスタムカーネル Unbreakable Enterprise Kernel の最新版 Release 4 (UEKr4) がリリースされました。
- Announcing the general availability of Unbreakable Enterprise Kernel Release 4 (Oracle's Linux Blog)
Oracle Linux 6 に Docker をインストール
Oracle Linux 6 で Docker を動かすには Docker 社の提供する最新版を使用する方法もありますが、ここでは Oracle 社が提供している public-yum リポジトリの Addons を使用します。
KVM 環境に Oracle Linux 6.7 を用意します。# uname -a Linux ol67.vm.myhome 3.8.13-118.2.4.el6uek.x86_64 #2 SMP Thu Jan 7 15:56:17 PST 2016 x86_64 x86_64 x86_64 GNU/Linux # cat /etc/redhat-release Red Hat Enterprise Linux Server release 6.7 (Santiago)
public_ol6_addons
リポジトリを有効にします。
# sed -i'' -e '/\[\(public_\)*ol6_addons/,/^enabled/s/\(enabled=\)0/\11/' /etc/yum.repos.d/public-yum-ol6.repoそして
docker-engine
パッケージをインストールします(docker
パッケージはバージョンが 1.6.1 と古い)。
# yum install docker-engine -y # yum info docker-engine Loaded plugins: security, ulninfo Installed Packages Name : docker-engine Arch : x86_64 Version : 1.8.3 Release : 1.0.1.el6 Size : 27 M Repo : installed From repo : public_ol6_addons Summary : The open-source application container engine URL : https://dockerproject.org License : ASL 2.0 Description : Docker is an open source project to pack, ship and run any application as a : lightweight container : : Docker containers are both hardware-agnostic and platform-agnostic. This means : they can run anywhere, from your laptop to the largest EC2 compute instance and : everything in between - and they don't require you to use a particular : language, framework or packaging system. That makes them great building blocks : for deploying and scaling web apps, databases, and backend services without : depending on a particular stack or provider.
Docker の起動
とりあえずインストール直後に docker を起動してみます。
# service docker start Starting cgconfig service: [ OK ] Starting docker: [ OK ]
# docker version Client: Version: 1.8.3 API version: 1.20 Go version: go1.4.2 Git commit: f0bb124 Built: Wed Oct 14 04:06:48 UTC 2015 OS/Arch: linux/amd64 Server: Version: 1.8.3 API version: 1.20 Go version: go1.4.2 Git commit: f0bb124 Built: Wed Oct 14 04:06:48 UTC 2015 OS/Arch: linux/amd64
# docker info Containers: 0 Images: 0 Storage Driver: devicemapper Pool Name: docker-252:0-1705344-pool Pool Blocksize: 65.54 kB Backing Filesystem: extfs Data file: /dev/loop0 Metadata file: /dev/loop1 Data Space Used: 1.821 GB Data Space Total: 107.4 GB Data Space Available: 23.34 GB Metadata Space Used: 1.479 MB Metadata Space Total: 2.147 GB Metadata Space Available: 2.146 GB Udev Sync Supported: true Deferred Removal Enabled: false Data loop file: /var/lib/docker/devicemapper/devicemapper/data Metadata loop file: /var/lib/docker/devicemapper/devicemapper/metadata Library Version: 1.02.95-RHEL6 (2015-09-08) Execution Driver: native-0.2 Logging Driver: json-file Kernel Version: 3.8.13-118.2.4.el6uek.x86_64 Operating System: Oracle Linux Server 6.7 CPUs: 1 Total Memory: 994.2 MiB Name: ol67.vm.myhome ID: IXNG:S37Y:QLCH:7TG4:7WDT:FLWV:SFHD:J4CX:JO7I:WWKU:7KLP:QCME WARNING: bridge-nf-call-iptables is disabled WARNING: bridge-nf-call-ip6tables is disabled
Docker ストレージドライバを変更
UEKr3 で overlayfs を使用するとどうなるか試してみます。
# service docker stop # rm -rf /var/lib/docker # sed -i'' -e 's/^\(other_args=\).*/\1"-s overlay"/' /etc/sysconfig/docker # service docker start Starting docker: [ OK ] # service docker status docker は停止していますがサブシステムがロックされていますサポートされていないので当然ですが、以下のメッセージが出て docker の起動に失敗しています。
level=warning msg="You are running linux kernel version 3.8.13-118.2.4.el6uek.x86_64, which might be unstable running docker. Please upgrade your kernel to 3.10.0." level=info msg="Listening for HTTP on unix (/var/run/docker.sock)" level=error msg="'overlay' not found as a supported filesystem on this host. Please ensure kernel is new enough and has overlay support loaded." level=fatal msg="Error starting daemon: error initializing graphdriver: driver not supported"
Oracle Linux 6 に UEKr4 をインストール
overlayfs をサポートする UEKr4 をインストールするためにリポジトリファイルを最新化します。
# cd /etc/yum.repos.d # curl -O http://public-yum.oracle.com/public-yum-ol6.repo
ol6_UEK_latest
リポジトリに UEKr4 はまだ無いようですので ol6_UEKR4
リポジトリを有効にしてパッケージを更新します。
# sed -i'' -e '/\[ol6_UEKR4\]/,/^enabled/s/\(enabled=\)0/\11/' /etc/yum.repos.d/public-yum-ol6.repo # yum update -y # reboot再起動後、UEKr4 で起動して docker が overlay ストレージドライバで起動していることが確認できます。
# uname -a Linux ol67.vm.myhome 4.1.12-32.el6uek.x86_64 #2 SMP Thu Dec 17 19:31:07 PST 2015 x86_64 x86_64 x86_64 GNU/Linux
# docker info Containers: 0 Images: 0 Storage Driver: overlay Backing Filesystem: extfs Execution Driver: native-0.2 Logging Driver: json-file Kernel Version: 4.1.12-32.el6uek.x86_64 Operating System: Oracle Linux Server 6.7 CPUs: 1 Total Memory: 991.7 MiB Name: ol67.vm.myhome ID: WU7J:P6QV:6R25:L2XI:TFIK:3ZZ2:FGZN:L4QY:YEFB:4ACW:C7D5:MP2G
OverlayFS を試す
selinux は無効にしていませんがコンテナ内でふつうに読み書きはできました。
# ps -ef | grep [d]ocker root 1655 1 3 11:59 ? 00:00:16 /usr/bin/docker daemon -s overlay
# docker run -it centos /bin/bash Unable to find image 'centos:latest' locally latest: Pulling from library/centos fa5be2806d4c: Pull complete 2bf4902415e3: Pull complete 86bcb57631bd: Pull complete c8a648134623: Pull complete Digest: sha256:8072bc7c66c3d5b633c3fddfc2bf12d5b4c2623f7004d9eed6aae70e0e99fbd7 Status: Downloaded newer image for centos:latest [root@5572765322da /]# df -h Filesystem Size Used Avail Use% Mounted on overlay 27G 6.4G 20G 25% / tmpfs 496M 0 496M 0% /dev shm 64M 0 64M 0% /dev/shm tmpfs 496M 0 496M 0% /sys/fs/cgroup /dev/mapper/vg_ol67-lv_root 27G 6.4G 20G 25% /etc/hosts [root@5572765322da /]# touch /tmp/a [root@5572765322da /]# ls -l /tmp/a -rw-r--r--. 1 root root 0 Jan 10 12:08 /tmp/aコンテナの外はからはどう見えるのでしょうか。overlay ディレクトリの下にいくつかサブディレクトリが作成されています。
# ls -1F /var/lib/docker/overlay/ 2bf4902415e362b7e531ac48c5bb4b265292375ae9b9bf735360be9cbca5f8e5/ 5572765322da5634aed17f159b74f66ee332efda77d00fa1ea401a2d39eb7acf/ 5572765322da5634aed17f159b74f66ee332efda77d00fa1ea401a2d39eb7acf-init/ 86bcb57631bd122c32b8e277b64b45ac00382e78e0d21530a50c090fd739d0ee/ c8a648134623c453dc62abcd747eafa40af057e28cd5937baeebe2ed4c32094e/ fa5be2806d4c9aa0f75001687087876e47bb45dc8afb61f0c0e46315500ee144/コンテナの設定内容を確認します。
# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 5572765322da centos "/bin/bash" 3 minutes ago Up 3 minutes admiring_stallman
# docker inspect 5572765322da | sed -n -e '/GraphDriver/,/},/ p' "GraphDriver": { "Name": "overlay", "Data": { "LowerDir": "/var/lib/docker/overlay/c8a648134623c453dc62abcd747eafa40af057e28cd5937baeebe2ed4c32094e/root", "MergedDir": "/var/lib/docker/overlay/5572765322da5634aed17f159b74f66ee332efda77d00fa1ea401a2d39eb7acf/merged", "UpperDir": "/var/lib/docker/overlay/5572765322da5634aed17f159b74f66ee332efda77d00fa1ea401a2d39eb7acf/upper", "WorkDir": "/var/lib/docker/overlay/5572765322da5634aed17f159b74f66ee332efda77d00fa1ea401a2d39eb7acf/work" } },ベースとなる root ディレクトリに
# ll /var/lib/docker/overlay/c8a648134623c453dc62abcd747eafa40af057e28cd5937baeebe2ed4c32094e/root 合計 80 -rw-r--r--. 3 root root 18293 12月 24 03:12 2015 anaconda-post.log lrwxrwxrwx. 1 root root 7 12月 24 03:06 2015 bin -> usr/bin drwxr-xr-x. 2 root root 4096 12月 24 03:05 2015 dev drwxr-xr-x. 48 root root 4096 1月 10 12:05 2016 etc drwxr-xr-x. 2 root root 4096 8月 12 23:22 2015 home lrwxrwxrwx. 1 root root 7 12月 24 03:06 2015 lib -> usr/lib lrwxrwxrwx. 1 root root 9 12月 24 03:06 2015 lib64 -> usr/lib64 drwx------. 2 root root 4096 12月 24 03:05 2015 lost+found drwxr-xr-x. 2 root root 4096 8月 12 23:22 2015 media drwxr-xr-x. 2 root root 4096 8月 12 23:22 2015 mnt drwxr-xr-x. 2 root root 4096 8月 12 23:22 2015 opt drwxr-xr-x. 2 root root 4096 12月 24 03:05 2015 proc dr-xr-x---. 2 root root 4096 1月 10 12:05 2016 root drwxr-xr-x. 2 root root 4096 12月 24 03:05 2015 run lrwxrwxrwx. 1 root root 8 12月 24 03:06 2015 sbin -> usr/sbin drwxr-xr-x. 2 root root 4096 8月 12 23:22 2015 srv drwxr-xr-x. 2 root root 4096 12月 24 03:05 2015 sys drwxrwxrwt. 7 root root 4096 1月 10 12:05 2016 tmp drwxr-xr-x. 13 root root 4096 1月 10 12:05 2016 usr drwxr-xr-x. 18 root root 4096 1月 10 12:05 2016 varコンテナ用に読み書きできる upper ディレクトリを overlay しているわけですね。
# ll /var/lib/docker/overlay/5572765322da5634aed17f159b74f66ee332efda77d00fa1ea401a2d39eb7acf/upper/tmp 合計 0 -rw-r--r--. 1 root root 0 1月 10 12:08 2016 a
おわりに
Oracle Linux 6 という少し古いシステムでも Unbreakable Enterprise Kernel Release 4 を適用することで overlayfs を試せました。
Docker のストレージドライバの本命は overlayfs だと思いますので、来たるべきコンテナ時代に備えて Oracle Linux + UEKr4 でいろいろ試してみようと思います。
- OverlayFS storage in practice
- 第18回 Linuxカーネルのコンテナ機能 [7] ─ overlayfs:LXCで学ぶコンテナ入門 -軽量仮想化環境を実現する技術|gihyo.jp … 技術評論社
- Fedora22のDockerでoverlayfsドライバーを利用する手順 - めもめも
- コラム - クラウド時代のオープンソース実践活用 | 第68回 Dockerストレージドライバーの性能比較|CTC教育サービス 研修/トレーニング
- コラム - クラウド時代のオープンソース実践活用 | 第69回 Dockerのoverlayfsドライバーによる性能向上|CTC教育サービス 研修/トレーニング
- DockerでOverlayFSを使用する - Qiita
0 件のコメント:
コメントを投稿