DockerでCentOS8+apache2.4+php8.0環境を作成しWordpressを動かす環境を作る

前回、「[DockerでCentOS8+apache2.4+php7.4環境を作りwordpressを動かす環境を作る](https://qiita.com/pedalclecle17/items/6d57d618eab9c3efc82f)」というタイトルでDockerfileを作ってから約1年半。PHPのバージョンも8.0に更新されていたので、後述する理由もありタイトルにある環境を作りました。

基本は1年半前の記事からそれほど変わっていないのですが、この記事のDockerfileを作成するまで色々ありましたので、記事として残しておきます。
やっぱり1年半も経つと少しは変わりますよね。。。

# DockerでCentOS8+apache2.4+php8.0環境を作る

## Dockerfileについて
DockerFleとして用意したのは下記のとおりです。

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

![スクリーンショット 2020-04-02 21.19.17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/205773/3b0fb7eb-ef9f-211a-edad-08bcdea601e4.png)

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のバージョンが変わっていることも知っていたので、ついでに記事を更新した次第です。

なにかの参考になれば幸いです。