【脱・Docker迷子】もう挫折しない!使い方を体系的に学ぶ、完全攻略マップ

未分類

docker compose up -d –build

あなたはこのコマンドの意味を、自信を持って説明できますか?

Dockerの学習を始めると、Dockerfileやdocker-compose.ymlといった設定ファイル、そして数多くの専門的なコマンドの壁に突き当たります。「とりあえず記事の通りに書けば動く」けれど、なぜその記述が必要なのか、エラーが出た時にどこを修正すれば良いのか分からず、手が止まってしまった経験はありませんか?

実は、多くのエンジニアがDockerの学習で挫折するのは、コマンドや設定を「断片的な知識」として暗記しようとしてしまうからです。本当に必要なのは、それらがどう連携し、全体としてどう機能しているのかという「体系的な理解」に他なりません。

この記事は、単なるコマンドリファレンスや設定例のまとめではありません。あなたを「コピペでしか環境を作れないエンジニア」から、**「環境構築の『なぜ』を理解し、自力で問題を解決できるエンジニア」**へと変えるための、思考のロードマップです。さあ、点と点だった知識を一本の線で繋ぎ、市場価値の高い開発者への第一歩を、今ここから踏み出しましょう。

Dockerとは?5分でわかる基本のキ【結論】

Dockerの学習で多くの人がつまずくのは、最初に全体像を掴めないからです。まずは結論として、Dockerを使いこなすために最低限必要な3つの要素とその関係性を理解しましょう。

  • イメージ: アプリを動かす環境(OSやソフトウェア)を一つのパッケージに固めた**「設計図」**や「テンプレート」のこと。一度作れば、どこでも同じ環境を再現できます。

  • コンテナ: イメージという設計図から作られた、実際にアプリケーションが動く**「仮想的なパソコン」**のようなもの。一つのイメージから、いくつものコンテナを瞬時に作成可能です。

  • Dockerfile: イメージ(設計図)をどう作るかを記述する**「指示書」**です。ベースにするOSの指定や、必要なソフトウェアのインストール手順などをコードで定義します。

なぜ今、XAMPPよりDockerなのか?開発現場の”常識”となった3つの理由

かつてPHP開発の主流だったXAMPPも手軽ですが、現代のチーム開発では多くの課題があります。私自身も「自分のPCでは動くのに…」という環境差異の問題に、多くの時間を費やしました。なぜ今、多くの開発現場でDockerが選ばれるのか、その本質的な理由を3点に絞って解説します。

  • 理由1:環境の完全再現: アプリと実行環境を「イメージ」としてパッケージ化するため、「私の環境では動きます」という不毛な問題を撲滅できます。

  • 理由2:プロジェクトごとの環境分離: プロジェクトごとにPHPやDBのバージョンが違っても、「コンテナ」という独立した箱で動かすため、互いに干渉しません。

  • 理由3:設定のコード管理: Dockerfile等のテキストファイルで環境を管理するため、Gitで変更履歴を追え、チームでの共有が劇的に楽になります。私のチームでは、新人の環境構築が半日から5分に短縮されました。

Docker環境構築の3ステップ【Windows/Mac対応】

ここからは実践編です。あなたのPCにDockerを導入し、最初のコンテナを動かすまでを3ステップで解説します。

ステップ1:Docker Desktopをインストールする

まずは、DockerをPCで簡単に扱うための公式ソフト「Docker Desktop」をインストールします。Docker公式サイトからインストーラーをダウンロードし、画面の指示に従ってインストールしてください。完了後、PCの再起動が必要です。

ステップ2:WSL2を有効化する(Windowsユーザー向け)

Windowsユーザーの方は、Dockerの土台となるWSL2(Windows Subsystem for Linux 2)の有効化が必要です。もしDocker Desktopの起動時に**「WSL 2 installation is incomplete」**というエラーが出たら、管理者権限でPowerShellを開き、wsl –installコマンドを実行してPCを再起動してください。多くの場合、これで解決します。

ステップ3:動作確認!hello-worldを実行する

インストールが完了したら、ターミナル(Mac)またはPowerShell(Windows)で以下のコマンドを実行しましょう。

docker run hello-world
Hello from Docker!というメッセージが表示されたら成功です。あなたのPC上で、最初のコンテナが動き出しました。

実践!Webアプリ開発プロジェクトの始め方

次に、実際のWebアプリ開発を想定し、Nginx(Webサーバー)・PHP・PostgreSQL(DB)を連携させる、より実践的で堅牢なプロジェクトを作成します。

必須ファイルの準備

まず、プロジェクトのルートディレクトリに、以下の3つのファイルを作成します。

  1. .env (環境変数ファイル) データベースのパスワードなど、Gitで管理したくない機密情報を記述します。
    POSTGRES_PASSWORD=your_secure_password_here

  2. .dockerignore (ビルド除外ファイル) 不要なファイルをイメージに含めないように設定し、ビルド時間の短縮とセキュリティを向上させます。
    .git
    .gitignore
    node_modules
    vendor

  3. docker/nginx/default.conf (Nginx設定ファイル) NginxがPHPの要求を正しく処理できるよう、転送設定を記述します。
    server { listen 80; server_name _; root /var/www/html/public; # Laravelなどを想定しpublicをルートに index index.php index.html; location / { try_files $uri /index.php?$query_string; } location ~ \.php$ { include fastcgi_params; fastcgi_pass php:9000; # phpサービスのコンテナへ転送 fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name; } }

Dockerfileの書き方:PHP実行環境の設計図

次に、PostgreSQLと連携可能なPHP環境の設計図となるDockerfileを作成します。

# ベースイメージを指定
FROM php:8.2-fpm

# 作業ディレクトリを統一
WORKDIR /var/www/html

# 必要なライブラリとPHP拡張(PostgreSQL用)をインストール
RUN apt-get update && apt-get install -y \
    libpq-dev \
    git \
    zip \
    unzip \
    && docker-php-ext-install pdo_pgsql mbstring \
    && rm -rf /var/lib/apt/lists/*

# アプリケーションのコードをコンテナ内にコピー
COPY . /var/www/html
ポイントは、pdo_mysqlではなく**pdo_pgsql**と、その依存ライブラリlibpq-devをインストールしている点です。

docker-compose.ymlの書き方:複数コンテナの連携

最後に、3つのコンテナを連携させる組立説明書、docker-compose.ymlをより堅牢な設定で作成します。

services:
  web:
    image: nginx:alpine
    restart: unless-stopped
    ports:
      - "8080:80"
    volumes:
      - ./src:/var/www/html:ro
      - ./docker/nginx/default.conf:/etc/nginx/conf.d/default.conf:ro
    depends_on:
      - php
    logging:
      driver: "json-file"
      options:
        max-size: "10m"
        max-file: "3"

  php:
    build: .
    restart: unless-stopped
    volumes:
      - ./src:/var/www/html
    depends_on:
      db:
        condition: service_healthy

  db:
    image: postgres:16-alpine
    restart: unless-stopped
    environment:
      POSTGRES_USER: myuser
      POSTGRES_PASSWORD: ${POSTGRES_PASSWORD} # .envファイルから読み込み
      POSTGRES_DB: app
    volumes:
      - db_data:/var/lib/postgresql/data
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U $${POSTGRES_USER}"]
      interval: 5s
      timeout: 5s
      retries: 10

volumes:
  db_data:
各サービスにrestart: unless-stoppedを追加し、予期せぬ停止からの自動復旧を可能に。また、phpサービスがdbサービスのhealthcheckを待つようにdepends_onを設定し、起動順序を制御して安定性を高めています。

docker compose up -dで環境を立ち上げる

全てのファイルの準備が整いました。ターミナルで以下のコマンドを実行してください。

docker compose up -d --build
たったこれだけで、あなたのPC上に、安全で堅牢なWebアプリケーション開発環境が構築されます。

【超高頻度】Docker実践コマンド チートシート

環境ができた後は、日々の開発で使うコマンドに慣れましょう。ここでは、私が現場で「これだけは絶対に使う」と断言できるコマンドを厳選しました。

基本操作:起動・停止・再構築

  • docker compose up -d **環境をバックグラウンドで起動する。**開発を始める時の必須コマンド。

  • docker compose down **環境を停止・削除する。**作業を終える時に実行。

  • docker compose up -d –build Dockerfileを再構築して起動する。Dockerfileを編集した後はこのコマンドで。

状態確認・デバッグ

  • docker compose ps **コンテナの状態一覧を表示する。**まず最初に状況を確認するのに使います。

  • docker compose logs -f [サービス名] **コンテナのログをリアルタイムで表示する。**エラー解決の最も強力な手がかりです。

  • docker compose exec [サービス名] bash **起動中のコンテナの内部に入る。**ファイルを確認したり、コマンドを実行したりできます。

よくある質問(FAQ)

Q. Dockerfileとdocker-compose.ymlの違いは?

A. Dockerfileは「単一コンテナの設計図」、**docker-compose.ymlは「複数コンテナを連携させる組立説明書」**です。Dockerfileで部品を作り、docker-compose.ymlで製品を組み立てるイメージです。

Q. docker-compose(ハイフンあり)とdocker compose(スペース)は何が違うのですか?

A. 現在はdocker compose(スペース)を使いましょう。 ハイフンありのdocker-composeは古いV1コマンドで、2023年6月に公式サポートが終了しています。スペース区切りのV2が現在の標準です。

まとめ

今回は、Dockerの使い方を体系的に学ぶためのロードマップを解説しました。

  • Dockerの核心は「イメージ」「コンテナ」「Dockerfile」の3要素

  • Dockerfileで部品を作り、docker-compose.ymlで製品を組み立てる

  • 日々の運用ではup, down, logs, execなどの基本コマンドを使いこなす

この記事をここまで読み進めたあなたは、もうコマンドをただコピー&ペーストするだけの状態ではありません。その一行が持つ意味を理解し、エラーに立ち向かうための「地図」を手に入れたはずです。

この記事をブックマークし、開発中の「チートシート」として活用してください。環境構築という土台がしっかりすれば、その上にどんな素晴らしいアプリケーションでも建てられます。

あなたのエンジニアとしての新たな一歩を、心から応援しています。

コメント

タイトルとURLをコピーしました