前提
Windows10のDocker Desktopを使ったDocker上でAlmaLinux9.0のイメージからコンテナをつくり、そのコンテナの中で「Apache2.4.54」をインストールしております。そして、「php 8.1.10」をインストールしようとしています。いまのところ、後述します方法でコンテナをつくっています!
実現したいこと
windows10(ホストOS)のブラウザ上でPHPのソースコードがそのまま表示されてしまうため、PHPをインストールし、実行できるようにしたいです!
最終目的は、AlmaLinux9.0上で、PHP8.1.10且つApache2.4.54且つphpMyAdmin 5.2.0の環境をつくりたいと考えております。
今のところ手探りで進めていますが、PHP,Apache,phpMyAdminそれぞれのインストール方法が確立した暁には、Dockerfileにすべてまとめて自動化しようと目論んでおります!
発生している問題・エラーメッセージ
ところが、PHPのインストール手順で先に進めなくなってしまったのです。
事前に準備したDockerfile
Dockerfile
1FROM almalinux:9.0 2 3RUN set -x && \ 4 dnf -y update && \ 5 dnf -y upgrade && \ 6 dnf install -y which && \ 7 dnf install -y procps && \ 8 dnf install -y epel-release && \ 9 dnf -y install pcre-devel && \ 10 dnf -y install expat-devel && \ 11 dnf -y install wget && \ 12 dnf -y install make && \ 13 dnf -y install gcc && \ 14#Apacheより先にperlのインストール 15 cd /usr/local/src/ && \ 16 wget https://www.cpan.org/src/5.0/perl-5.36.0.tar.gz && \ 17 tar zxvf perl-5.36.0.tar.gz && \ 18 cd perl-5.36.0 && \ 19 ./configure.gnu –prefix=/usr/local/perl && \ 20 make && \ 21 make -i test && \ 22 make install && \ 23#aprのインストール 24 cd /usr/local/src/ && \ 25 wget http://ftp.jaist.ac.jp/pub/apache//apr/apr-1.7.0.tar.gz && \ 26 tar xvzf apr-1.7.0.tar.gz && \ 27 cd apr-1.7.0/ && \ 28 dnf -y install gcc && \ 29 ./configure && \ 30 make && \ 31 make install && \ 32#apr-utilのインストール 33 cd /usr/local/src/ && \ 34 wget http://ftp.jaist.ac.jp/pub/apache//apr/apr-util-1.6.1.tar.gz && \ 35 tar xvzf apr-util-1.6.1.tar.gz && \ 36 cd apr-util-1.6.1/ && \ 37 ./configure --with-apr=/usr/local/apr && \ 38 make && \ 39 make install && \ 40#Apache2.4.54のインストール 41 cd /usr/local/src/ && \ 42 wget https://dlcdn.apache.org/httpd/httpd-2.4.54.tar.gz && \ 43 tar xvzf httpd-2.4.54.tar.gz && \ 44 cd httpd-2.4.54/ && \ 45 ./configure --enable-so && \ 46 make && \ 47 make install && \ 48 cp /usr/local/apache2/conf/httpd.conf /usr/local/apache2/conf/httpd.conf.org
事前に準備したdocker-compose.yml
dockerハイフンcompose.yml
1version: '3.7' 2services: 3 web: 4 container_name: web 5 build: 6 context: . 7 dockerfile: Dockerfile 8 volumes: 9 - ./web/html:/data/www/html 10 ports: 11 - "8080:80" 12 privileged: true 13 tty: true
まず、上記の「Dockerfile」と「docker-compose.yml」があるディレクトリに行き、下記のコマンドでビルドをおこないました。
Dockerfileとdockerハイフンcompose.ymlをつかい、いざビルド
1docker-compose build --no-cache
をおこないました。少し待つとビルドがおわったため、次に
_コンテナを起動する!
1docker-compose up -d
をおこないました。これでコンテナがつくられたはずということで「docker ps」で確認してみますと、
_つくられたコンテナの状態
1CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 2コンテナID イメージ名 "/bin/bash" 8 minutes ago Up 8 minutes 0.0.0.0:8080->80/tcp web
のようになりました。そして、
_コンテナへ忍び込み、実態を確認しにいきます
1docker exec -it web /bin/bash
とし、つくったコンテナの中へはいっていきます。PHPは、まだインストールしておりません。
PHPはまだはいっていません
1[root@コンテナID /]# php -v 2bash: php: command not found
Apacheは、下記の通りはいっていることを確認することができました。
_いつものコマンドでは出てこず、実体を直接指定するとバージョン確認ができる。バージョンは、想定通り2.4.54!
1[root@コンテナID /]# httpd -v 2bash: httpd: command not found 3[root@コンテナID /]# /usr/local/apache2/bin/httpd -v 4Server version: Apache/2.4.54 (Unix) 5Server built: Sep 24 2022 12:23:57
そして、以下のようにして、Apacheを起動してみました。
httpd.confでServerNameを指定していないのでAH0058のエラーが出るものの、Apacheの起動はできるものでした。
1[root@コンテナID /]# /usr/local/apache2/bin/httpd -k start 2AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using 172.19.0.2. Set the 'ServerName' directive globally to suppress this message
そして、windows10(ホストOS)で「http://localhost:8080/」にアクセスしてみますと、
It works!
という表示がブラウザ上で確認できたため、Apacheの起動を確認することができました。
そして、「cat /usr/local/apache2/conf/http.conf」のコマンドでApacheの設定内容を見てみると、ドキュメントルートの場所を確認できました。
Apache2.4.54のデフォルトのドキュメントルート
1DocumentRoot "/usr/local/apache2/htdocs" 2<Directory "/usr/local/apache2/htdocs">
実際にそのドキュメントルートのディレクトリには、ブラウザ上に表示された通りのファイルが入っていることを確認できました。
http://localhost:8080/にアクセスしたときに表示されたものと同じであることを確認!
1[root@コンテナID /]# cat /usr/local/apache2/htdocs/index.html 2<html><body><h1>It works!</h1></body></html>
この「It works!」を表示しているのはHTMLのファイルですが、HTMLのみならずPHPも表示したいため、そのための手段を進めていきたいです。現時点では、PHP自体インストールされていないのでPHPのソースコードがそのまま画面に表示される状態となっております。
_用意したこのphpinfo.phpは「http://localhost:8080/phpinfo.php」にアクセス時に実行されることなく画面上でそのままソースが表示となります。
1<?php 2phpinfo();
しらべてみると、どうもPHPのインストール時にPHP実行のためのモジュールを同時に手に入れる必要があるらしいということがわかりました。
下記のリンクのマニュアルに沿って進めればそのモジュール(PHP8の場合php_moduleのようでした)が手に入った状態でPHPをインストールできるのかなと思い作業を進めていたのですが、
途中で詰んでしまい今回の質問を投稿させていただきました。
PHPのマニュアルでは、以下のページが該当箇所と考えております。
Apache 2.x (Unixシステム用)
_↑のマニュアルの中に書かれている、↓のモジュール読み込みを遂行できれば、PHPが実行できるのではと考えております。
1httpd.conf を編集し、PHP の共有モジュールをロードするよう設定します。 2 LoadModule 命令の右側に記述するパスは、システムの PHP 共有モジュール を指している必要があります。 3上記の make install により既にこの設定は 追加されている場合もありますが、確認が必要です。 4 5PHP 8: 6LoadModule php_module modules/libphp.so
マニュアルを参考にPHPのインストールを進めようと思い、以下の手順をおこないました。
cd /usr/local/src wget https://www.php.net/distributions/php-8.1.10.tar.gz --no-check-certificate tar xvzf php-8.1.10.tar.gz cd php-8.1.10 ./configure --with-apxs2=/usr/local/apache2/bin/apxs --with-pdo-mysql
最後の「.configure~」をおこなった際にエラーが発生しました。内容は以下のものです。
checking for libxml-2.0 >= 2.9.0... no configure: error: Package requirements (libxml-2.0 >= 2.9.0) were not met: Package 'libxml-2.0', required by 'virtual:world', not found Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. Alternatively, you may set the environment variables LIBXML_CFLAGS and LIBXML_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details.
上記のエラーからわかったことをまとめてみると、以下のようになるように思いました。
- パッケージの要件 (libxml-2.0 >= 2.9.0) が満たされないため、configureでエラーが起きた。
- 'virtual:world'に必要なパッケージ 'libxml-2.0' がない。
- 環境変数「PKG_CONFIG_PATH」を設定する必要がある。
- 環境変数「PKG_CONFIG_PATH」を設定しないのならば、環境変数「LIBXML_CFLAGS」と「LIBXML_LIBS」をそれぞれ設定する。
そこで、「libxml-2.0」をどうやったら手に入れることができるのかと思いしらべてみたところ、以下のページがでてきたため、そこからwgetでダウンロードしてみようと思い、下記の手順をおこなってみました。
https://gitlab.gnome.org/GNOME/libxml2/-/tree/master
cd /usr/local/src/ wget https://gitlab.gnome.org/GNOME/libxml2/-/archive/master/libxml2-master.tar.gz tar xvzf libxml2-master.tar.gz cd libxml2-master dnf -y group install 'Development Tools' ./autogen.sh
最後の「./autogen.sh」をおこなった際に、以下のエラーが発生しました。
I am going to run ./configure with no arguments - if you wish to pass any to it, please specify them on the ./autogen.sh command line. libtoolize: putting auxiliary files in '.'. libtoolize: copying file './ltmain.sh' libtoolize: putting macros in AC_CONFIG_MACRO_DIRS, 'm4'. libtoolize: copying file 'm4/libtool.m4' libtoolize: copying file 'm4/ltoptions.m4' libtoolize: copying file 'm4/ltsugar.m4' libtoolize: copying file 'm4/ltversion.m4' libtoolize: copying file 'm4/lt~obsolete.m4' configure.ac:42: error: require Automake 1.16.3, but have 1.16.2 autoreconf: automake failed with exit status: 1 configure: error: cannot find install-sh, install.sh, or shtool in "." "./.." "./../.." Configure script failed, check config.log for more info.
一番下に書いてあったように、「config.log」を確認してみると、「configure: exit 1」という追記があったようですが、
ここでどうしてよいかわからなくなり、手が止まってしまっている状態です。
PHP8.1.10のインストールを進めたいため何かしらヒントが欲しいのですが、何かご存じの方がもしいらっしゃいましたら教えていただけますと幸いです。
また、手順の不備へのご指摘等いただけますと嬉しいです、よろしくお願いたします!
あなたの回答
tips
プレビュー