Dockerfile で 公式 PHP イメージに Composer を簡単にインストールする方法

はじめに

以前に下記投稿で Dockerfile を使って composer を自動インストールする方法をご紹介しました。

コード量が多い点が気になっていたのですが、なんとたった3行の追記でインストールできる方法がわかりました。

今日は Dockerfile を使って 公式PHP イメージに Composer を簡単にインストールする方法をご紹介します。

Docker
19.03.1
php-extension-installer
1.1.21
PHP
7.4.19
目次
  1. 下準備
  2. Dockerfile の書き方
  3. おわりに

1. 下準備

今回のファイル構成は以下の通りです。

/path/to/my-project/
  ├ docker/
  │  ├ myapp-web/
  │  │  └ Dockerfile
  │  │
  │  └ docker-compose.yml
  │
  └ html/

docker-compose.yml は下記のようにしています。

/docker/docker-compose.yml
version: "3"

services:
  myapp-web:
    container_name: myapp-web
    # ./myapp-web/Dockerfile でイメージをビルド
    build:
      context: ./myapp-web
      dockerfile: Dockerfile
    # 80 番ポートを割り当て
    ports:
      - "80:80"
    # ローカル の ./html フォルダを
    # コンテナの /var/www/html にマウント
    volumes:
      - "../html:/var/www/html"

2. Dockerfile の書き方

下記のように install-php-extensions を使うことで composer を簡単にインストールできます。

/docker/myapp-web/Dockerfile
FROM php:7.4-apache

ADD https://github.com/mlocati/docker-php-extension-installer/releases/latest/download/install-php-extensions /usr/local/bin/

RUN apt-get update \
    && chmod +x /usr/local/bin/install-php-extensions && sync \
    && install-php-extensions @composer

Dockerfile の内容について簡単にご説明します。

ADD を使って install-php-extensions を /usr/local/bin/ にダウンロードします。

apt-get update は今回に関しては省略して差し支えありません。

chmod +x のコマンドではダウンロードした install-php-extensions ファイルに実行権限を付与しています。
(パーミッション が 600 から 711 になります)

そして install-php-extensions @composer で Composer 最新版をインストールです。下記のようにバージョンを指定することもできます。

&& install-php-extensions @composer-1.10.19

下記 install-php-extensions の README で Docker イメージからコピーする方法も紹介されています。
よりシンプルに書けますが、install-php-extensions の Docker イメージが残るのでご注意ください。

以上で完了です。

あとは下記コマンドなどでコンテナをビルドして動作確認を行っていただければと思います。

myapp_myapp-web:latest イメージが既にある場合は事前に削除してください。
(docker images コマンドなどで確認できます)

$ cd /path/to/my-project/docker
$ docker-compose -p myapp up -d
$ docker exec -it myapp-web bash

root@123456789abc:/var/www/html# composer -v | grep "Composer version"

3. おわりに

今回ご紹介した php-extension-installer は Docker Hub の PHP のページで見つけました。
(見出し「PHP Core Extensions」のところです)

やはり公式ドキュメントを読むことは大切ですね。

なかなかじっくりと読む時間は取れないかもしれませんが、隙間時間で少しずつでも読み進めると、今回のように有益な情報が得られたりするのでおススメです。

英語も継続していると徐々に慣れてきますよ。