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

コンテナの歴史を追いながらいまいちどコンテナについておさらいしてみる / Infra Study 2nd #2

tenforward
June 11, 2021

コンテナの歴史を追いながらいまいちどコンテナについておさらいしてみる / Infra Study 2nd #2

Infra Study 2nd #2「クラウドネイティブを支えるインフラ技術」の講演資料です。
参考となる情報にはPDF中からリンクをしていますが、資料中のリンクは Speaker Deck 上ではクリックできないので PDF をダウンロードしてご覧ください。

tenforward

June 11, 2021
Tweet

More Decks by tenforward

Other Decks in Science

Transcript

  1. ぢアふべ〣ྺ࢙ぇ௥⿶〟⿿〾⿶〳⿶〖〞ぢアふべ〠〙⿶〛⿼《〾⿶「〛〴぀
    Infra Study 2nd #2ʮぜ゘げへぼぐふくゅぇࢧ⿺぀ぐアや゘ٕज़ʯ
    Ճ౻ହจ
    2021-06-11
    1/24

    View Slide

  2. ࣗݾ঺հ

    View Slide

  3. ࣗݾ঺հʢ1ʣʙࢲ〠〙⿶〛
    ɹ
    Ճ౻ହจʢ͔ͱ͏΍͢;Έʣ
    • @ten_forward
    • https://github.com/tenforward/
    • ॳ〶〛৮ぁ〔ぢアふべ〤 Virtuozzoʢ2007 ೥〉あʣ
    • ޷ 〟てとふわぢが゚〤 setns()
    2/24

    View Slide

  4. ࣗݾ঺հʢ2ʣʙ࢓ࣄ
    ॴଐ
    גࣜձࣾ IDC ϑϩϯςΟΞ
    • ゛アの゚つがみ։ൃʢ15 ೥〰〞ʣ
    • ぢアふべつがもと։ൃʢ1 ೥ʣ
    • ৘ใなずゔ゙ふくؔ܎ʢ2021-04ʙʣ
    3/24

    View Slide

  5. 4/24

    View Slide

  6. 5/24

    View Slide

  7. 6/24

    View Slide

  8. 7/24

    View Slide

  9. ࣗݾ঺հʢ3ʣʙOSS ׆ಈ
    ʢLXC 〣 Contributors らがでʣ
    ɹ
    ɹ
    झຯ〜ぢアふべ〹〘〛〳『ɻぢアふべ〣ओ〠じがぼ゚पล〣࣮
    ૷〠ڵຯ⿿⿴〿〳『ɻ
    • LXC 〜ֶ〫ぢアふべೖ໳ ʵܰྔԾ૝Խ؀ڥぇ࣮ݱ『぀ٕ
    ज़ (gihyo.jp, 2014 ೥ʙ)
    • Plamo Linux ゐアふべそ゚がゆ
    • 20 ੈل⿾〾ଓ。ࠃ࢈ぶくとぷ゙もゔがてゖア
    • lxc-jp ゆ゜でこぜぷ
    • LXC/LXD ํ໘〣຋༁׆ಈ
    • ぢアふべܕԾ૝Խ〣৘ใަ׵ձʢ2013 ೥ʙʣ
    • ぢアふべٕज़〠ؔ『぀ษڧձ
    • ࣍ճɺ೥಺〠։࠵༧ఆ
    8/24

    View Slide

  10. ຊ೔〣಺༰
    ぜ゘げへぼぐふくゅ〟〴〟《え〤 kubernetes ぇ௨「〛ぢアふべぇ࢖〘〛⿶぀ํ〷ଟ⿶〜「〼⿸ɻ
    〜〷ぎゆ゙たがてゖア〣 Deployment 〹 Pod 〣ىಈ〤ҙࣝ「〛〷ɺPod 〣த〣ぢアふべ〣ىಈ〹ɺ〒〣
    ぢアふべ⿿〞〣〽⿸〟ػೳぇ࢖〘〛࣮ߦ《ぁ〛⿶぀〣⿾ʁ 〳〜ҙࣝ『぀ਓ〤〟⿾〟⿾⿶〟⿶〣〜〤〟⿶〜
    「〼⿸⿾ʁ
    〒〈〜ɺ〈〣なひてゖア〜〤ʮぢアふべʯ⿿⿶⿾〠ଟ。〣ػೳぇ࢖༻「〛ىಈ「〛。぀〣⿾ぇ؆୯〠঺հ「
    〔⿶〝ࢥ⿶〳『ɻ
    • શ෦ྺ࢙ぇ௥〘〛঺հ「〛⿶぀〝࣌ؒ⿿⿴〿〳【え〣〜ɺదٓࢀߟ〠〟぀へずゔゐアぷ〟〞〭〣゙ア
    ぜぇష〿〳『
    • ࠓ೔〤આ໌〤「〟⿶〷〣〣ɺॏཁ〟ٕज़〠ؔ「〛〤આ໌〣と゘ぐへ〕々ೖぁ〛⿴〿〳『
    • 〷⿸গ「ৄ「⿶ぢアふべ〣ྺ࢙〤 CloudNative Days Tokyo 2019/KOF 2019 〣ൃදࢿྉ〠⿴〿
    〳『
    • ࢲ〣 asciinema 〠ɺぢろアへぇ࢖〘〛ぢアふべぇ࡞぀ぶゑ⿿〔。《え⿴〿〳『〣〜ɺ〷「〉ڵຯ⿿
    ⿴ぁ〥】〧〉ཡ。〕《⿶ˠ https://asciinema.org/ tenforward
    9/24

    View Slide

  11. Ծ૝ろてア〝ぢアふべ

    View Slide

  12. Ծ૝ろてア〣⿼⿼》〘〦『、぀ྺ࢙
    Ծ૝ろてア:
    • ゐぐアや゛がわ〣ੈք〜〤 1970 ೥୅ং൫⿾〾⿴぀ٕज़
    • PC 〣ੈք〜〤 1999 ೥〠 VMware ⿿ొ৔「〛Ҏདྷ〣ൃల
    Ұํ〜ܰྔ〟ʮԾ૝؀ڥʯ〝「〛〣ぢアふべ〷ݹ。⿾〾ଘࡏ「〛⿶぀
    • chroot: ゆ゜なと〠ର「〛೚ҙ〣ぶく゛ぜぷ゙ぇ゚がぷ〝「〛ࢦఆ『぀
    • 1979 ೥ UNIX Version 7 〜ɺ1982 ೥ BSD 〭ಋೖ
    • 2000 ೥୅ॳظ〠 FreeBSD jail, VirtuozzoʢLinux ޲々঎༻ぢアふべぬやぷʣ
    ɺLinux VServer
    • りとふくアそۀऀ〟〞〜ܰྔ〟ʮԾ૝ろてアʯ〝「〛ར༻ʢ゙ぬがとফඅ⿿গ〟。ूੵ౓ぇ্〆〾ぁ぀〝⿶⿸
    ࢹ఺ʣ
    • てとふわ〝「〛ぢアふべぇಈ⿾『⿶い〻぀ʮてとふわぢアふべʯ
    10/24

    View Slide

  13. ぢアふべ
    ぢアふべ〝〤ʁ
    • ゆ゜なと
    • ଞ〣ゆ゜なと⿾〾ִ཭《ぁ〔Ծ૝త〟ۭؒ〜ゆ゜なと⿿
    ಈ。
    Linux 〜〤じがぼ゚಺〣ػೳ
    • Namespaceʢִ཭ػೳʣ
    • cgroupʢ゙ぬがと੍ݶʣ
    • 〒〣ଞଟ਺〣ػೳ
    〜ʮぢアふべʯぇ࡞〿〳『ɻʮίϯςφʯͱ͍͏୯Ұͷػ
    ೳ͸͋Γ·ͤΜ
    ˠゆ゜なと〟〣〜ී௨〠 OS ্〜ゆ゜なとぇىಈ『぀〣〝ಉ౳
    〣とゃがへ〜؀ڥ⿿ىಈ「〛。぀
    ˠඞཁ〟ػೳ〝ઃఆぇ૊〴߹い【〛ʮぢアふべʯぇ࡞੒〜 ぀
    11/24

    View Slide

  14. Linux Kernel 〭〣ぢアふべؔ࿈ٕज़〣
    ࣮૷〝 LXC

    View Slide

  15. やきぐ゚てとふわܥ〣ػೳ〣࣮૷ظ
    ⿾〟〿ݹ。⿾〾ぢアふべؔ࿈〣ػೳ〣࣮૷〤࢝〳〿〳『ʢpivot_root 〤ぢアふべ༻〣ػೳ〜〤〟⿶〜『
    ⿿ɺࠓ〤ぢアふべ〠࢖いぁ〛⿶〳『ʣ
    ɻ〳』〤やきぐ゚てとふわํ໘〣ػೳ⿾〾ɻ
    • pivot_rootʢ2.3.41/2000 ೥ʣˠぢアふべઐ༻〣ಠཱ「〔やきぐ゚てとふわ
    • bind mountʢ2.4.0/2001 ೥ʣˠ೚ҙ〣ぶく゛ぜぷ゙ぇ゚がぷ〠 pivot_root 『぀〣〠ඞཁ
    • mount namespaceʢ2.4.19/2002 ೥ʣˠぢアふべؒ〜ろげアぷૢ࡞ぇ෼཭〜 ぀
    ͜ͷ̏ͭͷػೳͰϚ΢ϯτૢ࡞Λಠཱͤͨ͞ίϯςφઐ༻ͷϑΝΠϧγεςϜ͕࡞Ε·͢ɻ
    〈〣ػೳ〕々ぇ࢖〘〛やきぐ゚てとふわ〝ろげアぷぇִ཭「〔ぢアふべぇ࡞぀ぶゑ:
    https://asciinema.org/a/258206
    ろげアぷपล〣ৄ「⿶ࢿྉ
    ろげアぷゆ゜むだがてゖア
    12/24

    View Slide

  16. pivot_root ぇ࢖〘〔ಠཱ「〔やきぐ゚てとふわび゙が
    • root ϑΝΠϧγεςϜࣗମΛऔΓସ͑Δʢൈ々぀〝⿶⿸֓೦⿿〟⿶ʣ
    • chroot 〠ൺ〮〛 pivot_root 〜 ぀৚݅〤ݫ「⿶
    pivot_root લ pivot_root ޙ
    • ʮ৽「⿶ root やきぐ゚てとふわʯ⿾〾〤ൈ々ग़【〟⿶
    • Docker 〹 LXC/LXD 〟〞〤 pivot_root ぇ࢖༻「〛⿶぀
    13/24

    View Slide

  17. ぢアふべ〣࡞੒ྫʢ〔〕「ろげアぷؔ࿈〣〴ִ཭「〔ぢアふべɺઆ໌〟「ʣ

    # cat /proc/self/mounts ʢりとぷ〣ろげアぷ৘ใぇ֬ೝɺ〔。《え〣やきぐ゚てとふわ⿿ろげアぷ《ぁ〛⿶぀ʣ
    : (snip)
    udev /dev devtmpfs rw,nosuid,noexec,relatime,size=974296k,nr_inodes=243574,mode=755 0 0
    devpts /dev/pts devpts rw,nosuid,noexec,relatime,gid=5,mode=620,ptmxmode=000 0 0
    : (snip)
    # touch /HOST_ROOT ʢりとぷ〣゚がぷ/〠 HOST_ROOT 〝⿶⿸やきぐ゚ぇஔ。ʣ
    # touch /var/container/CONTAINER_ROOT ʢぢアふべぐゐがで〣゚がぷ/var/container 〠 CONTAINER_ROOT 〝⿶⿸やきぐ゚ぇஔ。ɻ〈〣഑Լ〠〤ぢアふべぐゐがで⿿ల։《
    ぁ〛⿶぀〝「〳『ʣ
    # unshare --mount --fork -- /bin/bash ʢmount namespace ぇ࡞぀ʣ
    # mount --make-rprivate / ʢろげアぷૢ࡞⿿ namespace ぇ〳〔⿶〜൓ө《ぁ〟⿶〽⿸〠『぀⿼〳」〟⿶ʣ
    # mkdir /var/newroot ʢ৽〔〠ぢアふべぇ࡞੒『぀ぶく゛ぜぷ゙〣࡞੒ʣ
    # mount --bind /var/container /var/newroot ʢぢアふべぐゐがでぇ/var/newroot 〠 bind mountʣ
    # cd /var/newroot
    # ls ʢ/var/newroot 〠ぢアふべぐゐがで⿿ bind mount 《ぁ〛⿶぀ʣ
    bin dev home media opt root sbin sys usr
    CONTAINER_ROOT etc lib mnt proc run srv tmp var
    # mount -t proc -o rw,nosuid,nodev,noexec,relatime proc proc ʢ/var/newroot/proc 〠 proc やきぐ゚てとふわぇろげアぷʣ
    # mkdir old ʢpivot_root 〜Ҏલ〣゚がぷぇろげアぷ『぀ぶく゛ぜぷ゙ぇ࡞੒ʣ
    # pivot_root . old ʢݱࡏ〣ぶく゛ぜぷ゙ (/var/newroot) ぇ゚がぷ〠ɺҎલ〣゚がぷぇ/old 〠ろげアぷ「〛 pivot_rootʣ
    # ls / ʢݱࡏ〣ぶく゛ぜ゙⿿゚がぷ〠〟〘〛⿶぀ʣ
    CONTAINER_ROOT lib proc sys
    : (snip)
    # ls /old ʢ/old 〠〤Ҏલ〣゚がぷʢ〙〳〿りとぷ〣゚がぷʣ⿿ろげアぷ《ぁ〛⿶぀ʣ
    HOST_ROOT initrd.img.old proc tmp
    # umount -l /old ʢ/old 〤ෆཁ〟〣〜ぎアろげアぷʣ
    # ls /old ʢ/old ҎԼ〤ۭ〠ʣ
    # cat /proc/self/mounts ʢろげアぷ৘ใぇݟ぀〝ぢアふべ〣゚がぷ〝 proc 〕々⿿ろげアぷ《ぁ〛⿶぀ʣ
    /dev/sda1 / ext4 rw,relatime,errors=remount-ro 0 0
    proc /proc proc rw,nosuid,nodev,noexec,relatime 0 0

    14/24

    View Slide

  18. Linux ぢアふべ׬੒ظୈҰظ
    2006ʙ2008 ೥〠⿾々〛⿾〟〿〣ػೳ⿿௥Ճ《ぁɺNamespace 〤ओཁ〟〷〣⿿ଗ〘〔:
    • ぢアふべ〉〝〠:
    • ಠࣗ〣りとぷ໊⿿෇々〾ぁ぀〽⿸〠〟〘〔ˠ UTS Namespaceʢ2.6.19/2006 ೥ʣ
    • ゆ゜なとؒ௨৴ぇִ཭〜 ぀〽⿸〠〟〘〔ˠ IPC Namespaceʢ2.6.19/2006 ೥ʣ
    • ಠཱ「〔 PID ⿿෇々〾ぁ぀〽⿸〠〟〘〔ˠ PID Namespaceʢ2.6.24/2008 ೥ʣ
    • ಠཱ「〔ぼひぷゞがぜ I/Fɺぎへ゛とɺれがぷɺ゚がふくアそɺやく゚の゙アそ⿿࣋〛぀〽⿸〠〟〘〔ˠ
    Network Namespaceʢ2.6.24/2008 ೥ʣ
    • ぢアふべ༻〣Ծ૝ぐアのがやこがと⿿࣋〛぀〽⿸〠〟〘〔ˠ vethʢ2.6.24/2008 ೥ʣ
    ɺmacvlan
    ʢ2.6.23/2007 ೥ʣ
    • CPU 〣゙ぬがと੍ݶ⿿⿾々〾ぁ぀〽⿸〠〟〘〔ˠ cgroup cpu, cpuacct, cpuset ぢアぷ゜が゘が
    ʢ2.6.24/2008 ೥ʣ
    • LXC 〣஀ੜʢ2008 ೥ʣ
    • じがぼ゚〠ػೳ⿿ॆ࣮「〛 〔〷〣〣〒ぁぇ։ൃऀ⿿ࢼ『؀ڥ⿿〟⿶〣〜஀ੜ
    • 0.8 。〾⿶〳〜〤 Cɺてこ゚ɺPython ゆ゜そ゘わ〣د【ू〶ʢぐろぐば࢖⿶〚〾⿶ʣ
    15/24

    View Slide

  19. PID Namespace 〠〽぀ಠཱ「〔ゆ゜なとۭؒ
    • ぢアふべ಺〜〞え〟ゆ゜なとぇ࣮ߦ「〛⿶぀⿾ɺଞ〣ぢアふべ⿾〾ݟ⿺〔〾ぐん
    • ぢアふべ〉〝〠ಠཱ「〛 PID ぇ࣋〖〔⿶
    • 〔〕「ɺりとぷ (਌ Namespace) ⿾〾ぢアふべ (ࢠ〣 Namespace) 〣ゆ゜なと〤ݟ⿺〳『
    16/24

    View Slide

  20. veth ぐアのがやこがとʢઆ໌〟「ʣ
    • Virtuozzo/OpenVZ ༝དྷ
    • ࡞੒『぀〝ର〝〟぀ぐアのがやこがと⿿ੜ੒《ぁ぀ɻ
    〒〣ର〝〟぀ぐアのがやこがとؒ〜௨৴ぇߦ⿸ʹ L2
    〣ぷアぼ゚
    • ର〣ยํぇりとぷɺยํぇぢアふべ〣 Namespace
    〠ॴଐ《【぀ʢҟ〟぀ Namespace ؒ〜〟⿶〝௨৴
    ෆՄʣ
    17/24

    View Slide

  21. ぢアふべ〣స׵ظ

    View Slide

  22. ぢアふべ〣స׵ظ
    2010 ೥〉あ⿾〾〣ྲྀぁ
    • ぐアや゘〣ぢがへԽ〣ྲྀぁ
    • DevOpsɺCI/CD 〣〽⿸〟։ൃɺぶゆ゜ぐɺӡ༻〣とゃがへぎひゆ
    • PaaS, SaaS 〣୆಄
    ˠとゃがへʴԾ૝ろてアత〟れがのも゙ふくʴなずゔぎʢろ゚ばふべアぷʣ〟ಠཱ؀ڥ⿿ॏཁ
    • とゃがへ໘〠ண໨「〔ぢアふべ〣࠾༻ʢैདྷ〣゙ぬがとফඅ〠ண໨「〔ར༻⿾〾〣స׵ʣ
    • ゆ゜なとぇىಈ『぀〕々〟〣〜଎⿶
    • ⿾〟〾』「〷Ծ૝ろてア〣〽⿸〠てとふわ〝「〛ىಈ「〟。〛〷ྑ⿶〝⿶⿸ゐ゙ひぷ
    ˠぎゆ゙たがてゖアぢアふべ
    • ಠཱ「〔やきぐ゚てとふわぇ࢖〘〛れがのも゙ふくぇ֬อ「〟⿿〾ىಈ〜 ぀
    • ಠཱ「〔ִ཭ۭؒ
    〝⿶⿸ゐ゙ひぷぇ׆⿾「〟⿿〾ぢアふべぇ׆༻『぀ྲྀぁ⿿ੜ〳ぁ぀
    18/24

    View Slide

  23. ぢアふべػೳ〣ॆ࣮〣 Docker 〣ొ৔
    2009ʙ2013 ೥〉あ
    • ぢアふべ〉〝〠:
    • ゐゑ゙が੍ݶ⿿⿾々〾ぁ぀〽⿸〠〟〘〔ʢ2.6.29/2009 ೥ʣ
    • I/O ੍ݶ⿿⿾々〾ぁ぀〽⿸〠〟〘〔ʢ2.6.33/2010 ೥ʣ
    • ೚ҙ〣てとふわぢが゚〣やく゚の゙アそ⿿〜 ぀〽⿸〠〟〘〔ʢ3.5/2012 ೥ɺseccompɺޙड़ʣ
    • ぢアふべ֎⿾〾ぢアふべ಺〠ೖ〘〛ぢろアへ࣮ߦ〜 ぀〽⿸〠〟〘〔ˠ setns てとふわぢが゚
    ʢ2011ʙ2013 ೥ʣ
    ぢアふべ〜てとふわ〹ぎゆ゙たがてゖアぇಈ⿾『ओཁ〟ػೳ⿿Ұ௨〿〒あ〘〔
    • LXC ぇ࠾༻「〔 PaaSɺSaaS 〣ొ৔ɻ「⿾「⿶〳⿶〖ぐた〛〟⿶ LXC
    • ʢ౰࣌〣ʣLXC 〣ぐた〛〟⿶〝〈あぇ゘ひゆ『぀ Docker 〣ొ৔ʢॳظ Docker 〤ཪଆ〜 LXC ぇ
    ࢖༻ʣ
    • ぐろぐば࢖⿶〚〾⿶ CLI ぇ docker ぢろアへ〜゘ひゆ
    • ぐゐがでよがとʴゕぺざアやきぐ゚てとふわ࢖༻〜ぢアふべぐゐがで࡞੒ˠىಈ〣とゃがへぎひゆ
    • ぼひぷゞがぜܦ༝〣ぢアふべ؅ཧ
    • Docker ొ৔ޙ〤ʮぢアふべʯ˺ʮぎゆ゙たがてゖアぢアふべʯ
    Ұ༂ʮίϯςφʯ͕࿩୊ͷٕज़ʹ!!
    19/24

    View Slide

  24. ぢアふべػೳ〣ॆ࣮ظ

    View Slide

  25. cgroup v2
    Docker 〣ొ৔〠〽぀ʮぢアふべʯ〣੝〿্⿿〿〜ɺじがぼ゚〠ぢアふべؔ࿈ػೳ⿿ೖ〿〹『⿶؀ڥ〠
    〟〘〔
    • cgroup v1
    • ぢアふべ⿿ゐでをが〜〟⿶࣌ظ〠ಋೖ⿿ਐえ〕〣〜ɺ߇⿺〶〠ԕྀ⿿〖〠ػೳ⿿࣮૷《ぁ぀
    • ˠぢアふべར༻〣֦େ〝〝〷〠໰୊఺⿿໌〾⿾〠
    • ৄ「。〤 LXC 〜ֶ〫ぢアふべೖ໳ ୈ 37 ճぇ〉ཡ。〕《⿶
    • cgroup v2ʢ4.5/2016 ೥ʣ
    • v1 〝〣ぐアのがやこがと〣ޓ׵ੑぇ⿴぀ఔ౓อ〘〛ɺcgroup ぇ⿴぀〮 ࢟〠࣮૷「〟⿼「〔
    • ぐアのがやこがと⿿શ。มい〘〛⿶぀ػೳ〷⿴぀ʢeBPF ぇ࢖〘〛੍ݶぇ⿾々぀ぢアぷ゜が゘が〝⿾ʣ
    • ݱ࣮త〟゙ぬがと੍ݶ⿿⿾⿾぀〽⿸〠〟〘〔
    • PSIʢ4.20/2018 ೥ʣ
    • CPU, Memory, IO 〣ෛՙ⿿૿େ「゙ぬがと⿿ෆ଍「〛⿶぀ঢ়گぇ؍ଌՄೳ
    20/24

    View Slide

  26. なずゔ゙ふくػೳ
    ୯〟぀りとぷ্〜ىಈ『぀ゆ゜なと〜⿴぀ぢアふべぇ҆શ〠࢖⿸〠〤༷ʑ〟なずゔ゙ふくػೳ〣ॿ々⿿ඞཁ
    • seccomp
    • てとふわぢが゚⿿やく゚の゙アそ〜 ぀ػೳɻࠓ〣ぢアふべ〜〤౰〔〿લ〠࢖いぁ〛⿶぀ػೳʢࠓ⿼〷〠࢖い
    ぁ〛⿶぀ػೳ〤 3.5 〜ಋೖ〣 mode 2ʣ
    • Introduction to Seccomp ʢ@mrtc0 《えʣˡجૅ⿾〾ਂ૚〳〜୹࣌ؒ〜ֶ〮぀ඇৗ〠『〉⿶ࢿྉʢಈը
    〷ݟぁ〳『ʣ
    • seccomp notifyʢ5.0/2019 ೥ʣˠてとふわぢが゚〣࣮ߦՄ൱ぇゕがづがۭؒ〣ゆ゜そ゘わଆ〜൑அ〜 ぀
    • seccomp 〕々ぇふがろ〠ษڧձぇ「〳「〔ʢಈըࢹௌՄʣ
    • capability
    • ࠓ〣ぢアふべ〜〤౰〔〿લ〠࢖いぁ〛⿶぀
    • root ⿿࣋〙ಛݖぇࡉ෼Խ「〛ඞཁ〠Ԡ」〛ゆ゜なと〠ݖݶぇ෇༩〜 ぀
    • ぢアふべ〉〝〠ݖݶぇࡉ⿾。༩⿺〔〿ണୣ「〔〿〜 ぀
    • ࿈ࡌୈ 42 ճɺୈ 43 ճɺୈ 44 ճ〣ʮLinux じがぼ゚〣たがむも゙ふくʯ
    • User Namespaceʢ3.8/2013 ೥ʣ
    • ぢアふべ಺֎〣 UID/GID ぇろひゃアそ『぀ɻぢアふべ಺〜〤 rootɺりとぷ্〜〤Ұൠゕがづが〝⿶⿸〈〝
    ⿿Մೳˠぢアふべ಺〜 root ݖݶ⿿ඞཁ〜⿴〘〛〷҆શ〠ぢアふべぇ࣮ߦՄೳ
    • Docker 〣 rootless ゑがへɺuserns-remap ػೳ
    • LXD 〜〤〈〣ػೳぇ࢖⿸〣⿿ぶやさ゚ぷ
    • LSMʢSELinux, AppArmor,...ʣ
    21/24

    View Slide

  27. 〒〣ޙ〣৽ػೳɺվྑ
    ぢアふべ〝〤௚઀ؔ܎〟《〒⿸〟ػೳ〷ぢアふべ〠〝〘〛〤ॏཁ⿾〷ʢぢアふべؔ܎〣։ൃऀ⿿ख⿿々〛⿶
    〔〿『぀ʣ
    • OverlayFSʢ3.18/2014 ೥ʣ
    • ゕぺざアやきぐ゚てとふわʢ〒ぁ〳〜〣むひばద༻〣 aufs 〠औ〘〛୅い぀ඪ४ػೳʣ
    • cgroup 〣 pids ぢアぷ゜が゘がʢ4.3/2015 ೥ʣ
    • ぢアふべ಺〣ゆ゜なと਺〣੍ݶ
    • pidfdʢ5.3/2019 ೥ʣ
    • PID 〣॥؀໰୊〣ղܾʢ໨త〝ҧ⿸ゆ゜なと〠てそべ゚ૹ〘〛「〳⿸ةݥੑʣ
    • Time Namespaceʢ5.6/2020 ೥ʣ
    • ಠཱ「〔 uptimeʢCLOCK_MONOTONIC/CLOCK_BOOTTIMEʣ
    • clone3 てとふわぢが゚ぇ࢖〘〔ぢアふべゆ゜なとੜ੒〣ぢとぷ௿ݮʢ5.7/2020 ೥ʣ
    • ਌ゆ゜なと〝ҟ〟぀ cgroup 〠ゆ゜なとぇੜ੒〜 ぀ʢ〈ぁ〳〜〤਌ゆ゜なと〝ಉҰ cgroup 〠ੜ੒《ぁ぀
    〣〜Ҡಈ⿿ඞཁ〕〘〔ʣ
    • ID mapped Mountʢ5.12/2021 ೥ʣ
    • ぢアふべぐゐがでぇろげアぷ『぀ࡍɺぢアふべぐゐがで಺〣やきぐ゚〣ॴ༗ݖぇ೚ҙ〠มߋ〜 ぀ʢUser
    Namespace ぇ࢖〘〔ぢアふべ〣৔߹〠ぢアふべぐゐがで಺ぇ࠶ؼత〠 chown 『぀ඞཁ⿿〟⿶ʣ
    22/24

    View Slide

  28. 〳〝〶

    View Slide

  29. 〳〝〶
    • ぢアふべ〤ଟ。〣ػೳぇ૊〴߹い【〛࡞〾ぁ〛⿶぀ʢࠓճ঺հ「〔〣〤Ұ෦〜『ʣ
    • ඞཁ〟ػೳ〕々ぇ࢖〘〛ぢアふべぇ࡞ぁ぀
    • 〔〳〠〤〒え〟ぢアふべ⿿ىಈ「〛。぀࣌〠࢖⿸ػೳ〠ࢥ⿶ぇ஘【぀〝ྑ⿶てとふわぇ࡞぀໾〠ཱ〙
    ⿾〷「ぁ〳【え〽ʢશ。໾〠ཱ〔〟⿶⿾〷「ぁ〳【え〽ʣ
    ίϯςφʹؔ܎͢Δ Linux Χʔωϧͷ৽ػೳΛ௥͍͔͚Δͷ͸ָ͍͚͠Ͳɺ࠷ۙ͸ͱͯ΋௥͍͔͚Δͷ͕
    ೉͍͠ͷͰɺΈͳ͞Μ΋ͥͻΧʔωϧͷ৽ػೳΛҰॹʹ௥͍͔͚·͠ΐ͏ʢ·ͱΊʹͳͬͯ·ͤΜ͕ʜʣ
    23/24

    View Slide

  30. Ҏ্
    ͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠
    24/24

    View Slide