Dockerは、Linuxカーネルの機能を利用してアプリケーションと実行環境をコンテナとして分離・配布するプラットフォームです。仮想マシンとは異なり、通常は各コンテナがゲストOSのカーネルを持つのではなく、ホストのカーネルを共有します。
1. 仮想マシンとコンテナ#
仮想マシンは、ホスト上に仮想ハードウェアを作り、ゲストOS全体を起動します。OSカーネルも含めて分離できる一方、メモリやディスクを多く消費し、起動にも時間がかかります。
コンテナは、プロセス、ファイルシステム、ネットワークなどを分離して実行します。ゲストOS全体を起動しないため、比較的軽量で起動が速く、同じホスト上で多くのアプリケーションを動かせます。
2. Dockerの主要概念#
イメージ(Image)#
イメージは、アプリケーションのファイルシステム、実行ファイル、ライブラリ、既定の設定をまとめた読み取り専用のテンプレートです。Docker Hubから取得することも、自分でDockerfileからビルドすることもできます。
コンテナ(Container)#
コンテナは、イメージから作成した実行中または停止中のインスタンスです。コンテナ内のプロセス、ネットワーク、マウント、環境変数などを個別に設定できます。
ボリューム(Volume)#
コンテナの書き込みレイヤーは、コンテナを削除すると失われる場合があります。データベースやアップロードファイルを保持したいときは、ホストやDocker管理のボリュームをマウントします。
docker volume create app-data
docker run --rm -v app-data:/var/lib/app alpine ls /var/lib/app3. 基本コマンド#
docker pull nginx:latest
docker run -d --name web -p 8080:80 nginx:latest
docker ps
docker ps -a
docker logs web
docker stop web
docker rm webイメージとコンテナは別のものです。docker rmはコンテナを削除しますが、イメージや外部ボリュームまで自動的に削除するとは限りません。
4. Docker Desktop#
Docker Desktopでは、GUIから次の概念を確認できます。
| 表示 | 意味 |
|---|---|
| Containers | イメージから作られた実行単位 |
| Images | コンテナを作るためのテンプレート |
| Builds | Dockerfileからイメージを作る処理 |
| Volumes | コンテナの外側へデータを保存する領域 |
Docker Desktopは操作を分かりやすくしますが、内部ではDocker Engineと同じ基本概念を使います。CLIで同じ操作を実行できるようになると、サーバー環境でも応用しやすくなります。
まとめ#
- 仮想マシンはゲストOS全体を動かし、コンテナはアプリケーションプロセスを分離する。
- イメージはテンプレート、コンテナはその実行インスタンスである。
- 永続化したいデータはボリュームへ保存する。
- 本番環境では、タグの固定、最小権限、秘密情報の分離、イメージの更新を行う。

