Dockerコンテナ入門【2026年7月更新】

Dockerコンテナ入門【2026年7月更新】
Dockerコンテナを使えば、アプリケーションの開発・配備・実行を誰でも簡単に行えるようになります。ローカル環境と本番環境の差異を排除し、開発効率を劇的に向上させるこの技術は、現代のクラウドネイティブ開発において必須のスキルです。本記事では、Dockerの基本概念から実践的な使い方まで、段階的に解説します。初心者でも理解できるように、具体的なコマンドやサンプルコードを交えながら丁寧に説明しますので、ぜひ最後までお読みください。
目次
- Dockerとは何か?そのメリットと仕組み
- Dockerのインストール方法(Windows/macOS/Linux)
- Dockerの基本コマンドと使い方
- Dockerfileの書き方とベストプラクティス
- Docker Composeで複数コンテナを管理する
- ネットワークとストレージの設定方法
- セキュリティとパフォーマンス最適化
- 実践!Dockerを活用した開発ワークフロー
- よくある質問と回答
- まとめ:Dockerをマスターするためのロードマップ
Dockerとは何か?そのメリットと仕組み
Dockerは、アプリケーションとその依存関係を「コンテナ」と呼ばれる軽量な実行環境にパッケージ化する技術です。従来の仮想マシンとは異なり、ホストOSのカーネルを共有するため、起動が高速でリソース効率に優れています。具体的には、以下のようなメリットがあります。
- 環境の一貫性:開発者のローカル環境と本番環境の差異をなくし、「動作する環境」を再現できます。
- 迅速なデプロイ:数秒でアプリケーションを起動・停止でき、CI/CDパイプラインとの相性が抜群です。
- リソース効率:仮想マシンよりもメモリ・CPU使用量が少なく、クラウドコストを削減できます。
- 隔離性:各コンテナは独立して動作するため、アプリケーション間の干渉を防ぎます。
Dockerの仕組みを理解するには、主に3つの要素を押さえる必要があります。
| 要素 | 役割 | 具体例 |
|---|---|---|
| Docker Engine | コンテナの実行・管理を行うコアコンポーネント | docker run、docker buildなどのコマンドを処理 |
| Docker Image | コンテナのテンプレート(読み取り専用) | ubuntu:22.04、nginx:latestなど |
| Docker Container | Docker Imageを実行した状態のプロセス | 起動中のnginxコンテナなど |
Dockerの歴史を振り返ると、2013年に初版がリリースされて以来、急速に普及しました。公式サイトによると、2023年現在で年間1,000万以上の開発者が利用しており、クラウドネイティブ技術のデファクトスタンダードとなっています。
Dockerを使うべき理由は、開発から運用までの一貫した環境を提供する点にあります。例えば、ローカルで動作していたアプリケーションが、本番環境のサーバーで動かない「動作するけど動かない」問題を解決します。また、マイクロサービスアーキテクチャの実現にも欠かせない技術です。
Docker vs 仮想マ…
Dockerと仮想マシン(VM)の違いを比較すると、以下の表のようになります。
| 比較項目 | Docker | 仮想マシン |
|---|---|---|
| 起動時間 | 数秒 | 数分〜数十分 |
| リソース使用量 | 軽量(数MB〜数百MB) | 重量(数GB〜数十GB) |
| OS依存性 | ホストOSのカーネルを共有 | ゲストOSを完全にエミュレート |
| 用途 | アプリケーションの実行環境 | 完全なOS環境の再現 |
Dockerはアプリケーション単位で環境を管理するのに対し、仮想マシンはOS単位で環境を再現します。そのため、Dockerは軽量で柔軟性に優れていますが、カーネルレベルの隔離ができないという制限があります。
Dockerが活躍するシーン
Dockerは以下のようなシーンで特に力を発揮します。
- ローカル開発環境の標準化:チーム全員が同じ環境で開発でき、環境依存のバグを減らせます。
- CI/CDパイプライン:GitHub ActionsやGitLab CIなどのCIツールと連携し、自動テストやデプロイを実現します。
- マイクロサービスアーキテクチャ:各サービスを独立したコンテナで実行し、スケーラビリティを向上させます。
- クラウドネイティブアプリケーション:AWS ECS、Google Kubernetes Engineなどのマネージドサービスと組み合わせて利用されます。
例えば、Webアプリケーションを開発する際に、Dockerを使えば「Python + Flask + PostgreSQL」という環境をワンライナーで起動できます。これにより、開発者はアプリケーションのロジックに集中でき、環境構築にかかる時間を大幅に削減できます。
Dockerのインストール方法(Windows/macOS/Linux)
Dockerを使い始めるには、まずDocker Engineをインストールする必要があります。以下に、主要なOSごとのインストール手順を解説します。
Windowsへのインストール
WindowsでDockerを使うには、主に2つの方法があります。
- Docker Desktop(推奨):GUIで簡単に操作できる公式のDocker環境
- WSL 2 + Docker Engine:Windows Subsystem for Linux上でDockerを動作させる方法
ここでは、Docker Desktopのインストール手順を説明します。
Docker Desktopのインストール手順
- Docker公式サイトからDocker Desktopをダウンロードします。
- ダウンロードしたインストーラーを実行し、画面の指示に従ってインストールします。
- インストール完了後、Docker Desktopを起動します。
- 初回起動時に、WSL 2のバックエンドを有効にするか尋ねられるので、有効にします。
- ターミナルを開き、以下のコマンドでDockerが正常に動作しているか確認します。
docker --version
docker run hello-world正常に動作していれば、以下のような出力が表示されます。
Hello from Docker!
This message shows that your installation appears to be working correctly.WSL 2を使ったインストール(上級者向け)
WSL 2を使うことで、Windows上でLinuxのDocker Engineを動作させることができます。以下の手順でセットアップします。
- Windows PowerShellを管理者権限で開き、以下のコマンドを実行してWSL 2を有効にします。
wsl --install
wsl --set-default-version 2- Microsoft StoreからUbuntuなどのLinuxディストリビューションをインストールします。
- Ubuntuを起動し、以下のコマンドでDocker Engineをインストールします。
sudo apt update
sudo apt install -y docker.io
sudo systemctl enable --now docker- Windows側でDocker Desktopをインストールし、WSL 2統合を有効にします。
WSL 2を使うメリットは、LinuxのネイティブなDocker環境を利用できる点です。一方で、Docker Desktopと比較してセットアップが複雑になるため、初心者にはDocker Desktopの利用をおすすめします。
macOSへのインストール
macOSでDockerを使うには、Docker Desktopをインストールします。以下の手順でセットアップします。
- Docker公式サイトからDocker Desktop for Macをダウンロードします。
- ダウンロードしたDMGファイルを開き、ApplicationsフォルダにDocker.appをドラッグ&ドロップします。
- Docker.appを起動し、初回セットアップを完了させます。
- ターミナルを開き、以下のコマンドで動作確認します。
docker --version
docker run hello-worldmacOSの場合、Docker DesktopはApple Silicon(M1/M2/M3)にも対応しています。ARMアーキテクチャ向けのDocker Imageを利用する際は、--platform linux/amd64フラグを付ける必要がある点に注意してください。
Linuxへのインストール
LinuxでDockerを使う場合、主に以下のディストリビューションがサポートされています。
- Ubuntu
- Debian
- CentOS
- Fedora
ここでは、Ubuntu 22.04 LTSへのインストール手順を説明します。
UbuntuへのDocker Engineインストール
- 以下のコマンドで、必要なパッケージをインストールします。
sudo apt update
sudo apt install -y ca-certificates curl gnupg lsb-release- Dockerの公式GPGキーを追加します。
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg- Dockerのリポジトリを追加します。
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null- Docker Engineをインストールします。
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin- Dockerサービスを起動し、自動起動を有効にします。
sudo systemctl enable --now docker- 動作確認を行います。
sudo docker run hello-worldUbuntu以外のディストリビューションでも、基本的な手順は同様です。公式ドキュメントのInstall Docker Engineを参照してください。
インストール後の初期設定
Dockerをインストールした後、以下の初期設定を行うことをおすすめします。
Dockerの権限設定
デフォルトでは、Dockerコマンドはroot権限で実行する必要があります。これを回避するには、ユーザーをdockerグループに追加します。
sudo usermod -aG docker $USER設定を反映させるために、一度ログアウトして再ログインするか、以下のコマンドを実行します。
newgrp dockerストレージドライバの設定
Dockerのストレージドライバには、主に以下の種類があります。
- overlay2(推奨):高速で効率的なストレージドライバ
- aufs:古いLinuxカーネルで使用されるドライバ
- btrfs:Btrfsファイルシステムを使用するドライバ
overlay2を使用するには、以下のコマンドで設定します。
sudo nano /etc/docker/daemon.json以下の内容を追加します。
{
"storage-driver": "overlay2"
}設定を反映させるために、Dockerサービスを再起動します。
sudo systemctl restart dockerネットワーク設定の確認
Dockerはデフォルトでブリッジネットワークを作成します。ネットワーク設定を確認するには、以下のコマンドを実行します。
docker network ls出力例:
NETWORK ID NAME DRIVER SCOPE
6e56ab21d3a4 bridge bridge local
7fca4eb8c647 host host local
9d17a0a1c1e8 none null localこれらのネットワークは、コンテナ間の通信や外部との接続に使用されます。詳細は後述の「ネットワークとストレージの設定方法」で解説します。
Dockerの基本コマンドと使い方
Dockerを使いこなすには、基本的なコマンドを理解することが不可欠です。以下に、主要なDockerコマンドとその使い方を解説します。
コンテナの操作コマンド
Dockerの基本操作は、主に以下のコマンドで行います。
| コマンド | 説明 | 使用例 |
|---|---|---|
docker run | 新しいコンテナを作成して起動する | docker run -d --name my-nginx nginx:latest |
docker ps | 実行中のコンテナを表示する | docker ps -a(停止中も含む) |
docker stop | 実行中のコンテナを停止する | docker stop my-nginx |
docker start | 停止中のコンテナを再起動する | docker start my-nginx |
docker rm | 停止中のコンテナを削除する | docker rm my-nginx |
docker logs | コンテナのログを表示する | docker logs -f my-nginx(リアルタイム表示) |
docker runコマンドの詳細
docker runコマンドは、新しいコンテナを作成して起動する際に使用します。主なオプションは以下の通りです。
- -d, –detach:バックグラウンドで実行(デタッチモード)
- –name:コンテナに名前を付ける
- -p, –publish:ポートをマッピングする(例:-p 8080:80)
- -v, –volume:ボリュームをマウントする
- –env, -e:環境変数を設定する
- –restart:コンテナの再起動ポリシーを設定する
例えば、Nginxのコンテナを起動するには、以下のコマンドを実行します。
docker run -d --name my-nginx -p 8080:80 nginx:latestこのコマンドは、以下の処理を行います。
- nginx:latestイメージをダウンロード(ローカルに存在しない場合)
- my-nginxという名前のコンテナを作成
- ホストの8080ポートをコンテナの80ポートにマッピング
- バックグラウンドで実行(-dオプション)
ブラウザでhttp://localhost:8080にアクセスすると、Nginxのデフォルトページが表示されます。
docker psコマンドの詳細
docker psコマンドは、実行中のコンテナを表示します。主なオプションは以下の通りです。
- -a, –all:停止中のコンテナも含めて表示
- -q, –quiet:コンテナIDのみを表示
- –filter:特定の条件でフィルタリング(例:–filter “status=exited”)
例えば、停止中のコンテナを含めて表示するには、以下のコマンドを実行します。
docker ps -a出力例:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a1b2c3d4e5f6 nginx:latest "/docker-entrypoint.…" 2 hours ago Exited (0) 5 minutes ago my-nginx
イメージの操作コマンド
Dockerイメージは、コンテナのテンプレートとなるファイルです。主なイメージ操作コマンドは以下の通りです。
| コマンド | 説明 | 使用例 |
|---|---|---|
docker images | ローカルに保存されているイメージを表示する | docker images |
docker pull | イメージをDocker Hubからダウンロードする | docker pull ubuntu:22.04 |
docker rmi | ローカルのイメージを削除する | docker rmi nginx:latest |
docker build | Dockerfileからイメージをビルドする | docker build -t my-app:1.0 . |
docker imagesコマンドの詳細
docker imagesコマンドは、ローカルに保存されているイメージを表示します。出力例は以下の通りです。
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest abc123def456 2 weeks ago 142MB
ubuntu 22.04 def456ghi789 1 month ago 72.9MB
各列の意味は以下の通りです。
- REPOSITORY:イメージのリポジトリ名
- TAG:イメージのバージョン(latestは最新版)
- IMAGE ID:イメージ固有のID
- CREATED:イメージが作成された日時
- SIZE:イメージのサイズ
不要なイメージを削除するには、以下のコマンドを実行します。
docker rmi docker pullコマンドの詳細
docker pullコマンドは、Docker Hubやプライベートレジストリからイメージをダウンロードします。例えば、Ubuntu 22.04のイメージをダウンロードするには、以下のコマンドを実行します。
docker pull ubuntu:22.04Docker Hubには、公式のイメージが多数公開されています。例えば、以下のようなイメージがあります。
nginx:Webサーバーmysql:データベースredis:インメモリーキャッシュpython:Python実行環境
イメージ名はリポジトリ名:タグの形式で指定します。タグを省略した場合はlatestが使用されます。
ボリュームとネットワークの…
Dockerのボリュームとネットワークを操作するコマンドは以下の通りです。
| コマンド | 説明 | 使用例 |
|---|---|---|
docker volume | ボリュームの作成・管理 | docker volume create my-volume |
docker network | ネットワークの作成・管理 | docker network create my-network |
docker exec | 実行中のコンテナ内でコマンドを実行 | docker exec -it my-nginx bash |
docker volumeコマンドの詳細
Dockerのボリュームは、コンテナ間でデータを共有したり、永続化するために使用します。主なボリューム操作コマンドは以下の通りです。
- 作成:
docker volume create <volume_name> - 一覧表示:
docker volume ls - 詳細表示:
docker volume inspect <volume_name> - 削除:
docker volume rm <volume_name>
例えば、データベース用のボリュームを作成するには、以下のコマンドを実行します。
docker volume create db-dataボリュームをコンテナにマウントするには、docker runコマンドの-vオプションを使用します。
docker run -d --name my-db -v db-data:/var/lib/mysql mysql:latestdocker networkコマンドの詳細
Dockerのネットワークは、コンテナ間の通信や外部との接続を制御します。主なネットワーク操作コマンドは以下の通りです。
- 作成:
docker network create <network_name> - 一覧表示:
docker network ls - 詳細表示:
docker network inspect <network_name> - 削除:
docker network rm <network_name>
例えば、カスタムネットワークを作成するには、以下のコマンドを実行します。
docker network create my-networkネットワークにコンテナを接続するには、docker runコマンドの--networkオプションを使用します。
docker run -d --name my-app --network my-network my-app:latestdocker execコマンドの詳細
docker execコマンドは、実行中のコンテナ内でコマンドを実行する際に使用します。主なオプションは以下の通りです。
- -i, –interactive:標準入力を有効にする
- -t, –tty:疑似端末(TTY)を割り当てる
- -u, –user:実行ユーザーを指定する
例えば、Nginxコンテナ内でbashシェルを起動するには、以下のコマンドを実行します。
docker exec -it my-nginx bashこのコマンドを実行すると、コンテナ内でbashシェルが起動し、対話的に操作できるようになります。終了するにはexitコマンドを実行します。
実践!基本コマンドの組み合わせ
ここまで学んだ基本コマンドを組み合わせて、実際の開発ワークフローをシミュレーションしてみましょう。以下は、PythonのWebアプリケーションをDockerで動かす例です。
- Python 3.9のイメージをダウンロードします。
docker pull python:3.9- アプリケーション用のディレクトリを作成し、以下の内容の
app.pyファイルを作成します。
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello():
return "Hello, Docker!"
if __name__ == '__main__':
app.run(host='0.0.0.0', port=5000)- Dockerfileを作成します。
FROM python:3.9
WORKDIR /app
COPY . .
RUN pip install flask
CMD ["python", "app.py"]- Dockerfileからイメージをビルドします。
docker build -t my-python-app:1.0 .- ビルドしたイメージからコンテナを起動します。
docker run -d --name my-app -p 5000:5000 my-python-app:1.0- ブラウザで
http://localhost:5000にアクセスし、アプリケーションが動作していることを確認します。
- 不要になったコンテナとイメージを削除します。
docker stop my-app
docker rm my-app
docker rmi my-python-app:1.0この一連の流れは、Dockerを使ったアプリケーション開発の基本的な流れを示しています。実際の開発では、これらのコマンドを組み合わせて、より複雑
本記事はRoute Bloom編集部が各ベンダー公式ドキュメント・エンジニア監修をもとに作成しています。インフラ・クラウド構築は環境により異なります。本番環境への適用前に必ずテストを実施してください。情報の正確性には万全を期していますが、最新情報は各公式ドキュメントをご確認ください。




