Docker-composeでWEB・DBのDockerfileよりwordpressを構築する

#目的
Dockerの理解を深めたいと考え、Docker-Composeを用いてWordpressの構築を行いました。

#条件設定
・AmazonLinux2のイメージを用いて構築する
・WEB用とDB用のコンテナそれそれ2台を用いる
・データの永続化
　ログ記事を書いた後に、コンテナの再起動をしても書いたブログ記事がちゃんと
　残ってるかどうか

#環境設定
・docker ver3.8
・php ver7.3
・Apache
・MySQL
・mariadb

#構成
/opt/project
    　 l  　L docker-compose.yml
   　  l---web
    　 l   　 l-Dockerfile
   　  l---db
          　　　l-Dockerfile
         　　　l-wordpress
                 　　　　　　l-db.opt

#手順
#### 1.ルート権限になる

```
# sudo su -
```

#### 2.Dockerのインストール

```
# yum install docker
```

#### 3.dockerの起動

```
# systemctl start docker
```

#### 4.dockerのプロセスが通っているかの確認

```
# ps -ef | grep docker
```
#### 5.dockerのシステム起動の確認

```
# systemctl status docker
```

#### 6.作業ディレクトリの作成・移動

```
# mkdir /opt/project && cd /opt/project
```

#### 7.web/dbのディレクトリを作成

```
# mkdir web
# mkdir db
```

#### 8.ymlファイルを作成

```
# vi docker-compose.yml
```

```:docker-compose.yml
-----------------------------------------
 version: "3.8"
services:
#./webに作成したwordpressのDockerfileを使用して"docker-compose build"でwebという名前のイメージを作成
  web:
    container_name: web
    build: ./web
    #ポート番号の指定
    ports:
      - "80:80"
    tty: true
#./dbに作成したMySQLのDockerfileを使用して"docker-compose build"でdbという名前のイメージを作成
  db:
    container_name: db
    build: ./db
    #ポート番号の指定
    ports:
      - "3306:3306"
    tty: true
 -----------------------------------------
```

#### 9.wordpressのDockerfileを作成

```
# cd /opt/project/web && vi Dockerfile
```

```:/opt/project/web
-----------------------------------------
#AmazonLinux2の環境を使用
FROM amazonlinux:2

#初期装備をインストール
RUN yum -y install yum-utils tar wget procps epel-release
RUN yum clean all

#Apacheインストール
RUN yum -y install httpd

#PHPのインストール
RUN amazon-linux-extras enable php7.3
RUN yum install -y php php-gd php-mysqlnd php-xmlrpc

#wordpressインストール
#ENV wpdl https://wordpress.org/latest-ja.tar.gz

# wp download
#RUN cd /var/www/html && wget -O - $wpdl | tar xzfv -
#RUN mv /var/www/html/wordpress/* /var/www/html
RUN wget https://wordpress.org/latest.tar.gz
RUN tar -xzvf latest.tar.gz
RUN mv /wordpress/* /var/www/html
RUN chown -R apache:apache /var/www/html
RUN chmod 2775 /var/www/html

CMD [ "/usr/sbin/httpd", "-D", "FOREGROUND" ]
-----------------------------------------
```

#### 10.データベースのDockerfileを作成

```
# cd /opt/project/db && vi Dockerfile
```

```:/opt/project/db
-----------------------------------------
FROM amazonlinux:2

#初期装備をインストール
RUN yum install -y yum-utils tar wget procps epel-release

#インストール
RUN yum -y install mariadb mariadb-server

#pingコマンド使用
RUN yum install -y iputils

#port確認
EXPOSE 3306

# DB作成
RUN mkdir /var/lib/mysql/wordpress/
COPY ./wordpress /var/lib/mysql/wordpress/
RUN chown -R mysql:mysql /var/lib/mysql/wordpress

#mariadbの起動
CMD ["/usr/bin/mysqld_safe" ,"--skip-grant-tables"]
 -----------------------------------------
```

#### 11.dbのイメージを作成する際に必要なファイルを作成

```
# mkdir /opt/project/db/wordpress && vi /opt/project/db/wordpress/db.opt
```

```:/opt/project/db/wordpress/db.opt
 -----------------------------------------
 default-character-set=latin1
 default-collation=latin1_swedish_ci
 -----------------------------------------
```

#### 12.docker-composeでイメージをビルド

```
# cd /opt/prject
# docker-compose build
```

#### 13.作成したイメージの確認

```
#docker images
```

#### 14.docker-composeでコンテナを作成

```
# docker-compose up -d
```

#### 15.作成したコンテナの確認

```
# docker ps
# docker-compose ps
```

#### 16.WEBでログインしてwordpressをインストール

>http://グローバルIP
> 
 ～データベースの選択画面～
データベース名： wordpress
ユーザ名：　　空白　　
パスワード： 　　空白　　
データベースのホスト名：db
※データベースのコンテナ名
 テーブルの接頭辞：wp_　　　　（そのまま）
 でインストール！！
 次の課題の確認のため、何か一つ思いのたけを投稿しておく。。。

#参考
[滅びの呪文](https://qiita.com/suin/items/19d65e191b96a0079417)
[初心者はdocker-composeから始めた方がいいかもしれない説](https://coinbaby8.com/docker-beginner.html)
[Docker Compose を使う](https://zenn.dev/suzuki_hoge/books/2021-04-docker-picture-60fbe950136be9c7ad85/viewer/5-docker-compose)

#データの永続化

#### 1.dockerボリュームを作成

```
# docker volume create mariadb
```

#### 2.docker-compose.ymlにvolumesを追加

```
# cd /var/project/ && vi docker-compose.yml
```

```:docker-compose.yml
---------------------------------------------
version: "3.8"
services:
  web:
  ～要約～
  #ボリュームを使いWEBデータを永続化
    volumes:
      - wordpress/:/var/www/html
 ～～～～～～～～～～～～～～～～～～～～～～～  
  db:
  ～要約～
  #ボリュームを使いDBデータを永続化
    volumes:
      - mariadb:/var/lib/mysql
 ～～～～～～～～～～～～～～～～～～～～～～～
# databaseのように永続的なストレージが欲しい場合に必要な設定
volumes:
  mariadb:
  wordpress:
---------------------------------------------
```

#### 3.dockerコンテナを一度削除

```
# docker-compose down -v
```

#### 4.docker-composeでコンテナを再作成

```
# docker-compose up -d
```

#### 5.WEBでログインして確認
>http://グローバルIP

#参考②
[Docker-Compose persistent data MySQL](https://stackoverflow.com/questions/39175194/docker-compose-persistent-data-mysql?noredirect=1&lq=1)
[Dockerのデータを永続化！Data Volume（データボリューム）の理解から始める環境構築入門](https://nishinatoshiharu.com/docker-volume-tutorial/)
[docker-compose を使って WordPress テーマ開発環境を構築しよう](https://tech.recruit-mp.co.jp/infrastructure/post-11266/)