49hack

ゆるふわエンジニアが魔法使いになるまで

nginx+wordpressのdocker環境を構築する

はじめに

localにwordpressが動く環境がすでにあったのですが、メンバーの新規参入時など環境構築が大変だったのでdockerで環境を構築できるようにしました。

dockerはこの本を読んで勉強しました👇

とおもったらもう第二版が出ていた😮

プログラマのためのDocker教科書 第2版 インフラの基礎知識&コードによる環境構築の自動化

プログラマのためのDocker教科書 第2版 インフラの基礎知識&コードによる環境構築の自動化

dockerでwordpress環境をつくるサンプルはたくさんあったのですが、一からwordpressをつくっていくものだったりapache前提だったりとちょっと要件が違う・・・🤔

今回は「既存のnginx+wordpress環境をdockerで構築する」をやっていきます💪

主にこの記事を参考にしました。とてもわかりやすかったです🙏
docker-compose で作る nginx + PHP-FPM7 + HTTP/2 に対応したモダンな WordPress 開発環境 – PSYENCE:MEDIA

ってことでまとめます。

移行の方針

  • nginx, wordpressの動く環境をdockerで構築する
    • apacheが入っていないイメージを使う
  • mysqlはlocalで動いているものをそのまま使う
    • のちのち本番をdocker化するにしてもRDSを使うので問題ないはず🤔

ディレクトリ構成

❯ tree . -L 2
.
├── docker-compose.yml
├── nginx
│   └── default.conf
└── my_wordpress
    ├── index.php
    ├── ...

docker-compose.yml

読んだ本ではversion2の書き方でしたが、version3で書いてみました😉
記述がいろいろ省略されてたりしていたけどそんなに大変じゃなかった💪
イメージのバージョンは既存の環境に合わせてるだけなので、最新を使えるなら最新を使ったほうがいいです👌
wordpressのイメージはtagを指定してapacheが入っていないものを使います。

version: '3'
services:
  nginx:
    image: nginx:1.15.3-alpine
    restart: always
    ports:
      - "8082:80"
    depends_on:
      - wordpress
    volumes:
      - ./nginx/default.conf:/etc/nginx/conf.d/default.conf
      - ./my_wordpress:/var/www/html

  wordpress:
    image: wordpress:4.9.8-php5.6-fpm-alpine
    restart: always
    volumes:
      - ./my_wordpress:/var/www/html

nginx.conf

fastcgi_passにはdocker-compose.ymlに記述したservice名を指定します。(今回はwordpress

server {
  listen 80;
  server_name _;

  root  /var/www/html;
  index index.php;

  access_log /var/log/nginx/access.log;
  error_log  /var/log/nginx/error.log;

  location / {
    try_files $uri $uri/ /index.php$is_args$args;
  }

  location ~ \.php$ {
    fastcgi_split_path_info ^(.+\.php)(\.+)$;
    fastcgi_pass wordpress:9000;
    fastcgi_index index.php;
    include fastcgi_params;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    fastcgi_param PATH_INFO $fastcgi_path_info;
  }
}

いざdockerを起動

$ docker-compose up -d

で起動して、 http://localhost:8082 で既存のwordpressページが表示されればOK👍

おまけ

よく使うコマンド

コンテナを起動する

$ docker-compose up -d

コンテナを停止する

$ docker-compose stop

コンテナを再起動する

$ docker-compose restart

logを見とく

$ docker-compose logs -f

コンテナに入る

$ docker exec -it {container_name} sh

dockerイメージの履歴を見る

$ docker history {image}

今回、wordpressイメージの違いを見るために使いました。

❯ docker history wordpress
IMAGE               CREATED             CREATED BY                                      SIZE                COMMENT
41e689eea0cd        3 weeks ago         /bin/sh -c #(nop)  CMD ["apache2-foreground"]   0B
<missing>           3 weeks ago         /bin/sh -c #(nop)  ENTRYPOINT ["docker-entry…   0B
<missing>           3 weeks ago         /bin/sh -c #(nop) COPY file:40bd880f26da3ada…   7.62kB
<missing>           3 weeks ago         /bin/sh -c set -ex;  curl -o wordpress.tar.g…   27.3MB
<missing>           3 weeks ago         /bin/sh -c #(nop)  ENV WORDPRESS_SHA1=0945ba…   0B
<missing>           3 weeks ago         /bin/sh -c #(nop)  ENV WORDPRESS_VERSION=4.9…   0B
<missing>           3 weeks ago         /bin/sh -c #(nop)  VOLUME [/var/www/html]       0B
<missing>           3 weeks ago         /bin/sh -c a2enmod rewrite expires              60B
<missing>           3 weeks ago         /bin/sh -c {   echo 'opcache.memory_consumpt…   171B
<missing>           3 weeks ago         /bin/sh -c set -ex;   savedAptMark="$(apt-ma…   3.5MB
<missing>           5 weeks ago         /bin/sh -c #(nop)  CMD ["apache2-foreground"]   0B
<missing>           5 weeks ago         /bin/sh -c #(nop)  EXPOSE 80/tcp                0B
<missing>           5 weeks ago         /bin/sh -c #(nop) WORKDIR /var/www/html         0B
<missing>           5 weeks ago         /bin/sh -c #(nop) COPY file:24613ecbb1ce6a09…   1.35kB
<missing>           5 weeks ago         /bin/sh -c #(nop)  ENTRYPOINT ["docker-php-e…   0B
<missing>           5 weeks ago         /bin/sh -c docker-php-ext-enable sodium         20B
<missing>           5 weeks ago         /bin/sh -c #(nop) COPY multi:c925dfb355ea16b…   6.44kB
<missing>           5 weeks ago         /bin/sh -c set -eux;   savedAptMark="$(apt-m…   56.9MB
<missing>           5 weeks ago         /bin/sh -c #(nop) COPY file:207c686e3fed4f71…   587B
<missing>           5 weeks ago         /bin/sh -c set -xe;   fetchDeps='   wget  ';…   13.4MB
<missing>           5 weeks ago         /bin/sh -c #(nop)  ENV PHP_SHA256=3585c1222e…   0B
<missing>           5 weeks ago         /bin/sh -c #(nop)  ENV PHP_URL=https://secur…   0B
<missing>           5 weeks ago         /bin/sh -c #(nop)  ENV PHP_VERSION=7.2.9        0B
<missing>           2 months ago        /bin/sh -c #(nop)  ENV GPG_KEYS=1729F83938DA…   0B
<missing>           2 months ago        /bin/sh -c #(nop)  ENV PHP_LDFLAGS=-Wl,-O1 -…   0B
<missing>           2 months ago        /bin/sh -c #(nop)  ENV PHP_CPPFLAGS=-fstack-…   0B
<missing>           2 months ago        /bin/sh -c #(nop)  ENV PHP_CFLAGS=-fstack-pr…   0B
<missing>           2 months ago        /bin/sh -c #(nop)  ENV PHP_EXTRA_CONFIGURE_A…   0B
<missing>           2 months ago        /bin/sh -c #(nop)  ENV PHP_EXTRA_BUILD_DEPS=…   0B
<missing>           2 months ago        /bin/sh -c {   echo '<FilesMatch \.php$>';  …   237B
<missing>           2 months ago        /bin/sh -c set -ex  && . "$APACHE_ENVVARS"  …   33B
<missing>           2 months ago        /bin/sh -c a2dismod mpm_event && a2enmod mpm…   68B
<missing>           2 months ago        /bin/sh -c set -ex   && sed -ri 's/^export (…   1.92kB
<missing>           2 months ago        /bin/sh -c #(nop)  ENV APACHE_ENVVARS=/etc/a…   0B
<missing>           2 months ago        /bin/sh -c #(nop)  ENV APACHE_CONFDIR=/etc/a…   0B
<missing>           2 months ago        /bin/sh -c apt-get update  && apt-get instal…   42.3MB
<missing>           2 months ago        /bin/sh -c mkdir -p $PHP_INI_DIR/conf.d         0B
<missing>           2 months ago        /bin/sh -c #(nop)  ENV PHP_INI_DIR=/usr/loca…   0B
<missing>           2 months ago        /bin/sh -c apt-get update && apt-get install…   209MB
<missing>           2 months ago        /bin/sh -c #(nop)  ENV PHPIZE_DEPS=autoconf …   0B
<missing>           2 months ago        /bin/sh -c set -eux;  {   echo 'Package: php…   46B
<missing>           2 months ago        /bin/sh -c #(nop)  CMD ["bash"]                 0B
<missing>           2 months ago        /bin/sh -c #(nop) ADD file:919939fa022472751…   55.3MB

あー、apache入ってるなー。🧐

❯ docker history wordpress:4.9.8-php5.6-fpm-alpine
IMAGE               CREATED             CREATED BY                                      SIZE                COMMENT
7d3fe91e2ab2        3 weeks ago         /bin/sh -c #(nop)  CMD ["php-fpm"]              0B
<missing>           3 weeks ago         /bin/sh -c #(nop)  ENTRYPOINT ["docker-entry…   0B
<missing>           3 weeks ago         /bin/sh -c #(nop) COPY file:40bd880f26da3ada…   7.62kB
<missing>           3 weeks ago         /bin/sh -c set -ex;  curl -o wordpress.tar.g…   27.3MB
<missing>           3 weeks ago         /bin/sh -c #(nop)  ENV WORDPRESS_SHA1=0945ba…   0B
<missing>           3 weeks ago         /bin/sh -c #(nop)  ENV WORDPRESS_VERSION=4.9…   0B
<missing>           3 weeks ago         /bin/sh -c #(nop)  VOLUME [/var/www/html]       0B
<missing>           3 weeks ago         /bin/sh -c {   echo 'opcache.memory_consumpt…   171B
<missing>           3 weeks ago         /bin/sh -c set -ex;   apk add --no-cache --v…   3.52MB
<missing>           3 weeks ago         /bin/sh -c apk add --no-cache   bash   sed      1.5MB
<missing>           3 weeks ago         /bin/sh -c #(nop)  CMD ["php-fpm"]              0B
<missing>           3 weeks ago         /bin/sh -c #(nop)  EXPOSE 9000/tcp              0B
<missing>           3 weeks ago         /bin/sh -c set -ex  && cd /usr/local/etc  &&…   23.4kB
<missing>           3 weeks ago         /bin/sh -c #(nop) WORKDIR /var/www/html         0B
<missing>           3 weeks ago         /bin/sh -c #(nop)  ENTRYPOINT ["docker-php-e…   0B
<missing>           3 weeks ago         /bin/sh -c #(nop) COPY multi:af8a06a5cfc82b1…   6.43kB
<missing>           3 weeks ago         /bin/sh -c set -xe  && apk add --no-cache --…   34.7MB
<missing>           3 weeks ago         /bin/sh -c #(nop) COPY file:207c686e3fed4f71…   587B
<missing>           3 weeks ago         /bin/sh -c set -xe;   apk add --no-cache --v…   13.8MB
<missing>           3 weeks ago         /bin/sh -c #(nop)  ENV PHP_SHA256=5000d82610…   0B
<missing>           3 weeks ago         /bin/sh -c #(nop)  ENV PHP_URL=https://secur…   0B
<missing>           3 weeks ago         /bin/sh -c #(nop)  ENV PHP_VERSION=5.6.37       0B
<missing>           3 weeks ago         /bin/sh -c #(nop)  ENV GPG_KEYS=0BD78B5F9750…   0B
<missing>           3 weeks ago         /bin/sh -c #(nop)  ENV PHP_LDFLAGS=-Wl,-O1 -…   0B
<missing>           3 weeks ago         /bin/sh -c #(nop)  ENV PHP_CPPFLAGS=-fstack-…   0B
<missing>           3 weeks ago         /bin/sh -c #(nop)  ENV PHP_CFLAGS=-fstack-pr…   0B
<missing>           3 weeks ago         /bin/sh -c #(nop)  ENV PHP_EXTRA_CONFIGURE_A…   0B
<missing>           3 weeks ago         /bin/sh -c mkdir -p $PHP_INI_DIR/conf.d         0B
<missing>           3 weeks ago         /bin/sh -c #(nop)  ENV PHP_INI_DIR=/usr/loca…   0B
<missing>           3 weeks ago         /bin/sh -c set -x  && addgroup -g 82 -S www-…   4.85kB
<missing>           3 weeks ago         /bin/sh -c apk add --no-cache --virtual .per…   2.69MB
<missing>           3 weeks ago         /bin/sh -c #(nop)  ENV PHPIZE_DEPS=autoconf …   0B
<missing>           2 months ago        /bin/sh -c #(nop)  CMD ["/bin/sh"]              0B
<missing>           2 months ago        /bin/sh -c #(nop) ADD file:25f61d70254b9807a…   4.41MB

こっちはapache入ってない。採用!

以上です🤗