Dockerコンテナについて少し詳しく解説をします。
対象
- Dockerの概要は知っているが、もう少し詳しく学びたい人
- 目的・戦略・戦術の違いが分かる人
目的 (Objective)
以下の問題の改善を目的としています。
- アプリケーションの実行環境が変わると、確実な実行が保証できない
- 環境構築に時間がかかる
戦略 (What)
以下の戦略をとっています。
- 複数システムが同居しても競合の問題を起こさない
- 各システムで独立した実行環境を構築する
戦術 (How)
仮想化によって、上記の戦略を実現しています。
特徴:
- アプリケーションとOS・ライブラリ・Tool等をワンパッケージで提供する
- 他の仮想化技術より早い起動を実現する
-
カーネルをホストPCと共有することで、コンテナ実行の度にカーネルを読み込まずに済む
理由:
ディストリビューション(CentOS、Ubuntu等)が異なってもカーネルは共通である(Linuxとは本来、カーネル部分だけを指す)。
そのため、Linux上で動かすのであれば、カーネルをホストPCと共用しても問題ない。
-
カーネルをホストPCと共有することで、コンテナ実行の度にカーネルを読み込まずに済む
- 可搬性・冪等性を確保する
- 可搬性・冪等性を阻害する要因
- CPUアーキテクチャが異なる
- カーネルバージョンが異なる
- ダイナミックリンクライブラリを使用する
- 可搬性・冪等性を阻害する要因
- dockerfile用DSL・DockerHubを用意することで、環境構築の手間を減らす
- アプリケーションデプロイに特化している
- 全てのアプリケーションがコンテナ化に向いているわけではない
コンテナは一旦破棄し、作り直すと、初期状態に戻る。そのため、ステートレスなアプリケーションと相性が良い。反面、ステートフルなアプリケーションは下記のような工夫が必要である。- ホストPCとディレクトリを共有
- 永続化が必要な部分をストレージ用コンテナに分離
- 全てのアプリケーションがコンテナ化に向いているわけではない
- アプリケーションデプロイに特化している
コンテナの仕様
OCIにて標準化が進められています。
コンテナ適用例
- 本番環境
- 開発環境と本番環境との差異を吸収する
- 開発メンバ間での開発環境の統一
- サンプル環境・サンプルコードの配布
- 実行環境ごと配布することになるので「動かない」可能性を減らせる
終わりに
コンテナの基本事項をまとめ直しました。コンテナ構築の際に役立てていただけたら幸いです。
参考
コンテナ・ベース・オーケストレーション Docker/Kubernetesで作るクラウド時代のシステム基盤