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
370
世界一わかりみの深い Docker&コンテナ入門 〜 Dockerのファイルシステムってどうなってるの? 〜/wakarimidocker_filesystem
Noriyuki TAKEI
February 25, 2021
Tweet
Share
More Decks by Noriyuki TAKEI
See All by Noriyuki TAKEI
アウトプットはいいぞ!!〜人生折り返し地点からの情報発信で学びが楽しくなった話〜/outputisgood
noriyukitakei
0
12
世界一わかりみの深いDurable Functions/wakarimi_durablefunctions
noriyukitakei
0
960
Ignite 振り返り & Azure 更新情報!/igniteakimatsuri
noriyukitakei
0
1.7k
世界一わかりみの深い クラウドネイティブなアプリ開発入門 on Azure 第2回 〜App Serviceでアプリをラクチン実行〜/wakarimiazure002
noriyukitakei
0
71
世界一わかりみの深い クラウドネイティブなアプリ開発入門 on Azure 第1回 〜Azureでクラウドネイティブを実現するには〜/wakarimiazure001
noriyukitakei
0
100
世界一わかりみの深いOAuth入門 / wakarimioauth
noriyukitakei
28
14k
Microsoft Ignite Recap Community Day〜現場で使えるIginiteUpdate〜/ignite-recap
noriyukitakei
0
1.8k
WSL2、Docker、VSCodeで劇的に改善されるWindows開発環境/wslvscodedocker-techlab
noriyukitakei
0
2.3k
Web App for Containersで コンテナをもっと身近に!! 〜ナウくてイケてるコンテナの活用方法〜/webapp4containers
noriyukitakei
0
150
Other Decks in Technology
See All in Technology
誰が正解を知っているのか / Who knows the right answer
takaking22
1
220
1人目QAエンジニアよもやま話 / QA Test Talk Vol.1
nametake
4
220
データチームの境界を考える
yummydum
0
180
越境チャレンジの現在地 〜Epic大臣制度の今〜
yousak
0
800
What's new in Vision
satotakeshi
0
180
OpsJAWS Meetup21 システム運用アンチパターンのすすめ
yoshiiryo1
0
1.4k
データエンジニアと作るデータ文化
yuki_saito
4
1.4k
IoTLT88-NTKanazawa-laundry-dry
yukima0707
0
210
オンラインでのサーバー切替事例紹介/ColoplTech-05-01
colopl
0
160
トランザクションスクリプトは何がダメなのか?
polidog
2
1.2k
サーバレスECにおける Step Functions の使い方 〜ステートマシン全部見せます!〜
miu_crescent
0
180
NFT(非代替性トークン)、DeFi(分散金融) の虚像と実像 / NFT (Non-Fungible Token), DeFi (Decentralized Finance): False and Real Images
ks91
PRO
0
250
Featured
See All Featured
Facilitating Awesome Meetings
lara
29
4k
Designing with Data
zakiwarfel
91
3.9k
Fashionably flexible responsive web design (full day workshop)
malarkey
396
62k
How GitHub Uses GitHub to Build GitHub
holman
465
280k
Embracing the Ebb and Flow
colly
73
3.4k
No one is an island. Learnings from fostering a developers community.
thoeni
9
1.3k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
236
1M
WebSockets: Embracing the real-time Web
robhawkes
57
5.2k
Designing on Purpose - Digital PM Summit 2013
jponch
106
5.6k
What’s in a name? Adding method to the madness
productmarketing
11
1.6k
KATA
mclloyd
7
8.7k
Documentation Writing (for coders)
carmenhchung
48
2.5k
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 [root@localhost 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 ご清聴ありがとう
ございました。