Dockerイメージビルド時にComposerをインストールする
Dockerイメージビルド時にComposerをインストールするようにします。
環境
- Windows 10 64ビット
- Ubuntu 22.04.3 LTS (WSLで起動している)
- Docker Engine 26.0.0
- Amazon Linux 2023(DockerコンテナのOS)
インストールの流れ
1. Composerインストール用のスクリプトを作成する
Composerをインストールするためのスクリプトを作成します。
このページを参考にスクリプトを作ります。
今回は install-composer.sh
という名前で保存しています。
install-composer.sh
:
#!/bin/bash
set -euxo pipefail
# 期待されるチェックサムを取得
EXPECTED_CHECKSUM="$(php -r 'copy("https://composer.github.io/installer.sig", "php://stdout");')"
# Composerのインストーラーを取得
php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
# 実際のチェックサムを生成
ACTUAL_CHECKSUM="$(php -r "echo hash_file('sha384', 'composer-setup.php');")"
# 実際のチェックサムが期待されるものと異なればエラーにする
if [ "$EXPECTED_CHECKSUM" != "$ACTUAL_CHECKSUM" ]
then
>&2 echo 'ERROR: Invalid installer checksum'
rm composer-setup.php
exit 1
fi
# Composerのバージョンを指定できるようにする
# 第2引数でバージョンを指定できるようにする
# 何も指定しなければ最新バージョンになるようにする
VERSION_OPTION=''
if [ $# == 2 ]
then
VERSION_OPTION="--version=$2"
fi
# Composerをインストールする
# バージョン指定のオプションを付ける
php composer-setup.php $VERSION_OPTION
rm composer-setup.php
# Composerのパスを指定しなくてもComposerを実行できるようにする
# 第1引数でComposerを保存するパスを指定できるようにする
COMPOSER_PATH=$1
mv composer.phar $COMPOSER_PATH
2. Dockerイメージビルド時にComposerをインストールする
Dockerイメージビルド時にComposerをインストールするようにします。
上記のスクリプト(install-composer.sh
)をイメージビルド時に実行するようにします。
Dockerfile
を作成します。install-composer.sh
と同じ場所に作成しています。
Dockerfile
:
# 今回はAmazon Linux 2023を使用する
FROM amazonlinux:2023
# Composerのインストールに必要なのでphpとunzipをインストールする
# 任意のバージョンを指定する
RUN yum -y install php8.2 unzip-6.0
# install-composer.shを任意の場所にコピーする
COPY install-composer.sh /tmp/install-composer.sh
# install-composer.shを実行する
# Composerの保存場所とバージョンを引数として指定する(Composerの保存場所はPATHに追加されていればどこでもいい)
RUN /tmp/install-composer.sh /usr/local/bin/composer 2.7.6
3. インストールの確認をする
Composerがインストールされているか確認します。
Dockerfile
と同じ場所で以下を実行します。
$ docker build . -t installed_composer
$ docker run -it --rm --name composer_verification installed_composer bash
上記のコマンドで、installed_composer
という名前のDockerイメージをビルドし、composer_verification
という名前のDockerコンテナを起動して接続しています。
コンテナ内で以下を実行します。
# composer -v
______
/ ____/___ ____ ___ ____ ____ ________ _____
/ / / __ \/ __ `__ \/ __ \/ __ \/ ___/ _ \/ ___/
/ /___/ /_/ / / / / / / /_/ / /_/ (__ ) __/ /
\____/\____/_/ /_/ /_/ .___/\____/____/\___/_/
/_/
Composer version 2.7.6 2024-05-04 23:03:15
Composerのバージョンが表示され、Composerがインストールされていることを確認できました。