Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
世界一わかりみの深い Docker&コンテナ入門 〜 Dockerのファイルシステムってどうな...
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
Noriyuki TAKEI
February 25, 2021
Technology
640
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
世界一わかりみの深い Docker&コンテナ入門 〜 Dockerのファイルシステムってどうなってるの? 〜/wakarimidocker_filesystem
Noriyuki TAKEI
February 25, 2021
More Decks by Noriyuki TAKEI
See All by Noriyuki TAKEI
第50回 Tokyo Jazug Night/react-deepdive
noriyukitakei
0
88
RAG構築のためのAzure OpenAI Serviceリファレンスアーキテクチャ詳解/wakarimiragarchitecture
noriyukitakei
0
270
生成AI時代の検索手法〜スターウォーズの登場人物で紐解くベクトル/セマンティック/ハイブリッド検索〜/wakarimiaisearch
noriyukitakei
0
83
Prompt flowでブログ記事紹介ツイートアプリをラクチン開発/wakarimipromptflow
noriyukitakei
0
58
世界一わかりみの深いAzure OpenAI Service/wakarimiaoai
noriyukitakei
1
910
AIとペアプロ!! ChatGPTとGitHub Copilotで ToDoアプリを爆速ライブコーディング/wakarimigithubcopilot
noriyukitakei
0
96
世界一わかりみの深いApplicationGateway/wakarimiappilicationgateway
noriyukitakei
0
390
クラウドデザインパターンを使ってクールな設計をしよう/jazug12th
noriyukitakei
1
420
アウトプットはいいぞ!!〜人生折り返し地点からの情報発信で学びが楽しくなった話〜/outputisgood
noriyukitakei
0
210
Other Decks in Technology
See All in Technology
運用を見据えたAIエージェント設計実践
amacbee
1
3.2k
「気づいたら仕事が終わっている」バクラクAIエージェント本番運用の裏側 / layerx-bakuraku-aie2026
yuya4
19
11k
protovalidate-es を導入してみた
bengo4com
0
140
Oracle AI Database@Azure:サービス概要のご紹介
oracle4engineer
PRO
6
1.9k
Agentic Web
dynamis
1
180
Building applications in the Gemini API family.
line_developers_tw
PRO
0
2.1k
「嘘をつくテスト」の失敗例から学ぶ 良いテストコード #frontend_phpcon_do
asumikam
0
560
Terraformモジュールは、なぜ「魔境」化するのか
hayama17
2
220
AI活用を推進するために ファインディが下した、一つの小さな決断
starfish719
0
260
生成 AI × MCP で切り拓く次世代 SRE!自律型運用への挑戦と開発者体験の進化
_awache
0
170
Rubyで音を視る
ydah
1
110
個人最適 から 全体最適 へ AI情報共有会・AIギルド・AI-DLC で進める カンリーの組織展開
rfdnxbro
0
1.9k
Featured
See All Featured
Mind Mapping
helmedeiros
PRO
1
240
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
201
75k
Building Adaptive Systems
keathley
44
3k
The Pragmatic Product Professional
lauravandoore
37
7.3k
A Soul's Torment
seathinner
6
2.9k
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
659
62k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
333
22k
Are puppies a ranking factor?
jonoalderson
1
3.5k
GraphQLとの向き合い方2022年版
quramy
50
15k
More Than Pixels: Becoming A User Experience Designer
marktimemedia
3
430
Writing Fast Ruby
sferik
630
63k
RailsConf 2023
tenderlove
30
1.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 ご清聴ありがとう
ございました。