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
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
Noriyuki TAKEI
February 25, 2021
Technology
650
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
ループエンジニアリングでE2Eテストを実践
noriyukitakei
0
300
第50回 Tokyo Jazug Night/react-deepdive
noriyukitakei
0
94
RAG構築のためのAzure OpenAI Serviceリファレンスアーキテクチャ詳解/wakarimiragarchitecture
noriyukitakei
0
280
生成AI時代の検索手法〜スターウォーズの登場人物で紐解くベクトル/セマンティック/ハイブリッド検索〜/wakarimiaisearch
noriyukitakei
0
99
Prompt flowでブログ記事紹介ツイートアプリをラクチン開発/wakarimipromptflow
noriyukitakei
0
67
世界一わかりみの深いAzure OpenAI Service/wakarimiaoai
noriyukitakei
1
920
AIとペアプロ!! ChatGPTとGitHub Copilotで ToDoアプリを爆速ライブコーディング/wakarimigithubcopilot
noriyukitakei
0
100
世界一わかりみの深いApplicationGateway/wakarimiappilicationgateway
noriyukitakei
0
400
クラウドデザインパターンを使ってクールな設計をしよう/jazug12th
noriyukitakei
1
430
Other Decks in Technology
See All in Technology
証券システムを10年Scalaで作り続けるということ - 関数型まつり2026
krrrr38
3
720
cccccc
moznion
0
1.8k
「ちゃんとやっている」は独りよがりだった ― 不安に寄り添うインシデント対応へ / Towards incident response that addresses anxieties
chmikata
1
3.1k
そのタスクオンスケですか?
poropinai1966
0
140
勉強会企画をアプリで構造化してみた 〜そこで見えた、AIとの付き合い方〜 / I've structured a study group plan using an app.
pauli
0
330
脱金融のフューチャー・デザイン / Future Design Beyond Finance
ks91
PRO
0
130
SRE歴2ヶ月でも開発6年の知見を活かして、チームで止まっていた環境改善を前に進めた話
a_ono
1
210
デジタル・デザイン:次の50年を描く「進化する青写真」
y150saya
0
820
Amazon EVS で VCF 9.0 / 9.1 のサポート開始まとめ
mtoyoda
0
270
Empower GenAI with Agile - あなたのアジャイルが生成AIのバフになる仕組み
hageyahhoo
1
130
デジタル・デザイン構想 by Sayaka Ishizuka
y150saya
0
200
Terraform共通モジュールをチーム横断で“変えられる”運用へ ― リリースと適用の分離
kekke_n
0
1.4k
Featured
See All Featured
How to build a perfect <img>
jonoalderson
1
5.8k
How Software Deployment tools have changed in the past 20 years
geshan
0
34k
Marketing Yourself as an Engineer | Alaka | Gurzu
gurzu
0
260
Introduction to Domain-Driven Design and Collaborative software design
baasie
1
890
Why You Should Never Use an ORM
jnunemaker
PRO
61
9.9k
Visual Storytelling: How to be a Superhuman Communicator
reverentgeek
2
590
HDC tutorial
michielstock
2
730
Noah Learner - AI + Me: how we built a GSC Bulk Export data pipeline
techseoconnect
PRO
0
210
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
47
8.2k
Jamie Indigo - Trashchat’s Guide to Black Boxes: Technical SEO Tactics for LLMs
techseoconnect
PRO
0
260
YesSQL, Process and Tooling at Scale
rocio
174
15k
Dominate Local Search Results - an insider guide to GBP, reviews, and Local SEO
greggifford
PRO
0
200
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 ご清聴ありがとう
ございました。