5
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

PHP 5.4環境をDockerで作る

Posted at

概要

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

使用するDockerイメージ

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

FROM php:5.4-apache

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の前に認証されていない公開鍵を取得していきます。

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の前に、リンク切れになってしまったライブラリの向き先をアーカイブに変更します。

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になってしまいました。

公式の例
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の部分が下記のようになってしまう。

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

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

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

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

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

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

DocumentRoot ${APACHE_DOCUMENT_ROOT}

Dockerfile

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

サンプル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

Hello symfony 1.4

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

symfony1.png

参考記事

大変助かりました🙇

5
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?