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
コンテナ完全に理解した
Search
bmf_san
January 16, 2019
Programming
0
1.1k
コンテナ完全に理解した
bmf_san
January 16, 2019
Tweet
Share
More Decks by bmf_san
See All by bmf_san
レーダーをつくる
bmf_san
0
23
契約テストとPactについて
bmf_san
0
66
5分でわかるSLO
bmf_san
2
93
権限について考える
bmf_san
2
110
自作HTTPルーターから新しいServeMuxへ
bmf_san
3
1.7k
古くなってしまったPHPフレームワークとPHPのバージョンアップ戦略
bmf_san
1
370
アジャイルワークショップ
bmf_san
0
150
Makuakeの認証基盤とRe-Architectureチーム
bmf_san
0
2.7k
天下一HTTPRouter武闘会.pdf
bmf_san
8
4.4k
Other Decks in Programming
See All in Programming
Goで作る、開発・CI環境
sin392
0
190
Discover Metal 4
rei315
2
110
AIプログラマーDevinは PHPerの夢を見るか?
shinyasaita
1
190
既存デザインを変更せずにタップ領域を広げる方法
tahia910
1
270
ソフトウェア品質を数字で捉える技術。事業成長を支えるシステム品質の マネジメント
takuya542
0
600
たった 1 枚の PHP ファイルで実装する MCP サーバ / MCP Server with Vanilla PHP
okashoi
1
220
生成AIコーディングとの向き合い方、AIと共創するという考え方 / How to deal with generative AI coding and the concept of co-creating with AI
seike460
PRO
1
350
C++20 射影変換
faithandbrave
0
560
第9回 情シス転職ミートアップ 株式会社IVRy(アイブリー)の紹介
ivry_presentationmaterials
1
260
Select API from Kotlin Coroutine
jmatsu
1
220
Team operations that are not burdened by SRE
kazatohiei
1
290
AIコーディング道場勉強会#2 君(エンジニア)たちはどう生きるか
misakiotb
1
270
Featured
See All Featured
Building a Modern Day E-commerce SEO Strategy
aleyda
42
7.4k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
31
2.4k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
248
1.3M
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.3k
Balancing Empowerment & Direction
lara
1
390
Why Our Code Smells
bkeepers
PRO
337
57k
Faster Mobile Websites
deanohume
307
31k
A designer walks into a library…
pauljervisheath
207
24k
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
30
2.1k
Typedesign – Prime Four
hannesfritz
42
2.7k
Measuring & Analyzing Core Web Vitals
bluesmoon
7
500
The Invisible Side of Design
smashingmag
300
51k
Transcript
コンテナ完全に理解した @Makuake LT Party 2019/1/16
「完全に理解した」 製品を利⽤をするためのチュートリアルを完了できたという意味。 「なにもわからない」 製品が本質的に抱える問題に直⾯するほど熟知が進んだという意味。 「チョットデキル」 同じ製品を⾃分でも1から作れるという意味。または開発者本⼈。 cf. https://twitter.com/ito_yusaku/status/ 1042604780718157824 Excuse
話すこと ・コンテナとは ・コンテナの歴史 ・コンテナと仮想化の違い ・コンテナ技術の実現 ・libcontainer
コンテナとは ・ホストOSからアプリケーションとランタイムをま とめて、分離した⼀連のプロセス ・Dockerはコンテナを管理する技術
Docker is Not コンテナ
コンテナの歴史 6/*904ʹDISPPU͕ొ 'SFF#4%KBJMT͕'SFF#4%ʹొɻDISPPUͷൃలܥɻ -9$͕ϦϦʔεɻ-JOVYͷίϯςφٕज़ɻ %PDLFS͕ొɻίϯςφΛཧ͢Δٕज़ɻ 7JSUVP[PPɺ0QFO7;ɺ)169DPOUBJOFSɺ4PMBSJT$POUBJOFS
ͳͲίϯςφٕज़ଞʹ৭ʑ͋Δɻ
コンテナと仮想化の違い ・コンテナ(コンテナ型仮想化) ・ホストOSからアプリケーションとランタイムをまとめて、分離し た⼀連のプロセス ・ホストOSのカーネルの部分を共有している ・OSのライブラリ部分はコンテナ側が選択可能 ・仮想化 ・ざっくりいうと、ホストOS上にゲストOSをまるごと⽤意する仕組 み
【図解】コンテナと仮想化の違い ϋʔυΣΞ ϋʔυΣΞ ϗετ04 ԾԽιϑτΣΞ ήετ04 ήετ04 ϗετ04 ίϯςφཧιϑτΣΞ ήετ04
ϥΠϒϥϦ ήετ04 ϥΠϒϥϦ ϛυϧΣΞ ϛυϧΣΞ ΞϓϦέʔγϣϯ ϛυϧΣΞ ϛυϧΣΞ ΞϓϦέʔγϣϯ ΞϓϦέʔγϣϯ ΞϓϦέʔγϣϯ ίϯςφ ԾԽʢϗετܕʣ ίϯςφ
コンテナと仮想化の違い わかりやすい 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
コンテナ技術の実現 ・Kernel namespaces ・Appramor and SELinux profiles ・Seccomp policies ・Chroot
・Kernel capabilities ・CGroups
Kernel namespaces ・プロセスを6種類のシステムリソースに分割する機 能 ・ipc, uts, mount, pid, network, user
・分離されたリソース同⼠は互いに⼲渉できない ・ユーザーがユーザー専⽤の分離されたリソースを 持っているように⾒える仕組みを実現
Appramor and SELinux profiles ・アプリケーションとかファイルとかカーネルとかのアクセス制 御機能 ・Apparmor ・Linux Security Modulesの1種
・アプリケーションのアクセス権限をセキュアに管理 ・SELinux ・Linuxカーネルに強制アクセス制御機能を加えるモジュール
Seccomp policies ・プロセスのシステムコール発⾏を制限する機能
Chroot ・親プロセスと⼦プロセス群に対して、ルートディレ クトリを変更する ・ルートを変更されたプロセスは範囲外のファイルに アクセスできなくなる ・→プロセス分離の実現
Kernel capabilities ・プロセスの権限管理 ・rootなのか、root以外なのかよりももっと細かい権 限管理ができる
Cgroups ・プロセスをグループ化して共通管理する
コンテナ技術の実現 ・Linuxカーネルのこれらの機能を駆使して実現され ている ・これらの機能を駆使してコンテナ技術をLinuxで使 えるようにしたやつがlxc
Dockerのコンテナ技術 ・以前はlxc、v0.9からlibcontainer ・cf. https://blog.docker.com/2014/03/ docker-0-9-introducing-execution-drivers-and- libcontainer/
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
Libcontainerを触ってみる ・「Goならわかるシステムプログラミング」の最後 の章にのってるよ!
まとめ ・コンテナは隔離されたプロセス ・コンテナはホストOSのカーネル部分を共有、ライブ ラリ部分は⾃由に選択できる ・Linuxカーネルを読む機運が⾼まった(読むとはいっ てない) ・libcontainerは触ったり、コード読んだらgoの勉強に もなりそう、楽しそう(⼩並感)
余談 Cookpadのスプリングインターンにコンテナコース というのがあった https://internship.cookpad.com/2019/spring/
完