🐕

Composerを旧バージョンのPHP+Docker越しに実行

2021/06/07に公開

PHP5.6とcomposerのdockerイメージを混ぜる

本番環境のバージョンで使える最新のパッケージはどれかを探そうとしたわけだが、
ちょっとPHPのバージョンが古すぎてドキュメントあさるのは厳しい。

そこでバージョンを下げてcomposerを打ってみようとしたが、
はて、どうやったらいいものか。
昔ならaptやphpenvなどで古いバージョンを用意する必要があったが、
今ならdockerでいけるか。

ちょっとやってみよう。

ヾ(・ω<)ノ" 三三三● ⅱⅲ コロコロ♪

------------------- ↓ 本題はここから ↓-------------------

PHP5.6とcomposerを混ぜてビルド

今回はdocker imageを混ぜるので、
Dockerfileを作ってイメージをビルドする。
公式のイメージから以下のタグを選択

Docker image Tag Name
php 5.6.40-cli
composer latest
touch Dockerfile   # 下記Dockerfileを記述

Dockerfileを作成

Dockerfile
FROM php:5.6.40-cli
WORKDIR /usr/src/data
COPY --from=composer:latest /usr/bin/composer /usr/bin/composer # composer:latestイメージを別途ビルドしてcomposerバイナリをコピー
RUN apt update
RUN apt-get -y install sudo git libzip-dev
RUN docker-php-ext-install zip

phpinfoを実行

mkdir ~/php_data
echo "<?php phpinfo();" >> ~/php_data/phpinfo.php
docker build . -t php-cli:5.6
docker run -it --rm -v ~/php_data:/usr/src/data -t php-cli:5.6 php phpinfo.php

(゜-゜) うーん
コマンド長くなるしdocker-composeも書くか。
User, Group指定もいるしなぁ

docker-composeによる実行

touch docker-compose.yml # 下記docker-compose.ymlを記述

docker-compose.ymlを作成

UserIdを確認
id
  uid=1000(dozo) gid=1000(dozo) 
docker-compose.yml
docker-compose.yml
services:
  php5.6:
    container_name: php-cli
    deploy:
      replicas: 1
      restart_policy:
        condition: any
    image: php-cli:5.6
    user: '1000:1000'
    volumes:
    - ~/php_data:/usr/src/data
    working_dir: /usr/src/data
version: '3'

docker-compose経由で実行

docker-compose run --rm php5.6 php -v
docker-compose run --rm php5.6 composer -V

( ・∀・)σ ヨシ!
php, composer両方とも実行できてるな

composerを実行

docker-compose run --rm php5.6 composer init
[Enter連打]

あとは実際にrequireすればいいだけかな。
(後書に記載)
今回はdockerでゴニョゴニョしたけど、
目的を達成するだけなら別の方法があった。
それは別記事にしよう。

------------------- ↓ 後書はここから ↓-------------------

使用できるバージョンを確認

docker-compose run --rm php5.6 composer require doctrine/migrations
  - Locking doctrine/migrations (v1.5.0)

・・・なるほど。

最新は3.1.2(令和3年5月21日現在)。
とりあえず早々にPHP7.4にアップするのが急務だということが分かった。

Discussion