Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Speaker Deck
PRO
Sign in
Sign up for free
世界一わかりみの深い Docker&コンテナ入門 〜 Dockerのファイルシステムってどうなってるの? 〜/wakarimidocker_filesystem
Noriyuki TAKEI
February 25, 2021
Technology
1
430
世界一わかりみの深い Docker&コンテナ入門 〜 Dockerのファイルシステムってどうなってるの? 〜/wakarimidocker_filesystem
Noriyuki TAKEI
February 25, 2021
Tweet
Share
More Decks by Noriyuki TAKEI
See All by Noriyuki TAKEI
クラウドデザインパターンを使ってクールな設計をしよう/jazug12th
noriyukitakei
1
130
アウトプットはいいぞ!!〜人生折り返し地点からの情報発信で学びが楽しくなった話〜/outputisgood
noriyukitakei
0
42
世界一わかりみの深いDurable Functions/wakarimi_durablefunctions
noriyukitakei
0
1.1k
Ignite 振り返り & Azure 更新情報!/igniteakimatsuri
noriyukitakei
0
1.8k
世界一わかりみの深い クラウドネイティブなアプリ開発入門 on Azure 第2回 〜App Serviceでアプリをラクチン実行〜/wakarimiazure002
noriyukitakei
0
120
世界一わかりみの深い クラウドネイティブなアプリ開発入門 on Azure 第1回 〜Azureでクラウドネイティブを実現するには〜/wakarimiazure001
noriyukitakei
0
170
世界一わかりみの深いOAuth入門 / wakarimioauth
noriyukitakei
29
14k
Microsoft Ignite Recap Community Day〜現場で使えるIginiteUpdate〜/ignite-recap
noriyukitakei
0
1.9k
WSL2、Docker、VSCodeで劇的に改善されるWindows開発環境/wslvscodedocker-techlab
noriyukitakei
0
2.6k
Other Decks in Technology
See All in Technology
re:Invent2022 前後の Amazon EventBridge のアップデートを踏まえつつ、情シスの仕事をより楽しくしたい話。 / EventBridge for Information Systems Department
_kensh
2
700
データ分析基盤の要件分析の話(202201_JEDAI)
yabooun
0
240
組織に対してSREを適用するとどうなるか
kuniim
2
600
OpenShiftでスポットVMを使おう.pdf
jpishikawa
1
280
OpenShift.Run2023_create-aro-with-terraform
ishiitaiki20fixer
1
230
スクラム導入して変わったチーム、組織のありかた
yumechi
0
180
Cloudflare Workersで動くOG画像生成器
aiji42
1
490
230125 モニターマウントLT ITガジェット翁(Ryu.Cyber)さん
comucal
PRO
0
4.6k
Dev Containers ことはじめ - 失敗から学ぶ開発環境運用法
streamwest1629
0
330
API連携に伴う規制と対応 / Regulations and responses to API linkage
moneyforward
0
150
MarvelClient Upgrade 64bit クライアントへの自動アップグレード設定
mitsuru_katoh
0
120
AI Services 概要 / AI Services overview
oracle4engineer
PRO
0
170
Featured
See All Featured
Gamification - CAS2011
davidbonilla
75
4.1k
Navigating Team Friction
lara
177
12k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
44
14k
Large-scale JavaScript Application Architecture
addyosmani
499
110k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
224
50k
Side Projects
sachag
451
37k
The Cult of Friendly URLs
andyhume
69
5.1k
Done Done
chrislema
178
14k
YesSQL, Process and Tooling at Scale
rocio
159
12k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
38
3.6k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
120
29k
It's Worth the Effort
3n
177
26k
Transcript
© SIOS Technology, Inc. All rights Reserved. 世界⼀わかりみの深い Docker&コンテナ⼊⾨ 〜
Dockerのファイルシステムってどうなってるの︖ 〜 Noriyuki TAKEI 2021年2⽉25⽇ Kubernetes Meetup Tokyo #39
© SIOS Technology, Inc. All rights Reserved. About Me 2
BCPVUNF Noriyuki TAKEI Ҫ ٓߦ Information • サイオステクノロジー株式会社 • Microsoft MVP for Azure Favorites • Azure • Squash • Sweets blog https://tech-lab.sios.jp/ core skill Azure、Cloud Native、 Serverless全般 Twitter @noriyukitakei
© SIOS Technology, Inc. All rights Reserved. Dockerのファイルシステムってどうなってるの︖ 3 DockerはOverlayFSという、ちょっと特殊なファイルシステムを使って、劇的な容量の
削減を⾏っています。ちょうどPhotoshopのレイヤーのイメージに近い感じです。 layer01〜layer03ディレクト リにあるファイルをマージし たものがmergedディレクトリ に表⽰される
© SIOS Technology, Inc. All rights Reserved. Dockerのファイルシステムってどうなってるの︖ 4 上位のレイヤーに同名のファイ
ルがあった場合、それが mergedディレクトリに表⽰さ れる。この場合は、layer03 ディレクトリにあるファイルB がmergedディレクトリに表⽰ される。
© SIOS Technology, Inc. All rights Reserved. Dockerのファイルシステムってどうなってるの︖ 5 実際に⼿を動かして
やってみよう︕︕ 本セッションの ブログのURL
© SIOS Technology, Inc. All rights Reserved. Dockerのファイルシステムってどうなってるの︖ 6 重ね合わせるレイヤーのベースとなるディレクトリです。先程のイメージ
図で記載した「layer01〜layer03ディレクトリ」に相当します。 OverlayFSの仕組み上、このディレクトリのファイルに対して変更がされる ことはないので、基本的にこのディレクトリは読み込み専⽤でOKです。 lowerdir これからOverlayFSの実際の動きをご説明するとともに、実際にコマ ンド叩いて実践したいと思います。まず、その前にちょっと説明させ てください。OverlayFSには以下の4つのレイヤーの概念があります。 内部的に利⽤される作業⽤ディレクトリです。 upperdir mergeddirに対して変更をかけたファイルが保存されるディレクトリです。 workdir lowerdirとupperdirを結合したディレクトリです。ファイルに対して追 加・変更・削除などの操作を⾏うディレクトリでもあります。 mergeddir
© SIOS Technology, Inc. All rights Reserved. Dockerのファイルシステムってどうなってるの︖ 7 OverlayFSで右図のようなディレ
クトリ構造を作成してみます。
© SIOS Technology, Inc. All rights Reserved. Dockerのファイルシステムってどうなってるの︖ 8 先の図のファイルシステム構成を実現するために以下のコマンドを実
⾏します。 # mkdir merged # mkdir upper # mkdir lower01 lower02 # echo "hoge" > lower01/hoge.txt # echo "fuga" > lower02/fuga.txt # mkdir work # mount -t overlay overlay \ –o lowerdir=lower02:lower01, \ upperdir=upper,\ workdir=work merged
© SIOS Technology, Inc. All rights Reserved. Dockerのファイルシステムってどうなってるの︖ 9 ⼀番気になるmountコマンドの説明です。
# mount -t overlay overlay \ –o lowerdir=lower02:lower01, \ upperdir=upper,\ workdir=work merged mountのタイプです。 mountしたものに⼀意の名前を つけます。 lowerdirの指定です。 upperdirの指定です。 workdirの指定です。 mergeddirの指定です。
© SIOS Technology, Inc. All rights Reserved. Dockerのファイルシステムってどうなってるの︖ 10 期待通りの動作になっているかどうかを確認します。
# ls merged fuga.txt hoge.txt # mergedディレクトリにlower01、02にあるファイルが表 ⽰されている # cat merged/hoge.txt # ファイルの中⾝は、lower01にあるhoge.txtと同じ hoge # cat merged/fuga.txt # ファイルの中⾝は、lower02にあるfuga.txtと同じ fuga
© SIOS Technology, Inc. All rights Reserved. Dockerのファイルシステムってどうなってるの︖ 11 では、次にlower02ディ
レクトリにhoge2という 内容のhoge.txtを追加し てみます。lower02のほ うがlower01より上のレ イヤーなので、merged ディレクトリのhoge.txt の中⾝はhoge2になるは ずです。右図のような構 成ですね。
© SIOS Technology, Inc. All rights Reserved. Dockerのファイルシステムってどうなってるの︖ 12 期待通りの動作になっているかどうかを確認します。
# umount overlay # 読み取り専⽤なので⼀度unmoutする # echo “hoge2” > lower02/hoge.txt # lower02にhoge2という内容の hoge.txtを追加する。 # mount -t overlay overlay -o lowerdir=lower02:lower01,upperdir=upper,workdir=work merged # ls merged fuga.txt hoge.txt # cat merged/hoge.txt # 確かにlower02にあるhoge.txtの内容が表⽰され る。 hoge2
© SIOS Technology, Inc. All rights Reserved. Dockerのファイルシステムってどうなってるの︖ 13 ここからは実際に発⽣する以下のユースケースを元にOverlayFSの動きを⾒てみます。
ファイルを追加するときの動き ファイルを更新するときの動き ファイルを削除するときの動き
© SIOS Technology, Inc. All rights Reserved. Dockerのファイルシステムってどうなってるの︖ 14 ファイルを追加するときの動き
ユーザーに⾒えるのはmergeddir であり、ユーザーはこのmerged ディレクトリにファイルを追加す るオペレーションをするわけです が、OverlayFS的にはpiyo.txtは upperディレクトリに追加されま す。そして、upperディレクトリ に書き込まれたファイルは lower01ディレクトリやlower02 ディレクトリに書き込まれたファ イルと同じように、mergedディ レクトリに⾒えるようになります。 図にすると以下のような感じです。 mergedディレクトリに追加・ 変更・削除したものは、必ずこ のupperディレクトリに反映さ れる。
© SIOS Technology, Inc. All rights Reserved. Dockerのファイルシステムってどうなってるの︖ 15 ファイルを追加するときの動き
では実際にコマンドを実⾏して確認してみましょう。まずhoge.txt、fuga.txtを作成します。 # mkdir merged # mkdir upper # mkdir lower01 lower02 # echo "hoge" > lower01/hoge.txt # echo "fuga" > lower02/fuga.txt # mkdir work # mount -t overlay overlay -o lowerdir=lower02:lower01,upperdir=upper,workdir=work merged
© SIOS Technology, Inc. All rights Reserved. Dockerのファイルシステムってどうなってるの︖ 16 ファイルを追加するときの動き
ここでmergeddirにpiyo.txtを追加してみましょう。確かにmergeddir ディレクトリにファイルが追加されていることがわかります。 # echo piyo > merged/piyo.txt # ls merged fuga.txt hoge.txt piyo.txt 本セッションの ブログのURL
© SIOS Technology, Inc. All rights Reserved. Dockerのファイルシステムってどうなってるの︖ 17 ファイルを追加するときの動き
でも、実際に追加したファイルはuperdirディレクトリにあります。 # ls upperdir piyo.txt 本セッションの ブログのURL
© SIOS Technology, Inc. All rights Reserved. Dockerのファイルシステムってどうなってるの︖ 18 ファイルを更新するときの動き
次にファイルを更新するときの動 きを説明します。「ファイルを追 加するときの動き」でご紹介した 右図の構成のfuga.txtというファ イルの内容をfugaからfuga2に変 更してみます。 まず、 ユーザーがmergedディレ クトリ内のfuga.txtをhogeから hoge2に変更するオペレーション をすると、ファイルシステム内部 の動きは、まずlower02の fuga.txtがupperディレクトリに コピーされます。
© SIOS Technology, Inc. All rights Reserved. Dockerのファイルシステムってどうなってるの︖ 19 ファイルを更新するときの動き
次に、uperディレクトリ内の fuga.txtの内容がfugaからfuga2 に変更されます。
© SIOS Technology, Inc. All rights Reserved. Dockerのファイルシステムってどうなってるの︖ 20 ファイルを更新するときの動き
そして、このfuga.txtというファ イル名のファイルは、lower02 ディレクトリとupperディレクト リの両⽅に存在してます。 OverlayFSの仕様では、より上位 の層のレイヤーのファイルがユー ザーに⾒えることとなるので、 mergedディレクトリには、 upperディレクトリにあるファイ ルが⾒えることとなります。つま り以下のような状態です。
© SIOS Technology, Inc. All rights Reserved. Dockerのファイルシステムってどうなってるの︖ 21 ファイルを更新するときの動き
# echo fuga2 > merged/fuga.txt # cat merged/fuga.txt fuga2 では実践してみましょう。「ファイルを追加するときの動き」の状態で、 mergedディレクトリ内のhoge.txtの内容をhogeからhoge2に変更して みます。 本セッションの ブログのURL
© SIOS Technology, Inc. All rights Reserved. Dockerのファイルシステムってどうなってるの︖ 22 ファイルを更新するときの動き
# cat upper/fuga.txt fuga2 mergedディレクトリ内のhoge.txtの内容はhoge2になっているわけで すが、upperディレクトリのhoge.txtも合わせてhoge2になっているこ とがわかります。 つまり、mergedディレクトリに加えた変更は、⼀旦 lower01ディレクトリもしくはlower02ディレクトリのファイルを upperディレクトリにコピーし、それからその内容を変更します。この 仕組をコピー・オン・ライトといいます。
© SIOS Technology, Inc. All rights Reserved. Dockerのファイルシステムってどうなってるの︖ 23 ファイルを削除するときの動き
次にファイルを削除するときの動 きを⾒てみます。「ファイルを更 新するときの動き」でご紹介した 右図の構成から、hoge.txtを削除 してみます。
© SIOS Technology, Inc. All rights Reserved. Dockerのファイルシステムってどうなってるの︖ 24 ファイルを削除するときの動き
hoge.txtを削除すると下図のよう になります。upperディレクトリ に何やら新しいファイルが出来て、 mergeddirディレクトリには hoge.txtは⾒えなくなりました。 upperディレクトリに出来たファイルは「ホワイトアウト ファイル」と呼ばれるもので、ファイルが削除されたこと を表すものです。OverlayFSでは、lowerdirの層にある ディレクトリには変更を加えることはしません。そういう 仕様だからです(この仕様のありがたみは、このあとの説 明でご説明します)。では、「ファイルが削除された」と いうことを表現する⽅法が難しいわけですが、そこで OverlayFSでは、先程のホワイトアウトファイルと呼ばれ るものを、削除対象と同名のファイル名でupperディレク トリに置くことで、ファイルシステム的に削除されたこと にしてしまうわけです。つまりmergeddirからは⾒えなく なるということになります。
© SIOS Technology, Inc. All rights Reserved. Dockerのファイルシステムってどうなってるの︖ 25 ファイルを削除するときの動き
では実際にコマンドを実⾏して確認してみましょう。 # rm merged/hoge.txt # ls merged fuga.txt piyo.txt # 確かにpiyo.txtは削除されている。 本セッションの ブログのURL
© SIOS Technology, Inc. All rights Reserved. Dockerのファイルシステムってどうなってるの︖ 26 ファイルを削除するときの動き
では、upperディレクトリを⾒てみましょう。 # ls upper fuga.txt hoge.txt piyo.txt [
[email protected]
test]# ls -la upper/hoge.txt c---------. 1 root root 0, 0 Aug 11 09:16 upper/hoge.txt あれ︖何やら新しいhoge.txtという新しいファイルが出来ていますね。しかも、先頭の⼀⽂字が「c」と なっています。これはキャラクタデバイスファイルです(ディレクトリだとd、シンボリックリンクだとlと かになっています)。このキャラクタデバイスファイルという特殊なファイルを使うことにより、「この ファイルは削除されたよ」というマーカーみたいな役割をしているのです。 本セッションの ブログのURL
© SIOS Technology, Inc. All rights Reserved. Dockerのファイルシステムってどうなってるの︖ 27 ファイルを削除するときの動き
もちろん下位のレイヤー(lower01ディレクトリ、lower02ディレクトリ)には何ら変化は ありません。 # ls lower01 hoge.txt # ls lower02 fuga.txt 本セッションの ブログのURL
© SIOS Technology, Inc. All rights Reserved. Dockerのファイルシステムってどうなってるの︖ 28 OverlayFSを理解できたところで、
Dockerで実際に試してみよう︕︕
© SIOS Technology, Inc. All rights Reserved. Dockerのファイルシステムってどうなってるの︖ 29 DockerでのOverlayFSの動きを確かめるために以下のDockerイメージを作成します。
• ベースイメージはCentOS7 • hogeと書かれたテキストファイルを/root/hoge.txtに配置 • fugaと書かれたテキストファイルを/root/fuga.txtに配置 これを実現するためのDockerfileも作ります。 1 2 3 4 5 FROM centos:centos7 ADD hoge.txt /root/hoge.txt ADD fuga.txt /root/fuga.txt 本セッションの ブログのURL
© SIOS Technology, Inc. All rights Reserved. Dockerのファイルシステムってどうなってるの︖ 30 そして以下のコマンドを実⾏してDockerのイメージを作成します。
# echo "hoge" > hoge.txt # echo "fuga" > fuga.txt # docker build -t testapp01 . 本セッションの ブログのURL
© SIOS Technology, Inc. All rights Reserved. Dockerのファイルシステムってどうなってるの︖ 31 先ほど作成したイメージでコンテナを起動します。
# docker run -d -it testapp01 /bin/bash 本セッションの ブログのURL
© SIOS Technology, Inc. All rights Reserved. Dockerのファイルシステムってどうなってるの︖ 32 mountコマンドでファイルシステムのマウント状況を確認します。おっと、何やら
Dockerコマンドがよしなに⾊々なディレクトリをOverlayFSでマウントしています。次 のページではその構造を図解してみます。 # mount | grep overlay overlay on /var/lib/docker/overlay2/1ed14519861b8d785d3265512917f70274b3f11192f184e0f025728c ad34317d/merged type overlay (rw,relatime,seclabel,lowerdir=/var/lib/docker/overlay2/l/677WTGQVA7IBOMGXUH7Z4DEXLS :/var/lib/docker/overlay2/l/NBS6NXIEXE65SYVIZ7D3HSREZY:/var/lib/docker/overlay2/l/BFQ S6YGZG6YK5HU5PPE3SLJ4NE:/var/lib/docker/overlay2/l/5CXN3KDXZ4VBENORX7ZLOHUAQU ,upperdir=/var/lib/dockeroverlay2/1ed14519861b8d785d3265512917f70274b3f11192f184e0 f025728cad34317d/diff,workdir=/var/lib/docker/overlay2/1ed14519861b8d785d3265512917 f70274b3f11192f184e0f025728cad34317d/work)
© SIOS Technology, Inc. All rights Reserved. Dockerのファイルシステムってどうなってるの︖ 33 前ページのmoutオプションで指定さ
れていた、OverlayFSのmergeddir層 に相当する。 前ページのmoutオプションで指定さ れていたupperdirに相当する。 前ページの moutオプ ションで指定 されていた lowerdirに相 当する。 Dockerfileに記載されている⼀⾏ごと が、OverlayFSのlowerdirの1層に該 当します。ただし、LBAELコマンド などファイルシステムに影響のない コマンドは、OverlayFSの層は作成さ れません。
© SIOS Technology, Inc. All rights Reserved. Dockerのファイルシステムってどうなってるの︖ 34 ここでさらにOverlayFSのコンテナでの動きを確認するために、先程作成したコンテナ
に新しいファイルを作成してみると、たしかにupperdirの層に新しくpiyo.txtというファ イルが追加されていました。 # docker exec -it trusting_lalande /bin/bash # echo "piyo" > /root/piyo.txt # exit # cat /var/lib/docker/overlay2/1ed14519861b8d785d3265512917f70274b3f11192f184e0f025728c ad34317d/diff/root/piyo.txt piyo
© SIOS Technology, Inc. All rights Reserved. Dockerのファイルシステムってどうなってるの︖ 35 イメージにすると右図のような感じで
すね。
© SIOS Technology, Inc. All rights Reserved. Dockerのファイルシステムってどうなってるの︖ 36 OverlayFSを使⽤したDockerは以下のように同じCentOSから作られたDockerイメージ
は、CentOSのファイルの部分はみんなで共有します。 CeontOSのDockerイメージ /root/hoge.txtを 追加したイメージ /root/fuga.txtを 追加したイメージ /root/piyo.txtを 追加したイメージ 共有 共有 共有 本セッションの ブログのURL
© SIOS Technology, Inc. All rights Reserved. Dockerのファイルシステムってどうなってるの︖ 37 OverlayFSを使⽤しない場合は、以下のように個別にCentOSの部分を⽤意しなければな
らず、かなりファイルの容量に無駄が⽣まれます(´・ω・`)なのでOverlayFSはすごいの です。 CeontOSのDockerイメージ /root/hoge.txtを 追加したイメージ /root/fuga.txtを 追加したイメージ /root/piyo.txtを 追加したイメージ CeontOSのDockerイメージ CeontOSのDockerイメージ 本セッションの ブログのURL
© SIOS Technology, Inc. All rights Reserved. 最後に︕︕ 38 【連載】世界⼀わかりみが深いコンテナ
& Docker⼊⾨ 〜 その1:コンテナってなに︖ 〜 https://tech-lab.sios.jp/archives/18811 関連ブログ 【連載】世界⼀わかりみが深いコンテナ & Docker⼊⾨ 〜 その2:Dockerってなに︖ 〜 https://tech-lab.sios.jp/archives/19073 【連載】世界⼀わかりみが深いコンテナ & Docker⼊⾨ 〜 その3:Dockerfileってなに︖ 〜 https://tech-lab.sios.jp/archives/19191 【連載】世界⼀わかりみが深いコンテナ & Docker⼊⾨ 〜 その5:Dockerのネットワークってどう なってるの︖ 〜 https://tech-lab.sios.jp/archives/20179
© SIOS Technology, Inc. All rights Reserved. 最後に︕︕ 39 関連ブログ
【連載】世界⼀わかりみが深いコンテナ & Docker⼊⾨ 〜 その6:Dockerのファイルシステムって どうなってるの︖ 〜 https://tech-lab.sios.jp/archives/21103
© SIOS Technology, Inc. All rights Reserved. 最後に︕︕ 40 ご清聴ありがとう
ございました。