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
AAPについて調べてみた
bmf_san
0
58
レーダーをつくる
bmf_san
0
37
契約テストとPactについて
bmf_san
0
83
5分でわかるSLO
bmf_san
2
110
権限について考える
bmf_san
2
120
自作HTTPルーターから新しいServeMuxへ
bmf_san
3
1.8k
古くなってしまったPHPフレームワークとPHPのバージョンアップ戦略
bmf_san
1
410
アジャイルワークショップ
bmf_san
0
170
Makuakeの認証基盤とRe-Architectureチーム
bmf_san
0
2.8k
Other Decks in Programming
See All in Programming
なんでRustの環境構築してないのにRust製のツールが動くの? / Why Do Rust-Based Tools Run Without a Rust Environment?
ssssota
14
45k
Software Architecture
hschwentner
6
2.3k
Six and a half ridiculous things to do with Quarkus
hollycummins
0
210
バッチ処理を「状態の記録」から「事実の記録」へ
panda728
PRO
0
190
TFLintカスタムプラグインで始める Terraformコード品質管理
bells17
2
360
AI 駆動開発におけるコミュニティと AWS CDK の価値
konokenj
5
220
Ktorで簡単AIアプリケーション
tsukakei
0
100
Claude CodeによるAI駆動開発の実践 〜そこから見えてきたこれからのプログラミング〜
iriikeita
0
320
SODA - FACT BOOK(JP)
sodainc
1
8.7k
Google Opalで使える37のライブラリ
mickey_kubo
3
140
釣り地図SNSにおける有料機能の実装
nokonoko1203
0
200
あなたとKaigi on Rails / Kaigi on Rails + You
shimoju
0
180
Featured
See All Featured
Making the Leap to Tech Lead
cromwellryan
135
9.6k
Large-scale JavaScript Application Architecture
addyosmani
514
110k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
37
2.6k
Typedesign – Prime Four
hannesfritz
42
2.8k
Producing Creativity
orderedlist
PRO
347
40k
Fashionably flexible responsive web design (full day workshop)
malarkey
407
66k
Imperfection Machines: The Place of Print at Facebook
scottboms
269
13k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
31
2.6k
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
657
61k
Code Reviewing Like a Champion
maltzj
526
40k
Principles of Awesome APIs and How to Build Them.
keavy
127
17k
The Straight Up "How To Draw Better" Workshop
denniskardys
238
140k
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/
完