CTC 教育サービス
[IT研修]注目キーワード Python UiPath(RPA) 最新技術動向 Microsoft Azure Docker Kubernetes
前回は、「RHEL Atomic Hostが登場!(パート1)」と題して、「Red Hat Enterprise Linux Atomic Host(RHEL Atomic Host)」のバージョン管理方式を解説しました。今回は、ディスクパーティションの構成とDockerイメージの保存方式について解説を進めます。
前回説明したように、RHEL Atomic Hostでは、RPMパッケージの個別管理は行わず、ディレクトリーツリーをまるごと切り替えてバージョンアップを行います。この時、RHEL Atomic Host本体が導入されるディスク領域は、かなりコンパクトにおさえられています。筆者の手元の環境では、ルートファイルシステム用のパーティションは3GBです。その他には、スワップ領域とブート領域(/bootファイルシステム)があり、これらを除いた残りのディスク領域は、すべてDockerイメージの保存用に確保されています。
これらの領域は、論理ボリュームマネージャーで管理されており、次のような論理ボリュームが確認できます。
# lvs LV VG Attr LSize ... docker-data rah_atomic01 -wi-ao---- 26.64g docker-meta rah_atomic01 -wi-ao---- 36.00m root rah_atomic01 -wi-ao---- 3.00g swap rah_atomic01 -wi-ao---- 2.03g
この中にある「docker-data」と「docker-meta」がDockerイメージの保存領域となりますが、実際のイメージはどのような形で保存されているのでしょうか? 実は、「Device Mapper Thin-Provisioning(dm-thin)」という機能で、これらの論理ボリュームの上に、さらに多数の「論理デバイス」が作られるようになっています。この後の図1にあるように、1つのDockerイメージは、1つの「論理デバイス」として保存されます。
dm-thinは、ベースとなるデータ用デバイス(今の場合は、論理ボリューム「docker-data」)の上に、任意の数の「論理デバイス」を定義していく機能を提供します。ただし、論理デバイスを定義しただけでは、実際の物理デバイスは消費しません。図1のように、論理デバイスに書き込みがあると、データ用デバイス(ブロックプール)から、一定サイズのブロックを切り出して割り当てていきます。1つのDockerイメージに対して、10GBの論理デバイスが割り当てられますが、実際に書き込みがあった分だけ物理ディスクを消費するので、物理ディスクの使用量が節約されます。論理デバイスに対するブロックの割り当て情報は、別途、メタデータ用デバイス(今の場合は、論理ボリューム「docker-meta」)に記録されます。
図1 dm-thinによるDockerイメージの管理
また、Dockerでは、Dockerイメージのスナップショットコピーを多用します。たとえば、CentOS6のDockerイメージを元に、Apache Webサーバー(httpdパッケージ)を導入したイメージを作成する場合を考えます。はじめに、CentOS6のDockerイメージのスナップショットコピーが作成されて、これにhttpdパッケージを追加したものが、Apache WebサーバーのDockerイメージになります。
Dockerイメージのスナップショットを作成する際は、dm-thinの機能でスナップショットコピーを作成します。そして、dm-thinのスナップショットでは、実際にはデータのコピーは行われません。図2のように新しい論理デバイスを定義して、コピー元の論理デバイスと同じブロックを割り当てます。どちらの論理デバイスも同じブロックを参照しているので、当然ながら、同じ内容が見えることになります。
図2 dm-thinによるスナップショットコピーの作成
その後、どちらかに書き込みが発生すると、その部分にだけ新しいブロックが割り当てられます。つまり、CentOS6のイメージをコピーして、Apache Webサーバーのイメージを作成した場合、CentOS6に含まれる内容は両方のイメージでブロックを共有する形になります。後から追加した、httpdパッケージの保存部分のみが新しいブロックとして割り当てられます。
この仕組みは、Docker Hubからイメージをダウンロードした場合でも有効です。CentOS6をベースに作成したイメージを複数ダウンロードした場合、内部的には、CentOS6のベースイメージとなる論理デバイスが1つ用意された後に、そのスナップショットコピーに対してそれぞれのイメージの差分が展開されるようになっています。この部分の詳細は、筆者のBlog記事を参考にしてください(*1)。
今回は、RHEL Atomic HostにおけるDockerイメージの保存形式について解説しました。ちなみに、RHEL Atomic Hostを使用せずに、普通のRHEL7/CentOS7にDockerをインストールするとどうなるのでしょうか? この場合は、docker-dataとdocker-metaに相当するディスクイメージファイルが用意されて、これをループバックマウントしたものが使用されます。このディスクイメージファイルは、スパース形式になっているため、論理ボリュームよりも処理性能は劣ります。このあたりは、最初からDocker専用に構成されたRHEL Atomic Hostの優位点と言えるでしょう。
次回は、RHEL Atomic Hostのパフォーマンスチューニングに利用される「tunedプロファイル」を紹介します。
(*1) 「Dockerイメージのレイヤー構造について」
++ CTC教育サービスから一言 ++
このコラムでLinuxや周辺技術の技術概要や面白さが理解できたのではないかと思います。興味と面白さを仕事に変えるには、チューニングやトラブルシューティングの方法を実機を使用して多角的に学ぶことが有効であると考えます。CTC教育サービスでは、Linuxに関する実践力を鍛えられるコースを多数提供しています。興味がある方は以下のページもご覧ください。
CTC教育サービス Linuxのページ
http://www.school.ctc-g.co.jp/linux/
筆者書籍紹介 Software Design plusシリーズ 「独習Linux専科」サーバ構築/運用/管理 ――あなたに伝えたい技と知恵と鉄則 本物の基礎を学ぶ!新定番のLinux独習書 中井悦司 著 B5変形判/384ページ 定価3,129円(本体2,980円) ISBN 978-4-7741-5937-9 詳しくはこちら(出版社WEBサイト) |
[IT研修]注目キーワード Python UiPath(RPA) 最新技術動向 Microsoft Azure Docker Kubernetes