Podmanで PHP-8.2 FPM + Nginx 環境構築
AlomaLinux 8 で環境を作成しましたがRedHat系のOSならどれも一緒だと思います
Podman関連のインストール
# dnf module install -y container-tools
# dnf install -y dnsmasq
dockerコマンドのエミュレートパッケージを入れておく
# dnf install -y podman-docker.noarch
PHP-8.2 FPMイメージの作成
develbox/docker-php-fpm から取得する
# git clone https://github.com/devilbox/docker-php-fpm-8.2.git
ビルド
イメージをビルドするため開発系パッケージを入れる
# dnf install -y make
イメージをビルドする、完了後にイメージが登録されるのでユーザー権限は必要に応じて設定してください、ビルド時のオプションもあるのでMakefileを参照してください
# cd docker-php-fpm-8.2
# make build TAG=php-fpm82 ARCH=linux/amd64
################################################################################
# Building devilbox/php-fpm-8.2:php-fpm82 (platform: linux/amd64)
################################################################################
docker build \
\
\
$( if [ -n "" ]; then echo "--target "; fi; ) \
--network host \
--platform linux/amd64 \
--label "org.opencontainers.image.created"="$(date --rfc-3339=s)" \
--label "org.opencontainers.image.revision"="$(git rev-parse HEAD)" \
--label "org.opencontainers.image.name"="PHP" \
--label "org.opencontainers.image.version"="8.2" \
--tag devilbox/php-fpm-8.2:php-fpm82 \
--file Dockerfiles/Dockerfile Dockerfiles
Emulate Docker CLI using podman. Create /etc/containers/nodocker to quiet msg.
STEP 1/27: FROM debian:bullseye-slim
Resolved "debian" as an alias (/etc/containers/registries.conf.d/000-shortnames.conf)
Trying to pull docker.io/library/debian:bullseye-slim...
...
...
STEP 26/27: LABEL "org.opencontainers.image.name"="PHP"
--> c10db5b37a3
STEP 27/27: LABEL "org.opencontainers.image.version"="8.2"
COMMIT devilbox/php-fpm-8.2:php-fpm82
--> 44b3ada602e
[Warning] one or more build args were not consumed: [TARGETARCH TARGETOS TARGETPLATFORM]
Successfully tagged localhost/devilbox/php-fpm-8.2:php-fpm82
44b3ada602e0f2ec6070627e96a7e2b902bd32f0fd05a5fedbfbc3690b683c11
作成されたイメージを確認
[root@alma8-dev docker-php-fpm-8.2]# podman images
REPOSITORY TAG IMAGE ID CREATED SIZE
localhost/devilbox/php-fpm-8.2 php-fpm82 44b3ada602e0 10 minutes ago 475 MB
docker.io/library/debian bullseye-slim a36a86fb63b1 9 days ago 84 MB
ワークディレクトリ作成
ユーザー権限でPHPスクリプトを修正することができる想定でユーザーディレクトリしたへワークディレクトリを作成、PHPやnginxの設定も適当にいじりたいので、ホスト側へ volume で永続化する
[user@alma8-dev ~]$ pwd
/home/user
[user@alma8-dev ~]$ mkdir container
[user@alma8-dev ~]$ mkdir -p container/html
[user@alma8-dev ~]$ mkdir -p container/etc/php
[user@alma8-dev ~]$ mkdir -p container/etc/nginx/conf.d
項番 | ファイル | 備考 |
---|---|---|
1 | etc.tar | PHPの設定、/home/user/container/etc/php へ展開 |
2 | nginx.tar | nginxの設定、/home/user/container/etc/nginx/conf.d へ展開 |
最終的に展開したtreeは以下の通り
[user@alma8-dev ~]$ tree container/
container/
├── etc
│ ├── nginx
│ │ └── conf.d
│ │ └── default.conf・・・修正
│ └── php・・・以下そのまま配置
│ ├── pear.conf
│ ├── php
│ │ ├── conf.d
│ │ │ └── docker-php-ext-sodium.ini
│ │ ├── php.ini
│ │ ├── php.ini-development
│ │ └── php.ini-production
│ ├── php-fpm.conf
│ ├── php-fpm.conf.default
│ └── php-fpm.d
│ ├── docker.conf
│ ├── www.conf
│ ├── www.conf.default
│ └── zz-docker.conf
└── html
└── index.php・・・作成
index.phpを書いておく
echo '<?php phpinfo();' > container/html/index.php
ngxinの設定を書き換える
ポート9000で動作しているPHP FPMへ接続するため default.conf の設定を少々いじる
server {
listen 80;
server_name localhost;
root /var/www/html;
location / {
try_files $uri $uri/ /index.php?$uri&$args;
index index.php index.html;
}
location ~ \.php$ {
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
# fastcgi_pass localhost:9000;
fastcgi_pass php82:9000;
include fastcgi_params;
# ※1
# fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
location ~ /\.ht {
deny all;
}
}
fastcgi_pass のところを php82:9000 にする
今回のケースだとloaclhostでも動作するようですが、Podの作りによっては内部IPなどにする必要もあるかもしれません
ポート 80:80 などでホストした場合に以下のエラーが発生する
"Primary script unknown" while reading response header from upstream,...
エラーが発生する、その場合は fastcgi_param パラメータを調整する、 default.conf 内 ※1 参照
コンテナを作成する
面倒なので rootful で作成していく
Pod作成
利用するポートを指定して作成する
[root@alma8-dev ~]# podman pod create --name websrv -p 80:80 -p 9000:9000
451ac60b015c6102b409483fcc0aa80bbc9f81a31f9f2471587a662bb0b2a853
php-fpm82作成
先ほどビルドしたイメージから作成
[root@alma8-dev ~]# podman run -d --name php82 --pod websrv -v /home/user/container/etc/php/:/usr/local/etc/ -v /home/user/container/html/:/var/www/html localhost/devilbox/php-fpm-8.2:php-fpm82
799c2fdd2ba225ad361753cb83783fe3690630630bfb5b84b152c3edd98f3718
nginx作成
[root@alma8-dev ~]# podman run -d --name nginx --pod websrv -v /home/user/container/etc/nginx/conf.d:/etc/nginx/conf.d -v /home/user/container/html:/var/www/html docker.io/library/nginx
Trying to pull docker.io/library/nginx:latest...
Getting image source signatures
Copying blob 7e9b29976cce done
...
...
Writing manifest to image destination
Storing signatures
4becf59ba434fd2cfbd9e4d7c25c2e0fda38604797c6b97fd6204d81a87afe4d
動作確認
Podが動作しているか確認
[root@alma8-dev ~]# podman pod ps
POD ID NAME STATUS CREATED INFRA ID # OF CONTAINERS
451ac60b015c websrv Running 7 minutes ago e9f018f7f521 3
コンテナの確認
[root@alma8-dev ~]# podman ps
e9f018f7f521 localhost/podman-pause:4.2.0-1673541578 7 minutes ago Up 6 minutes ago 0.0.0.0:80->80/tcp, 0.0.0.0:9000->9000/tcp 451ac60b015c-infra
799c2fdd2ba2 localhost/devilbox/php-fpm-8.2:php-fpm82 php-fpm 6 minutes ago Up 6 minutes ago 0.0.0.0:80->80/tcp, 0.0.0.0:9000->9000/tcp php82
bf32e48709bb docker.io/library/nginx:latest nginx -g daemon o... 4 minutes ago Up 4 minutes ago 0.0.0.0:80->80/tcp, 0.0.0.0:9000->9000/tcp nginx
http://localhost/ へアクセスしてみる
Server APIが FPM/FatCGI であることを確認する、以上でございます
Posted on 2023-02-18 20:28:43