プログラミングHUB
learning12分で読めます

Docker入門|仕組み・メリット・開発環境構築をわかりやすく解説

Dockerの基本概念、コンテナと仮想マシンの違い、インストール方法、Dockerfile・Docker Composeの使い方まで初心者向けに解説します。

関連記事:Web開発技術マップ2026|フロントエンド・バックエンド・インフラの全体像もあわせてご覧ください。

「自分のPCでは動くのに本番環境で動かない」「チームメンバーと環境を揃えるのが大変」。開発現場でよくあるこうした問題を解決するのがDockerです。

Dockerを使えば、アプリケーションとその実行環境を「コンテナ」としてまとめ、どこでも同じ状態で動かせるようになります。この記事では、Dockerの基本概念から環境構築、実際の使い方まで初心者向けに解説します。

Dockerとは何か

Dockerは、コンテナ型の仮想化技術を提供するプラットフォームです。アプリケーションとその依存関係(ライブラリ、設定ファイル、ランタイム等)を「コンテナ」という隔離された環境にパッケージングして実行します。

コンテナとは

コンテナは、アプリケーションの実行に必要なものだけを含む軽量な実行環境です。OSのカーネルはホストマシンと共有するため、仮想マシン(VM)と比べて起動が速く、リソース消費も少ないのが特徴です。

コンテナと仮想マシンの違い

比較項目コンテナ(Docker)仮想マシン(VM)
起動時間秒単位分単位
リソース消費少ない多い
OSホストOSのカーネルを共有ゲストOS全体を含む
サイズ数十MB〜数百MB数GB
隔離レベルプロセスレベルハードウェアレベル

コンテナはVMと比較して軽量・高速であり、開発環境の構築やマイクロサービスの運用に適しています。

Dockerを使うメリット

環境の再現性

Dockerfileにアプリケーションの環境を定義すれば、誰がどこで実行しても同じ環境が再現されます。「自分のPCでは動く」問題を根本的に解決できます。

環境構築の効率化

新しいチームメンバーが参加した際も、docker compose upの一つのコマンドで開発環境が立ち上がります。データベース、キャッシュサーバー、アプリケーションサーバーを一括でセットアップできます。

本番環境との一致

開発環境と本番環境で同じコンテナイメージを使えるため、環境差異によるトラブルを減らせます。

マイクロサービスとの親和性

各サービスを独立したコンテナとして運用でき、デプロイやスケーリングを個別に行えます。

Dockerのインストール

Docker Desktopの導入

Windows / macOSではDocker Desktopをインストールするのが最も手軽です。

  1. Docker公式サイトからDocker Desktopをダウンロード
  2. インストーラーを実行
  3. インストール完了後、ターミナルで動作確認
docker --version
# Docker version 26.x.x

docker compose version
# Docker Compose version v2.x.x

Linuxの場合はDocker Engineを直接インストールします。公式ドキュメントにディストリビューション別の手順が記載されています。

Docker Desktopの利用条件

Docker Desktopは、個人利用や小規模企業、教育目的では無料で利用できます。一定規模以上の企業での利用には有料サブスクリプションが必要です。詳細はDocker公式の料金ページで確認してください。

CI/CD入門も参考にしてください。

Dockerの基本操作

コンテナの起動と停止

# Nginx(Webサーバー)のコンテナを起動
docker run -d -p 8080:80 --name my-nginx nginx

# 起動中のコンテナ一覧
docker ps

# コンテナの停止
docker stop my-nginx

# コンテナの削除
docker rm my-nginx

docker runコマンドは、指定したイメージからコンテナを作成して起動します。-dはバックグラウンド実行、-pはポートのマッピングを意味します。

サーバーレス入門も参考にしてください。

Docker イメージ

イメージはコンテナの「設計図」です。Docker Hubには公式イメージが多数公開されており、docker pullで取得できます。

# イメージの取得
docker pull node:20-slim

# ローカルのイメージ一覧
docker images

コンテナ内への接続

# コンテナ内でシェルを起動
docker exec -it my-nginx bash

Dockerfileの書き方

Dockerfileは、独自のDockerイメージを定義するためのファイルです。

Node.jsアプリの例

# ベースイメージ
FROM node:20-slim

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

# 依存関係のインストール(キャッシュ活用のため先にコピー)
COPY package*.json ./
RUN npm ci

# ソースコードのコピー
COPY . .

# ビルド
RUN npm run build

# ポートの公開
EXPOSE 3000

# 起動コマンド
CMD ["node", "dist/index.js"]

ビルドと実行

# イメージのビルド
docker build -t my-app .

# コンテナの起動
docker run -d -p 3000:3000 my-app

Dockerfileのポイント

  • ベースイメージの選択slimalpineタグの軽量イメージを選ぶと、イメージサイズを削減できる
  • レイヤーキャッシュの活用:変更頻度の低いファイル(package.json等)を先にコピーすることで、ビルド時間を短縮できる
  • マルチステージビルド:ビルドに必要なツールと実行に必要なものを分離し、最終イメージを軽量化できる
PRエックスサーバー国内シェアNo.1のエックスサーバーを試す公式サイトで詳細を見る※本コンテンツはアフィリエイト広告を含みます。表示内容は各社公式サイトをご確認ください。

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

実際の開発では、アプリケーション・データベース・キャッシュなど複数のサービスを同時に動かします。Docker Composeを使えば、これらを一つのファイルで定義し、まとめて管理できます。

docker-compose.ymlの例

version: "3.8"
services:
  app:
    build: .
    ports:
      - "3000:3000"
    environment:
      - DATABASE_URL=postgresql://user:password@db:5432/mydb
    depends_on:
      - db
    volumes:
      - .:/app
      - /app/node_modules

  db:
    image: postgres:16
    environment:
      POSTGRES_USER: user
      POSTGRES_PASSWORD: password
      POSTGRES_DB: mydb
    ports:
      - "5432:5432"
    volumes:
      - pgdata:/var/lib/postgresql/data

volumes:
  pgdata:

基本的なコマンド

# すべてのサービスを起動
docker compose up -d

# ログの確認
docker compose logs -f

# すべてのサービスを停止
docker compose down

# ボリュームも含めて削除
docker compose down -v

技術メモ:.dockerignoreファイルの設定

Dockerイメージをビルドする際、不要なファイルがイメージに含まれるとサイズが増大し、ビルド時間も長くなります。.dockerignoreファイルを作成して、ビルドコンテキストから除外するファイルを指定しましょう。

実際に手を動かしてみましょう。プロジェクトルートに以下のような.dockerignoreを作成します。

node_modules
npm-debug.log
.git
.gitignore
.env
.env.local
dist
coverage
README.md

特にnode_modulesディレクトリは容量が大きいため、除外しないとビルド時間が大幅に増加します。DockerfileのCOPY . .で不要なファイルがコピーされるのを防ぐ役割もあります。

また、.envファイルを除外することで、環境変数(APIキーやデータベースの接続情報など)がイメージに含まれるのを防げます。Docker Composeのenvironmentセクションや--env-fileオプションで環境変数を渡す方法が安全です。

Docker学習のロードマップ

ステップ1:基本概念を理解する(目安:3〜5日)

コンテナ、イメージ、レジストリといったDockerの基本概念と、基本的なコマンド(runpsstoprm)を学びます。

ステップ2:Dockerfileを書く(目安:1週間)

自分のアプリケーションをコンテナ化するDockerfileを作成します。ベースイメージの選定、レイヤーキャッシュ、マルチステージビルドを学びましょう。

ステップ3:Docker Composeを使う(目安:1週間)

複数コンテナの管理を学びます。アプリ + データベース + キャッシュの構成をdocker-compose.ymlで定義する練習をしましょう。

ステップ4:実際のプロジェクトに導入する(目安:1〜2週間)

自分の開発プロジェクトにDockerを導入します。チームでの利用を想定して、.dockerignoreの設定やCIでのDocker利用も学びましょう。

ステップ5:本番運用の知識を広げる

Dockerの基礎を押さえたら、Kubernetesやクラウドのコンテナサービス(AWS ECS、Google Cloud Run等)に学習を広げることで、インフラエンジニアとしてのスキルを高められます。

Dockerを使う際の注意点

セキュリティ

  • 公式イメージや信頼できる組織が公開しているイメージを使う
  • 不要なパッケージを含めない
  • rootユーザーでの実行を避け、非rootユーザーを指定する

ストレージ

コンテナは基本的にステートレス(状態を持たない)です。コンテナを削除するとデータも消えるため、永続化が必要なデータはボリュームを使って管理します。

リソース管理

開発マシンで多くのコンテナを動かすとCPUやメモリを消費します。不要なコンテナやイメージは定期的に削除しましょう。

# 不要なリソースを一括削除
docker system prune

よくある質問(FAQ)

Q. Dockerは個人開発でも使うべきですか?

A. 個人開発でも有用です。特に、複数のプロジェクトで異なるバージョンのデータベースやランタイムを使い分ける場合、Dockerでプロジェクトごとに環境を分離できます。ポートフォリオとしても「Docker対応」は技術力のアピールになります。

Q. Dockerの学習にLinuxの知識は必要ですか?

A. 基本的なLinuxコマンド(cdlscatgrep等)の知識があると学習がスムーズです。DockerのコンテナはLinuxベースで動作するため、コンテナ内でのトラブルシューティングにLinux知識が役立ちます。

Q. Docker DesktopとDocker Engineの違いは何ですか?

A. Docker Engineはコンテナの実行エンジン本体です。Docker DesktopはDocker Engineに加え、GUI管理画面やDocker Compose、Kubernetesなどをまとめたデスクトップアプリケーションです。Windows/macOSではDocker Desktopの利用が一般的です。

Q. DockerとKubernetesの違いは何ですか?

A. Dockerは個々のコンテナの作成・実行を担当するツールです。Kubernetesは複数のコンテナを大規模に運用・管理するためのオーケストレーションツールです。まずDockerの基礎を学び、その後Kubernetesに進むのが一般的な学習順序です。

Q. WindowsでもDockerは使えますか?

A. はい。Docker Desktopをインストールすればwindowsでも利用可能です。WSL 2(Windows Subsystem for Linux 2)と連携して動作します。

PR楽天ブックス プログラミング書籍楽天ブックスでプログラミング入門書を探す公式サイトで詳細を見る※本コンテンツはアフィリエイト広告を含みます。表示内容は各社公式サイトをご確認ください。

まとめ

Dockerは、アプリケーションの実行環境をコンテナとしてパッケージ化し、環境差異の問題を解消するツールです。環境構築の効率化、チーム開発での環境統一、本番環境との一致など、多くのメリットがあります。

学習の第一歩としては、Docker Desktopをインストールし、公式イメージを使ったコンテナの起動から始めてみましょう。基本的なコマンドに慣れたら、Dockerfileの作成やDocker Composeによる複数コンテナの管理へと進めるのがおすすめです。

あわせて読みたい

あなたに合う次の選び方を見る

30秒で診断してみる
#Docker#コンテナ#開発環境#インフラ#入門

関連記事