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
実践!Webアプリ開発プロジェクトの始め方
次に、実際のWebアプリ開発を想定し、Nginx(Webサーバー)・PHP・PostgreSQL(DB)を連携させる、より実践的で堅牢なプロジェクトを作成します。
必須ファイルの準備
まず、プロジェクトのルートディレクトリに、以下の3つのファイルを作成します。
-
.env (環境変数ファイル) データベースのパスワードなど、Gitで管理したくない機密情報を記述します。
POSTGRES_PASSWORD=your_secure_password_here -
.dockerignore (ビルド除外ファイル) 不要なファイルをイメージに含めないように設定し、ビルド時間の短縮とセキュリティを向上させます。
.git
.gitignore
node_modules
vendor -
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
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:
docker compose up -dで環境を立ち上げる
全てのファイルの準備が整いました。ターミナルで以下のコマンドを実行してください。
docker compose up -d --build
【超高頻度】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などの基本コマンドを使いこなす
この記事をここまで読み進めたあなたは、もうコマンドをただコピー&ペーストするだけの状態ではありません。その一行が持つ意味を理解し、エラーに立ち向かうための「地図」を手に入れたはずです。
この記事をブックマークし、開発中の「チートシート」として活用してください。環境構築という土台がしっかりすれば、その上にどんな素晴らしいアプリケーションでも建てられます。
あなたのエンジニアとしての新たな一歩を、心から応援しています。

コメント