なぜ?dockerでPHPをインストールするときにエラーにならない!?

スポンサーリンク
なぜ?エラーにならない!? ノウハウ
なぜ?エラーにならない!?
この記事は約9分で読めます。
よっしー
よっしー

こんにちは。よっしーです(^^)

今日は、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 のバージョンは下図になります。

docker desktop のバージョン
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でエラーにならない理由を知っている方がいたら教えて下さい。

よっしー
よっしー

また明日お会いしましょう!

コメント

タイトルとURLをコピーしました