コンテナとは
コンテナはアプリとファイルシステムを隔離する特殊なプロセス
要約すると「そのプロセスの中だけが別のマシンで動いているような状態になる」ということ。
そのコンテナを作成実行するためのソフトウェアがDockerである。
コンテナの仕組み
コンテナは物理マシン上のOS(ホストOS)がインストールされたソフトウェア上に作成される。
コンテナは一つの物理マシン上に複数作ることもできる。
コンテナと仮想マシンの違い
コンテナ
コンテナ内にゲストOS(仮想マシン内にあるOS)を含まない。
仮想マシン
ホストOSと区別するために仮想マシン内にあるOSはゲストOSを含む。
あくまでもコンテナはOSのカーネル(OSの中核部分)はホストOSのものを使う。こうすることでオーバーヘッドが格段に違ってくる
要約すると...
「コンテナはゲストOSがないから軽量である」
ということ。
メリットとデメリット
-
メリット
-
「ホストOSを汚さずに環境構築できる」
- コンテナは隔離されたプロセスなのでホストOSを汚さない。ホストOSにソフトウェアを直接インストールしてしまうとOSの設定変更が必要だったり同じソフトウェアのバージョン違いを共存できなかったりする。コンテナは互いに干渉しない環境を複数作れる。
-
「IaC(Infrastracuture as Code)の実現」
- Infrastracuture as Codeとはアプリのインフラ構築をコードを用いて行うこと。Dockerではどんなコンテナを作るか、といった手順をまとめたテキストファイルをもとにコンテナを作れるのでそのテキストファイルさえあればほかの人が別のマシンでコンテナを作ることが容易になる
-
「可搬性がある」
- コンテナは、異なるOSやマシンでも同じ環境を再現できる可搬性(ポータビリティ)が高い性質がある。アプリの動作に必要なライブラリや依存関係を含めてパッケージされたものなので環境際による不具合を避けれる
-
-
デメリット
- 「学習コストが高い」
- 複数のコンテナを組み合わせたい場合や本番環境で使いたい場合はコンテナについての深い知識が必要になり、Linuxの知識が欠かせない。
- 「学習コストが高い」
コンテナは「作っては削除」が基本
コンテナは作成・削除のコストが非常に低いため作成したコンテナを使い続けるよりも削除して作り直すほうが手間がかからない。
コンテナのライフサイクル
「作成」→「実行」→「停止」→「削除」