Upgrade to Pro — share decks privately, control downloads, hide ads and more …

世界一わかりみの深い Docker&コンテナ入門 〜 Dockerのファイルシステムってどうなってるの? 〜/wakarimidocker_filesystem

世界一わかりみの深い Docker&コンテナ入門 〜 Dockerのファイルシステムってどうなってるの? 〜/wakarimidocker_filesystem

Noriyuki TAKEI

February 25, 2021
Tweet

More Decks by Noriyuki TAKEI

Other Decks in Technology

Transcript

  1. © SIOS Technology, Inc. All rights Reserved.
    世界⼀わかりみの深い
    Docker&コンテナ⼊⾨
    〜 Dockerのファイルシステムってどうなってるの︖ 〜
    Noriyuki TAKEI
    2021年2⽉25⽇
    Kubernetes Meetup Tokyo #39

    View full-size slide

  2. © 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

    View full-size slide

  3. © SIOS Technology, Inc. All rights Reserved.
    Dockerのファイルシステムってどうなってるの︖
    3
    DockerはOverlayFSという、ちょっと特殊なファイルシステムを使って、劇的な容量の
    削減を⾏っています。ちょうどPhotoshopのレイヤーのイメージに近い感じです。
    layer01〜layer03ディレクト
    リにあるファイルをマージし
    たものがmergedディレクトリ
    に表⽰される

    View full-size slide

  4. © SIOS Technology, Inc. All rights Reserved.
    Dockerのファイルシステムってどうなってるの︖
    4
    上位のレイヤーに同名のファイ
    ルがあった場合、それが
    mergedディレクトリに表⽰さ
    れる。この場合は、layer03
    ディレクトリにあるファイルB
    がmergedディレクトリに表⽰
    される。

    View full-size slide

  5. © SIOS Technology, Inc. All rights Reserved.
    Dockerのファイルシステムってどうなってるの︖
    5
    実際に⼿を動かして
    やってみよう︕︕
    本セッションの
    ブログのURL

    View full-size slide

  6. © SIOS Technology, Inc. All rights Reserved.
    Dockerのファイルシステムってどうなってるの︖
    6
    重ね合わせるレイヤーのベースとなるディレクトリです。先程のイメージ
    図で記載した「layer01〜layer03ディレクトリ」に相当します。
    OverlayFSの仕組み上、このディレクトリのファイルに対して変更がされる
    ことはないので、基本的にこのディレクトリは読み込み専⽤でOKです。
    lowerdir
    これからOverlayFSの実際の動きをご説明するとともに、実際にコマ
    ンド叩いて実践したいと思います。まず、その前にちょっと説明させ
    てください。OverlayFSには以下の4つのレイヤーの概念があります。
    内部的に利⽤される作業⽤ディレクトリです。
    upperdir
    mergeddirに対して変更をかけたファイルが保存されるディレクトリです。
    workdir
    lowerdirとupperdirを結合したディレクトリです。ファイルに対して追
    加・変更・削除などの操作を⾏うディレクトリでもあります。
    mergeddir

    View full-size slide

  7. © SIOS Technology, Inc. All rights Reserved.
    Dockerのファイルシステムってどうなってるの︖
    7
    OverlayFSで右図のようなディレ
    クトリ構造を作成してみます。

    View full-size slide

  8. © 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

    View full-size slide

  9. © 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の指定です。

    View full-size slide

  10. © 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

    View full-size slide

  11. © SIOS Technology, Inc. All rights Reserved.
    Dockerのファイルシステムってどうなってるの︖
    11
    では、次にlower02ディ
    レクトリにhoge2という
    内容のhoge.txtを追加し
    てみます。lower02のほ
    うがlower01より上のレ
    イヤーなので、merged
    ディレクトリのhoge.txt
    の中⾝はhoge2になるは
    ずです。右図のような構
    成ですね。

    View full-size slide

  12. © 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

    View full-size slide

  13. © SIOS Technology, Inc. All rights Reserved.
    Dockerのファイルシステムってどうなってるの︖
    13
    ここからは実際に発⽣する以下のユースケースを元にOverlayFSの動きを⾒てみます。
    ファイルを追加するときの動き
    ファイルを更新するときの動き
    ファイルを削除するときの動き

    View full-size slide

  14. © SIOS Technology, Inc. All rights Reserved.
    Dockerのファイルシステムってどうなってるの︖
    14
    ファイルを追加するときの動き
    ユーザーに⾒えるのはmergeddir
    であり、ユーザーはこのmerged
    ディレクトリにファイルを追加す
    るオペレーションをするわけです
    が、OverlayFS的にはpiyo.txtは
    upperディレクトリに追加されま
    す。そして、upperディレクトリ
    に書き込まれたファイルは
    lower01ディレクトリやlower02
    ディレクトリに書き込まれたファ
    イルと同じように、mergedディ
    レクトリに⾒えるようになります。
    図にすると以下のような感じです。
    mergedディレクトリに追加・
    変更・削除したものは、必ずこ
    のupperディレクトリに反映さ
    れる。

    View full-size slide

  15. © 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

    View full-size slide

  16. © 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

    View full-size slide

  17. © SIOS Technology, Inc. All rights Reserved.
    Dockerのファイルシステムってどうなってるの︖
    17
    ファイルを追加するときの動き
    でも、実際に追加したファイルはuperdirディレクトリにあります。
    # ls upperdir
    piyo.txt
    本セッションの
    ブログのURL

    View full-size slide

  18. © SIOS Technology, Inc. All rights Reserved.
    Dockerのファイルシステムってどうなってるの︖
    18
    ファイルを更新するときの動き
    次にファイルを更新するときの動
    きを説明します。「ファイルを追
    加するときの動き」でご紹介した
    右図の構成のfuga.txtというファ
    イルの内容をfugaからfuga2に変
    更してみます。
    まず、 ユーザーがmergedディレ
    クトリ内のfuga.txtをhogeから
    hoge2に変更するオペレーション
    をすると、ファイルシステム内部
    の動きは、まずlower02の
    fuga.txtがupperディレクトリに
    コピーされます。

    View full-size slide

  19. © SIOS Technology, Inc. All rights Reserved.
    Dockerのファイルシステムってどうなってるの︖
    19
    ファイルを更新するときの動き
    次に、uperディレクトリ内の
    fuga.txtの内容がfugaからfuga2
    に変更されます。

    View full-size slide

  20. © SIOS Technology, Inc. All rights Reserved.
    Dockerのファイルシステムってどうなってるの︖
    20
    ファイルを更新するときの動き
    そして、このfuga.txtというファ
    イル名のファイルは、lower02
    ディレクトリとupperディレクト
    リの両⽅に存在してます。
    OverlayFSの仕様では、より上位
    の層のレイヤーのファイルがユー
    ザーに⾒えることとなるので、
    mergedディレクトリには、
    upperディレクトリにあるファイ
    ルが⾒えることとなります。つま
    り以下のような状態です。

    View full-size slide

  21. © SIOS Technology, Inc. All rights Reserved.
    Dockerのファイルシステムってどうなってるの︖
    21
    ファイルを更新するときの動き
    # echo fuga2 > merged/fuga.txt
    # cat merged/fuga.txt
    fuga2
    では実践してみましょう。「ファイルを追加するときの動き」の状態で、
    mergedディレクトリ内のhoge.txtの内容をhogeからhoge2に変更して
    みます。
    本セッションの
    ブログのURL

    View full-size slide

  22. © 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ディレクトリにコピーし、それからその内容を変更します。この
    仕組をコピー・オン・ライトといいます。

    View full-size slide

  23. © SIOS Technology, Inc. All rights Reserved.
    Dockerのファイルシステムってどうなってるの︖
    23
    ファイルを削除するときの動き
    次にファイルを削除するときの動
    きを⾒てみます。「ファイルを更
    新するときの動き」でご紹介した
    右図の構成から、hoge.txtを削除
    してみます。

    View full-size slide

  24. © SIOS Technology, Inc. All rights Reserved.
    Dockerのファイルシステムってどうなってるの︖
    24
    ファイルを削除するときの動き
    hoge.txtを削除すると下図のよう
    になります。upperディレクトリ
    に何やら新しいファイルが出来て、
    mergeddirディレクトリには
    hoge.txtは⾒えなくなりました。
    upperディレクトリに出来たファイルは「ホワイトアウト
    ファイル」と呼ばれるもので、ファイルが削除されたこと
    を表すものです。OverlayFSでは、lowerdirの層にある
    ディレクトリには変更を加えることはしません。そういう
    仕様だからです(この仕様のありがたみは、このあとの説
    明でご説明します)。では、「ファイルが削除された」と
    いうことを表現する⽅法が難しいわけですが、そこで
    OverlayFSでは、先程のホワイトアウトファイルと呼ばれ
    るものを、削除対象と同名のファイル名でupperディレク
    トリに置くことで、ファイルシステム的に削除されたこと
    にしてしまうわけです。つまりmergeddirからは⾒えなく
    なるということになります。

    View full-size slide

  25. © SIOS Technology, Inc. All rights Reserved.
    Dockerのファイルシステムってどうなってるの︖
    25
    ファイルを削除するときの動き
    では実際にコマンドを実⾏して確認してみましょう。
    # rm merged/hoge.txt
    # ls merged
    fuga.txt piyo.txt # 確かにpiyo.txtは削除されている。
    本セッションの
    ブログのURL

    View full-size slide

  26. © 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

    View full-size slide

  27. © SIOS Technology, Inc. All rights Reserved.
    Dockerのファイルシステムってどうなってるの︖
    27
    ファイルを削除するときの動き
    もちろん下位のレイヤー(lower01ディレクトリ、lower02ディレクトリ)には何ら変化は
    ありません。
    # ls lower01
    hoge.txt
    # ls lower02
    fuga.txt
    本セッションの
    ブログのURL

    View full-size slide

  28. © SIOS Technology, Inc. All rights Reserved.
    Dockerのファイルシステムってどうなってるの︖
    28
    OverlayFSを理解できたところで、
    Dockerで実際に試してみよう︕︕

    View full-size slide

  29. © 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

    View full-size slide

  30. © SIOS Technology, Inc. All rights Reserved.
    Dockerのファイルシステムってどうなってるの︖
    30
    そして以下のコマンドを実⾏してDockerのイメージを作成します。
    # echo "hoge" > hoge.txt
    # echo "fuga" > fuga.txt
    # docker build -t testapp01 .
    本セッションの
    ブログのURL

    View full-size slide

  31. © SIOS Technology, Inc. All rights Reserved.
    Dockerのファイルシステムってどうなってるの︖
    31
    先ほど作成したイメージでコンテナを起動します。
    # docker run -d -it testapp01 /bin/bash
    本セッションの
    ブログのURL

    View full-size slide

  32. © 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)

    View full-size slide

  33. © SIOS Technology, Inc. All rights Reserved.
    Dockerのファイルシステムってどうなってるの︖
    33
    前ページのmoutオプションで指定さ
    れていた、OverlayFSのmergeddir層
    に相当する。
    前ページのmoutオプションで指定さ
    れていたupperdirに相当する。
    前ページの
    moutオプ
    ションで指定
    されていた
    lowerdirに相
    当する。
    Dockerfileに記載されている⼀⾏ごと
    が、OverlayFSのlowerdirの1層に該
    当します。ただし、LBAELコマンド
    などファイルシステムに影響のない
    コマンドは、OverlayFSの層は作成さ
    れません。

    View full-size slide

  34. © 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

    View full-size slide

  35. © SIOS Technology, Inc. All rights Reserved.
    Dockerのファイルシステムってどうなってるの︖
    35
    イメージにすると右図のような感じで
    すね。

    View full-size slide

  36. © 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

    View full-size slide

  37. © 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

    View full-size slide

  38. © 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

    View full-size slide

  39. © SIOS Technology, Inc. All rights Reserved.
    最後に︕︕
    39
    関連ブログ
    【連載】世界⼀わかりみが深いコンテナ & Docker⼊⾨ 〜 その6:Dockerのファイルシステムって
    どうなってるの︖ 〜
    https://tech-lab.sios.jp/archives/21103

    View full-size slide

  40. © SIOS Technology, Inc. All rights Reserved.
    最後に︕︕
    40
    ご清聴ありがとう
    ございました。

    View full-size slide