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

歴史から紐解く Linux カーネルのコンテナ機能 / KOF2019

tenforward
November 08, 2019

歴史から紐解く Linux カーネルのコンテナ機能 / KOF2019

KOF 2019 の講演資料です。
参考となる情報にはPDF中からリンクをしていますが、資料中のリンクは Speaker Deck 上ではクリックできないので PDF をダウンロードしてご覧ください。

tenforward

November 08, 2019
Tweet

More Decks by tenforward

Other Decks in Technology

Transcript

  1. ྺ࢙⿾〾ඥղ。 Linux じがぼ゚〣ぢアふべػೳ
    KOF 2019
    Ճ౻ହจʢ@ten_forwardʣ
    2019-11-08
    lxc-jp Project
    1/39

    View full-size slide

  2. ࣗݾ঺հʢ1ʣ
    Ճ౻ହจ
    Twitter @ten_forward
    github https://github.com/tenforward
    ٕज़ϒϩά https://tenforward.hatenablog.com/
    ॴଐ גࣜձࣾ IDC や゜アふくぎ / lxc-jp Project
    2/39

    View full-size slide

  3. ࣗݾ঺հʢ2ʣ
    झຯ〜ぢアふべ〹〘〛〳『ɻぢアふべ〣ओ〠じがぼ゚पล〣࣮૷〠ڵຯ⿿⿴〿〳『ɻ
    2007 ೥ ぢアふべぇ࢖〘〔つがもと։ൃʢVirtuozzoʣ
    2009 ೥ OpenVZ/LXC ৮〿〕『
    2013 ೥ ୈ 1 ճぢアふべܕԾ૝Խ〣৘ใަ׵ձɹ։࠵
    LXC ೔ຊޠ man pages ຋༁&ろがで
    ʢݱࡏ〤 LXD ؔ࿈〣຋༁ɺlinuxcontainers.org ຋༁〷〹〘〛〳『ʣ
    2014 ೥ gihyo.jp 〜
    ʮLXC 〜ֶ〫ぢアふべೖ໳ ʵܰྔԾ૝Խ؀ڥぇ࣮ݱ『぀ٕज़ʯ
    ࿈ࡌ։࢝
    ݱࡏ CloudNative 〣೾〠৐〿஗ぁ぀
    3/39

    View full-size slide

  4. ຊ೔〣಺༰
    ぢアふべ〝〤
    ぢアふべ〣やきぐ゚てとふわ
    2000 ೥ʙ2006 ೥〣ぢアふべք۾
    ゆ゜なと〣ִ཭
    ぢアふべ〣ぼひぷゞがぜ
    2009ʙ2012 ೥〣ぢアふべք۾
    2013 ೥〣ぢアふべք
    ඇಛݖぢアふべʢUser namespaceʣ
    2014 ೥Ҏ߱〣ぢアふべք۾
    〳〝〶
    4/39

    View full-size slide

  5. ຊ೔〣಺༰
    ɹʮྺ࢙ぇඥղ。ʯ〝⿶⿸のぐぷ゚〜『⿿ɺྺ࢙ぇશ෦௥〘〛⿶぀〝࣌ؒ⿿଍〿〳【えɻ࣍〣෦
    ෼〣ゃひぜぎひゆ「〛આ໌「〳『ɻ
    • ぢアふべ〝〤
    • ぢアふべ〣やきぐ゚てとふわ
    • ぢアふべ〣ぼひぷゞがぜ
    • ぢアふべ〣࣮ߦݖݶ
    ɹ〳〔ɺ࠷ۙ〤 OCI 〠४ڌ「〔ଟ਺〣ぢアふべ゘アのぐわ⿿ग़〛 〛⿶〳『ɻ〈〣த〠〤 VM
    〹 Unikernel 〟〞〣ٕज़ぇ࢖〘〔゘アのぐわ⿿⿴〿〳『⿿ɺຊ೔ѻ⿸〣〤ੲ⿾〾ʮぢアふべʯ
    〝ݺ〥ぁ〛⿶〔ɺゆ゜なとִ཭ܕ〣ʮぢアふべʯ〜『ɻ
    ɹぢアふべ࡞੒〠࢖⿸ぢろアへ〤 unshare ぢろアへɺip ぢろアへ〜『ʢDocker 〹 LXC 〤࢖
    ⿶〳【え!!ʣ
    ɻ
    5/39

    View full-size slide

  6. ຊ೔〣಺༰
    ぢアふべ〝〤
    ぢアふべ〣やきぐ゚てとふわ
    2000 ೥ʙ2006 ೥〣ぢアふべք۾
    ゆ゜なと〣ִ཭
    ぢアふべ〣ぼひぷゞがぜ
    2009ʙ2012 ೥〣ぢアふべք۾
    2013 ೥〣ぢアふべք
    ඇಛݖぢアふべʢUser namespaceʣ
    2014 ೥Ҏ߱〣ぢアふべք۾
    〳〝〶
    6/39

    View full-size slide

  7. ぢアふべ〝〤
    ぢアふべ〝〤ゆ゜なと〜『:
    • ී௨〠ىಈ「〔ゆ゜なと〝〤গ「ҧ⿸ʮଐੑʯ⿿ࢦఆ〜 ぀
    • ゆ゜なとぇִ཭͞Εۭͨؒ〜࣮ߦ『぀
    • ゆ゜なと〠゙ぬがと੍ݶぇઃఆ〜 ぀
    • なずゔ゙ふくʮଐੑʯぇઃఆ〜 ぀
    • 〟〞ʜ
    7/39

    View full-size slide

  8. Linux 〠⿼々぀ぢアふべ
    Linux じがぼ゚〠〤ʮぢアふべʯ〝⿶⿸ػೳ〤͋Γ·ͤΜɻじがぼ゚〠࣮૷《ぁ〔৭ʑ〟ػೳΛ
    ૊Έ߹ΘͤͯʮίϯςφʯΛ࡞Γ·͢ɻ
    Docker 〹 LXC/LXD 〝ݴ〘〔ぢアふべ࣮૷ぇ࢖⿸୅い〿〠ࣗ෼ʹඞཁͳػೳ͚ͩΛબΜͰίϯ
    ςφΛ࡞Δ͜ͱ΋Ͱ͖·͢ɻ
    Linux じがぼ゚〠࣮૷《ぁ〔⿸〖ɺぢアふべ༻〣ओཁػೳ:
    Namespaceʢ໊લۭؒʣ:
    ʮִ཭ۭؒʯΛ࡞Δɻִ཭͢ΔϦιʔε͝ͱ〠 Namespace ⿿ଘࡏ
    cgroup: ゆ゜なと〠ର「〛Ϧιʔε੍ݶΛߦ͏
    ຊ೔〤〈〣⿸〖 Namespace ぇத৺〠⿼࿩「〳『ʢKubernetes 〜〷 Namespace 〝⿶⿸໊
    લ⿿ग़〛 〳『⿿ɺ〒ぁ〝〤ผ〣 Linux kernel 〣ػೳ〜『ʣ
    ɻ
    8/39

    View full-size slide

  9. ຊ೔〣಺༰
    ぢアふべ〝〤
    ぢアふべ〣やきぐ゚てとふわ
    2000 ೥ʙ2006 ೥〣ぢアふべք۾
    ゆ゜なと〣ִ཭
    ぢアふべ〣ぼひぷゞがぜ
    2009ʙ2012 ೥〣ぢアふべք۾
    2013 ೥〣ぢアふべք
    ඇಛݖぢアふべʢUser namespaceʣ
    2014 ೥Ҏ߱〣ぢアふべք۾
    〳〝〶
    9/39

    View full-size slide

  10. ぢアふべ〣やきぐ゚てとふわ
    • ぢアふべ〣ぐゐがで〤りとぷ〣⿴぀ぶく゛ぜぷ゙ҎԼ〠ల։《ぁ぀〈〝⿿ଟ⿶
    • りとぷ⿾〾〤ぢアふべぐゐがで〣び゙がぇؚ〶〛『〮〛ݟ⿺぀
    • ぢアふべ಺〜〤ぢアふべ಺〣び゙が「⿾ݟ⿺〟⿶
    りとぷ⿾〾ݟ〔ぶく゛ぜぷ゙び゙が ぢアふべ಺⿾〾ݟ〔ぶく゛ぜぷ゙び゙が
    〈ぁ〤〞⿸〹〘〛࣮ݱ《ぁ〛⿶぀〣⿾ʁ
    10/39

    View full-size slide

  11. chroot
    ΋ͬͱ΋ྺ࢙ͷ͋Δίϯςφʢతػೳʣ
    • 1979 ೥ UNIX Version 7 〜〣৽ػೳʢੜ〳ぁ〛〔ਓʂʣ
    • 1982 ೥〠 BSD 〠ಋೖ
    • chroot 「〔ぶく゛ぜぷ゙ҎԼ「⿾ݟ⿺〟⿶
    • Linux 〠⿼々぀ chroot:
    • ゆ゜なと〤゚がぷぶく゛ぜぷ゙〣৘ใぇ࣋〘〛⿶぀
    chroot 「〛⿶〟⿶ゆ゜なと chroot 「〔ゆ゜なと
    11/39

    View full-size slide

  12. chroot 〣໰୊఺ɾたがむも゙ふく
    • chroot 〤ൈ々ग़【぀!
    • ൈ々ग़【〟⿶〽⿸〠『぀〠〤ݖݶぇണୣ『぀ඞཁ⿿⿴぀ʢcap_sys_chroot たがむも゙ふくʣ
    • 〞〣〽⿸〠࢖いぁ぀⿾い⿾〾〟⿶ぢアふべごアでア〜〤࢖⿶〚〾⿶ʢcap_sys_chroot ⿿
    ඞཁ⿾〷?ʣ
    たがむも゙ふく〝〤?
    • root ⿿࣋〘〛⿶぀ݖݶぇࡉ෼Խ「〛そ゚がゆԽ「〔〷〣ɻそ゚がゆ〉〝〠༗ޮɾແޮぇࢦ
    ఆ〜 ぀
    12/39

    View full-size slide

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

    View full-size slide

  14. bind mountʢ2.4.0/2001 ೥ʣ
    • ぶく゛ぜぷ゙び゙が〣Ұ෦ぇผ〣ぶく゛ぜぷ゙ҎԼ〠ろげアぷ
    • ろげアぷ「〔ぶく゛ぜぷ゙ҎԼ〤ݩ〝ಉ」ゑぽ⿿ݟ⿺぀
    • りとぷ〣ぶく゛ぜぷ゙ぇぢアふべ〝ڞ༗『぀৔߹〠〷࢖༻
    pivot_root લ pivot_root ޙ
    • bind mount 「〔び゙が〤ろげアぷ《ぁ〛⿼〿やきぐ゚てとふわ〘〲。〟぀〣〜
    pivot_root Ͱ͖Δ!
    14/39

    View full-size slide

  15. Mount namespaceʢ2.4.19/2002 ೥ʣ
    • ぢアふべ಺〣ろげアぷɺろげアぷૢ࡞ぇ෼཭『぀
    • ⿴぀ぢアふべ಺〜ߦ〘〔ろげアぷɺぎアろげアぷ⿿ଞ〣ぢアふべ〠Өڹぇ༩⿺〟⿶〽⿸〠
    『぀
    • ෼཭「〟⿶〽⿸〠〷〜 ぀ʢsystemd 〤ぶやさ゚ぷ〜෼཭「〟⿶ঢ়ଶ〜ىಈ『぀ʣ
    • ଞ〣ぢアふべ〜ߦ〘〔ろげアぷૢ࡞⿿ݟ⿺〟⿶
    15/39

    View full-size slide

  16. ぶゑʢ1ʣ
    pivot_root 〝 bind mount 〝 Mount namespace 〣ぶゑ
    Namespace ぇ؆୯〠࡞぀〠〤 util_linux ෇ଐ〣 unshare ぢろアへ⿿࢖⿺〳『
    1. Mount namespace ぇ࡞぀
    2. pivot_root 『぀〔〶〠ぢアふべやきぐ゚てとふわぇผぶく゛ぜぷ゙〠 bind mount 『぀
    3. mount ৘ใぇऔಘ『぀〔〶〠ぢアふべ༻〠 proc やきぐ゚てとふわぇ mount 『぀
    4. pivot_root 『぀ʢҎલ〣 / 〤 /old 〠ろげアぷ『぀ʣ
    5. ぢアふべ಺〜 / ぇ umount 『぀
    16/39

    View full-size slide

  17. ຊ೔〣಺༰
    ぢアふべ〝〤
    ぢアふべ〣やきぐ゚てとふわ
    2000 ೥ʙ2006 ೥〣ぢアふべք۾
    ゆ゜なと〣ִ཭
    ぢアふべ〣ぼひぷゞがぜ
    2009ʙ2012 ೥〣ぢアふべք۾
    2013 ೥〣ぢアふべք
    ඇಛݖぢアふべʢUser namespaceʣ
    2014 ೥Ҏ߱〣ぢアふべք۾
    〳〝〶
    17/39

    View full-size slide

  18. 2000 ೥ʙ2005 ೥〣ぢアふべք۾ɹ〒〣ଞ〣࿩୊
    2000 ೥ FreeBSD jail
    2002 ೥ VirtuozzoʢLinux ޲々঎༻ぢアふべʣ゙゙がとʢ։ൃ〤 1999 ೥։࢝ʣ
    2004 ೥ Solaris Containers (Zone)
    2005 ೥ OpenVZ ゆ゜でこぜぷൃ଍ʢOSS ൛ Virtuozzoʣ
    18/39

    View full-size slide

  19. 2006ʙ2008 ೥〣ぢアふべք۾
    Linux ぢアふべ׬੒ظ ୈҰظ
    2006 ೥ UTS Namespace, IPC Namespaceʢ2.6.19ʣ
    りとぷ໊ɾへゐぐア໊ぇぢアふべ〉〝〠࣋〙ɺゆ゜なとؒ௨৴〟〞ぇぢアふべ಺
    〠ִ཭
    2007 ೥ macvlanʢ2.6.23ʣぼひぷゞがぜぐアのがやこがと
    2008 ೥ pid Namespace, Network Namespace, vethʢ2.6.24ʣ
    ゆ゜なとɺぼひぷゞがぜ〣ִ཭
    cpu, cpuacct, cpuset cgroupʢ2.6.24ʣ
    CPU 〠ର『぀゙ぬがと੍ݶ
    device cgroupʢ2.6.26ʣ
    freezer cgroupʢ2.6.28ʣ
    19/39

    View full-size slide

  20. ຊ೔〣಺༰
    ぢアふべ〝〤
    ぢアふべ〣やきぐ゚てとふわ
    2000 ೥ʙ2006 ೥〣ぢアふべք۾
    ゆ゜なと〣ִ཭
    ぢアふべ〣ぼひぷゞがぜ
    2009ʙ2012 ೥〣ぢアふべք۾
    2013 ೥〣ぢアふべք
    ඇಛݖぢアふべʢUser namespaceʣ
    2014 ೥Ҏ߱〣ぢアふべք۾
    〳〝〶
    20/39

    View full-size slide

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

    View full-size slide

  22. ຊ೔〣಺༰
    ぢアふべ〝〤
    ぢアふべ〣やきぐ゚てとふわ
    2000 ೥ʙ2006 ೥〣ぢアふべք۾
    ゆ゜なと〣ִ཭
    ぢアふべ〣ぼひぷゞがぜ
    2009ʙ2012 ೥〣ぢアふべք۾
    2013 ೥〣ぢアふべք
    ඇಛݖぢアふべʢUser namespaceʣ
    2014 ೥Ҏ߱〣ぢアふべք۾
    〳〝〶
    22/39

    View full-size slide

  23. Network Namespaceʢ2.6.24/2008 ೥ʣ
    Network Namespace
    ぼひぷゞがぜؔ࿈〣゙ぬがとぇִ཭『぀
    • ぼひぷゞがぜぐアのがやこがと
    ʢଞ〣 Namespace ⿾〾ݟ⿺〟。〟〿〳『ʣ
    • ぎへ゛と
    • れがぷ
    • ゚がふくアそ
    • Firewall
    • ʜ
    • ෺ཧぐアのがやこがと〷ಛఆ〣 Namespaceʢぢアふべʣ〠ॴଐ《【〾ぁ぀
    • ಛఆ〣ぐアのがやこがとぇෳ਺〣 Namespaceʢぢアふべʣ〜ڞ༗〜 ぀
    23/39

    View full-size slide

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

    View full-size slide

  25. ぶゑʢ2ʣ
    Network Namespace 〝 veth ぇ࡞〿ɺveth ぐアのがやこがとぇ Namespace 〠ॴଐ《【
    〛௨৴『぀
    Network Namespace ぇ࡞぀〠〤 iproute2 ෇ଐ〣 ip netns ぢろアへ⿿࢖⿺〳『
    1. Network namespace ぇ࡞぀
    • Namespace ಺〣ぐアのがやこがと〣֬ೝ
    2. veth ぐアのがやこがとらぎぇ࡞぀
    3. veth ぐアのがやこがと〣ยׂぁぇ Namespace 〠Ҡ『
    4. veth ぐアのがやこがとらぎ〣〒ぁ〓ぁ〠ぎへ゛とぇׂ〿౰〛〛 Up 『぀
    5. veth らぎಉ࢜〜௨৴〜 ぀〈〝ぇ֬ೝ『぀
    25/39

    View full-size slide

  26. ຊ೔〣಺༰
    ぢアふべ〝〤
    ぢアふべ〣やきぐ゚てとふわ
    2000 ೥ʙ2006 ೥〣ぢアふべք۾
    ゆ゜なと〣ִ཭
    ぢアふべ〣ぼひぷゞがぜ
    2009ʙ2012 ೥〣ぢアふべք۾
    2013 ೥〣ぢアふべք
    ඇಛݖぢアふべʢUser namespaceʣ
    2014 ೥Ҏ߱〣ぢアふべք۾
    〳〝〶
    26/39

    View full-size slide

  27. 2009ʙ2012 ೥〣ぢアふべք۾
    2009 ೥ Memory, net_cls cgroupʢ2.6.29ʣ
    ゐゑ゙ɺぼひぷゞがぜ゙ぬがと੍ݶ
    2010 ೥ blkio cgroupʢ2.6.33ʣ
    ゅ゜ひぜぶみぐと〣 I/O ੍ݶ
    2011 ೥ setns() てとふわぢが゚ʢ3.0ʣ
    Namespaceʢぢアふべʣ಺〜ゆ゜なとぇ࣮ߦ『぀ʢdocker exec / lxc
    execʣ
    2012 ೥ perf_event cgroupʢ3.3ʣ
    Seccomp-based system call filtering (3.5)
    ɹ seccomp 〜೚ҙ〣てとふわぢが゚⿿やく゚の〜 ぀〽⿸〠〟〘〔
    hugetlb cgroupʢ3.6ʣ
    ʢࡉ⿾⿶ػೳ௥Ճ〤ଞ〠〷⿴〿〳『ʣ
    27/39

    View full-size slide

  28. ຊ೔〣಺༰
    ぢアふべ〝〤
    ぢアふべ〣やきぐ゚てとふわ
    2000 ೥ʙ2006 ೥〣ぢアふべք۾
    ゆ゜なと〣ִ཭
    ぢアふべ〣ぼひぷゞがぜ
    2009ʙ2012 ೥〣ぢアふべք۾
    2013 ೥〣ぢアふべք
    ඇಛݖぢアふべʢUser namespaceʣ
    2014 ೥Ҏ߱〣ぢアふべք۾
    〳〝〶
    28/39

    View full-size slide

  29. 2013 ೥〣ぢアふべք
    ぢアふべత〠ॏཁ〟೥
    • 3.8 kernel 〤ݱࡏ࢖いぁ〛⿶぀ぢアふべ〣ओཁ〟ػೳ⿿ଗ〘〔ॏཁ〟゙゙がと
    User namespace ඇಛݖʢrootlessʣぢアふべ〣࣮ݱʢ։ൃ։࢝〤〟え〝 2.6.23,
    2007 ೥!!ʣ
    setns() શ Namespace 〠ର「〛࢖༻Մೳ〠〟〘〔
    • Docker ݩ೥ʢ3 ݄〠 OSS 〝「〛ެ։ʣ
    • Checkpoint/Restart ػೳʢ3.11ʣ
    ⿴぀࣌఺〣ゆ゜なと〣ঢ়ଶぇอଘɺ࠶։〜 ぀
    29/39

    View full-size slide

  30. ຊ೔〣಺༰
    ぢアふべ〝〤
    ぢアふべ〣やきぐ゚てとふわ
    2000 ೥ʙ2006 ೥〣ぢアふべք۾
    ゆ゜なと〣ִ཭
    ぢアふべ〣ぼひぷゞがぜ
    2009ʙ2012 ೥〣ぢアふべք۾
    2013 ೥〣ぢアふべք
    ඇಛݖぢアふべʢUser namespaceʣ
    2014 ೥Ҏ߱〣ぢアふべք۾
    〳〝〶
    30/39

    View full-size slide

  31. User namespaceʢ3.8/2013 ೥ʣ
    • root ݖݶ〜ぢアふべぇىಈ『぀〝ɺぢアふべ಺〣 root 〤りとぷʢぢアふべ֎ʣ〣 root 〝
    ಉ」ݖݶぇ࣋〘〛⿶぀
    • ぢアふべ (Namespace) ֎〝ผ〠 User namespace ಺〣 uid/gid ぇ࣋〛぀〽⿸〠〟〘
    〔ʢぢアふべ֎〣 uid/gid 〝ぢアふべ಺〣 uid/gid ぇろひゃアそ『぀ʣ
    • User namespace Λ࢖͏ͱɺϗετͰ͸ಛݖΛ࣋ͨͳ͍ίϯςφ͕ىಈͰ͖Δ
    • User namespace ͸ҰൠϢʔβʔͰ࡞੒Մೳ
    31/39

    View full-size slide

  32. ぶゑʢ3ʣ
    User Namespace ぇ࡞੒
    ࠶〨 unshare ぢろアへぇ࢖⿶〳『
    1. Ұൠゕがづが〜〤 User namespace Ҏ֎〣 namespace 〤࡞ぁ〟⿶〈〝ぇ֬ೝ
    2. User namespace ぇ࡞〿てこ゚ぇ࣮ߦ
    3. てこ゚〣ಈ࡞ݖݶぇ namespace ಺〝 namespace ֎⿾〾֬ೝ
    4. namespace ಺〜やきぐ゚ぇ࡞੒「ɺnamespace ֎〜ॴ༗ݖぇ֬ೝ
    5. User namespace ಺〜ଞ〣 Namespace ぇ࡞ぁ぀〈〝ぇ֬ೝ
    6. ࡞〘〔ぢアふべ಺〜〤ぢアふべ಺〣ゆ゜なと〕々ݟ⿺぀〈〝ぇ֬ೝʢPID Namespaceʣ
    32/39

    View full-size slide

  33. ຊ೔〣಺༰
    ぢアふべ〝〤
    ぢアふべ〣やきぐ゚てとふわ
    2000 ೥ʙ2006 ೥〣ぢアふべք۾
    ゆ゜なと〣ִ཭
    ぢアふべ〣ぼひぷゞがぜ
    2009ʙ2012 ೥〣ぢアふべք۾
    2013 ೥〣ぢアふべք
    ඇಛݖぢアふべʢUser namespaceʣ
    2014 ೥Ҏ߱〣ぢアふべք۾
    〳〝〶
    33/39

    View full-size slide

  34. 2014ʙ2016 ೥〣ぢアふべք۾
    2014 ೥ Overlayfsʢ3.18ʣ
    ゕぺざアやきぐ゚てとふわ〣࣮૷〜ɺぶく゛ぜぷ゙ぇॏ〢߹い【〛〧〝〙〣ぶく
    ゛ぜぷ゙〠ݟ【぀
    2014 ೥ cgroup v2, ext4 〠 project quota ػೳ௥Ճʢ4.5ʣ
    2016 ೥ cgroup namespaceʢ4.6ʣ
    ぢアふべ〉〝〠ぢアふべઐ༻〣 cgroup ぇݟ【぀
    34/39

    View full-size slide

  35. 2017ʙ2019 ೥〣ぢアふべք۾
    2017 ೥ Namespaced file capabilitiesʢ4.14ʣ
    User namespace ಺〜 file capability ⿿ઃఆ〜 ぀
    2018 ೥ ඇಛݖϚ΢ϯτʢ4.18ʣ
    User namespace ಺〜 FUSE ろげアぷ
    2018 ೥ PSIʢ4.20ʣ
    ゐゑ゙ɺCPUɺIO 〣ෛՙ⿿૿େ「゙ぬがと⿿ෆ଍「〛⿶぀ঢ়گぇ؍ଌ
    2018 ೥ seccomp trap to userspaceʢ5.0ʣ
    seccomp 〣ܾఆぇゕがづがとらがと〠౉「〛ॲཧ『぀
    2019 ೥ LSM stackingʢ5.1ʣ
    AppArmor on SELinux 〝⿾ʜ
    2019 ೥ clone3() てとふわぢが゚ʢ5.3ʣ
    clone() てとふわぢが゚〜なひぷ〜 ぀や゘そ⿿ऴྃ「〔〔〶
    2019 ೥ pidfdsʢ5.3ʣ
    PID ࠶ར༻໰୊〣ղܾ
    35/39

    View full-size slide

  36. ぢアふべք۾〣〈ぁ⿾〾
    〳〕〳〕৭ʑ〟ػೳ⿿ఏҊ《ぁ〛⿶〳『ɻLinux じがぼ゚〠ろがで《ぁ぀〷〣〷《ぁ〟⿶〷〣
    〷⿴぀〜「〼⿸ɻ
    ShiftFS Ubuntu 19.04 〜࢖⿺぀ʢLinux じがぼ゚〠〤〳〕ろがで《ぁ〛⿶〟⿶ʣぢア
    ふべぐゐがで಺〣やきぐ゚〣 uid/gid ぇぢアふべ〣࣮ߦゕがづが〠߹い【〛มߋ
    『぀
    Container Object ๯಄〜ݴ〘〔ʮLinux じがぼ゚〠〤ぢアふべ〝⿶⿸ػೳ〤⿴〿〳【えʯ
    ぇ࣮ݱ『぀ػೳ
    Time namespace ぢアふべ〉〝〠೔࣌ぇม⿺〾ぁ぀
    36/39

    View full-size slide

  37. ຊ೔〣಺༰
    ぢアふべ〝〤
    ぢアふべ〣やきぐ゚てとふわ
    2000 ೥ʙ2006 ೥〣ぢアふべք۾
    ゆ゜なと〣ִ཭
    ぢアふべ〣ぼひぷゞがぜ
    2009ʙ2012 ೥〣ぢアふべք۾
    2013 ೥〣ぢアふべք
    ඇಛݖぢアふべʢUser namespaceʣ
    2014 ೥Ҏ߱〣ぢアふべք۾
    〳〝〶
    37/39

    View full-size slide

  38. 〳〝〶
    ྺ࢙ぇ〔〞〿〟⿿〾 Linux 〠࣮૷《ぁ〛⿶぀ぢアふべؔ࿈〣ػೳぇ΄Μͷগ͠঺հ「〳「〔
    • Linux 〠〤ʮぢアふべʯ〝⿶⿸ػೳ〤〟。ɺ৭ʑ〟ػೳ〣૊〴߹い【〜ぢアふべ⿿࡞〾ぁ぀
    • ゙ぬがと〉〝〠४උ《ぁ〔 Namespace ػೳ〜৭ʑ〟ִ཭ۭؒぇ࡞぀
    • MountɺPIDɺNetworkɺUser Namespace 〝ؔ࿈『぀ػೳぇઆ໌
    • ぢアふべ〠ؔ܎『぀ػೳ⿿〞え〞え Linux じがぼ゚〠௥Ճ《ぁɺࠓ〜〷ଟ਺〣ػೳ⿿ఏҊ
    《ぁ〛⿶぀
    38/39

    View full-size slide

  39. 〉ਗ਼ௌ⿴〿⿿〝⿸〉》⿶〳「〔
    38/39

    View full-size slide

  40. ࢀߟ
    • ぐアや゘ษڧձʮ[ぢアふべ〣ྺ࢙]Docker ⿿〜 ぀〳〜ʯࢿྉ
    • ୈ 2 ճ
    • ୈ 3 ճ
    • ぢアふべٕज़ೖ໳ - Ծ૝Խ〝〣ҧ⿶ぇ஌〿ɺཁૉٕज़ぇ৮〘〛ֶ〱⿸ʢby hayajo_77 《
    え / ごアでぺぎ Hubʣ
    • LXC 〜ֶ〫ぢアふべೖ໳ ʵܰྔԾ૝Խ؀ڥぇ࣮ݱ『぀ٕज़ (gihyo.jp)
    • Linux ぢアふべ〣಺෦ぇ஌あ⿸
    • Linux ぢアふべ࠷৽৘ใʢ2013-06-01ʣ
    • History of containersʢS3hh’s Blogʣ
    39/39

    View full-size slide