PHP 5.4環境をDockerで作る

# 概要

昔使っていたsymfony 1.4 を動かそうと思い立ちDockerでPHP 5.4環境を作ったのですが、それにあたってつまづいたところを書き留めておきます。

# 使用するDockerイメージ

`php:5.4-apache`を使用します。

```dockerfile
FROM php:5.4-apache
```

https://hub.docker.com/_/php

# `apt-get update`が失敗する

## 公開鍵が認証されてない

> W: GPG error: http://****** kali-rolling InRelease: The following signatures couldn't be verified because the public key is not available: NO_PUBKEY *********

`apt-get update`をしようとすると、「公開鍵が認証されてない」というエラーが発生しました。
`apt-get update`の前に認証されていない公開鍵を取得していきます。

```dockerfile
RUN apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 04EE7237B7D453EC \
    && apt-get update \
```

### ライブラリが 404 Not Found

こちらも`apt-get update`をしようとすると、`404 Not Found`になるライブラリがありました。

> E: Failed to fetch http://*****  404  Not Found
> E: Some index files failed to download. They have been ignored, or old ones used instead.

`apt-get update`の前に、リンク切れになってしまったライブラリの向き先をアーカイブに変更します。

```dockerfile
RUN echo "deb http://archive.debian.org/debian/ stretch main" > /etc/apt/sources.list \
    && echo "deb http://archive.debian.org/debian-security stretch/updates main" >> /etc/apt/sources.list \
    && apt-get update
```

## `/etc/apache2/apache2.conf` で Syntax error

ApacheのDocumentRootを変更するために公式の手順をそのまま実行したのですが、Syntax errorになってしまいました。

```dockerfile:公式の例
ENV APACHE_DOCUMENT_ROOT /path/to/new/root
RUN sed -ri -e 's!/var/www/html!${APACHE_DOCUMENT_ROOT}!g' /etc/apache2/sites-available/*.conf
RUN sed -ri -e 's!/var/www/!${APACHE_DOCUMENT_ROOT}!g' /etc/apache2/apache2.conf /etc/apache2/conf-available/*.conf
```

上のようにすると、DocumentRootの部分が下記のようになってしまう。

```diff_conf
- <Directory /var/www/>
+ <Directory ${APACHE_DOCUMENT_ROOT}>
	AllowOverride All
	Require all granted
</Directory>

- DocumentRoot /var/www/html
+ DocumentRoot ${APACHE_DOCUMENT_ROOT}html
```

DocumentRootの行が正しく変換されていません。

```diff
ENV APACHE_DOCUMENT_ROOT /path/to/new/root
- RUN sed -ri -e 's!/var/www/html!${APACHE_DOCUMENT_ROOT}!g' /etc/apache2/sites-available/*.conf
+ RUN sed -ri -e 's!/var/www/html!${APACHE_DOCUMENT_ROOT}!g' /etc/apache2/apache2.conf /etc/apache2/sites-available/*.conf
RUN sed -ri -e 's!/var/www/!${APACHE_DOCUMENT_ROOT}!g' /etc/apache2/apache2.conf /etc/apache2/conf-available/*.conf
```

書き換えを工夫することで解決。

```conf
<Directory ${APACHE_DOCUMENT_ROOT}>
	AllowOverride All
	Require all granted
</Directory>

DocumentRoot ${APACHE_DOCUMENT_ROOT}
```

# Dockerfile

参考までDockerfile全体を記載します。

<details><summary>サンプルDockerfile</summary>

```dockerfile
FROM php:5.4-apache

RUN apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 04EE7237B7D453EC \
    && apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 648ACFD622F3D138 \
    && apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 0E98404D386FA1D9 \
    && apt-key adv --keyserver keyserver.ubuntu.com --recv-keys EF0F382A1A7B6500 \
    && apt-key adv --keyserver keyserver.ubuntu.com --recv-keys AA8E81B4331F7F50 \
    && apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 112695A0E562B32A \
    && echo "deb http://archive.debian.org/debian/ stretch main" > /etc/apt/sources.list \
    && echo "deb http://archive.debian.org/debian-security stretch/updates main" >> /etc/apt/sources.list \
    && apt-get update \
    && apt-get install -y \
        git \
        zip \
        unzip \
        libxslt1-dev \
    && apt-get clean \
    && rm -rf /var/lib/apt/lists/*

RUN docker-php-ext-install xsl

RUN pecl install apcu-4.0.11 && docker-php-ext-enable apcu

RUN a2enmod rewrite

ENV APACHE_DOCUMENT_ROOT /var/www/html/web
RUN sed -ri -e 's!/var/www/html!${APACHE_DOCUMENT_ROOT}!g' /etc/apache2/apache2.conf /etc/apache2/sites-available/*.conf
RUN sed -ri -e 's!/var/www/!${APACHE_DOCUMENT_ROOT}!g' /etc/apache2/apache2.conf /etc/apache2/conf-available/*.conf

COPY php.ini /usr/local/etc/php
```
</details>

# Hello symfony 1.4

これを表示するのに半日かかってしまいました・・・。

![symfony1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/595926/d6969207-aa8c-1b4c-e5e1-fa3aa3aeb4b6.png)

# 参考記事

大変助かりました🙇

https://bigbuddha.hatenablog.jp/entry/apt-error-no-pubkey

https://qiita.com/teriyakisan/items/e5cf7d5228dc02500562

https://toyo.hatenablog.jp/entry/2019/04/14/203722