メインコンテンツへスキップ

現場視点で学ぶ Docker 入門|環境構築の悩みから解放されるための実践ガイド

··1708 文字·4 分
Web開発において、「環境構築」は避けて通れない課題です。「自分のPCでは動くのに、デプロイ先ではエラーが出る」「新メンバーのPC設定に丸一日かかる」……そんな経験はありませんか?
Dockerなしの場合とDockerありの場合の開発環境の違いを比較した図
図:Dockerなし vs Dockerありの開発環境比較

このような 「環境依存によるトラブル」 を解消し、どこでも同じように動く環境を即座に再現できる技術、それが Docker です。本記事では、Dockerの基礎から、現場で必須となる実践的な使い方までを体系的に解説します。


1. Dockerとコンテナの基本:仮想マシンとの違い
#

Dockerは 「コンテナ型仮想化」 を用いたプラットフォームです。従来の仮想マシン(VM)とは仕組みが大きく異なります。

コンテナ vs 仮想マシン (VM)
#

仮想マシンとDockerコンテナの構造比較図
図:VM と Dockerコンテナの構造比較
項目コンテナ (Docker)仮想マシン (VM)
ゲストOS不要(ホストOSを共有)必要(個別にインストール)
起動速度数秒(プロセス起動に近い)数分(OS起動が必要)
リソース消費非常に少ない多い(CPU/メモリを占有)
分離レベルプロセス単位(論理的分離)ハードウェア単位(物理的分離)

コンテナはゲストOSを丸ごと持たないため、極めて軽量かつ高速です。これにより、開発者が手軽に環境を作成・破棄できる「使い捨ての環境」が実現します。


2. Dockerの3要素:Dockerfile、イメージ、コンテナ
#

Dockerfileからイメージを作成し、コンテナとして起動する流れ図
図:Dockerfile → Image → Container の基本フロー

Dockerを理解する上で、以下の3つの関係性を「料理」に例えると分かりやすいです。

  1. Dockerfile (レシピ): イメージを作成するための「手順書」。
  2. イメージ (料理の型): 実行に必要なアプリ・設定が詰まった「設計図」。不変(Immutable)なバイナリ。
  3. コンテナ (完成した料理): イメージを実体化した「実行環境」。

3. 【実践】Dockerfile を書いてみよう
#

Dockerビルドから実行までのワークフロー図
図:Imageビルドからコンテナ実行までのワークフロー

単に用語を覚えるよりも、実際に書くのが近道です。ここでは Node.js の Web アプリを Docker 化する例を見てみましょう。

実務で使える Dockerfile (Node.js)
#

# 1. 軽量なベースイメージを選択
FROM node:20-slim

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

# 3. 依存関係の定義ファイルをコピー(キャッシュ活用のため)
COPY package*.json ./
RUN npm install --production

# 4. アプリのソースコードをコピー
COPY . .

# 5. 起動コマンドの指定
EXPOSE 3000
CMD ["node", "app.js"]

ビルドと実行
#

# イメージの作成
docker build -t my-node-app .

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

4. 現場で必須の概念:ボリュームとネットワーク
#

実際の開発では、「コンテナを消してもデータを残したい」「コンテナ同士で通信したい」という場面が必ず出てきます。

ボリューム (Volume) によるデータの永続化
#

コンテナ内のデータは、コンテナを削除すると消えてしまいます。DBのデータなどを残すには、ボリュームを使ってホストPCのディレクトリと同期(マウント)させます。

ポートマッピング (-p)
#

docker run -p 8080:3000 と指定することで、ホストの8080番へのアクセスを、コンテナ内の3000番へ転送します。これが無いと、ブラウザからコンテナにアクセスできません。


5. Docker Compose で複数コンテナを一括管理
#

実際のアプリは、Node.js だけでなく DB(PostgreSQL等)もセットで動くのが普通です。これらを一つの設定ファイルで管理するのが Docker Compose です。

# docker-compose.yml
version: '3.8'
services:
  app:
    build: .
    ports:
      - "8080:3000"
  db:
    image: postgres:15
    environment:
      POSTGRES_PASSWORD: password

docker-compose up 一発で、アプリと DB の両方が立ち上がり、互いに通信できる状態で準備されます。


6. まとめ:Docker は「環境」を「コード」にする
#

Dockerを導入することは、単にツールを増やすことではなく 「環境構築という不確実な作業を、コードによる管理(IaC)へと進化させること」 です。

  1. 環境差異による「動かない」を撲滅できる。
  2. 新メンバーのジョインコストを最小化できる。
  3. 本番環境へのデプロイが劇的に安全になる。

まずは、自分のプロジェクトを一つのDockerfileにまとめることから始めてみてください。一度その「再現性の高さ」を体験すれば、もう手動での環境構築には戻れなくなるはずです。🚀


📘 関連記事
#

著者
ゆーふー
Web開発、インフラ、AI技術に興味があるエンジニアです。日々の学びを記録しています。

関連記事

👤 運営者プロフィール

運営者プロフィール画像

ゆーふー

メガベンチャーで働く現役Webエンジニア(歴約2年)。
フロントエンドからインフラ構築、セキュリティ対策まで、実務で得た「現場のリアルな技術知見」を発信しています。