DockerでのLAMP環境構築手順(Amazon Linux 2/PHP8.1(Laravel9)) ④Composerのインストール(全8回)

# はじめに

かくかくしかじかで、Docker で Amazon Linux 2 ベースの LAMP 環境を構築する機会がありましたので、手順についてアウトプットします。
![スクリーンショット 2022-11-30 23.31.45.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/527226/930bcd24-38e9-316e-bebd-cef83aea5924.png)

全 8 回を予定しています。

[① 作成する環境の確認](https://qiita.com/ryamate/items/47183e1ffd4843ef18fa)
[② Apache の導入](https://qiita.com/ryamate/items/e5ca19aece61717b6a01)
[③ PHP 8.1 系のインストール](https://qiita.com/ryamate/items/7a38eb11d64d504a7a22)
**④ Composer のインストール**
[⑤ timezone, locale の設定](https://qiita.com/ryamate/items/d148bcdbdb27c5b80ad8)
[⑥ docker-compose.yml の作成（MySQL の導入）](https://qiita.com/ryamate/items/ac52b152757141f443e3)
[⑦ Laravel 9 系のインストール](https://qiita.com/ryamate/items/79875e22906cfb51af67)
[⑧ Apache の設定ファイルの追加](https://qiita.com/ryamate/items/18747f5241df487ea497)

今回は、 **④ Composer のインストール** についてです。

## 環境

以下の Docker 環境を構築します。

- Amazon Linux 2
- Apache 2.4
- MySQL 8.0.28
- PHP 8.1.x
- Laravel 9.x

## 目次

[1. Docker コンテナでのシェル実行の準備](#1-docker-コンテナでのシェル実行の準備)
[2. Composer のインストール](#2-composer-のインストール)
　[2-1. Composer のインストール（不採用）](#2-1-composer-のインストール不採用)
　[2-2. Dockerfile の編集](#2-2-dockerfile-の編集)
[3. Docker イメージとコンテナの再作成](#3-docker-イメージとコンテナの再作成)

# 1. Docker コンテナでのシェル実行の準備

Docker コンテナでのシェルの実行するため、コンテナの中に入ります。

## 1-1. Docker コンテナでのシェルの実行

Docker コンテナの中に入ります。

```bash
docker container exec -it advent-calendar /bin/bash
```

以降、シェルを Docker コンテナで実行します。


## 1-2. Dockerfile の確認

前回（③ PHP 8.1 系のインストール）までの Dockerfile を確認します。

```docker: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 のインストールしようと実行した際は、下記のコマンドを実行しました。

```bash
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');"
```

https://getcomposer.org/download/

このコマンドを Dockerfile に記述するとしたら、下記のようになります。

```docker:infra/docker/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 の編集はその方法で記述しました。

https://github.com/composer/docker

## 2-2. Dockerfile の編集

Dockerfile を編集します。なお、 **Dockerfile** を **infra/docker/php** ディレクトリを作成し、移動させました。


```docker:infra/docker/php/Dockerfile
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 の編集は、以下のリポジトリを参考にしました。

https://github.com/ucan-lab/docker-laravel-apache

https://qiita.com/ucan-lab/items/38cd04cee1f3f9e024b9

※ ディレクトリの階層も参考にしています


# 3. Docker イメージとコンテナの再作成

Docker イメージとコンテナの再作成して、Composer のインストール成功の確認をします。

## 3-1. Docker イメージとコンテナの再作成

Docker コンテナを削除します。

```bash
docker container rm -f advent-calendar
```

Docker コンテナを作成・起動する。

※ Dockerfile を **infra/docker/php** ディレクトリに移動させたので、以下を実行するときは階層を移動します

```bash
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 コンテナの中に入ります。

```bash
docker container exec -it advent-calendar /bin/bash
```

Composer のバージョンを確認します。

```bash
composer -V
```

```bash:実行時ログ
# 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 の設定](https://qiita.com/ryamate/items/d148bcdbdb27c5b80ad8)** の手順です。

ありがとうございました。

## 参考にしたサイト

https://getcomposer.org/download/

https://github.com/ucan-lab/docker-laravel-apache

https://qiita.com/ucan-lab/items/38cd04cee1f3f9e024b9