Dockerをはじめて導入してWordPressの環境を作ったよ

# はじめに

以前職場(win10)でDockerを入れようとして＆入れてもらおうとして、
どうやらそこまでに入れていた他のアプリが邪魔をして入れられず。
おうちのPC(mac)にインストールするだけして放置。（DB使う用事でてきたらきっと…）
この度、職場で新品のPCを使うことになったので
Dockerを入れることから初めてみました。


# 前提

まず、wordpressをいじる用事がでてきたので、wordpressの環境構築をめざします。

# Dockerのインストール

Dockerと、付随してくるdocker-composeのインストールを行います。

https://www.docker.com/get-started
にアクセス。
インストールするPCはwin 10 proなので、Docker Desktopのインストールとなります。

インストールして起動すると、ログインorアカウント作成が必要になる。（今回は新規アカウントを作成しました。）

コマントプロンプトもしくはPowerShellで

```
$ docker -v
Docker version 19.03.8, build xxxxxxx

$ docker-compose -v
docker-compose version 1.25.4, build xxxxxxx
```

と、バージョン表示でインストールを確認。

# WordPressの環境構築

## 参考

https://www.kagoya.jp/howto/wordpress/wordpress-docker/
win10 ならば、インストールからこちらが参考になりました。


## 導入方法

上記参考から、やりかたが複数あることを知りました。

1. コマンドを使ってWordPress と DB　それぞれをインストールする
2. docker-composeを使って設定から構築


**※まず1の方法を試したのですが、「テーマファイルをいじることからやりたい」という用途にあわないことが判明。後に2の方法もやることになりました。**


## WordPressとDBそれぞれをインストールする

以前、xamp環境にダウンロードしてきたWordPress入れて。。。っていうやり方を体験したことがあったので、パッと見た感じこちらがわかりやすかったので、まずこちらを選択しました。

上記参考および、下記も参考になるかと。
https://qiita.com/maimax/items/5090fd37f9832fe3c5fd

やりかたは。。。
参考URLの内容を見てみてください。


ここまでやって気づきます。
テーマファイルどうやってイジるの？
ここまでの設定をYAMLなるものに吐き出してくれへんか？？→そんなものは見つかりませんでした。


ということで、やり直しです。


## docker-composeを使ってコンテナの作成

こちらも上記参考に続いて、下記にお世話になりました。
https://eeedotweb.com/blog/web/wordpress/docker-local-wordpress/#WordPress


開発用に使うディレクトリをPCに作成、その中にdocker-conmpose.ymlファイルを作成します。

↓こんな感じ。

`C:\Users\user\Documents\wordpress\dev\docker-conmpose.yml`



docker-conmpose.ymlにいろいろ書くのですが。。。結論として、下記ができあがったファイルです。

```
version: '3'
services:
  wordpress:
    image: wordpress:latest
    container_name: wordpress
    ports:
      - "8000:80"
    depends_on:
      - db
    restart: always
    environment:
      WORDPRESS_DB_HOST: "db:3306"
      WORDPRESS_DB_NAME: wordpress
      WORDPRESS_DB_USER: wp_user
      WORDPRESS_DB_PASSWORD: password
    volumes:
      - ./themes/themename:/var/www/html/wp-content/themes/themename
  db: # WORDPRESS_DB_HOSTと一致させる
    image: mysql:5.7 # バージョンに注意！
    container_name: corp_wp_db
    restart: always
    volumes:
      - db-data:/var/lib/mysql
    environment:
      MYSQL_ROOT_PASSWORD: root
      MYSQL_DATABASE: wordpress
      MYSQL_USER: wp_user
      MYSQL_PASSWORD: password
      TZ: JST-9
volumes:
  db-data:
    driver: local
```

ファイルを記載したら、]

```
$ cd C:\Users\user\Documents\wordpress\dev  // docker-conmpose.ymlの場所
$ docker-compose up -d
```

→ブラウザで `https://localhost:8000` でwordpressが起動。

### テーマファイルの作成

PCの下記場所にテーマのファイルを設置すると、dockerで立ち上げたlocalhostのwordpressでテーマが選択できるようになります。

```
\Users\user\Documents\wordpress\dev
   ├ docker-conmpose.yml
   └ themes
      └ themename
         └ テーマファイル一式
```



### 注意

volumeのパスを間違って下記にしていたら、mySQLが起動しないという間違いを犯しました。

```
volumes:
      - db-data:/var/lib/mysql/data
```

また、~~おしゃれに~~、enviromentを使わず、.envファイルを.ymlと同じ場所に作成、内容を記載して

```
  wordpress:
    env_file: .env
  db: 
    env_file: .env
```

という記載をしていたのですが、これではwordpressのDB接続エラーが発生しました。

### .htaccessの追加（2020/5/11追記）

ここまででいじりはじめて、サイト側のプレビューしようとしたら、
topページ以外が
`The requested URL was not found on this server.`
エラーとなりました。
…そうなんですね………。
ということで、追加です。

- .htaccessを作成

```
\Users\user\Documents\wordpress\dev
   ├ docker-conmpose.yml
   ├ .htaccess　←　追加
   └ themes
```

- .htaccessの中身

手元にあった（本番サーバーに使ってた）のをそのまま。内容省略

- docker-conmpose.ymlの修正

```
  wordpress:
    volumes:
      - .htaccess:/var/www/html/.htaccess　←　追記
      - ./themes:/var/www/html/wp-content/themes

```


### 利用したdocker・docker-composeのコマンド

#### docker-compose

docker-composeはdocker-compose.ymlの設置場所で実行。 ⇒　`$ cd docker-compose.ymlの設置場所`

`$ docker-compose up -d ` →　docker-compose.ymlをもとに、コンテナの作成・更新・起動
`$ docker-compose ps ` →　起動しているコンテナ一覧

#### docker

`$ docker ps` →　起動しているコンテナ一覧
`$ docker ps -a` →　停止中も含めたコンテナ一覧
`$ docker stop コンテナID` →　コンテナの停止
`$ docker start コンテナID` →　コンテナの起動
`$ docker logs コンテナID` →　コンテナのログの確認
`$ docker rm 停止中のコンテナID`  →　コンテナの削除
`$ docker rm $(docker ps -aq)` →　停止中のコンテナ全削除


`$ docker volume ls` →　ボリュームの一覧
`$ docker volume prune`  →　利用されていないボリュームの削除

`$ docker images` →　イメージの一覧
`$ docker rmi イメージレポジトリ　もしくは　イメージID`　→　イメージの削除（レポジトリ:タグ　の形での指定も可）


~~WordPressメチャメチャきらいなんだよな～。どうしようかな～。~~