前回、「DockerでCentOS8+apache2.4+php7.4環境を作りwordpressを動かす環境を作る」というタイトルでDockerfileを作ってから約1年半。PHPのバージョンも8.0に更新されていたので、後述する理由もありタイトルにある環境を作りました。
基本は1年半前の記事からそれほど変わっていないのですが、この記事のDockerfileを作成するまで色々ありましたので、記事として残しておきます。
やっぱり1年半も経つと少しは変わりますよね。。。
DockerでCentOS8+apache2.4+php8.0環境を作る
Dockerfileについて
DockerFleとして用意したのは下記のとおりです。
# docker-hubからOSのイメージ引込
FROM centos:latest
# サーバの日付合わせ
RUN /bin/cp /usr/share/zoneinfo/Asia/Tokyo /etc/localtime
# GPGキーのインストール
RUN rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial
# epel-releaseのインストール
RUN dnf install -y epel-release &&\
dnf clean all
# remiのインストール
RUN dnf install -y https://rpms.remirepo.net/enterprise/remi-release-8.rpm
# dnfのアップデート
RUN dnf update -y &&\
dnf clean all
# 必要なモジュールのインストール(apache)
RUN dnf -y install httpd &&\
dnf clean all
# 必要なモジュールのインストール(php8.0)
RUN dnf -y install php80-php php80-php-mysqli php80-php-gd php80-php-mbstring php80-php-opcache php80-php-xml php80-php-pear php80-php-devel php80-php-pecl-imagick php80-php-pecl-imagick-devel php80-php-pecl-zip
# phpコマンドを作成
RUN ln /usr/bin/php80 /usr/bin/php
# wordpressインストールディレクトリの所有者をapacheユーザに変更
RUN chown -R apache:apache /var/www/html
# pho80-php-fpmのサービス永続化
RUN systemctl enable php80-php-fpm
# apache サーバのサービス永続化
RUN systemctl enable httpd
# 接続用ポートの穴あけ
EXPOSE 80
Dokerfileの細かな内容、前回の記事からの変更点についてはDockerfileの補足で説明していますのでそちらもご覧ください。
dockerイメージの作成
Dockerfileの保存ディレクトリで下記のコマンドを実行
docker build -t wordpress:0.0.1 ./
-tのあとはタグ名なので、wordpressで動かすことを考えてwordpress:0.0.1としました。
dockerコンテナの起動
イメージができたらコンテナを起動。
docker run --privileged --name wordpress -p 80:80 -v [localhostのディレクトリ]:/var/www/html -itd wordpress:0.0.1 /sbin/init
ブラウザで起動確認
dockerコンテナ起動時に指定した「localhostのディレクトリ」にwordpressのモジュールを入れておくと下記のように「wordpressへようこそ」画面が出るはず。ここまでくれば、この記事のゴールです。
PHPのバージョンを7.4 → 8.0に上げるだけだったのですがなかなか大変でした。ちょくちょく更新しないとですね。
Dockerfileの設定の補足
docker-hubからOSのイメージ引込
FROM centos:latest
OSコンテナの引き込みですね。前回はバージョンを固定していましたが、今回はlatestにしました。
いちいちバージョンを書き換えないでいいので、こちらのほうが良いかなと。
サーバの日付合わせ
RUN /bin/cp /usr/share/zoneinfo/Asia/Tokyo /etc/localtime
コンテナの時刻を日本時間に合わせるコマンドです。
ログなどを保管する際、時刻がおかしなことになっていると色々と面倒なので、必要な設定となりますね。
epel-releaseのインストール
RUN dnf install -y epel-release &&\
dnf clean all
インストールは前の記事とは変わりませんが、コマンドをyum → dnf に変更しました。
GPGキーのインストール
RUN rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial
後続のdnf updateを実行するときにエラーが出ていろいろ調べました。
GPGをインポートしていないと行けないようです。インポートしているファイル自体はOSに付属していますが、明示的にインポートしないといけません。
OSのバージョンによってファイル名が変わるようで「rpm-gpg-key-centos-8」というファイル名の記事や情報もありましたが、自分の場合はここで書いたファイル名でした。
dockerファイルのビルド中で「ls /etc/pki/rpm-gpg」と入れてファイル名を確認したりもしました。
remiのインストール
RUN rpm -ivh http://ftp.riken.jp/Linux/remi/enterprise/remi-release-8.rpm
phpをインストールするためにremiレポジトリをインストールする必要があります。
PHP8.0もPHP7.4と同じで良かったみたいです。
dnfのアップデート
RUN dnf update -y &&\
dnf clean all
dnfのアップデートは必須作業なので、apache、php7.4のインストール前に実行しておきます。
必要なモジュールのインストール(apache)
RUN dnf -y install httpd &&\
dnf clean all
apacheのインストールはyum経由ですので特に何も設定は必要ありませんね。
必要なモジュールのインストール(php8.0)
RUN yum -y install php80-php php80-php-mysqli php80-php-gd php80-php-mbstring php80-php-opcache php80-php-xml
ここは74⇨80に書き換えのみ。
phpコマンドを作成
RUN ln /usr/bin/php80 /usr/bin/php
ここも74⇨80に書き換えのみ。
wordpressインストールディレクトリの所有者をapacheユーザに変更
RUN chown -R apache:apache /var/www/html
apacheサーバの起動ユーザに合わせてwordpress配置ディレクトリのオーナーを変更。
php80-php-fpmのサービス永続化
RUN systemctl enable php80-php-fpm
ここも74⇨80に書き換えのみ。
apache サーバのサービス永続化
RUN systemctl enable httpd
apacheもphp-fpm同様サービスとして常に起動するように設定しました。
接続用ポートの穴あけ
EXPOSE 80
http接続できるように80番のポートを開けます。https化を狙って443も開けておく必要がありますが、それはこれからGWまでの課題ですね。
今後の課題
raspberry Pi4 を購入してKubernetesをインストールしてみて、何を動かそうかと考えたところ1年半前の記事を思い出してまずやこれかなと。
PHPのバージョンが変わっていることも知っていたので、ついでに記事を更新した次第です。
なにかの参考になれば幸いです。