Dockerとは
コンテナ型の仮想化技術を提供するプラットフォーム
コンテナ型仮想化とは
ホストOSのカーネルを共有しつつ、各アプリケーションをコンテナとして独立した環境で実行する仮想化技術
ハイパーバイザー型仮想化との違い
コンテナ型仮想化は、ホストOSのカーネルを共有してコンテナを実行するため、軽量で起動が速く、リソース消費が少ないです。
一方、ハイパーバイザー型仮想化は、各仮想マシン(VM)が独立したOSを持つため、異なるOSを並行して動かせるが、リソース消費が大きく起動が遅いです。
メリット
- 軽量で高速
- 環境の再現性が高い
- スケーラブルで柔軟なデプロイ
- 開発・運用の効率化(CI/CDとの相性◎)
デメリット
- 異なるOSを同一基盤上で動かせない
Docker Engineとは
Dockerのコンテナ管理を行うソフトウェアの総称
Dockerの主要要素
Dockerデーモン
dockerd(Dockerのバックグラウンドプロセス)をリッスンし、イメージ、コンテナ、ボリュームなどのDockerオブジェクトを管理します
Dockerクライアント
ユーザーがDockerを操作するためのインターフェースで、通常 コマンドライン(CLI)から利用します
Dockerレジストリ
Dockerイメージを格納ためのリポジトリサービス
Dockerイメージを保存しているDockerオブジェクトがあるのにDockerレジストリがある理由
Dockerオブジェクトの保存場所がローカルマシンなのに対して、Dockerレジストリの保存場所はリモートサーバーだからです。よって、Dockerオブジェクトはローカル開発、テスト用には向いていますが、Dockerレジストリは本番環境、チーム開発、CI/CDに向いています
Dockerオブジェクト
Dockerが管理するリソースの総称で、主に以下が含まれます
Dockerイメージ
アプリケーションと環境をひとまとめにしたテンプレート
Dockerコンテナ
イメージを実行したもので、アプリが動作する単位
Dockerfile
Dockerイメージを作成するための設計図
Dockerボリューム
データを永続化するためのストレージ
- bindマウント
- ホストのフォルダをコンテナに直接マウント(リアルタイム同期)
- volume
- Docker管理のストレージ(複数コンテナ間で共有可能・高速)
- tmpfsマウント
- メモリ上に保存(コンテナ停止時にデータ消失・高速・セキュア)
Dockerのネットワーク
コンテナ間の通信を管理する仕組み
none
外部と接続しません
host(本番環境向け)
ホストのIPアドレスをそのまま使用します
Bridge(デフォルト、開発環境向け)
同じbridgeネットワーク内のみでコンテナ同士は通信可能で、外部との通信はNATを経由します
まとめ
Dockerは、コンテナ型の仮想化技術を提供するプラットフォームで、軽量かつ高速な環境構築を可能にします。Dockerは、イメージ・コンテナ・ボリューム・ネットワークなどのオブジェクトを管理し、開発や運用の効率化に貢献します。