Docker入門|開発環境構築の基礎をゼロから分かりやすく解説

Dockerの基礎概念からインストール、実際のコンテナ操作、docker-composeまで、初心者でも分かるように丁寧に解説します。

Docker入門開発環境コンテナ

はじめに:「自分のPCでは動いたのに…」を解決する技術

エンジニアなら一度は経験したことがあるでしょう。「自分のPCでは動くのに、チームメンバーの環境では動かない」「本番サーバーにデプロイしたら謎のエラーが出る」——この環境の違いによる問題を根本的に解決する技術がDockerです。

2026年現在、Dockerはインフラエンジニアだけの技術ではなくなりました。フロントエンド、バックエンド、データサイエンスを問わず、開発環境の構築にDockerを使うのが当たり前になっています。求人票でも「Docker経験あり」が記載されることが増えており、避けて通れない技術と言って良いでしょう。

この記事では、Dockerの概念から実際の操作まで、完全にゼロから理解できるように解説します。一緒に手を動かしながら読んでいただくと、記事を読み終わる頃にはDockerの基本操作ができるようになっているはずです。

コンテナとは何か?仮想マシンとの違い

「箱」に環境をまるごとパッケージングする

Dockerの核心は「コンテナ」という概念です。コンテナとは、アプリケーションと、それを動かすために必要なもの一式を、独立した「箱」に詰め込む技術です。

たとえば、Node.jsのWebアプリケーションを動かすには、Node.js本体、npmパッケージ、設定ファイルなどが必要です。これらを全部まとめてコンテナという「箱」に入れてしまえば、そのコンテナはどんなPCでも同じように動くわけです。

仮想マシン(VM)と何が違うの?

「環境をまるごと持ち運ぶ」という目的ならVMでも同じでは?と思うかもしれません。大きな違いは軽さです。

仮想マシン(VM)の場合:

  • OSまるごとコピーするので、1つのVMに数GB〜数十GBかかる
  • 起動に数分かかる
  • ホストOSの上にゲストOSが乗る二重構造で、リソースを大量に消費する

Dockerコンテナの場合:

  • ホストOSのカーネルを共有するので、数十MB〜数百MBで済む
  • 起動は数秒
  • プロセスレベルの分離なので、オーバーヘッドが極めて小さい

つまりDockerは、VMの良いところ(環境の独立性)を残しつつ、圧倒的に軽量で高速という特徴を持っています。

Docker用語を整理しよう

Dockerには独自の用語がいくつかあります。ここで整理しておきましょう。

イメージ(Image)

コンテナの「設計図」です。「Node.js v20がインストールされた状態のLinux環境」といった内容がパッケージされたものです。Docker Hubという公式リポジトリに、様々なイメージが公開されています。

コンテナ(Container)

イメージを元に作られた実際に動いている実体です。「イメージが設計図、コンテナが建てた家」と考えると分かりやすいです。1つのイメージから複数のコンテナを作れます。

Dockerfile

イメージを作るためのレシピファイルです。「Ubuntu上にNode.jsをインストールして、ソースコードをコピーして、npmパッケージをインストールする」といった手順を記述します。

Docker Compose

複数のコンテナを一括管理するためのツールです。Webアプリ+データベース+キャッシュサーバーのように、複数のサービスを組み合わせて動かす場合に使います。

ボリューム(Volume)

コンテナのデータを永続化するための仕組みです。コンテナは削除するとデータも消えますが、ボリュームを使えばデータを保持できます。

Dockerのインストール

Windows / Macの場合

Docker Desktopをインストールするのが最も簡単です。公式サイト(docker.com)からダウンロードして、インストーラーを実行するだけです。

Windowsの場合はWSL2(Windows Subsystem for Linux 2)が必要です。Docker Desktopのインストーラーが自動で設定してくれますが、事前にWSL2を有効にしておくとスムーズです。

インストール確認

ターミナルを開いて以下を実行しましょう。

docker --version
# Docker version 27.x.x が表示されればOK

docker run hello-world
# Hello from Docker! というメッセージが出れば成功

hello-world コンテナが動いた時点で、Dockerの基本的なセットアップは完了です。

最初のコンテナを動かしてみよう

Nginxコンテナを起動する

Webサーバーの定番であるNginxのコンテナを起動してみましょう。

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

このコマンドを分解すると:

  • -d — バックグラウンドで動かす(デタッチモード)
  • -p 8080:80 — ホストの8080番ポートをコンテナの80番ポートに接続
  • --name my-nginx — コンテナに名前を付ける
  • nginx — 使用するイメージ名

ブラウザで http://localhost:8080 にアクセスすると、Nginxのデフォルトページが表示されるはずです。たった1行のコマンドで、Webサーバーが起動しました。

コンテナの基本操作

docker ps                # 稼働中のコンテナ一覧
docker ps -a             # 停止中も含めた全コンテナ一覧
docker stop my-nginx     # コンテナを停止
docker start my-nginx    # コンテナを再開
docker rm my-nginx       # コンテナを削除
docker logs my-nginx     # コンテナのログを表示
docker exec -it my-nginx bash  # コンテナの中に入る

特に docker exec -it はよく使います。コンテナの中に入って、ファイルを確認したり設定を変更したりできます。

Dockerfileを書いてオリジナルイメージを作る

Node.jsアプリケーションのDockerfileを書いてみましょう。

# ベースイメージの指定
FROM node:20-alpine

# 作業ディレクトリの設定
WORKDIR /app

# パッケージ情報をコピー(キャッシュ活用のため先にコピー)
COPY package*.json ./

# 依存関係のインストール
RUN npm ci --production

# アプリケーションコードをコピー
COPY . .

# ポートの公開宣言
EXPOSE 3000

# アプリケーションの起動コマンド
CMD ["node", "server.js"]

イメージのビルドと実行

docker build -t my-app .
docker run -d -p 3000:3000 my-app

-t my-app でイメージに名前を付け、. で現在のディレクトリのDockerfileを使うことを指定しています。

Dockerfileのベストプラクティス

  • .dockerignore を必ず作るnode_modules.git をイメージに含めないようにする
  • マルチステージビルドを活用 — ビルド用と実行用でステージを分け、最終イメージを軽量化する
  • レイヤーキャッシュを意識 — 変更頻度の低いもの(依存関係)を先にCOPYすると、ビルドが高速化する
  • alpine系イメージを使う — 通常のイメージより大幅に軽量(例:node:20が1GBなのに対し、node:20-alpineは150MB程度)

docker-composeで複数サービスを管理する

実際のWebアプリケーションは、アプリサーバー単体で動くことは稀です。データベースやキャッシュなど、複数のサービスが必要になります。docker-composeを使えば、これらを一括で管理できます。

compose.yamlの例

services:
  app:
    build: .
    ports:
      - "3000:3000"
    environment:
      - DATABASE_URL=postgresql://user:pass@db:5432/mydb
    depends_on:
      - db
      - redis

  db:
    image: postgres:16
    environment:
      - POSTGRES_USER=user
      - POSTGRES_PASSWORD=pass
      - POSTGRES_DB=mydb
    volumes:
      - db-data:/var/lib/postgresql/data

  redis:
    image: redis:7-alpine
    ports:
      - "6379:6379"

volumes:
  db-data:

compose操作コマンド

docker compose up -d      # 全サービスをバックグラウンドで起動
docker compose down        # 全サービスを停止・削除
docker compose logs -f     # 全サービスのログをリアルタイム表示
docker compose ps          # 稼働状況の確認
docker compose exec app sh # 特定のサービスに入る

docker compose up -d だけで、アプリ・DB・Redisが全部起動します。チームメンバーも同じコマンドを打つだけで、全く同じ開発環境が手に入るわけです。

よく使うDockerコマンド一覧

覚えておくと便利なコマンドをまとめます。

イメージ操作:

  • docker images — ローカルのイメージ一覧
  • docker pull イメージ名 — イメージのダウンロード
  • docker rmi イメージ名 — イメージの削除
  • docker image prune — 未使用イメージの一括削除

コンテナ操作:

  • docker run — コンテナの作成・起動
  • docker stop / start / restart — 停止・起動・再起動
  • docker rm — コンテナの削除
  • docker container prune — 停止中コンテナの一括削除

デバッグ:

  • docker logs コンテナ名 — ログの確認
  • docker inspect コンテナ名 — 詳細情報の表示
  • docker stats — リソース使用状況のリアルタイム表示

実際の開発現場でのDocker活用例

ユースケース1:チーム開発の環境統一

compose.yaml をリポジトリに含めておけば、新しいメンバーがジョインしたとき git clonedocker compose up だけで開発環境が完成します。「セットアップに丸一日かかる」というのが過去のものになります。

ユースケース2:CI/CDパイプライン

GitHub ActionsなどのCIでDockerイメージをビルドし、テストを実行し、合格したらデプロイするという流れが主流です。同じイメージが開発からテスト、本番まで一貫して使われるため、環境差分によるバグが激減します。

ユースケース3:マイクロサービス

アプリケーションを小さなサービスに分割し、それぞれを独立したコンテナとして動かすマイクロサービスアーキテクチャは、Dockerなしには成り立ちません。

まとめ:Dockerは「一度覚えればずっと使える」スキル

Dockerのポイントを振り返りましょう。

  • コンテナはアプリ+環境をパッケージングする軽量な仮想化技術
  • Dockerfileでイメージの作り方を定義し、docker-composeで複数サービスを管理
  • **「どの環境でも同じように動く」**ことが最大のメリット
  • インストールはDocker Desktop一発で完了
  • 実務では環境統一・CI/CD・マイクロサービスで活躍

最初は覚えることが多く感じるかもしれませんが、基本コマンドは10個程度です。まずは docker run でコンテナを動かすところから始めて、次にDockerfileを書いてみて、最後にdocker-composeで複数サービスを立ち上げる——この3ステップを踏めば、Dockerの基本は身に付きます。

一度覚えてしまえば、どんなプロジェクトでも使える普遍的なスキルですので、ぜひ今日から手を動かしてみてください。

広告

Colosoでプロから学ぶ

業界トップの講師によるオンライン講座。買い切り型で何度でも復習可能。

Colosoを見る →