Dockerは、ソフトウェアの開発・運用を効率化するためのツールです。
初心者にとっても理解しやすいように、Dockerの基本機能やその使い方についてわかりやすく解説します。
Dockerとは何か?
Dockerは、コンテナ技術を利用してアプリケーションを分離して実行するためのツールです。
Dockerのイメージ
同じコンテナを使うことで、環境の違いをなくすことができます。
[ 開発環境 ] [ 本番環境 ]
+----------+ +----------+
| アプリA | ---> | アプリA |
| コンテナ | | コンテナ |
+----------+ +----------+
コンテナとは?
コンテナとは、アプリケーションとその依存関係をまとめた軽量な仮想環境のことです。
従来の仮想マシン(VM)と比べて以下の利点があります。
仮想マシン vs コンテナ
コンテナはOSごとではなく、アプリケーションに必要な部分だけを実行します。
仮想マシン (VM)
+-------------------+
| ゲストOS |
| アプリケーション |
+-------------------+
| ホストOS |
+-------------------+
コンテナ
+-------------------+
| アプリケーション |
+-------------------+
| ホストOS |
+-------------------+
仮想マシン(VM)の場合
[ ハードウェア ]
|
[ ホストOS ]
|
[ ハイパーバイザー ]
|
+---------------------------+
| 仮想マシン1 (VM1) |
| +-----------------------+ |
| | ゲストOS (例: Ubuntu) | |
| | アプリケーションA | |
| +-----------------------+ |
+---------------------------+
|
+---------------------------+
| 仮想マシン2 (VM2) |
| +-----------------------+ |
| | ゲストOS (例: CentOS) | |
| | アプリケーションB | |
| +-----------------------+ |
+---------------------------+
ハイパーバイザー: 仮想マシンを管理するソフトウェア。
ゲストOS: 各仮想マシンが独自に持つオペレーティングシステム。
各仮想マシンは完全に独立した環境を提供しますが、OSごと仮想化するためリソース消費が大きいです。
コンテナの場合
[ ハードウェア ]
|
[ ホストOS ]
|
[ Dockerエンジン ]
|
+---------------------------+
| コンテナ1 |
| +-----------------------+ |
| | アプリケーションA | |
| | 必要なライブラリ群 | |
| +-----------------------+ |
+---------------------------+
|
+---------------------------+
| コンテナ2 |
| +-----------------------+ |
| | アプリケーションB | |
| | 必要なライブラリ群 | |
| +-----------------------+ |
+---------------------------+
Dockerエンジン: コンテナの作成・管理を行う基盤。
コンテナは、ホストOSのカーネルを共有しつつ、各アプリケーションが独立した環境を持ちます。
ゲストOSが不要なため、仮想マシンに比べて軽量で高速です。
仮想マシンとコンテナの比較表
| 項目 | 仮想マシン(VM) | コンテナ |
|---|---|---|
| OSの重複 | 各VMにゲストOSが必要 | ホストOSを共有 |
| リソース消費 | 高い | 低い |
| 起動時間 | 数分~数十秒 | 数秒 |
| 用途 | フル仮想化環境が必要な場合 | 軽量な分離環境が必要な場合 |
| 例 | VMware, VirtualBox | Docker |
Dockerの主な機能
イメージ管理機能
Dockerイメージは、アプリケーションの動作に必要な設定やファイルをまとめたものです。
Dockerイメージの概要
イメージは「アプリの設計図」のようなものです。
Dockerイメージ
+-------------+
| ベースOS |
| アプリ設定 |
| 必要なライブラリ|
+-------------+
Dockerイメージの詳細
[ ベースレイヤー (Base Layer) ]
- 軽量OS (例: Ubuntu, Alpine)
- 必要なツール (例: bash, coreutils)
[ アプリケーションレイヤー (App Layer) ]
- アプリケーションの依存関係
(例: Pythonライブラリ、Node.jsパッケージ)
- 実行ファイルやコード
[ 設定レイヤー (Configuration Layer) ]
- 環境変数の設定 (例: DATABASE_URL)
- ポート設定 (例: EXPOSE 80)
[ 実行レイヤー (Run Layer) ]
- アプリケーションの起動コマンド
(例: CMD ["python", "app.py"])
Dockerイメージは、コンテナを実行する際に展開され、各レイヤーが効率的に利用されます。
動作フロー
[ イメージ ] ---> [ コンテナ起動 ]
|
+-> ベースOSをロード
+-> 依存関係を準備
+-> アプリケーションを起動
コンテナ管理機能
コンテナは、イメージを基に作成される実行環境です。
コンテナの動作イメージ
1つのイメージから複数のコンテナを作成できます。
Dockerイメージ --> コンテナ1
コンテナ2
ネットワーキング機能
コンテナには、コンテナ同士や外部と通信するためのネットワーク機能があります。
ブリッジ機能
Dockerエンジンが提供する仮想ネットワーク(ブリッジネットワーク)を使って、コンテナ間の通信が行われます。
特徴:
外部との通信にはポートフォワードを設定する必要があります。
同じブリッジネットワークに接続したコンテナ同士は通信可能。
[ ホストOS ]
|
[ Dockerエンジン ]
|
[ ブリッジネットワーク (bridge) ]
|
+--------------------+ +--------------------+
| コンテナA | | コンテナB |
| (例: Webサーバー) | <--> | (例: データベース) |
+--------------------+ +--------------------+
ポートフォワード機能
コンテナが (Webサーバー) 外部と通信する場合
docker run -d -p 8080:80 webserver
localhost:8080 にアクセスすると、コンテナ内のポート80に接続できます。
データの永続化
データの永続化とは、プログラムやアプリケーションが終了した後でもデータを保持し、再びアクセス可能な状態にすることを指します。
Dockerのコンテナでは、基本的にコンテナが削除されるとその中のデータも失われます。
この一時的なデータ保存を補うための仕組みがデータの永続化です。
データを永続化するためにボリューム (Volume)を使用します。
ボリューム (Volume)の詳細
Dockerが管理する専用のデータ保存領域を使用する方法。
- 特徴:
- コンテナが削除されてもボリュームは残る。
- 複数のコンテナ間でデータを共有可能。
- ホストシステムに依存せず、柔軟性が高い。
ボリュームの動作図
[ コンテナ ]
|
ボリューム
|
[ 永続的なストレージ ]
使用例: ボリュームを作成してマウントする。
docker volume create my_volume
docker run -v my_volume:/app/data my_app
上記では、my_volume という名前の永続的なデータ領域をローカルPC上に作成し、コンテナに作られる/app/data とマッピングしています。
Dockerのメリット
環境の再現性
同じイメージを使うことで、開発環境と本番環境を統一できます。
環境の再現イメージ
どの開発者も同じ環境を使えます。
開発者A ----> コンテナ
開発者B ----> コンテナ
実際にDockerを使ってみよう
Dockerのインストール
公式サイトからDocker Desktopをダウンロード・インストールするだけで簡単に始められます。
インストールの流れ
[ 公式サイト ] --> ダウンロード --> インストール --> 完了
簡単なコマンド例
Hello, World! を表示
docker run hello-world
イメージがローカルに存在しない場合は、Docker Hub(公式リポジトリ)からイメージをダウンロードし、イメージをもとに新しいコンテナを作成・実行します。
Dockerのインストールと基本的なセットアップが正しく行われていることを確認するためのテストとしてよく使用されます。
Nginxを起動
docker run -d -p 8080:80 nginx
Nginx(ウェブサーバー)をバックグラウンドで実行し、ローカルマシンのポート8080からコンテナ内のポート80に接続する設定を作成します。
docker run
Dockerコンテナを作成して実行するための基本コマンド。-d(デタッチモード)
コンテナをバックグラウンドで実行します。-p 8080:80(ポートマッピング)
ホストマシン(ローカル)のポート8080をコンテナ内のポート80にマッピングします。- ホスト側のポート:
8080
コンテナ側のポート:80(NginxがデフォルトでリッスンするHTTPポート)
これにより、ホストマシンのhttp://localhost:8080にアクセスすることで、コンテナ内のNginxが提供するウェブページを表示できます。
まとめ
Dockerを使うことで、効率的にアプリケーション開発が進められます。
初心者はまず、シンプルなコマンドを試しながらDockerの基本を学び、実際の開発に応用してみましょう。

