Contenu connexe Similaire à paizaのオンラインジャッジを支えるDockerとその周辺 (20) paizaのオンラインジャッジを支えるDockerとその周辺2. 自己紹介 (吉岡 恒夫)
• 2014年4月 ジョイン
(paizaでpaizaに転職しました)
• paizaのオンラインジャッジシステムの開発
• オンラインコーディング環境paiza.IOの開発
• Linux, Docker, Rails, AngularJS
14. 仮想マシン v.s. コンテナ
仮想マシン コンテナ
起動
❌
(数分)
⚪︎
(1秒未満)
メモリ
❌
(OS本体)
⚪︎
(必要なプロセス分)
のみ)
OSの自由度
⚪︎
(任意)
❌
(ホストと共有)
コンテナは軽量!
→ジャッジシステムで利用
18. Dockerのファイルシステム管理
• Union File Systemを利用(Copy on Write)
• ファイルシステムを積み重ねる。読み込みは一番上のレイヤーから、書き込
みは最上位のレイヤーに差分として記録。
• 共通のベースイメージを再利用できる
プロセス
/usr
/home
プロセス
/home
ユーザ環境 ユーザ環境
/homeベース
イメージ
(OS)
コンテナ コンテナ
27. CPU コア / CPU スレッド
• 個々のCoreは独立して並列実行できる
Quad-Core AMD Opteron processor (front view die, white background)
Attribution: Advanced Micro Devices, Inc. (AMD)
http://en.wikipedia.org/wiki/Opteron#mediaviewer/File:Quad-Core_AMD_Opteron_processor.jpg
Core Core
Core Core
47. 8つのDocker利用目的
1. サーバ管理を簡単に! => コンテナはどこでも動作!
2. 開発環境依存の問題をなくす! => 開発者全員が同じコンテナを利用できる!
3. 開発・デプロイ環境の同一化! => 開発環境とデプロイ環境を同一コンテナ利用!
4. マイクロサービス化! => サービス間の依存性を減らす!
5. サーバリソースの節約! => 同一物理サーバ上で複数コンテナが軽量動作!
6. デバッグが簡単!=> いつでもスナップショット/コピーをとって解析できる!
7. 複数テナント! => 複数のサービスを1つの物理サーバ上でまとめて動作!
8. デプロイ高速化! => コンテナ起動は一瞬!
高速で軽量仮想化環境が作れることを利用!
Notes de l'éditeur paiza知ってる? 使ってる?
Docker知ってる? 使ってる? サービス、システム、作ってる人もはっぴー、世の中もハッピーに! 転職できるかどうかに関わる
入試の例/カンニングできない
自由な環境/言語も環境も制限されすぎない(forkできない/ファイル作れない)
実行時間が毎回同じ実行時間を元にコードの質(計算量)を判定
多数のアクセスを同時処理一度の判定では多数のテストデータで確認するため、他のユーザを待たせないようにする
多くのアクセスがある場合にスケールするPOHなどのイベント時に台数を増やすことで対応できるようにする
確実に実行結果を返す混んでいても待っていれば結果を返す
多数の言語に対応C/C++/Java/PHP/Ruby/Perl/Python…
隔離された同一の実行環境テストデータや他の人のソースコードにアクセスできない
任意のコードを実行可能攻撃的なコードが来てもサービスが停止しない 使う側 $ (set -x; for port in `seq 8000 8100`; do docker run -p ${port}:80 nginx & done)
$ boot2docker ssh
# watch -n 1 'ps|grep "nginx: master”' Nginx on Docker on Ubuntu on Virtual Box on Mac 論理CPUをオフにすればいい?
=>AWSではできない ulimitでのファイルサイズ制限を併用 中国語版も? 中国語版も? 中国語版も? http://blog.flux7.com/blogs/docker/8-ways-to-use-docker-in-the-real-world
Dockerは速い、簡単 Dockerの弱点、特徴 現在0.3.1 App Container
https://coreos.com/blog/rocket/
Unfortunately, a simple re-usable component is not how things are playing out. Docker now is building tools for launching cloud servers, systems for clustering, and a wide range of functions: building images, running images, uploading, downloading, and eventually even overlay networking, all compiled into one monolithic binary running primarily as root on your server. The standard container manifesto was removed. We should stop talking about Docker containers, and start talking about the Docker Platform. It is not becoming the simple composable building block we had envisioned.