Docker環境構築

PHP、WordPress の開発を行うと、VSCodeなど活用して、ローカルコードを書き、動作確認したいね。

Dockerで用意することにしました。

Dockerは、インフラ関係やDevOps界隈で注目されている技術の一つで、Docker社が開発している、コンテナ型の仮想環境を作成、配布、実行するためのプラットフォームです。
https://www.docker.com/what-docker

Contents

Dockerのインストール

1. 環境に応じてDockerをインストール

* Windowsの場合

Windows 10 Professional/Enterprise 64-bit:Docker CE for Windows
それ以外の古い環境:Docker Toolbox

* Mac OSの場合

OS X Yosemite 10.10.3 以降:Docker CE for Mac
それ以前の古い環境:Docker Toolbox
インストール後は指示に従ってインストールした後、ダブルクリックで一度開きます。
ログインを求められるので、アカウントがあればログイン、なければ新規登録します。

2. DockerのWordPress環境ファイル作成

docker-compose.ymlのファイルを作成する。

chen@Hong-Mac-mini ~ % mkdir Docker
chen@Hong-Mac-mini ~ % cd Docker
chen@Hong-Mac-mini Docker % mkdir WP10
chen@Hong-Mac-mini Docker % cd WP10
chen@Hong-Mac-mini Docker % vi docker-compose.yml
chen@Hong-Mac-mini Docker % cat docker-compose.yml

 

version: '2.1'

services:
  wordpress:
    image: wordpress:latest
    ports: 
      - "3001:80"
    environment:
      WORDPRESS_DB_NAME: wordpress
      WORDPRESS_DB_USER: mysql_user
      WORDPRESS_DB_PASSWORD: mysql_pw
    volumes:
      - ./wordpress:/var/www/html

  mysql:
    image: mysql:5.7
    environment: 
      MYSQL_ROOT_PASSWORD: root_pw
      MYSQL_DATABASE: wordpress
      MYSQL_USER: mysql_user
      MYSQL_PASSWORD: mysql_pw

 

3. Dockerの起動

chen@Hong-Mac-mini Docker % docker-compose up
Creating network “docker_default” with the default driver
Pulling wordpress (wordpress:latest)…
latest: Pulling from library/wordpress
bb79b6b2107f: Downloading [=============================================> ] 24.82MB/27.09MB
80f7a64e4b25: Download complete
da391f3e81f0: Downloading [===============> ] 23.58MB/76.65MB
8199ae3052e1: Download complete
284fd0f314b2: Download complete
f38db365cd8a: Waiting
1416a501db13: Waiting
1a45b5b978cd: Waiting
c662caa8d2ec: Waiting
2db216a7247d: Waiting
d23772456121: Waiting
3c068acf6c51: Waiting
2980002e0c52: Waiting
b6ddfa4e307a: Waiting
2553391243c3: Waiting
a3c2b330e95d: Waiting
bc1e61f6eb18: Waiting
033f43da5ae7: Waiting
277905382399: Waiting
a1b0f1f9235d: Waiting

しばらく待つと、mysqld と、Apache/2.4.38 (Debian) PHP/7.4.11 動作する環境ができました。

…Creating wp10_mysql_1 … done
Creating wp10_wordpress_1 … done
Attaching to wp10_mysql_1, wp10_wordpress_1…mysql_1 | 2020-10-21T05:43:41.230024Z 0 [Note] mysqld: ready for connections.
mysql_1 | Version: ‘5.7.32’ socket: ‘/var/run/mysqld/mysqld.sock’ port: 3306 MySQL Community Server (GPL)
wordpress_1 | AH00558: apache2: Could not reliably determine the server’s fully qualified domain name, using 172.18.0.2. Set the ‘ServerName’ directive globally to suppress this message
wordpress_1 | AH00558: apache2: Could not reliably determine the server’s fully qualified domain name, using 172.18.0.2. Set the ‘ServerName’ directive globally to suppress this message
wordpress_1 | [Wed Oct 21 05:43:42.708865 2020] [mpm_prefork:notice] [pid 1] AH00163: Apache/2.4.38 (Debian) PHP/7.4.11 configured — resuming normal operations
wordpress_1 | [Wed Oct 21 05:43:42.709072 2020] [core:notice] [pid 1] AH00094: Command line: ‘apache2 -D FOREGROUND’

動いているコンテナの確認

コンテナ名は、wp10_wordpress_1 と wp10_mysql_1 になります。

2つのコンテナが稼動していることが確認できます。コンテナIDはホスト名としても使用されます

chen@Hong-Mac-mini Docker % docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
28d87f579a8f mysql:5.7 “docker-entrypoint.s…” 44 minutes ago Up 44 minutes 3306/tcp, 33060/tcp wp10_mysql_1
7f066d65b388 wordpress:latest “docker-entrypoint.s…” 44 minutes ago Up 44 minutes 0.0.0.0:3001->80/tcp wp10_wordpress_1
chen@Hong-Mac-mini Docker %

 

4. WordPressの起動

http://localhost:3001/にアクセス

WordPressセットアップの画面が見えます。

5. コンテナにアクセス

起動中のコンテナにアクセスするにはexecコマンドを使います。

docker_wordpress_1 コンテナにアクセス

これでWordPressがインストールされているディレクトリにアクセスします。

chen@Hong-Mac-mini % docker exec -ti wp10_wordpress_1 /bin/bash
root@7f066d65b388:/var/www/html#
root@7f066d65b388:/var/www/html# pwd
/var/www/html
root@7f066d65b388:/var/www/html# php -v
PHP 7.4.11 (cli) (built: Oct 13 2020 10:01:40) ( NTS )
Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologies
with Zend OPcache v7.4.11, Copyright (c), by Zend Technologies

上記方法でコンテナにアクセスすれば、対話的にLinuxコマンドが使えるので
WordPress内のテーマファイルの書き換えや権限変更なども可能です。

docker_mysql_1  コンテナにアクセス

chen@Hong-Mac-mini ~ % docker exec -ti wp10_mysql_1 /bin/bash
root@28d87f579a8f:/# pwd
/
root@28d87f579a8f:/# mysql –version
mysql  Ver 14.14 Distrib 5.7.32, for Linux (x86_64) using  EditLine wrapper
root@28d87f579a8f:/#

MySQLのイメージのバージョンはlatestにしていません。latestを指定すると、MySQL8.0のコンテナが立ちます。

MySQL8.0ではパスワードの認証方法が5.7以前とは異なるため(Mysql8.0 ではデフォルトの認証形式を mysql_native_password から caching_sha2_password に変更している)、WordPress認証エラーとなります。このため、あえてMySQL5.7を指定しています。

ついてに、OSのディストリビューションを確認します。
root@28d87f579a8f:/# vdir /etc/*version*
-rw-r–r– 1 root root 5 Sep 19 21:39 /etc/debian_version
root@28d87f579a8f:/# cat /etc/debian_version
10.6
root@28d87f579a8f:/#

WordPress環境をホスト側にマウント

テーマやプラグインを直接扱えるようにするには、コンテナ側で構築された環境とホスト側のディレクトリをマウントします。

Composeファイルのwordpressサービス配下に以下を定義します。

wordpress:
  volumes:
    - ./wordpress:/var/www/html

これでコンテナを起動したときにホスト側のwordpressフォルダにWordPressファイル群が作成されます。

downコマンドで停止しても削除されません。
–volumesオプションを付けて停止しても削除されません。

これてVSCodeから、直接ファイルの編集ができるようになります。

6. コンテナの起動と停止

— 起動
$ docker start <コンテナ名 or コンテナID>

— 停止
$ docker stop <コンテナ名 or コンテナID>

今回の場合は「docker_wordpress_1」と「docker_mysql_1」を両方停止しておきます。
停止しただけなら、削除ではないのでまたstartした時に前回の続きから使えるわけですね。

7.コンテナの削除

停止しているコンテナの確認
$ docker ps -a

コンテナの削除コマンド: docker rm [コンテナID]

8.イメージの削除

現状のイメージの確認
$ docker images

イメージの削除コマンド: docker rmi [イメージID]

 

参考;

  • https://www.pressmantech.com/tech/4873 — [WordPress]超簡単!DockerでWordPressを1分で立ち上げよう[WP10]