2
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

dockerでwordpressの開発環境を作ってみた!

Last updated at Posted at 2019-10-27

#目的
dockerで開発環境を作成する。
その1つのパターンとして、wordpressを起動する。

開発環境にいいよと聞くのだが、実際作成したことがないためイメージがわかない。
そのため、簡単なwordpressを使って開発環境として使えるのか試してみる。

#作成する環境
・wordpress
・mysql5.7

#手順
①docker-compose.ymlファイルを作成
 ※複数コンテナ起動の指示書
 ※マウント
  ・dbデータ→volume作成(永続データ)
  ・wordpressのソース→バインドマウント(ホストにファイル残すため)
②コンテナを起動
③wordpressにアクセスしてみる。
 http://localhost:8000
④wordpressの設定をする。
⑤wordpressで投稿をしてみる。
⑥コンテナを削除再起動して、"⑤"の投稿が残っているか確認
 →変更が残っていないと、テスト環境として使えないため
⑦wordpressのphpファイルを変更&コンテナ削除再起動
 →変更が残っていないと、テスト環境として使えないため
⑧コンテナの起動停止を自動化する。
 ※開発時に、batファイルをクリックで環境立ち上げて、
  終了時に、batファイルをクリックして環境を落とす。

#各作業抜粋
##①docker-compose.ymlファイルを作成
wordpressとmysqlのコンテナを起動する設定

docker-compose.yml
version: '3.3'

services:
   # mysqlコンテナ
   db:
     image: mysql:5.7              # コンテナイメージ
     volumes:
       - db_data:/var/lib/mysql
     restart: always               # 自動起動の有効化
     environment:                  # 環境変数
       MYSQL_ROOT_PASSWORD: root
       MYSQL_DATABASE: wp_db
       MYSQL_USER: wp_user
       MYSQL_PASSWORD: wp_pass

   # wordpressコンテナ
   wordpress:
     depends_on:
       - db                        #依存関係(dbコンテナ実行後に起動)
     image: wordpress:latest       # コンテナイメージ
     ports:
       - "8000:80"                 # ポートフォワード(ホスト側のポート8000をコンテナのポート80に転送)
     restart: always               # 自動起動の有効化
     environment:                  # 環境変数
       WORDPRESS_DB_HOST: db:3306
       WORDPRESS_DB_NAME: wp_db
       WORDPRESS_DB_USER: wp_user
       WORDPRESS_DB_PASSWORD: wp_pass
     volumes:
       - ./html:/var/www/html      # マウント設定(ホスト内のディレクトリ:マウントコンテナのディレクトリ)※ホスト内のディレクトリはdocker-compose.ymlからの相対パス

# databaseのように永続的なストレージが欲しい場合に必要な設定
# https://docs.docker.com/compose/compose-file/#volume-configuration-reference
volumes:
    db_data: {}

※エラーになる場合は、sharedriveを有効にしてください。(マウントで使います)
2.JPG

▼ファイアウォールエラーになる場合の参考はこちら(カスペですが)
https://qiita.com/spiderx_jp/items/fa8d5ffe298759df9e06

##②コンテナを起動

#docker-compose.ymlを配置したディレクトリへ移動
cd  C:\Users\micro\desktop\docker\wordpress
#コンテナを起動
docker-compose up -d

1.JPG
##③wordpressにアクセスしてみる。
http://localhost:8000
wordpressの設定画面が表示されました!
3.JPG

#④wordpressの設定をする。
初期設定をし、インストール
3.JPG
ログインすると、管理画面が表示されました。
4.JPG
#⑤wordpressで投稿をしてみる。
サイドメニュー>投稿
入力し、公開するボタンを押す
5.JPG
投稿を表示を押す
6.JPG
#⑥コンテナを削除再起動して、"④"の投稿が残っているか確認

#コンテナ停止&削除
docker-compose down
#コンテナ起動
docker-compose up -d

8.JPG

▼停止後
7.JPG
▼起動後
9.JPG
→コンテナを破棄して、再度起動しても前回変更のDBデータは残っている。
 つまり、マウント(volume)が効いている!

#⑦wordpressのphpファイルを変更&コンテナ削除再起動
コンテナ起動時に、マウントしたhtmlディレクトリが作成されている。
※おそらく、ホストにディレクトリがないときは、コンテナからがつっと
 ディレクトリがコピーされる。
image.png
html/index.phpを変更([index.php add]を追記)
image.png
変更が、フロントに反映される。
image.png
コンテナ破棄&再度起動。
さぁ、変更が残っているのか?いないのか?どっちなんだい。
image.png
image.png
残っていいる!('ω')

###★注意
私はここではまりました。。orz
コンテナはエラーメッセージなく起動できているが、
どう考えてもマウントが効いていない状態。。

設定したはずのfirewallの設定が元に戻っていました。。
わかるまで、時間かかったーーーー(=_=)

とりあえず、マウントが効かないときは以下
・sharedriveのReset Credencialを試す。
・ファイヤーウォール穴空いているか確認する。
image.png

#⑧コンテナの起動停止を自動化する。
batファイルを作成しておくと、起動停止が楽ちん。

run.bat ※コンテナ起動用ファイル
# 対象コンテナのディレクトリへ移動
cd  C:\Users\micro\desktop\docker\wordpress
# コンテナを起動
docker-compose up -d
stop.bat ※コンテナ停止用ファイル
# 対象コンテナのディレクトリへ移動
cd  C:\Users\micro\desktop\docker\wordpress
# コンテナを停止
docker-compose down

#参考
・Dockerのマウントについて
 https://www.public.ne.jp/2019/02/08/docker-5/
・バインドマウント
 https://noumenon-th.net/programming/2019/03/30/docker-v/
・Data Volume Container について [Dockerの永続化]
 https://noumenon-th.net/programming/2019/03/23/datavolume/

#最後に
おし、テスト環境らしきものができたのではないでしょうか('ω')

▼重要なこと
・DBデータは、マウント(volume)
 ※volumeはdocker管理領域のため、直接ファイル操作は推奨されない。
・変更するファイルは、マウント(バインドマウント)

あとは、wordpress以外にも練習がてら試しに作ろうと思います!

2
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?