DockerでCentOS8+apache2.4+php7.4環境を作りwordpressを動かす環境を作る


現在借りているVPSサーバのスペックが低くく、過去にはGoogleさんに100点満点中2点という、あまりにひどい点を頂いたので、それを改善すべく奮闘中です。

GWにはVPSのサーバの乗り換えもしくはスケールアップを行いますが、その際、上モノ(Apahce+php)はいつでもバージョンを上げていけるよう。Dockerを使ってコンテナ化してみようと画策。

まずはタイトルに挙げた環境で環境を作ろうとしてみました。

DockerでCentOS8+apache2.4+php7.4環境を作る

Dockerfileについて

DockerFleとして用意したのは下記のとおりです。

# docker-hubからOSのイメージ引込
FROM centos:centos8.1.1911

# サーバの日付合わせ
RUN /bin/cp /usr/share/zoneinfo/Asia/Tokyo /etc/localtime

# epel-releaseのインストール
RUN yum install -y epel-release &&\
    yum clean all

# remiのインストール
RUN rpm -ivh http://ftp.riken.jp/Linux/remi/enterprise/remi-release-8.rpm

# yumのアップデート
RUN yum update -y &&\
    yum clean all

# 必要なモジュールのインストール(apache)
RUN yum -y install httpd &&\
    yum clean all

# 必要なモジュールのインストール(php7.4)
RUN yum -y install php74-php php74-php-mysqli php74-php-gd php74-php-mbstring php74-php-opcache php74-php-xml php74-php-pear php74-php-devel php74-php-pecl-imagick php74-php-pecl-imagick-devel php74-php-pecl-zip

# phpコマンドを作成
RUN ln /usr/bin/php74 /usr/bin/php

# wordpressインストールディレクトリの所有者をapacheユーザに変更                                              
RUN chown -R apache:apache /var/www/html

# php74−php−fpmのサービス永続化
RUN systemctl enable php74-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としました。けど、よくよく考えたらwordpressは今回インストールしていないので、名前は変えても良さそうですね。

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へようこそ」画面が出るはず。ここまでくれば、この記事のゴールです。

ここまでたどり着くまでいろいろ調べまくりました。
もともとあるコンテナを使えばもっと手軽にできたと思いますが、勉強がてらDockerfileを作るところから始めたので思いの外時間がかかりましたが、勉強になりましたね。こうやって記事にすることで後で見直すこともできるので一石二鳥です。

Dockerfileの設定の補足

docker-hubからOSのイメージ引込

FROM centos:centos8.1.1191

OSコンテナの引き込みですね。latestでも良かったのですが、一旦執筆時点の最新のバージョンを指定しています。最終的にはlatestにするかもしれません。

サーバの日付合わせ

RUN /bin/cp /usr/share/zoneinfo/Asia/Tokyo /etc/localtime

コンテナの時刻を日本時間に合わせるコマンドです。
ログなどを保管する際、時刻がおかしなことになっていると色々と面倒なので、必要な設定となりますね。

epel-releaseのインストール

RUN yum install -y epel-release &&\
    yum clean all

remiのインストール

RUN rpm -ivh http://ftp.riken.jp/Linux/remi/enterprise/remi-release-8.rpm

php7.4をインストールするためにremiレポジトリをインストールする必要がありますが、まずここにたどり着くまで苦労しました。
CentOS8用のrpmをインストールしないと当然動かないのですが、ネットではremi-release-7.rpmでしか記事が見つからず、適当に7→8に書き換えたらインストールできました。

remiのインストールのに結構手こずりました。

yumのアップデート

RUN yum update -y &&\
    yum clean all

yumのアップデートは必須作業なので、apache、php7.4のインストール前に実行しておきます。

必要なモジュールのインストール(apache)

RUN yum -y install httpd &&\
    yum clean all

apacheのインストールはyum経由ですので特に何も設定は必要ありませんね。

必要なモジュールのインストール(php7.4)

RUN yum -y install php74-php php74-php-mysqli php74-php-gd php74-php-mbstring php74-php-opcache php74-php-xml

phpのモジュールのインストールはphp74でもインストールされますが、動作させるにはphp74-php-xxx といったphp74とモジュールの間に-phpを入れる必要があるというところに行き着くまでにまた手こずりました。

phpコマンドを作成

RUN ln /usr/bin/php74 /usr/bin/php

php7.4を入れた後、phpとコマンドを実行しても何も反応がなく、いろいろ調べた結果、php74がphpのコマンドであることが判明。
このままだと、phpとしてコマンドが実行できないので、リンクを張ってphpでもコマンドが実行できるようにしました。

wordpressインストールディレクトリの所有者をapacheユーザに変更

RUN chown -R apache:apache /var/www/html

apacheサーバの起動ユーザに合わせてwordpress配置ディレクトリのオーナーを変更。

php74-php-fpmのサービス永続化

RUN systemctl enable php74-php-fpm

apacheをインストールしてもwordpresの画面が立ち上がらず何故かと調べていたらphp-fpmがサービスとして起動している必要があるということがわかりました。
コンテナ起動時に自動でサービスが起動するようにサービスを永続化させるようにしました。

apache サーバのサービス永続化

RUN systemctl enable httpd 

apacheもphp-fpm同様サービスとして常に起動するように設定しました。

接続用ポートの穴あけ

EXPOSE 80

http接続できるように80番のポートを開けます。https化を狙って443も開けておく必要がありますが、それはこれからGWまでの課題ですね。

今後の課題

  • https化
  • mysqlとの接続

といったところでしょうか。wordpressの画面は起動しましたがwordpressまではインストールできていないです。
なので、GWまでにはこのあたりを解決したいですね。