【Docker × PHP5.4】DockerでPHP環境を作った時のつまずき

## 概要
担当案件の中で、PHP5.4が動く環境を準備する必要があり、準備を進める中でいくつかエラーが発生しました。
調査の中で参考にさせていただいた内容もあったので、今後のためにメモとして記録しておきます。

## 参考記事
- [PHP 5.4環境をDockerで作る](https://qiita.com/blue32a/items/f47839f83317b54cea4d)
- [Dockerでapt-get upgrade](https://qiita.com/sowd0726/items/690e3bc94cada24f2a09)
- [docker build時にapt-get updateでPackages Not Found](https://qiita.com/teriyakisan/items/e5cf7d5228dc02500562)

調査の際、上記のサイトに大変お世話になりました。
ありがとうございます！


## Dockerfile

今回はdocker-compose.ymlを使用し、指定したフォルダ内に配置しているDockerfileをビルドしています。
また、別ファイルで環境変数を管理しているため、Pathについては適宜変更してください。

最初の段階でのDockerfileは下記です。※一部省略箇所あり

```Dockerfile
FROM php:5.4.45-apache

RUN apt-get update
RUN apt-get install -y vim htop libpq-dev libonig-dev
RUN docker-php-ext-install mbstring mysql
RUN sed -ri -e 's!/var/www/html!${APACHE_DOCUMENT_ROOT}!g' /etc/apache2/sites-available/*.conf \
  && sed -ri -e 's!/var/www/html!${APACHE_DOCUMENT_ROOT}!g' /etc/apache2/apache2.conf /etc/apache2/conf-available/*.conf \
  && 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/php.ini
・
・
・
```

## 問題箇所
### 1. パッケージが```404 Not Found```になる
エラー発生タイミングとしては、ビルドに必要なパッケージ群をインストールしている```apt-get update```を実行した際に、```404 Not Found```になってしまいました。

```bash
8.812 Err http://httpredir.debian.org jessie/main amd64 Packages
8.812   404  Not Found
9.361 Err http://httpredir.debian.org jessie-updates/main amd64 Packages
9.361   404  Not Found
9.367 W: Failed to fetch http://security.debian.org/dists/jessie/updates/main/binary-amd64/Packages  404  Not Found [IP: 151.101.130.132 80]
9.367
9.367 W: Failed to fetch http://httpredir.debian.org/debian/dists/jessie/main/binary-amd64/Packages  404  Not Found
9.367
9.367 W: Failed to fetch http://httpredir.debian.org/debian/dists/jessie-updates/main/binary-amd64/Packages  404  Not Found
9.367
9.367 E: Some index files failed to download. They have been ignored, or old ones used instead.
------
failed to solve: process "/bin/sh -c apt-get update" did not complete successfully: exit code: 100
```

原因は、パッケージのファイルの置き場所のサイトが変更されていたためエラーが発生したようです。
なので、下記のように変更してパッケージファイルの置き場所を変更すると、エラーが解消されました。

<details open><summary>変更前</summary>

```Dockerfile
RUN apt-get update
```
</details>


<details open><summary>変更後</summary>

```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
```
</details>


### 2. ビルドプロセスが完了しない
```apt-get install```を行なった際、下記のようなエラーが表示され、Dockerビルドが中断し、ビルドプロセスが完了しませんでした。
```--force-yes```を追加して再度実行しましたが、解決せず…。

```bash
 .
 .
3.356 7 upgraded, 11 newly installed, 0 to remove and 155 not upgraded.
3.356 Need to get 9966 kB of archives.
3.356 After this operation, 37.7 MB of additional disk space will be used.
3.356 WARNING: The following packages cannot be authenticated!
3.356   libtinfo5 libncursesw5 libncurses5 libssl1.1 xxd vim-common libgpm2
3.356   libgssapi-krb5-2 libkrb5-3 libk5crypto3 libkrb5support0 htop libonig4
3.356   libonig-dev libpq5 libpq-dev vim-runtime vim
3.357 E: There are problems and -y was used without --force-yes
------
failed to solve: process "/bin/sh -c apt-get install -y vim htop libpq-dev libonig-dev" did not complete successfully: exit code: 100
```

下記の内容を追加することで、プロンプトのデフォルトの選択肢が選択できるらしく、
これでビルドプロセスが途中で止まらないようにすることができました。

```Dockerfile
RUN echo '* libraries/restart-without-asking boolean true' |  
debconf-set-selections
```

<details open><summary>変更前</summary>

```Dockerfile
RUN apt-get install -y vim htop libpq-dev libonig-dev
```
</details>


<details open><summary>変更後</summary>

```Dockerfile
RUN apt-get install -y --force-yes vim \
    && echo '* libraries/restart-without-asking boolean true' |  debconf-set-selections \
    && apt-get install -y --force-yes htop \
    && apt-get install -y --force-yes libpq-dev \
    && apt-get install -y --force-yes libonig-dev
```
</details>

## Dockerfile最終版
最終的に編集した後のDockerfileも記載しておきます。
```Dockerfile
FROM php:5.4.45-apache

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

RUN apt-get install -y --force-yes vim \
    && echo '* libraries/restart-without-asking boolean true' |  debconf-set-selections \
    && apt-get install -y --force-yes htop \
    && apt-get install -y --force-yes libpq-dev \
    && apt-get install -y --force-yes libonig-dev

RUN docker-php-ext-install mbstring mysql
RUN sed -ri -e 's!/var/www/html!${APACHE_DOCUMENT_ROOT}!g' /etc/apache2/sites-available/*.conf \
  && sed -ri -e 's!/var/www/html!${APACHE_DOCUMENT_ROOT}!g' /etc/apache2/apache2.conf /etc/apache2/conf-available/*.conf \
  && sed -ri -e 's!/var/www!${APACHE_DOCUMENT_ROOT}!g' /etc/apache2/apache2.conf /etc/apache2/conf-available/*.conf
.
.
.
```