Dockerfile で 公式 PHP イメージに Composer を簡単にインストールする方法
はじめに
以前に下記投稿で Dockerfile を使って composer を自動インストールする方法をご紹介しました。
- Docker 公式 PHP イメージに composer を導入する Dockerfile を作る / Twin Turbo Computing
- https://tt-computing.com/docker-php-composer
コード量が多い点が気になっていたのですが、なんとたった3行の追記でインストールできる方法がわかりました。
今日は Dockerfile を使って 公式PHP イメージに Composer を簡単にインストールする方法をご紹介します。
- Docker
- 19.03.1
- php-extension-installer
- 1.1.21
- PHP
- 7.4.19
1. 下準備
今回のファイル構成は以下の通りです。
/path/to/my-project/
├ docker/
│ ├ myapp-web/
│ │ └ Dockerfile
│ │
│ └ docker-compose.yml
│
└ html/
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 を簡単にインストールできます。
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
- Easy installation of PHP extensions in official PHP Docker images
(GitHub - mlocati/docker-php-extension-installer: Easily install PHP extension in Docker containers) - https://github.com/mlocati/docker-php-extension-installer#easy-installation-of-php-extensions-in-official-php-docker-images
Dockerfile の内容について簡単にご説明します。
ADD を使って install-php-extensions を /usr/local/bin/ にダウンロードします。
- ADD (Dockerfile reference | Docker Documentation)
- https://docs.docker.com/engine/reference/builder/#add
apt-get update は今回に関しては省略して差し支えありません。
chmod +x のコマンドではダウンロードした install-php-extensions ファイルに実行権限を付与しています。
(パーミッション が 600 から 711 になります)
そして install-php-extensions @composer で Composer 最新版をインストールです。下記のようにバージョンを指定することもできます。
&& install-php-extensions @composer-1.10.19
- Composer (composer.phar) versions history (Composer)
- https://getcomposer.org/download/#composer-history-caption
下記 install-php-extensions の README で Docker イメージからコピーする方法も紹介されています。
よりシンプルに書けますが、install-php-extensions の Docker イメージが残るのでご注意ください。
- Copying the script from a Docker image
(GitHub - mlocati/docker-php-extension-installer: Easily install PHP extension in Docker containers) - https://github.com/mlocati/docker-php-extension-installer#copying-the-script-from-a-docker-image
以上で完了です。
あとは下記コマンドなどでコンテナをビルドして動作確認を行っていただければと思います。
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」のところです)
- php - Docker Hub
- https://hub.docker.com/_/php
やはり公式ドキュメントを読むことは大切ですね。
なかなかじっくりと読む時間は取れないかもしれませんが、隙間時間で少しずつでも読み進めると、今回のように有益な情報が得られたりするのでおススメです。
英語も継続していると徐々に慣れてきますよ。