はじめに
かくかくしかじかで、Docker で Amazon Linux 2 ベースの LAMP 環境を構築する機会がありましたので、手順についてアウトプットします。
全 8 回を予定しています。
① 作成する環境の確認
② Apache の導入
③ PHP 8.1 系のインストール
④ Composer のインストール
⑤ timezone, locale の設定
⑥ docker-compose.yml の作成(MySQL の導入)
⑦ Laravel 9 系のインストール
⑧ Apache の設定ファイルの追加
今回は、 ④ Composer のインストール についてです。
環境
以下の Docker 環境を構築します。
- Amazon Linux 2
- Apache 2.4
- MySQL 8.0.28
- PHP 8.1.x
- Laravel 9.x
目次
1. Docker コンテナでのシェル実行の準備
2. Composer のインストール
2-1. Composer のインストール(不採用)
2-2. Dockerfile の編集
3. Docker イメージとコンテナの再作成
1. Docker コンテナでのシェル実行の準備
Docker コンテナでのシェルの実行するため、コンテナの中に入ります。
1-1. Docker コンテナでのシェルの実行
Docker コンテナの中に入ります。
docker container exec -it advent-calendar /bin/bash
以降、シェルを Docker コンテナで実行します。
1-2. Dockerfile の確認
前回(③ PHP 8.1 系のインストール)までの Dockerfile を確認します。
FROM amazonlinux:2
RUN yum update -y \
&& yum install -y httpd \
vim
RUN amazon-linux-extras install -y epel
RUN yum install -y https://rpms.remirepo.net/enterprise/remi-release-7.rpm
RUN yum clean metadata \
&& yum install -y \
php81 php81-php php81-php-mbstring php81-php-pdo php81-php-xml \
php81-php-fpm php81-php-mysqlnd php81-php-gd
RUN alternatives --install /usr/bin/php php /usr/bin/php81 1
RUN echo "<?php phpinfo();" > /var/www/html/info.php
CMD [ "apachectl", "-D", "FOREGROUND" ]
2. Composer のインストール
Composer をインストールします。
2-1. Composer のインストール(不採用)
試行錯誤中、公式ドキュメントのダウンロードする方法の通り Composer のインストールしようと実行した際は、下記のコマンドを実行しました。
php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
php -r "if (hash_file('sha384', 'composer-setup.php') === '55ce33d7678c5a611085589f1f3ddf8b3c52d662cd01d4ba75c0ee0459970c2200a51f492d557530c71c15d8dba01eae') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"
php composer-setup.php
php -r "unlink('composer-setup.php');"
このコマンドを Dockerfile に記述するとしたら、下記のようになります。
FROM amazonlinux:2
# 省略
# composer のインストール
RUN php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');" \
&& php -r "if (hash_file('sha384', 'composer-setup.php') === '55ce33d7678c5a611085589f1f3ddf8b3c52d662cd01d4ba75c0ee0459970c2200a51f492d557530c71c15d8dba01eae') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;" \
&& php composer-setup.php \
&& php -r "unlink('composer-setup.php');" \
&& mv composer.phar /usr/local/bin/composer
ENV COMPOSER_ALLOW_SUPERUSER 1
CMD [ "apachectl", "-D", "FOREGROUND" ]
ただ、結局は、Docker イメージを利用する方法がありましたので、Dockerfile の編集はその方法で記述しました。
2-2. Dockerfile の編集
Dockerfile を編集します。なお、 Dockerfile を infra/docker/php ディレクトリを作成し、移動させました。
FROM amazonlinux:2
RUN yum update -y \
&& yum install -y \
vim \
httpd
RUN amazon-linux-extras install -y epel
RUN yum install -y https://rpms.remirepo.net/enterprise/remi-release-7.rpm
RUN yum clean metadata \
&& yum install -y \
php81 \
php81-php \
php81-php-mbstring \
php81-php-pdo \
php81-php-xml \
php81-php-fpm \
php81-php-mysqlnd \
php81-php-gd
RUN alternatives --install /usr/bin/php php /usr/bin/php81 1
# composer のインストール
COPY --from=composer:2 /usr/bin/composer /usr/bin/composer
ENV COMPOSER_ALLOW_SUPERUSER 1
CMD [ "apachectl", "-D", "FOREGROUND" ]
Composer のインストールについての Dockerfile の編集は、以下のリポジトリを参考にしました。
※ ディレクトリの階層も参考にしています
3. Docker イメージとコンテナの再作成
Docker イメージとコンテナの再作成して、Composer のインストール成功の確認をします。
3-1. Docker イメージとコンテナの再作成
Docker コンテナを削除します。
docker container rm -f advent-calendar
Docker コンテナを作成・起動する。
※ Dockerfile を infra/docker/php ディレクトリに移動させたので、以下を実行するときは階層を移動します
docker image build -t advent-calendar/advent-calendar:latest .
docker container run -d --name advent-calendar -p 8080:80 advent-calendar/advent-calendar:latest
3-2. Composer のインストール成功の確認
Docker コンテナの中に入ります。
docker container exec -it advent-calendar /bin/bash
Composer のバージョンを確認します。
composer -V
# r_yamate @ mbp in ~/Documents/code/advent-calendar/infra/docker/php [7:43:04]
$ docker container exec -it advent-calendar /bin/bash
bash-4.2# composer -V
Composer version 2.4.4 2022-10-27 14:39:29
Composer がインストールされていることが確認できました。
おわりに
今回は、 ④ Composer のインストール についての手順でした。
次回は、 ⑤ timezone, locale の設定 の手順です。
ありがとうございました。
参考にしたサイト