コンテナ完全に理解した

0c9a69560f916778b569086d792680bb?s=47 bmf_san
January 16, 2019

 コンテナ完全に理解した

0c9a69560f916778b569086d792680bb?s=128

bmf_san

January 16, 2019
Tweet

Transcript

  1. コンテナ完全に理解した @Makuake LT Party 2019/1/16

  2. 「完全に理解した」 製品を利⽤をするためのチュートリアルを完了できたという意味。
 「なにもわからない」 製品が本質的に抱える問題に直⾯するほど熟知が進んだという意味。 「チョットデキル」 同じ製品を⾃分でも1から作れるという意味。または開発者本⼈。 cf. https://twitter.com/ito_yusaku/status/ 1042604780718157824 Excuse

  3. 話すこと ・コンテナとは ・コンテナの歴史 ・コンテナと仮想化の違い ・コンテナ技術の実現 ・libcontainer

  4. コンテナとは ・ホストOSからアプリケーションとランタイムをま とめて、分離した⼀連のプロセス ・Dockerはコンテナを管理する技術

  5. Docker is Not コンテナ

  6. コンテナの歴史 ೥ 6/*904ʹDISPPU͕ొ৔ ೥ 'SFF#4%KBJMT͕'SFF#4%ʹొ৔ɻDISPPUͷൃలܥɻ ೥ -9$͕ϦϦʔεɻ-JOVYͷίϯςφٕज़ɻ ೥ %PDLFS͕ొ৔ɻίϯςφΛ؅ཧ͢Δٕज़ɻ 7JSUVP[PPɺ0QFO7;ɺ)169DPOUBJOFSɺ4PMBSJT$POUBJOFS

    ͳͲίϯςφٕज़͸ଞʹ΋৭ʑ͋Δɻ
  7. コンテナと仮想化の違い ・コンテナ(コンテナ型仮想化)  ・ホストOSからアプリケーションとランタイムをまとめて、分離し た⼀連のプロセス  ・ホストOSのカーネルの部分を共有している  ・OSのライブラリ部分はコンテナ側が選択可能 ・仮想化  ・ざっくりいうと、ホストOS上にゲストOSをまるごと⽤意する仕組 み

  8. 【図解】コンテナと仮想化の違い ϋʔυ΢ΣΞ ϋʔυ΢ΣΞ ϗετ04 Ծ૝Խιϑτ΢ΣΞ ήετ04 ήετ04 ϗετ04 ίϯςφ؅ཧιϑτ΢ΣΞ ήετ04

    ϥΠϒϥϦ ήετ04 ϥΠϒϥϦ ϛυϧ΢ΣΞ ϛυϧ΢ΣΞ ΞϓϦέʔγϣϯ ϛυϧ΢ΣΞ ϛυϧ΢ΣΞ ΞϓϦέʔγϣϯ ΞϓϦέʔγϣϯ ΞϓϦέʔγϣϯ ίϯςφ Ծ૝Խʢϗετܕʣ ίϯςφ
  9. コンテナと仮想化の違い わかりやすい cf. https://community.hpe.com/t5/Enterprise-Topics/ Docker%E3%82%B3%E3%83%B3%E3%83%86%E3 %83%8A%E3%81%A8%E4%BB%AE%E6%83%B3%E 5%8C%96%E3%81%AE%E9%81%95%E3%81%84%E 3%81%A8%E3%81%AF- Synergy%E3%81%A8DevOps/ba-p/6980068? profile.language=ja#.XD6Zks8zZTY

  10. コンテナ技術の実現 ・Kernel namespaces ・Appramor and SELinux profiles ・Seccomp policies ・Chroot

    ・Kernel capabilities ・CGroups
  11. Kernel namespaces ・プロセスを6種類のシステムリソースに分割する機 能  ・ipc, uts, mount, pid, network, user

    ・分離されたリソース同⼠は互いに⼲渉できない ・ユーザーがユーザー専⽤の分離されたリソースを 持っているように⾒える仕組みを実現
  12. Appramor and SELinux profiles ・アプリケーションとかファイルとかカーネルとかのアクセス制 御機能 ・Apparmor  ・Linux Security Modulesの1種

     ・アプリケーションのアクセス権限をセキュアに管理 ・SELinux  ・Linuxカーネルに強制アクセス制御機能を加えるモジュール
  13. Seccomp policies ・プロセスのシステムコール発⾏を制限する機能 

  14. Chroot ・親プロセスと⼦プロセス群に対して、ルートディレ クトリを変更する ・ルートを変更されたプロセスは範囲外のファイルに アクセスできなくなる  ・→プロセス分離の実現

  15. Kernel capabilities ・プロセスの権限管理 ・rootなのか、root以外なのかよりももっと細かい権 限管理ができる

  16. Cgroups ・プロセスをグループ化して共通管理する

  17. コンテナ技術の実現 ・Linuxカーネルのこれらの機能を駆使して実現され ている ・これらの機能を駆使してコンテナ技術をLinuxで使 えるようにしたやつがlxc

  18. Dockerのコンテナ技術 ・以前はlxc、v0.9からlibcontainer  ・cf. https://blog.docker.com/2014/03/ docker-0-9-introducing-execution-drivers-and- libcontainer/

  19. Libcontainer is 何 ・コンテナ利⽤のためのGoで実装されたランタイム ・元はdockerのリポジトリにあった(cf. https://github.com/docker/libcontainer) ・runC (cf. https://github.com/opencontainers/runc)  ・コンテナランタイムのリファレンス実装プロジェクト

     ・OCI(Open Container Initiative)が管理   ・Docker社が⽴ち上げたコンテナ標準仕様を策定する団体 ・gVisorもコンテナランタイム ・コンテナランタイムをもっと知る  ・cf. https://www.ianlewis.org/en/container-runtimes-part-1-introduction-container-r
  20. Libcontainerを触ってみる ・「Goならわかるシステムプログラミング」の最後 の章にのってるよ!

  21. まとめ ・コンテナは隔離されたプロセス ・コンテナはホストOSのカーネル部分を共有、ライブ ラリ部分は⾃由に選択できる ・Linuxカーネルを読む機運が⾼まった(読むとはいっ てない) ・libcontainerは触ったり、コード読んだらgoの勉強に もなりそう、楽しそう(⼩並感)

  22. 余談 Cookpadのスプリングインターンにコンテナコース というのがあった
 https://internship.cookpad.com/2019/spring/