🐕
Composerを旧バージョンのPHP+Docker越しに実行
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 /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