PHP入門:Dockerでcomposerの実行環境を構築する

スポンサーリンク
PHP入門:Dockerでcomposerの実行環境を構築する 環境構築
PHP入門:Dockerでcomposerの実行環境を構築する
この記事は約11分で読めます。
よっしー
よっしー

こんにちは。よっしーです(^^)

今日は、PHPにおけるComposerの実行環境をDockerで構築する方法についてご紹介します。

スポンサーリンク

背景

PHPにおけるComposerの実行環境をDockerで構築する方法について調査する機会があったので、そのときの内容を備忘として残しました。

今回作成したファイルは下記のGitHUBにあります。

概要

Composer(コンポーザー)は、PHPの依存関係管理ツールであり、PHPプロジェクトで外部のライブラリやパッケージを簡単に統合できるようにするためのツールです。以下はComposerの主な特徴と概要です。

  1. 依存関係管理:
    Composerは、プロジェクトが他のライブラリやパッケージに依存する場合、それらの依存関係を管理します。これにより、開発者は手動でライブラリをダウンロードして統合する手間を省くことができます。
  2. 自動オートローディング:
    Composerは、自動的にオートローディングのクラスマップを生成します。これにより、手動でクラスを読み込む必要がなくなり、プロジェクト内でクラスを簡単に利用できます。
  3. パッケージ管理:
    Composerは、Packagistと呼ばれるオンラインのパッケージリポジトリを使用して、PHPのライブラリやパッケージを検索・インストールできます。Packagistに登録された数多くのパッケージが利用可能で、これらを簡単にプロジェクトに統合できます。
  4. コマンドラインツール:
    Composerはコマンドラインツールとして提供され、シェルやコマンドプロンプトを介して使用されます。これにより、依存関係のインストール、アップデート、オートローディングの生成などがコマンドで簡単に実行できます。
  5. composer.jsonファイル:
    プロジェクトのルートディレクトリには、依存関係の情報や設定が記述された composer.json ファイルが存在します。このファイルには、必要なパッケージ、バージョン、スクリプトなどの情報が含まれています。
  6. グローバルインストールとローカルインストール:
    Composerは、プロジェクトごとにローカルにインストールされたり、システム全体でグローバルにインストールされたりします。ローカルインストールでは、プロジェクトごとに異なる依存関係を管理できます。

ComposerはPHPコミュニティで幅広く利用され、PHPプロジェクトの開発やメンテナンスを効率的に行うための重要なツールとなっています。

構成ファイル一覧

下記のファイルを用意します。各ファイルの内容は各セクションに記載しています。

        new file:   Makefile
        new file:   compose.yml
        new file:   php/Dockerfile

php/Dockerfile

FROM php:8.2-cli

# composerのインストール
COPY --from=composer:2.6.6 /usr/bin/composer /usr/bin/composer

compose.yml

version: '3.8'

services:

  php-cmd:
    build: ./php
    container_name: php-cmd
    volumes:
        - ./php/src:/work
    working_dir: /work

Makefile

SHELL = /bin/bash
WOKR_DIR = ./
.DEFAULT_GOAL := help

# コンテナの状態
.PHONY: ps
ps:
	cd $(WOKR_DIR) \
	&& docker compose ps

# アプリのビルド
.PHONY: build
build:
	cd $(WOKR_DIR) \
	&& docker compose build

# アプリの起動
.PHONY: up
up:
	cd $(WOKR_DIR) \
	&& docker compose up -d

# アプリの停止
.PHONY: down
down:
	cd $(WOKR_DIR) \
	&& docker compose down

# コンテナの削除
.PHONY: clean
clean:
	cd $(WOKR_DIR) \
	&& docker compose down --rmi all --volumes --remove-orphans

# PHPコンテナへのログイン
.PHONY: login
login:
	cd $(WOKR_DIR) \
	&& docker compose run --rm -it php-cmd bash

# help
.PHONY: help
help:
	@grep -B 2 -E '^[a-zA-Z_-]+:' Makefile \
	| grep -v '.PHONY' \
    | grep -v -E '^\s*$$' \
	| tr '\n' ',' \
	| sed 's/--,/\n/g' \
	| awk -F, '{printf "%-20s %s\n", $$2, $$1}'

php/Dockerfile

FROM php:8.2-cli

# composerのインストール
COPY --from=composer:2.6.6 /usr/bin/composer /usr/bin/composer

動作確認

下記のコマンドを実行します。

make build

make login

PHPのコンテナにログインできたら下記のコマンドを実行します。

# PHPコンテナ内でPHPのバージョン確認
php --version

# PHPコンテナ内でComposerのバージョン確認
composer --version

下記のような実行結果になっていれば成功です。

root@0ebdaea265e3:/work# php --version
PHP 8.2.14 (cli) (built: Dec 27 2023 22:46:42) (NTS)
Copyright (c) The PHP Group
Zend Engine v4.2.14, Copyright (c) Zend Technologies
root@0ebdaea265e3:/work# compo
compopt   composer  
root@0ebdaea265e3:/work# composer --version
Composer version 2.6.6 2023-12-08 18:32:26

解説

php/Dockerfile

このコードは、Dockerfileと呼ばれるもので、Dockerコンテナのビルドに使用されます。以下はこのDockerfileの解説です。

  1. FROM php:8.2-cli:
  • この行は、ベースイメージとして公式のPHPイメージを使用することを示しています。
  • 8.2-cliはPHPのバージョン8.2をコマンドラインインターフェース(CLI)向けに使用することを指定しています。
  1. COPY --from=composer:2.6.6 /usr/bin/composer /usr/bin/composer:
  • この行は、別のコンテナ(composer:2.6.6として指定されています)から/usr/bin/composerをコピーしています。
  • --from=composer:2.6.6は、composer:2.6.6という名前の別のコンテナイメージからのコピーを示しています。
  • /usr/bin/composerはコピー元のコンテナ内のComposerバイナリの場所です。
  • /usr/bin/composerは、コピー先のコンテナ内でのComposerバイナリの配置先です。

このDockerfileは、PHP 8.2のCLI向けのベースイメージを作成し、その中にComposerのバイナリを含めるようになっています。Dockerを使用することで、環境の構築や依存関係の管理をコンテナ単位で行い、開発・デプロイの一貫性を確保することができます。

compose.yml

提供されたコードは、Docker Composeファイルで、複数のDockerコンテナを定義しています。以下は、このDocker Composeファイルの解説です。

  1. version: '3.8':
  • このファイルが使用するDocker Composeファイルフォーマットのバージョンを指定しています。ここでは3.8が指定されています。
  1. services::
  • ここからが各サービス(コンテナ)の定義です。
  1. php-cmd::
  • これはサービス(コンテナ)の名前で、ここでは”php-cmd”と呼ばれています。
  1. build: ./php:
  • ./phpディレクトリ内にあるDockerイメージをビルドすることを指定しています。phpディレクトリには別途Dockerfileが存在していると仮定されています。
  1. container_name: php-cmd:
  • 生成されるコンテナの名前を”php-cmd”に指定しています。
  1. volumes: - ./php/src:/work:
  • ローカルの./php/srcディレクトリをコンテナ内の/workディレクトリにマウントしています。これにより、ホストとコンテナ間でファイルの変更が即座に反映されます。
  1. working_dir: /work:
  • コンテナ内の作業ディレクトリを/workに設定しています。これは、コンテナが実行されるときにデフォルトで移動するディレクトリを指定します。

このDocker Composeファイルは、”php-cmd”という名前のサービスを定義し、それが./phpディレクトリ内のDockerイメージをビルドして生成されるコンテナです。また、ホストの./php/srcディレクトリをコンテナ内の/workディレクトリにマウントし、作業ディレクトリを/workに設定しています。これにより、ホストとコンテナ間でファイルの同期が行われ、効果的な開発環境を提供します。

Makefile

このMakefileは、Dockerコマンドを簡略化し、Docker Composeを使用したプロジェクトの管理を支援するためのタスクを提供します。以下は各タスクの機能と解説です。

  1. 変数定義:
   SHELL = /bin/bash
   WORK_DIR = ./
   .DEFAULT_GOAL := help
  • SHELL: Makefile内で使用するシェルを指定します。
  • WORK_DIR: Makefileが作業するディレクトリを指定します。
  • .DEFAULT_GOAL: メイクファイルが引数なしで呼び出された場合に実行されるターゲットを指定します。
  1. ターゲット ps:
   .PHONY: ps
   ps:
       cd $(WORK_DIR) \
       && docker compose ps
  • make psを実行すると、Docker Composeで定義されたコンテナの状態を表示します。
  1. ターゲット build:
   .PHONY: build
   build:
       cd $(WORK_DIR) \
       && docker compose build
  • make buildを実行すると、Docker Composeで定義されたコンテナをビルドします。
  1. ターゲット up:
   .PHONY: up
   up:
       cd $(WORK_DIR) \
       && docker compose up -d
  • make upを実行すると、Docker Composeで定義されたコンテナをデタッチドモードで起動します。
  1. ターゲット down:
   .PHONY: down
   down:
       cd $(WORK_DIR) \
       && docker compose down
  • make downを実行すると、Docker Composeで定義されたコンテナを停止します。
  1. ターゲット clean:
   .PHONY: clean
   clean:
       cd $(WORK_DIR) \
       && docker compose down --rmi all --volumes --remove-orphans
  • make cleanを実行すると、Docker Composeで定義されたコンテナを停止し、関連するイメージとボリュームを削除します。
  1. ターゲット login:
   .PHONY: login
   login:
       cd $(WORK_DIR) \
       && docker compose run --rm -it php-cmd bash
  • make loginを実行すると、Docker Composeで定義されたphp-cmdサービスに対してbashシェルでログインします。
  1. ターゲット help:
   .PHONY: help
   help:
       @grep -B 2 -E '^[a-zA-Z_-]+:' Makefile \
       | grep -v '.PHONY' \
       | grep -v -E '^\s*$$' \
       | tr '\n' ',' \
       | sed 's/--,/\n/g' \
       | awk -F, '{printf "%-20s %s\n", $$2, $$1}'
  • make helpを実行すると、Makefile内で定義された各ターゲットとその説明が表示されます。

おわりに

今日は、PHPにおけるComposerの実行環境をDockerで構築する方法についてご紹介しました。

よっしー
よっしー

何か質問や相談があれば、コメントをお願いします。また、エンジニア案件の相談にも随時対応していますので、お気軽にお問い合わせください。

それでは、また明日お会いしましょう(^^)

コメント

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