My開発メモ

DockerでWordPress(Ubuntu) – 2

Docker-composeを使ってWordpressをインストールするやり方がだいたいわかってきたので、メモしておく。

docker-compose.yml

以下のような docker-compose.yml を用意する。

docker-compose.yml

version: '3'

services:
  db:
    image: mysql:5.7
    volumes:
      - ./db_data:/var/lib/mysql                                                --- (1)
      - ./sql/mysql_dump.sql:/docker-entrypoint-initdb.d/install_wordpress.sql  --- (2)
    restart: always
    container_name: mysql-bw
    environment:
      MYSQL_ROOT_PASSWORD: wordpress
      MYSQL_DATABASE: wordpress
      MYSQL_USER: wordpress
      MYSQL_PASSWORD: wordpress

  wordpress:
    depends_on:
      - db
    build:                                                                      --- (3)
      context: .
#   image: wordpress:latest                                                     --- (4)
    volumes:                                                                    --- (5)
      - ./themes/my-twentyseventeen-child:/var/www/html/wp-content/themes/my-twentyseventeen-child
      - ./plugins/billies-get-rss2:/var/www/html/wp-content/plugins/billies-get-rss2
      - ./uploads:/var/www/html/wp-content/uploads
    links:
      - db
    ports:
      - "8000:80"
    restart: always
    container_name: wordpress-bw
    environment:
      WORDPRESS_DB_HOST: db:3306
      WORDPRESS_DB_USER: wordpress
      WORDPRESS_DB_PASSWORD: wordpress

volumes:                                                                        --- (6)
  db_data:
    driver: local

(1) — ローカルの db_data フォルダを コンテナの /var/lib/mysql にマウントしている。そのため、mysqlのデータは、wordpressインストール時、このフォルダに作成される。

(2) — ローカルの sql/mysql_dump.sql を、コンテナの /docker-entrypoint-initdb.d/install_wordpress.sql にマウントしている。このことによって、wordpressインストール時、sqlファイルからデータベースのデータが自動的に読み込まれる。

(3) — build: . (あるいは、build: context: .)とすることで、このフォルダの Dockerfile から wordpress のイメージが作成される。

(4) — build しないのであれば、このイメージが使われていた。

(5) — volumes: で、それぞれのフォルダを、コンテナの各フォルダにマウントしている。

(6) — このように、トップレベルで volumes の指定を入れておくと、複数のコンテナからアクセスできるという情報があった。 (どこの情報だったか、忘れた)

2018.07.04 追記

このvolumes指定は必要ない。

ここで、たとえば以下のようにしていすると、

...(略)...
volumes:
  mydata:
    driver_opts:
      type: none
      device: ./db_data
      o: bind

上記の

...(略)...
  db:
    image: mysql:5.7
    volumes:
      - mydata:/var/lib/mysql
...(略)...

というふうに書ける。

これは、今回の記述では必要がない。

(参考)Docker Composeのトップレベルvolumesでホストのディレクトリをマウントする

Dockerfile

さて、wordpress のイメージは、Dockerfile で作成できる。以下がそれである。

Dockerfile

FROM wordpress:latest                                                            --- (1)

MAINTAINER Seiichi Nukayama <billie175@gmail.com>

# 必要なツール類
RUN apt-get update
RUN apt-get -y install wget unzip

# wpプラグイン(zip) ダウンロード
WORKDIR /tmp/wp-plugins                                                          --- (2)
RUN wget https://downloads.wordpress.org/plugin/contact-form-7.5.0.2.zip
RUN wget https://downloads.wordpress.org/plugin/custom-post-type-ui.1.5.8.zip
RUN wget https://downloads.wordpress.org/plugin/easing-slider.3.0.8.zip
RUN wget https://downloads.wordpress.org/plugin/jetpack.6.2.1.zip
RUN wget https://downloads.wordpress.org/plugin/sf-archiver.zip
RUN wget https://downloads.wordpress.org/plugin/wp-multibyte-patch.2.8.1.zip
RUN wget https://downloads.wordpress.org/plugin/wp-social-bookmarking-light.2.0.7.zip

# zipファイルの解凍とインストール
RUN unzip './*.zip' -d /usr/src/wordpress/wp-content/plugins                     --- (3)

# 不要になった一時ファイルを削除
RUN apt-get clean
RUN rm -rf /tmp/*

# サーバが読めるように wp-content 以下の所有権を変更
RUN chown -R www-data:www-data /usr/src/wordpress/wp-content                     --- (4)

WORKDIR /var/www/html

(1) — 元となるイメージを指定する。

(2) — WORKDIR の指定をすることで、そのディレクトリで作業できる。

プラグインakismetは、デフォルトでソースファイルに含まれているので、ダウンロードは必要ない。

(3) — wordpress は、ソースファイルとして、このディレクトリに収められている。これを /var/www/html にインストールされることになる。

(4) — 所有権を変えておかないと、インストールされない。

URLを変更する。

今までで、プラグインがインストールされ、データも復元された状態で、インストールされている。

あとは、各リンクの URL を変更するだけである。

これは、wp-cli でやりたいところだが、まだ、そのやり方が究明できてないので、以下の方法でおこなう。

Search-Replace-DB-master をコンテナにコピーする。

これは、以下の方法で、できる。

$ ID=$(docker ps -q -f name=wordpress-bw)
$ docker cp ./Search-Replace-DB-master $ID:/var/www/html
ブラウザでアクセス

たとえば、以下のようにブラウザでアクセスする。

http://localhost:8000/Search-Replace-DB-master/

これで、URL変換をすることができる。

「Dry View」がプレビュー、 「Live View」が実行である。

変換がおこなわれた後、「Delete」をクリックすると、Search-Replace-DB-masterが削除される。

参考

カテゴリー: Docker, memo, wordpress

タグ:

カウント: 190