taketiyo.log

Web Engineering 🛠 & Body Building 💪

【WordPress】DockerでWordPress開発環境を爆速で構築する【Docker Compose】

Programming

  / /

WordPressのテーマやプラグイン開発、またそれらの動作検証等を行う際は開発環境の構築が必須です。サーバーを用意してワードプレスをインストールして…とやってもいいですが、Dockerを用いると簡単に開発環境の構築を行うことが出来ます。

 

目次

 

Dockerとは

Dockerは軽量なコンテナ型の仮想化環境を構築するためのソフトウェアです。
 
コンテナ型の仮想化環境では、Linuxカーネルが持つコンテナ機能を用いて、実行環境を他のプロセスから隔離しその中でアプリケーションを動作させます。
 
コンテナはLinuxの通常プロセスとほぼ同様ですが、名前空間やリソースが他のプロセスから隔離され、それぞれ独立して設定を持てるようになっています。つまりコンテナ内のアプリケーションからは、独立したコンピュータ上で動作しているように見えているという事になります。
コンテナを管理するコストはプロセスを管理するコストとほぼ変わらないため、VMware Player、Windows Virtual PC、VirtualBoxといった仮想マシンを管理するコストと比較すると非常に軽量なため、低コストで運用することが可能です。

 

Docker Composeとは

Docker Composeは複数のコンテナをまとめて管理するためのツールです。
コンテナを用いてアプリケーションの実行環境を構築する場合、複数コンテナを多数連携させて運用するケースが多いため、それぞれを独立して管理している場合、コンテナのビルド設定や起動オプション等の管理が煩雑になりがちです。
Docker Composeを用いると、それらの設定値や各コンテナの起動/停止/生存確認/起動順の調整といったオペレーションをより簡単に管理することが可能となります。
 
Docker Composeではビルド設定や起動オプション等、複数のコンテナ定義をymlファイルに記述しdocker-composeという簡単なコマンドを通じてコンテナの起動/停止等を行います。

 

Docker環境を構築する

Docker、Docker Compose を動作させるためには、まずそれらを自らの利用しているOSにインストールする必要があります。

 

Docker環境を構築する – 前提

Docker環境の構築作業を行うにあたって、下記の環境であることを前提に解説しています。
また執筆時(2018/09/20)現在のインストール手順となります。

  • VM: VMware(R) Workstation 14 Player
  • OS: ubuntu-18.04

 

Docker環境を構築する – Dockerのインストール

旧バージョンのDockerが既にインストールされている場合はアンインストールを行います

$ sudo apt-get remove docker docker-engine docker.io

パッケージ情報を更新します

$ sudo apt-get update

aptがHTTPS経由でリポジトリを使用できるようにパッケージをインストールします

$ sudo apt-get install \
    apt-transport-https \
    ca-certificates \
    curl \
    software-properties-common

Docker公式のGPG keyを追加します

$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

stable repositoryを利用するための準備を行います

$ sudo add-apt-repository \
   "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
   $(lsb_release -cs) \
   stable"

再度パッケージ情報を更新します

$ sudo apt-get update

Dockerをインストールします

$ sudo apt-get install docker-ce

Dockerコマンドをユーザーからsudoなしで実行出来るようにします

$ sudo usermod -aG docker $(whoami)

同一ユーザーで再ログインします

$ sudo su - $USER

これでdockerコマンドをユーザーより利用出来るようになりました。
下記コマンドを実行してバージョンが表示されればOKです。

$ docker --version
# Docker version 18.06.1-ce, build e68fc7a

 

Docker環境を構築する – Docker Composeのインストール

下記コマンドを実行します
※最新のバージョンはこのページより確認して適宜差し替えて下さい。(1.22.0の部分)

$ sudo curl -L "https://github.com/docker/compose/releases/download/1.22.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

ダウンロードされたバイナリに実行権限を与えます

$ sudo chmod +x /usr/local/bin/docker-compose

これでdocker-composeコマンドが利用出来るようになりました。
下記コマンドを実行してバージョンが表示されればOKです。

$ docker-compose --version
# docker-compose version 1.22.0, build f46880fe

 

docker-compose.ymlを作成する

任意のディレクトリに移動し、docker-compose.ymlという名前のファイルを下記内容で作成します。

version: '3'
services:
  proxy:
    image: jwilder/nginx-proxy
    restart: always
    volumes:
      - /var/run/docker.sock:/tmp/docker.sock:ro
      - /etc/localtime:/etc/localtime:ro
    ports:
      - '80:80'

  wordpress:
    image: wordpress:4.9-php7.2-apache
    restart: always
    volumes:
      - ./wordpress:/var/www/html
      - /etc/localtime:/etc/localtime:ro
    environment:
      VIRTUAL_HOST: wp.local.lcl
      WORDPRESS_DB_HOST: wordpress_mysql
      WORDPRESS_DB_USER: root
      WORDPRESS_DB_PASSWORD: admin
      WORDPRESS_DB_NAME: wordpress

  wordpress_mysql:
    build: ./mysql
    restart: always
    volumes:
      - ./db-data:/var/lib/mysql
      - /etc/localtime:/etc/localtime:ro
    environment:
      MYSQL_ROOT_PASSWORD: admin
      MYSQL_DATABASE: wordpress
    command: >
      --default-authentication-plugin=mysql_native_password

 

今回はmysqlのコンテナをカスタマイズしているため、下記対応も行います。

  • docker-compose.ymlと同階層にmysqlという名前のディレクトリを作成します
  • 作成したmysqlディレクトリ内に下記2つのファイルを作成します
    • custom.cnf
    • Dockerfile

 

ファイル内容は下記の通りです。

custom.cnf

[mysqld]
character-set-server=utf8mb4
collation-server=utf8mb4_ja_0900_as_cs_ks
max_allowed_packet=16M
sql_mode=''

 

Dockerfile

FROM mysql:8.0
COPY ./custom.cnf /etc/mysql/conf.d

 

コンテナを起動する

上記ファイルの作成が完了したら、docker-compose.ymlと同階層に移動し、下記コマンドを実行します。

$ docker-compose up -d

 

上記コマンド実行後、全てのコンテナイメージのダウンロードや起動が自動で行われます。3つのコンテナが作成されればコンテナの起動は完了です。
同階層に生成されるwordpressディレクトリにwordpress本体のファイルが格納されます。開発時はこのディレクトリ内のファイルを編集していくことになります。
注意点として、生成された全てのディレクトリ、ファイルの所有者は初期状態でrootユーザーになっているため必要に応じて所有者をログインユーザーに変更する等の対応が必要です。(※所有者を変更しない場合、ファイルの編集が行えません)
 
例)生成されたwordpressディレクトリ以下のファイル、ディレクトリの所有者を全てユーザー権限に変更する

sudo chown -R $(whoami):$(whoami) wordpress/

 

また、同階層に生成されるdb-dataディレクトリにはmysqlのデータが格納されます。

 

hostsを編集する

最後にhostsファイルを編集してwp.local.lclがlocalhostに向くように設定します。wp.local.lclというドメインはdocker-compose.ymlwordpressのセクションにて設定しているドメイン名です。(VIRTUAL_HOSTの項)
もし任意のものに変更している場合、自ら設定した値に読み替えてください。

$ sudo vim /etc/hosts

ファイルの任意の位置に下記行を追記して保存します

127.0.0.1        wp.local.lcl

 

ブラウザからアクセスする

これで開発環境の構築は完了です。あとはブラウザを立ち上げ、下記のURLにアクセスしましょう。

http://wp.local.lcl

 
下記の画面が表示されれば成功です。画面の指示に従ってインストールを進めます。

 

開発完了後、コンテナを停止して削除する際は下記コマンドにてまとめて削除出来ます。

$ docker-compose down

 

おわりに

Dockerコンテナは他にも様々な種類のものが公式より提供されています。Docker Hubにはたくさんのコンテナイメージが公開されていますので是非チェックしてみましょう。
Dockerを有効活用して快適なWordPress開発を初めましょう!(`・ω・´)ゞ