関連記事: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をインストールするのが最も手軽です。
- Docker公式サイトからDocker Desktopをダウンロード
- インストーラーを実行
- インストール完了後、ターミナルで動作確認
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のポイント
- ベースイメージの選択:
slimやalpineタグの軽量イメージを選ぶと、イメージサイズを削減できる - レイヤーキャッシュの活用:変更頻度の低いファイル(package.json等)を先にコピーすることで、ビルド時間を短縮できる
- マルチステージビルド:ビルドに必要なツールと実行に必要なものを分離し、最終イメージを軽量化できる
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の基本概念と、基本的なコマンド(run、ps、stop、rm)を学びます。
ステップ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コマンド(cd、ls、cat、grep等)の知識があると学習がスムーズです。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)と連携して動作します。
まとめ
Dockerは、アプリケーションの実行環境をコンテナとしてパッケージ化し、環境差異の問題を解消するツールです。環境構築の効率化、チーム開発での環境統一、本番環境との一致など、多くのメリットがあります。
学習の第一歩としては、Docker Desktopをインストールし、公式イメージを使ったコンテナの起動から始めてみましょう。基本的なコマンドに慣れたら、Dockerfileの作成やDocker Composeによる複数コンテナの管理へと進めるのがおすすめです。