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
27
契約テストとPactについて
bmf_san
0
71
5分でわかるSLO
bmf_san
2
98
権限について考える
bmf_san
2
110
自作HTTPルーターから新しいServeMuxへ
bmf_san
3
1.7k
古くなってしまったPHPフレームワークとPHPのバージョンアップ戦略
bmf_san
1
380
アジャイルワークショップ
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
iOS開発スターターキットの作り方
akidon0000
0
210
知って得する@cloudflare_vite-pluginのあれこれ
chimame
1
120
レトロゲームから学ぶ通信技術の歴史
kimkim0106
0
140
[Codecon - 2025] Como não odiar seus testes
camilacampos
0
100
[SRE NEXT] 複雑なシステムにおけるUser Journey SLOの導入
yakenji
0
840
Android 15以上でPDFのテキスト検索を爆速開発!
tonionagauzzi
0
130
MySQL9でベクトルカラム登場!PHP×AWSでのAI/類似検索はこう変わる
suguruooki
1
260
The Evolution of Enterprise Java with Jakarta EE 11 and Beyond
ivargrimstad
0
560
Go製CLIツールをnpmで配布するには
syumai
0
820
NEWT Backend Evolution
xpromx
1
160
React 使いじゃなくても知っておきたい教養としての React
oukayuka
14
4.3k
PHPUnitの限界をPlaywrightで補完するテストアプローチ
yuzneri
0
350
Featured
See All Featured
Testing 201, or: Great Expectations
jmmastey
43
7.6k
YesSQL, Process and Tooling at Scale
rocio
173
14k
Fantastic passwords and where to find them - at NoRuKo
philnash
51
3.3k
How GitHub (no longer) Works
holman
314
140k
Intergalactic Javascript Robots from Outer Space
tanoku
271
27k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
231
53k
The MySQL Ecosystem @ GitHub 2015
samlambert
251
13k
The Language of Interfaces
destraynor
158
25k
RailsConf 2023
tenderlove
30
1.2k
Optimising Largest Contentful Paint
csswizardry
37
3.4k
Keith and Marios Guide to Fast Websites
keithpitt
411
22k
KATA
mclloyd
30
14k
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/
完