本ページはプロモーションが含まれています

Docker

Docker入門【2026年版】仕組み・使い方・トラブル対処まで解説

トム

・都内自社開発企業勤務/Javaバックエンドエンジニア
/Java歴10年以上 ・首都圏在住30代
・資格:基本情報技術者/応用情報技術者/Java Silver/Python3エンジニア認定基礎 詳細なプロフィール

「開発環境の構築に丸1日かかってしまった…」「先輩のPCでは動くのに、自分のPCだとエラーが出る…」。

そんな「環境構築」の悩みを解決するのがDockerです。

この記事を読めば、(1)Dockerの仕組みと仮想マシンとの違い、(2)インストールから基本コマンドの使い方、(3)Docker Composeで複数コンテナを管理する方法、(4)よくあるトラブルの対処法まで、実務で使えるレベルまで一気に理解できます。

私もかつてPythonのバージョン違いやライブラリ不足で、開発を始めるまでに何時間も浪費した経験がありますが、Dockerを覚えてからは環境構築の悩みがなくなりました。

この記事でわかること

  • Dockerの仕組みと仮想マシンとの違い
  • インストールから基本コマンドの使い方
  • Docker Composeで複数コンテナを管理する方法
  • よくあるトラブルの対処法

Dockerとは?入門前に知っておきたい基本知識

Dockerとは何かを示す入門者向けの概念図

まずは「Dockerとは何か」という入門の基本から押さえましょう。

Dockerとは何か?コンテナ型仮想化の仕組み

Dockerとは、「コンテナ型仮想化」 という技術を使って、アプリケーションの実行環境を構築・管理するためのプラットフォームです。

難しく聞こえるかもしれませんが、要は「アプリケーションと、それが動くために必要な設定やライブラリ一式を『コンテナ』という箱に詰め込む」仕組みです。

この「コンテナ」は、どのコンピュータ(Windows, Mac, Linux)の上でも、ほぼ同じように動作します。

「私のPCでは動いたのに、本番サーバでは動かない」といった、開発現場でよくある環境差異の問題を、Dockerは根本から解決してくれるのです。

Dockerはなぜ注目されているのか?

Dockerがこれほどまでに注目され、現代の開発に不可欠となった理由は、開発効率と運用効率が劇的に向上するからです。

従来の開発では、新しいプロジェクトに参加するたびに、OSの設定、データベースのインストール、言語のバージョン合わせなど、複雑な環境構築作業が必要でした。

しかしDockerを使えば、「Dockerイメージ」と呼ばれる設計図さえあれば、コマンド一つで誰でも・どこでも・すぐに同じ開発環境を再現できます。

この「環境構築の高速化」と「環境の持ち運びやすさ」が、Dockerの最大の強みです。

Dockerと仮想マシンの違いは何か?

Dockerとよく比較される技術に「仮想マシン」(VMwareやVirtualBoxなど)があります。どちらも「仮想的な実行環境」を作る点で似ていますが、根本的な違いがあります。

結論から言うと、Dockerコンテナは仮想マシンよりも圧倒的に軽量で高速に動作します。

  • 仮想マシン (VM):
    • ホストOSの上に、ゲストOS(WindowsやLinuxなどOSそのもの) を丸ごと起動します。
    • 起動に数分かかり、メモリやディスクも数GB単位で消費します。
    • 例えるなら「独立した家を丸ごと建てる」イメージ。
  • Dockerコンテナ:
    • ホストOSの機能(カーネル)を共有し、アプリケーションの実行に必要な部分だけを隔離します。
    • 起動は数秒で、リソース消費も最小限に抑えられます。
    • 例えるなら「アパートの一室を借りる」イメージ。

この軽量さゆえに、1台のマシンで多くのコンテナを同時に動かしたり、開発・テスト・本番環境へのデプロイを高速に繰り返したりすることが可能になります。

Dockerを使うメリット5つとデメリット3つ

Dockerを使うメリットとデメリットを整理した図

Dockerは万能に見えますが、メリットとデメリットの両方を理解しておくことが重要です。

Dockerの代表的なメリット5つ

Dockerを導入することで得られる主なメリットは以下の5点です。

  1. 環境構築が数秒で完了する:「Dockerfile」や「Docker Compose」という設定ファイルを使えば、複雑な環境もコマンド一つで再現できます。新メンバーがチームに参加した際のセットアップ時間が劇的に短縮します。
  2. 環境差異がなくなる(ポータビリティ):開発環境(Mac)、テスト環境(Linux)、本番環境(クラウド)など、どこでも同じ「コンテナ」を動かせます。「私の環境でだけ動かない」という不毛なトラブルがなくなります。
  3. 起動・停止が高速で軽量:前述の通り、仮想マシンに比べて起動が非常に高速です。開発中の「ちょっと試してすぐ破棄する」といったサイクルをストレスなく回せます。
  4. 環境のコード管理(IaC):Dockerfileによって、どのような環境でアプリケーションが動いているかがコードとして明文化されます。「このサーバ、誰がどんな設定したっけ?」といった属人化を防げます。
  5. リソース効率の向上:1台のサーバで多くのコンテナを効率よく実行できます。特にマイクロサービスアーキテクチャのように、小さなサービスを多数実行する場合に真価を発揮します。

実務で感じるデメリット・注意点

もちろんデメリットも存在します。

  1. 学習コストがかかる:Docker独自の概念(イメージ、コンテナ、ボリューム、ネットワーク)を新しく学ぶ必要があります。最初はとっつきにくく感じます。
  2. OSに依存する部分もあるDockerはホストOSのカーネルを共有するため、例えばWindowsホスト上で本物のLinuxカーネルを動かすには、WSL2 (Windows Subsystem for Linux 2) といった追加技術が必要になります(2026年時点のDocker Desktopでは自動化されています)。
  3. パフォーマンスのオーバーヘッド:非常に軽量とはいえ、ネイティブ環境で直接実行するのに比べれば、わずかながらパフォーマンスのオーバーヘッドは存在します。特にファイルI/O(読み書き)の速度はネイティブ環境より低下する傾向があります。

どんな開発に向いているか

結論として、Dockerはほぼ全てのWebアプリケーション開発に向いています。

特に以下のようなケースで強力な効果を発揮します。

  • チームでの開発
  • Webサービス (PHP, Ruby, Python, Go, Javaなど)
  • APIサーバ
  • マイクロサービスアーキテクチャ
  • CI/CD(継続的インテグレーション/継続的デリバリー)パイプラインの構築

逆に、GUIを多用するデスクトップアプリ開発や、OSの深い部分をチューニングする必要がある特殊な開発には、Dockerは向いていません。

あわせて読む
あわせて読む

Dockerの基本構造を理解しよう

Dockerの基本構造(イメージとコンテナの関係)を示す図

Dockerを使いこなすには、いくつかの重要なキーワードを理解する必要があります。ここでは入門に必須の3つを解説します。

イメージとコンテナの違い

これはDocker入門者が最初に覚えるべき、最も重要な概念です。

  • イメージ (Image):
    • コンテナの「設計図」あるいは 「テンプレート」 です。
    • アプリケーションを実行するために必要なOS、ライブラリ、設定ファイル、アプリケーションコードなど、すべてをまとめた静的なファイルです。
    • 例えるなら、「OSのインストールCD」や「冷凍食品のパッケージ」です。
  • コンテナ (Container):
    • イメージを元に「実行された実体」です。
    • イメージから起動された、実際に動作しているプロセス(環境)を指します。
    • 例えるなら、「インストールされたOS」や「解凍されて調理中の冷凍食品」です。

1つの「イメージ」から、何個も同じ「コンテナ」を作ることができます。 これが環境構築の高速化の秘密です。

私自身、初めてDockerを触ったときは「コンテナの中に入る」という表現の意味がわからず混乱しました。

docker exec -it [コンテナ名] bash というコマンドを見て、コンテナが仮想的な部屋のようなものなのか、物理的にどこかへ移動するものなのか判断がつかなかったのです。

実際は、コンテナは「動いているプロセスの集まり」であり、exec はそのプロセス空間に対して新しくシェルを実行しているだけ、と理解してからは迷わなくなりました。

あわせて読む

Dockerfileとは?役割と書き方

Dockerfileは、前述の「Dockerイメージ」を作成するための設計図です。

これはプレーンテキストのファイルで、以下のようなことを記述します。

  1. どのOSイメージをベースにするか (例: FROM python:3.12)
  2. どのファイルをコンテナ内にコピーするか (例: COPY . /app)
  3. どのライブラリをインストールするか (例: RUN pip install -r requirements.txt)
  4. コンテナ起動時にどのコマンドを実行するか (例: CMD ["python", "app.py"])

Dockerfileのサンプル (シンプルなPythonアプリ):

# 1. ベースイメージを指定 (Python 3.9の軽量版)
FROM python:3.12-slim

# 2. 作業ディレクトリを設定
WORKDIR /app

# 3. 必要なファイル(requirements.txt)をコピー
COPY requirements.txt .

# 4. 依存ライブラリをインストール
RUN pip install --no-cache-dir -r requirements.txt

# 5. アプリケーションのソースコードをコピー
COPY . .

# 6. コンテナ起動時に実行するコマンド
CMD [ "python", "./main.py" ]

このDockerfileを docker build コマンドで実行すると、オリジナルのDockerイメージが作成されます。

あわせて読む

Docker Hubとプライベートリポジトリの使い分け

作成したDockerイメージは、どこかに保存しておく必要があります。その保存場所を「レジストリ」と呼びます。

  • Docker Hub:
    • Docker社が公式に提供している、世界最大の公開レジストリです。
    • GitHubのDockerイメージ版と考えると分かりやすいでしょう。
    • Nginx, Python, MySQLなど、公式が提供する安全なイメージが多数登録されており、誰でも docker pull コマンドでダウンロードできます。
    • 自作イメージも公開できます(無料プランでは公開のみ)。
  • プライベートリポジトリ:
    • 非公開・社内用のイメージを保存するレジストリです。
    • 自社開発のアプリケーションコードを含むイメージなど、外部に公開したくない場合に利用します。
    • 代表的なサービスには、AWS ECR, GCP Artifact Registry, Azure CR, GitHub Packagesなどがあります。

入門者はまず、Docker Hubから公式イメージを取得して使うことから始めます。

Dockerのインストールと初期設定

Dockerのインストール手順と初期設定の流れを示す図

概念を学んだら、次は実際にDockerを動かしてみましょう。

Windows・Mac・Linuxそれぞれの導入方法

2026年時点で、WindowsとMacでDockerを始める最も簡単な方法は、公式が提供する「Docker Desktop」をインストールすることです。

  1. Windows (Windows 10/11 Pro/Enterprise/Home):
    • Docker Desktop for Windowsを公式サイトからダウンロードします。
    • インストールにはWSL2 (Windows Subsystem for Linux 2) の有効化が必要ですが、現在のDocker Desktopインストーラーは自動で設定します。
  2. Mac (Intel / Apple Silicon):
    • Docker Desktop for Macを公式サイトからダウンロードします。
    • 自分のMacのCPU(IntelかApple Silicon M1/M2/M3)に合ったインストーラーを選びます。
  3. Linux (Ubuntu, Debian, Fedora, CentOSなど):
    • Linuxには「Docker Engine」を直接インストールするのが伝統的でしたが、最近では「Docker Desktop for Linux」も提供されています。
    • 入門者はDocker Desktopを、サーバ運用が目的ならDocker Engineをインストールするのが基本です。

Docker Desktopの基本設定

インストール後、Docker Desktopを起動すると、タスクトレイ(Windows)やメニューバー(Mac)にクジラのアイコンが表示されます。

入門者がまず確認すべき設定は以下の通りです。(設定(歯車アイコン) > Resources)

  • CPUs / Memory:
    • Dockerが使用できるPCリソースの上限を設定します。
    • PCのスペックにもよりますが、Docker Desktopが自動算出するデフォルト値(インストール環境のPCスペックに応じて変動)のままでも、たいていの入門学習は問題ありません。
    • もしPCの動作が重く感じるようであれば、数値を少し下げてみてください。

初回に確認しておくべきコマンド

インストールが正しく完了したかを確認するために、ターミナル(WindowsならPowerShellかコマンドプロンプト)を開き、以下の2つのコマンドを実行します。

  1. バージョン確認docker version Client(操作側)と Server(実行側、Dockerデーモン)の両方のバージョン情報が表示されれば、Dockerは起動しています。
  2. Hello Worldの実行docker run hello-world このコマンドは、hello-world というDockerイメージを探し、もしローカルになければDocker Hubから自動でダウンロードし、コンテナとして実行します。Hello from Docker! というメッセージが表示されれば、インストールと初期設定は大成功です。

Dockerの基本操作を体験してみよう

Dockerの基本操作(コマンド実行)を体験する流れを示す図

Docker環境が整ったので、基本的なコマンド操作を学びます。

Dockerでできること早見表

詳しいコマンドを覚える前に、「Dockerで何ができるのか」を早見表で押さえておきましょう。

やりたいこと代表コマンド
開発環境をすぐ構築したいdocker run [イメージ名]
自分のアプリをイメージ化して配布したいdocker build -t [タグ名] .
公式イメージをダウンロードしたいdocker pull [イメージ名]
複数サービスを一括で起動したいdocker-compose up -d
CI/CDでテストを自動実行したいdocker run+テストコマンド(パイプライン内で実行)

よく使うDockerコマンド一覧

入門者がまず覚えるべきコマンドは多くありません。

コマンド説明
docker run [イメージ名]イメージからコンテナを起動する
docker ps起動中のコンテナ一覧を表示する
docker ps -a停止中のコンテナも含む一覧を表示する
docker stop [コンテナ名/ID]起動中のコンテナを停止する
docker rm [コンテナ名/ID]コンテナを削除する(停止してから)
docker imagesローカルにあるイメージ一覧を表示する
docker rmi [イメージ名/ID]イメージを削除する
docker pull [イメージ名]Docker Hubなどからイメージをダウンロードする
docker build -t [タグ名] [パス]Dockerfileからイメージをビルドする
docker exec -it [コンテナ名] bash起動中コンテナの内部に入る(bashを実行)
docker logs [コンテナ名]コンテナのログ(標準出力)を表示する

Nginxコンテナを立ち上げてみよう(サンプル付き)

コマンド1つでWebサーバを立ち上げてみましょう。ここでは人気のWebサーバ「Nginx」を使います。

以下のコマンドをターミナルで実行してください。

docker run -d -p 8080:80 --name my-nginx nginx

コマンドの解説

  • docker run: コンテナを起動します。
  • -d: デタッチドモード(バックグラウンド)で実行します。
  • -p 8080:80: ポートフォワーディング(ポートマッピング)の設定です。
    • ホストPC(あなたのPC)の 8080番 ポートへのアクセスを、
    • コンテナ内の 80番 ポート(Nginxが待機しているポート)へ転送します。
  • --name my-nginx: コンテナに my-nginx という名前を付けます(管理しやすくなります)。
  • nginx: 実行するイメージ名です(nginx:latest と同じ意味)。

実行後、Webブラウザを開き、http://localhost:8080 にアクセスしてください。

Nginxの「Welcome to nginx!」というページが表示されれば成功です。たった1コマンドでWebサーバが起動しました。

コンテナの停止・削除・永続化の基本

先ほど起動したNginxコンテナを片付けましょう。

  1. コンテナの停止docker stop my-nginx
  2. コンテナの削除(停止しないと削除できません)docker rm my-nginx

これでコンテナは削除されました。docker ps -a で確認しても、一覧から消えているはずです。

コンテナは、原則として「使い捨て」です。

docker rm でコンテナを削除すると、コンテナ内で作成されたデータ(例: データベースのデータ、アップロードされたファイル)も一緒に消えてしまいます。

データを永続化(コンテナを削除してもデータを残す)したい場合は、「Docker Volume(ボリューム)」 という仕組みを使います。

これは、ホストPCの特定の領域をコンテナにマウント(接続)する技術です。

Docker Composeで複数コンテナを管理する

Docker Composeで複数コンテナを管理する仕組みを示す図

Dockerの基本操作に慣れたら、次は「Docker Compose」です。実務では必須のツールです。

Docker Composeとは?

Docker Composeは、複数のコンテナ構成を定義・管理するためのツールです。

先ほどのNginxはコンテナ1つでしたが、実際のWebサービスは「Webサーバ」「アプリケーションサーバ」「データベースサーバ」など、複数のコンテナが連携して動作します。

あわせて読む

これらのコンテナを、docker run コマンドで1つずつ起動・設定するのは非常に手間がかかります。

複数コンテナをdocker runだけで運用しようとすると、起動順序・ネットワーク設定・環境変数の受け渡しを手動で管理する必要があり、コンテナ数が3つを超えたあたりから運用が破綻しやすくなります。

Composeは単なる時短ツールではなく、「どのコンテナを、どう連携させるか」を設定ファイルとして残すことで、本番障害時の切り戻し手順そのものを再現可能にする仕組みだと捉えると、実務での重要性がわかりやすくなります。

Docker Composeは、docker-compose.yml というYAML形式の設定ファイルに、「どのコンテナを、どう連携させて起動するか」を記述するだけで、コマンド一つ(docker-compose up ですべてのコンテナを一括管理できます。

docker-compose.ymlの基本構文

docker-compose.yml (docker-compose.yml) は、主に services, volumes, networks などで構成されます(かつて必須だったversionキーは、Docker Compose V2では無視される非推奨項目のため記述不要です)。

  • services: 起動するコンテナの定義を記述します。
    • image: 使用するイメージ名。
    • ports: ポートマッピング(例: "8080:80")。
    • volumes: ボリューム(データ永続化)の設定。
    • environment: 環境変数の設定。
    • depends_on: 起動順序の依存関係(例: DBが起動してからAPを起動)。

WordPress+MySQL環境を構築してみる例

最も分かりやすい例として、ブログツールのWordPressとMySQLの環境をDocker Composeで構築してみましょう。

適当なフォルダを作成し、その中に docker-compose.yml という名前で以下のファイルを作成します。

docker-compose.yml:

services:
  # データベース(MySQL)サービス
  db:
    image: mysql:8.4
    container_name: wordpress_db
    volumes:
      # db_dataという名前のボリュームを/var/lib/mysqlにマウント
      - db_data:/var/lib/mysql
    environment:
      MYSQL_ROOT_PASSWORD: my_root_password123
      MYSQL_DATABASE: wordpress
      MYSQL_USER: wordpress_user
      MYSQL_PASSWORD: my_user_password123
    restart: always

  # WordPressサービス
  wordpress:
    image: wordpress:latest
    container_name: wordpress_app
    ports:
      # ホストの8000番ポートをコンテナの80番ポートに
      - "8000:80"
    depends_on:
      # dbサービス(MySQL)が起動してから起動する
      - db
    environment:
      WORDPRESS_DB_HOST: db:3306 # サービス名(db)で接続
      WORDPRESS_DB_NAME: wordpress
      WORDPRESS_DB_USER: wordpress_user
      WORDPRESS_DB_PASSWORD: my_user_password123
    restart: always

# データを永続化するためのボリューム定義
volumes:
  db_data:

ファイルを作成したら、そのフォルダでターミナルを開き、以下のコマンドを実行します。

docker-compose up -d

docker compose up -d ※ハイフンなしが新しい構文です)

これだけで、MySQLコンテナとWordPressコンテナが、内部ネットワークで接続された状態で起動します。

ブラウザで http://localhost:8000 にアクセスすると、WordPressの初期設定画面が表示されるはずです。

db_data ボリュームを指定しているため、コンテナを停止・削除してもデータベースの内容は保持されます。

よくあるトラブルと解決方法

Dockerでよくあるトラブルと解決方法を示す図

Docker入門者がつまずきがちなポイントと、その対処法を紹介します。

コンテナが起動しないときのチェックポイント

docker rundocker-compose up を実行したのに、docker ps で見るとコンテナがいない(すぐに停止してしまう)場合があります。

この原因は、コンテナの起動時にエラーが発生しているためです。

docker logs [コンテナ名] コマンドで、コンテナのログを確認します。

docker logs wordpress_app

ログには「設定ファイルが見つからない」「データベースに接続できない」など、エラーの原因が具体的に出力されています。

ポート競合エラーの対処法

docker run -p 8080:80 ... を実行した際に、「Port is already allocated」や「address already in use」といったエラーが出ることがあります。

ホストPCの8080番ポートが、すでに他のアプリケーション(または他のDockerコンテナ)によって使用されているためです。

解決策

  1. ホスト側のポート番号を変更する:docker run -p 8081:80 ... のように、ホスト側のポート番号(左側)を空いている番号(8081など)に変更します。
  2. 競合しているプロセスを停止する:どのプロセスがポートを使っているか特定し、停止します。

複数のDockerプロジェクトを並行して開発していると、8080番や3000番などの定番ポートがすぐに埋まってしまいます。

新しいプロジェクトを起動する前に docker ps で他プロジェクトの使用状況を確認してからポート番号を決める癖をつけておくと、こうした事故を減らせます。

イメージの容量が大きくなりすぎる問題

Dockerを使い続けると、古いイメージやビルドキャッシュが溜まり、PCのディスク容量を圧迫することがあります。

docker system prune コマンドで、不要になったリソースを一括削除できます。

# 使用されていないコンテナ、ネットワーク、イメージ(dangling=true)を削除
docker system prune

# 上記に加え、停止中のコンテナや使用されていない全イメージも削除 (強力)
docker system prune -a --volumes

定期的に実行することで、ディスク容量を健全に保てます。

よくある質問

Q1. Dockerとは何ですか?

A1. Dockerとは、「コンテナ型仮想化」という技術を使ってアプリケーションの実行環境を構築・管理するプラットフォームです。アプリケーションと必要な設定・ライブラリを「コンテナ」という単位にまとめ、Windows・Mac・Linuxのどの環境でもほぼ同じように動作させられます。

Q2. Dockerと仮想マシンの違いは何ですか?

A2. 仮想マシンはゲストOSごと起動するため起動に数分、数GB単位のリソースを必要とします。Dockerコンテナはホストのカーネルを共有して必要な部分だけを隔離するため、起動が数秒で済み、リソース消費も最小限です。

Q3. Dockerのイメージとコンテナの違いは何ですか?

A3. イメージはアプリケーションの実行に必要なOS・ライブラリ・設定ファイルをまとめた「設計図」で、コンテナはそのイメージを元に実際に起動された「実体」です。1つのイメージから複数のコンテナを作成できます。

Q4. Docker Composeとは何ですか?

A4. Docker Composeは、複数のコンテナ構成を docker-compose.yml というYAMLファイルに定義し、docker-compose up というコマンド1つで一括起動・管理できるツールです。Webサーバとデータベースなど、複数コンテナが連携するシステムの構築に使います。

Q5. Dockerでポートが競合した場合はどうすればいいですか?

A5. docker run -p 8081:80 のようにホスト側のポート番号を空いている番号に変更するか、競合しているプロセスを特定して停止します。複数プロジェクトを並行運用している場合は docker ps で使用中のポートを事前に確認しておくと予防できます。

Q6. Dockerのイメージ容量が大きくなったときはどうすればいいですか?

A6. docker system prune コマンドで、使われていないコンテナ・ネットワーク・イメージを一括削除できます。停止中のコンテナや未使用の全イメージまで削除したい場合は docker system prune -a --volumes を使います。

まとめ

Dockerは、現代のソフトウェア開発において必須の技術となりました。

最初は「イメージ」や「コンテナ」といった独自の概念に戸惑うかもしれませんが、一度その便利さを体験すると、もうDockerなしの開発には戻れなくなるはずです。

  • Dockerは「コンテナ型仮想化」技術
  • 「イメージ(設計図)」から「コンテナ(実体)」が起動する
  • 軽量・高速で、環境差異をなくすことが最大のメリット
  • docker run で単体起動、docker-compose で複数起動

この記事が、あなたのDocker入門の一助となれば幸いです。

まずは docker run hello-world から、コンテナの世界に飛び込んでみてください。

  • この記事を書いた人
  • 最新記事

トム

・都内自社開発企業勤務/Javaバックエンドエンジニア
/Java歴10年以上 ・首都圏在住30代
・資格:基本情報技術者/応用情報技術者/Java Silver/Python3エンジニア認定基礎 詳細なプロフィール

-Docker