こんにちは。よっしーです(^^)
今日は、dockerでPHPをインストールした際に動作しなかった内容の共有になります。
実行環境
この記事で使用されているコマンドは下記の環境で実行されています。
% sw_vers
ProductName: macOS
ProductVersion: 13.2.1
BuildVersion: 22D68
% sysctl machdep.cpu.brand_string
machdep.cpu.brand_string: Apple M1 Max
% docker --version
Docker version 20.10.23, build 7155243
使用している docker desktop のバージョンは下図になります。
PHPのインストール
下記のDocker関連のファイルを使用しています。
Dockerイメージには、amazonlinux:2 を利用しています。
ディレクトリ構造
ディレクトリ構造は下記になっています。
app
├── Dockerfile
├── docker-compose.yml
└── info.php
Dockerfile
Dockerfileの内容です。
FROM amazonlinux:2
# amazon-linux-extras install
RUN amazon-linux-extras install -y epel
# yum update & install
RUN yum update -y \
&& yum install -y \
systemd \
httpd \
epel-release \
php74 \
php74-php \
php74-php-fpm
# httpd
RUN systemctl enable httpd
# init
CMD ["/sbin/init"]
docker-compose.yml
docker-compose.ymlの内容です。
version: '3'
services:
app:
build: .
container_name: amzn-linux-2-app
privileged: true
volumes:
- ./info.php:/var/www/html/info.php
ports:
- 8080:80
info.php
info.phpの内容です。phpの動作確認用に用意しています。
<?php
phpinfo();
?>
ビルド&起動
下記のコマンドでビルドし、起動します。
docker compose build
docker compose up -d
動作確認
ブラウザで、「http://localhost:8080/info.php」にアクセスすると、ソースコードが表示されました。
なぜだ。。。PHPが認識されていなさそう。。。
調査
とりあえず、dockerコンテナにログインして、状況を確認しました。
# コンテナにログイン
% docker compose exec -it app bash
# PHPのバージョン確認
bash-4.2# php --version
bash: php: command not found
PHPがインストールされていないようです。なので、yumのログを参照してみると httpd までしかインストールされていなさそうでした。
bash-4.2# tail /var/log/yum.log
Mar 29 09:18:11 Installed: cryptsetup-libs-1.7.4-4.amzn2.aarch64
Mar 29 09:18:11 Installed: elfutils-libs-0.176-2.amzn2.aarch64
Mar 29 09:18:11 Installed: systemd-libs-219-78.amzn2.0.21.aarch64
Mar 29 09:18:11 Installed: 1:dbus-libs-1.10.24-7.amzn2.0.2.aarch64
Mar 29 09:18:12 Installed: systemd-219-78.amzn2.0.21.aarch64
Mar 29 09:18:12 Installed: elfutils-default-yama-scope-0.176-2.amzn2.noarch
Mar 29 09:18:12 Installed: 1:dbus-1.10.24-7.amzn2.0.2.aarch64
Mar 29 09:18:12 Installed: httpd-filesystem-2.4.56-1.amzn2.noarch
Mar 29 09:18:12 Installed: mod_http2-1.15.19-1.amzn2.0.1.aarch64
Mar 29 09:18:12 Installed: httpd-2.4.56-1.amzn2.aarch64
httpd からあとのインストールを試しに実施してみます。
bash-4.2# yum install -y epel-release
Loaded plugins: ovl, priorities
amzn2-core | 3.7 kB 00:00:00
221 packages excluded due to repository priority protections
Package epel-release-7-11.noarch already installed and latest version
Nothing to do
bash-4.2# yum install -y php74
Loaded plugins: ovl, priorities
221 packages excluded due to repository priority protections
No package php74 available.
Error: Nothing to do
php74をインストールするときにエラーになっていそうです。
ビルドのときにエラーにならないんだ。。。なぜだ。
ということで、Dockerfileを下記のように修正しました。
FROM amazonlinux:2
# amazon-linux-extras install
RUN amazon-linux-extras install -y epel
# yum update & install
RUN yum update -y \
&& yum install -y \
systemd \
httpd \
epel-release
RUN yum install -y php74
RUN yum install -y php74-php
RUN yum install -y php74-php-fpm
# httpd
RUN systemctl enable httpd
# init
CMD ["/sbin/init"]
起動しているコンテナを停止して、再ビルドしてみます。
docker compose down
docker compose build
=> ERROR [4/7] RUN yum install -y php74 1.5s
------
> [4/7] RUN yum install -y php74:
#0 0.406 Loaded plugins: ovl, priorities
#0 1.040 221 packages excluded due to repository priority protections
#0 1.231 No package php74 available.
#0 1.418 Error: Nothing to do
------
failed to solve: executor failed running [/bin/sh -c yum install -y php74]: exit code: 1
期待通りエラーになりました。yumでまとめてインストールするとエラーになるソフトウェアがあっても、エラーにならない場合があるようですね。原因はわかりませんでしたが。
おわりに
時間切れでphpまでインストールできませんでしたが、続きは明日にしたいと思います。yumでエラーにならない理由を知っている方がいたら教えて下さい。
また明日お会いしましょう!
コメント