Dockerは、アプリケーションをコンテナと呼ばれる軽量な仮想環境にまとめて動かすツールです。「自分のPCでは動くのに本番では動かない」といった環境差異の問題を解決し、開発・テスト・本番の一貫性を実現します。本記事では、Dockerの基本概念から実際の使い方までを3分で押さえられるよう、要点をまとめました。
Dockerとは
Dockerは、OS上に独立した実行環境(コンテナ)を作り、その中でアプリを動かす仕組みです。仮想マシン(VM)と似ていますが、OSカーネルを共有するため圧倒的に軽量・高速に起動します。Webアプリ・DB・バッチ処理など、ほぼあらゆるソフトウェアをコンテナ化できます。
3つの基本概念
- イメージ(Image):コンテナの「設計図」。アプリ本体・依存ライブラリ・設定が固められた読み取り専用のテンプレート
- コンテナ(Container):イメージから起動した「実行中のインスタンス」。何度でも起動・停止・破棄できる
- Dockerfile:イメージを作るための「レシピ」。ベースイメージ・ファイルコピー・実行コマンドなどを記述するテキストファイル
インストールと動作確認
Mac/Windowsなら「Docker Desktop」または軽量代替の「OrbStack」、Linuxならdocker-ceをインストールします。完了したら次のコマンドで動作確認します。
docker --version
docker run hello-world
hello-worldイメージが自動でダウンロードされ、コンテナとして起動・終了すれば成功です。
よく使うコマンド
# イメージを取得
docker pull nginx:latest
# コンテナを起動(バックグラウンド、80→8080にポート転送)
docker run -d -p 8080:80 --name web nginx
# 稼働中のコンテナ一覧
docker ps
# コンテナのログ確認
docker logs web
# コンテナ内でシェルを起動
docker exec -it web bash
# 停止・削除
docker stop web && docker rm web
Dockerfileでオリジナルイメージを作る
Node.jsアプリをコンテナ化する最小例です。プロジェクトルートにDockerfileを置きます。
FROM node:20-alpine
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY . .
EXPOSE 3000
CMD ["npm", "start"]
# ビルドして起動
docker build -t myapp .
docker run -p 3000:3000 myapp
複数コンテナはDocker Composeで
Webアプリ+DBのように複数コンテナを連携させる場合は、docker-compose.ymlでまとめて管理するのが定番です。
services:
app:
build: .
ports: ["3000:3000"]
depends_on: [db]
db:
image: postgres:16
environment:
POSTGRES_PASSWORD: secret
docker compose up -d # まとめて起動
docker compose down # まとめて停止・削除
使うときの注意点
- コンテナは原則「使い捨て」。永続データはボリュームに保存する
- イメージは肥大化しがち。Alpineベース・マルチステージビルドで軽量化を意識
- 本番運用ではKubernetes・ECSなどのオーケストレーションと組み合わせるのが一般的
まとめ
Dockerを使えば、誰のマシンでも同じように動くアプリを簡単に作れるようになります。まずはdocker runでNginxやPostgreSQLを動かしてみて、慣れたら自分のアプリをDockerfile化していくのが学習の王道です。コンテナ思考が身につけば、CI/CDやクラウド運用がぐっと近づきます。