「.NET 開発基盤部会 Wiki」は、「Open棟梁Project」,「OSSコンソーシアム .NET開発基盤部会」によって運営されています。
目次 †
概要 †
Linuxコンテナ †
Linuxネイティブなコンテナ。
方式 †
- Linux OSの持つコンテナ機能やリソースの管理機能などをベースに作られた、コンテナ型の仮想化技術
- コンテナ自体は、Dockerが登場する以前から存在し、古くから商用製品にも採用されている技術。
- 一般的に、Linux OS上での分離された空間を「Linuxコンテナ」と呼び、Linuxコンテナは、一般的に、LXCとも呼ばれる。
特徴 †
- マシン全体を仮想化する仮想化技術と比べると、
コンテナによる仮想化は軽量・高速で、実行に必要なリソースも少なくて済む。
- システムの構成変更や展開の容易さなどから、
開発段階から実運用環境まで、幅広く利用されている。
- コンテナ上で動作するプログラムは、基本的にはLinuxのバイナリ。
Dockerコンテナ †
- 現在のDockerは、libcontainerを利用するようになり、
Linuxコンテナに依存する部分が無くなった。
- このため、LinuxコンテナとDockerコンテナは、同じものではないが、考え方という観点では、
LinuxコンテナもDockerコンテナも、同様の分離された空間を提供することには違いがない。
機能 †
Build †
コンテナ・イメージ(Dockerイメージ)をビルドする機能
Ship †
Dockerイメージを共有する機能
(コンテナを積む、輸送するイメージ)
Run †
Dockerコンテナ で Dockerイメージを実行させる機能
- プロダクション環境では複数のホストで動作させる。
- これには、オーケストレーション・ツールを利用する。
サブシステム †
イメージ †
Dockerイメージを作成するファイル。
Docker multi stage build †
- Docker 17.05で導入された革新的な機能。
- Buildを複数に分割して実行できる。
- 今までも手動で複数のDockerファイルを組み合わせればできたが、
1ファイルで書けるようになり気軽に中間イメージを色々使えるようになった。
Dockerイメージ †
「Docker」向けに、作成したDockerイメージを公開するサービス
クライアント †
サーバ †
Docker Engine (エンジン) †
Docker Swarm (スウォーム) †
複数のDockerコンテナを使うアプリケーションを定義する。
Docker Machine (マシン) †
自分のネットワークやクラウド上に、自動的にDockerコンテナをデプロイする。
Dockerデーモン †
DockerデーモンにDockerイメージの実行を要求すると、Dockerデーモンは、
- この動作をカスタマイズするにはいくつかの方法がある。
仕組み †
名前空間 †
Linuxのnamespace機能は、
オブジェクトに対する名前付けにより隔離機能を提供する。
PID namespace †
- オブジェクト : LinuxのプロセスID
- コンテナ内で、同じPIDを使用できるなど。
Network namespace †
- オブジェクト
- ネットワークデバイス、IPアドレス、ポート番号
- ルーティング・テーブル、フィルタリング・テーブル
UID namespace †
- オブジェクト : LinuxのユーザID
- ホスト、コンテナでの隔離する。
(アカウントを異なる権限でマップする。)
Mount namespace †
- オブジェクト : ファイルシステム
- ホスト、コンテナでの隔離する。
UTS namespace †
- オブジェクト : Unix Time-sharing System(現在は既にその意味は失われている)
- システム識別子(nodename 及び domainname)を隔離する。
IPC namespace †
- オブジェクト : プロセス間通信(IPC)オブジェクト
- 共有メモリ、メッセージキュー
- スレッド同期ツールキット
リソース管理 †
Linuxのcgroups機能は、リソース管理機能を提供する。
リソース †
- CPU : cgroup 内のタスクによって使用されるCPUリソースの
- cpu : 使用量の制限
- cpuacct : 自動レポートを生成
- cpuset : 配置をセット
- memory : cgroup 内のタスクによって使用されるメモリ・リソースの
- device : cgroup 内のタスクによるデバイスへのアクセス許可・拒否
- freezer : cgroup 内のタスクを一時停止あるいは再開
- net_cls : ネットワークパケットをタグ付け
- blkio : cgroup 内のタスクによる、ブロックデバイス上の I/O へのアクセスを制御・監視
管理機能 †
プロセスをグループ化して管理可能
ルート ┬-> ユーザ・アプリ ┬-> エディタ
│ └-> 自作アプリ
│
└-> デーモン・アプリ ┬-> WWWサーバ
├-> APサーバ
└-> DBサーバ
ネットワーク構成 †
ホスト毎 †
- 物理NIC(eth0)
- ホストのNIC
- ホストがVMだったら仮想NICでは?
- NAPT(ip tables)
ホストの8080 → コンテナの80
コンテナ毎 †
- 仮想NIC(veth xxx)
- Veth pair (Virtual ethernet tunnel pair)
- Linux には、OpenVZ由来の Virtual Ethernet Tunnel (veth) というものがある。
名前が示す通り、仮想的な Ethernet Interface の組を作成して、繋いでくれる。
ストレージ・ドライバ †
AUFS †
Btrfs †
Device Mapper †
OverlayFS †
ZFS †
エディション †
CE †
EE †
インストール †
CentOS †
Ubuntu †
利用 †
CentOS †
Ubuntu †
参考 †
内部リンク †
Docker Documentation †
Compose file †
@IT †
いまさら聞けないDocker入門 †
http://www.atmarkit.co.jp/ait/series/1511/
超入門Docker †
http://www.atmarkit.co.jp/ait/series/5086/index.html
※ この記事は、Windows寄りになっている。
山市良のうぃんどうず日記 †
see the elephant †
さくらのナレッジ †
Qiita †
docker-compose コマンド †
コンテナ内で操作 †
Docker multi stage build †