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

Dockerコンテナを使えば、アプリケーションの開発・配備・実行を誰でも簡単に行えるようになります。ローカル環境と本番環境の差異を排除し、開発効率を劇的に向上させるこの技術は、現代のクラウドネイティブ開発において必須のスキルです。本記事では、Dockerの基本概念から実践的な使い方まで、段階的に解説します。初心者でも理解できるように、具体的なコマンドやサンプルコードを交えながら丁寧に説明しますので、ぜひ最後までお読みください。


目次


Dockerとは何か?そのメリットと仕組み

Dockerは、アプリケーションとその依存関係を「コンテナ」と呼ばれる軽量な実行環境にパッケージ化する技術です。従来の仮想マシンとは異なり、ホストOSのカーネルを共有するため、起動が高速でリソース効率に優れています。具体的には、以下のようなメリットがあります。

  • 環境の一貫性:開発者のローカル環境と本番環境の差異をなくし、「動作する環境」を再現できます。
  • 迅速なデプロイ:数秒でアプリケーションを起動・停止でき、CI/CDパイプラインとの相性が抜群です。
  • リソース効率:仮想マシンよりもメモリ・CPU使用量が少なく、クラウドコストを削減できます。
  • 隔離性:各コンテナは独立して動作するため、アプリケーション間の干渉を防ぎます。

Dockerの仕組みを理解するには、主に3つの要素を押さえる必要があります。

要素役割具体例
Docker Engineコンテナの実行・管理を行うコアコンポーネントdocker run、docker buildなどのコマンドを処理
Docker Imageコンテナのテンプレート(読み取り専用)ubuntu:22.04、nginx:latestなど
Docker ContainerDocker 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のインストール手順

  1. Docker公式サイトからDocker Desktopをダウンロードします。
  2. ダウンロードしたインストーラーを実行し、画面の指示に従ってインストールします。
  3. インストール完了後、Docker Desktopを起動します。
  4. 初回起動時に、WSL 2のバックエンドを有効にするか尋ねられるので、有効にします。
  5. ターミナルを開き、以下のコマンドで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を動作させることができます。以下の手順でセットアップします。

  1. Windows PowerShellを管理者権限で開き、以下のコマンドを実行してWSL 2を有効にします。
wsl --install
wsl --set-default-version 2
  1. Microsoft StoreからUbuntuなどのLinuxディストリビューションをインストールします。
  2. Ubuntuを起動し、以下のコマンドでDocker Engineをインストールします。
sudo apt update
sudo apt install -y docker.io
sudo systemctl enable --now docker
  1. Windows側でDocker Desktopをインストールし、WSL 2統合を有効にします。

WSL 2を使うメリットは、LinuxのネイティブなDocker環境を利用できる点です。一方で、Docker Desktopと比較してセットアップが複雑になるため、初心者にはDocker Desktopの利用をおすすめします。

macOSへのインストール

macOSでDockerを使うには、Docker Desktopをインストールします。以下の手順でセットアップします。

  1. Docker公式サイトからDocker Desktop for Macをダウンロードします。
  2. ダウンロードしたDMGファイルを開き、ApplicationsフォルダにDocker.appをドラッグ&ドロップします。
  3. Docker.appを起動し、初回セットアップを完了させます。
  4. ターミナルを開き、以下のコマンドで動作確認します。
docker --version
docker run hello-world

macOSの場合、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インストール

  1. 以下のコマンドで、必要なパッケージをインストールします。
sudo apt update
sudo apt install -y ca-certificates curl gnupg lsb-release
  1. 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
  1. 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
  1. Docker Engineをインストールします。
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin
  1. Dockerサービスを起動し、自動起動を有効にします。
sudo systemctl enable --now docker
  1. 動作確認を行います。
sudo docker run hello-world

Ubuntu以外のディストリビューションでも、基本的な手順は同様です。公式ドキュメントの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

このコマンドは、以下の処理を行います。

  1. nginx:latestイメージをダウンロード(ローカルに存在しない場合)
  2. my-nginxという名前のコンテナを作成
  3. ホストの8080ポートをコンテナの80ポートにマッピング
  4. バックグラウンドで実行(-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 buildDockerfileからイメージをビルドする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.04

Docker 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:latest

docker 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:latest

docker execコマンドの詳細

docker execコマンドは、実行中のコンテナ内でコマンドを実行する際に使用します。主なオプションは以下の通りです。

  • -i, –interactive:標準入力を有効にする
  • -t, –tty:疑似端末(TTY)を割り当てる
  • -u, –user:実行ユーザーを指定する

例えば、Nginxコンテナ内でbashシェルを起動するには、以下のコマンドを実行します。

docker exec -it my-nginx bash

このコマンドを実行すると、コンテナ内でbashシェルが起動し、対話的に操作できるようになります。終了するにはexitコマンドを実行します。

実践!基本コマンドの組み合わせ

ここまで学んだ基本コマンドを組み合わせて、実際の開発ワークフローをシミュレーションしてみましょう。以下は、PythonのWebアプリケーションをDockerで動かす例です。

  1. Python 3.9のイメージをダウンロードします。
docker pull python:3.9
  1. アプリケーション用のディレクトリを作成し、以下の内容の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)
  1. Dockerfileを作成します。
FROM python:3.9
WORKDIR /app
COPY . .
RUN pip install flask
CMD ["python", "app.py"]
  1. Dockerfileからイメージをビルドします。
docker build -t my-python-app:1.0 .
  1. ビルドしたイメージからコンテナを起動します。
docker run -d --name my-app -p 5000:5000 my-python-app:1.0
  1. ブラウザでhttp://localhost:5000にアクセスし、アプリケーションが動作していることを確認します。
  1. 不要になったコンテナとイメージを削除します。
docker stop my-app
docker rm my-app
docker rmi my-python-app:1.0

この一連の流れは、Dockerを使ったアプリケーション開発の基本的な流れを示しています。実際の開発では、これらのコマンドを組み合わせて、より複雑

【編集・制作ポリシー】
本記事はRoute Bloom編集部が各ベンダー公式ドキュメント・エンジニア監修をもとに作成しています。インフラ・クラウド構築は環境により異なります。本番環境への適用前に必ずテストを実施してください。情報の正確性には万全を期していますが、最新情報は各公式ドキュメントをご確認ください。
ABOUT ME
たから
サラリーマンをしながら開業して経営やってます。 今年、本業で独立・別事業を起業予定です。 ◆経験:IT講師/インフラエンジニア/PM/マネジメント/採用/運用・保守・構築・設計 ◆取得資格:CCNA/CCNP/LPIC-1/AZ-900/FE/サーティファイC言語 ◆サイドビジネス:アパレル事業/複数のWEBメディアを運営