Written by TSUYOSHI

【初心者向け】DockerでWordPressを動かす方法を解説

Docker PROGRAMMING WordPress

Dockerについて知らない人「Dockerって聞いたことあるし、ちょっと使ってみたいけど難しいのかな。便利なら使ってみたいな。」

こういった初心者へ向けてDockerでWordPressを簡単に動作させる方法をお伝えします。

本記事の内容

  • Dockerとは?【簡単に環境構築ができるツール】
  • Dockerでローカル環境にWordPressを簡単に立ち上げる方法
  • Dockerのメリットとデメリット【初心者ベースでの解説】

Dockerとは何か?【簡単に環境構築ができるツール】

Dockerは設定ファイルさえあれば簡単なコマンドを打つだけで、高度な環境設定を一瞬で構築できてしまう素晴らしいツールです。
細かい設定を自分でしようとする場合は難しいですが、後述する例のDocker-Composeのファイルをコピペすれば誰でも簡単に使えます。
Dockerのことを全部をわかっていなくても、基本さえ押さえれば簡単に使うことができます。

本記事ではDockerでWordPressをとても簡単にローカル環境で立ち上げる方法を解説しています。
使ってみて慣れることに主眼をおいているため、Dockerのimageやコンテナーの概念の説明はせず、使い方から入っています。

Dockerでローカル環境にWordPressを簡単に立ち上げる方法

Docker本体のインストール

Dockerのトップページに進み、「Get started」ボタンをクリックしてダウンロードページに進みます。「Download for Mac」もしくは「Download for Windows」ボタンをクリックして「Get Docker」ボタンをクリックしてインストールファイルをダウンロードします。

ローカルにダウンロードしたファイル(600MB以上の大きめのファイル)をクリックしてパソコンにDockerをインストールします。

Docker Compose設定

ここからはターミナルを使って操作します。
ターミナルを起動して、任意のディレクトリを作成して移動します。($は打ち込みません。$以降の文字を打ち込みます。)
ここではユーザディレクトリ直下に「docker_wordpress」というディレクトリを作成します。(任意のディレクトリ名でOKです)

$ mkdir -p $HOME/docker_wordpress

※Linuxコマンド解説
– 「mkdir」で「docker_wordpress」ディレクトリを作成
– 「$HOME」はユーザディレクトリを指す

次に「docker-compose.yml」というファイルを「docker_wordpress」ディレクトリ内に作成します。

以下の内容を「docker-compose.yml」ファイルに書きます(以下をコピー&ペーストする)。

version: "3.1"

services:
  wordpress:
    image: wordpress #WordPressのイメージ
    container_name: wp1-wordpress #WordPressのコンテナ名
    ports:
      - "8000:80" #8000ポートでWordPressにアクセスできる
    volumes:
      - ./html:/var/www/html #docker_wordpress/html にデータがマウントされる
    environment:
      WORDPRESS_DB_NAME: wordpress_db #DBの名前
      WORDPRESS_DB_PASSWORD: mysql_password #MySQLのパスワード
    depends_on:
      - mysql #コンテナをmysqlの後に立ち上げる
    restart: always

  mysql:
    image: mariadb #MariaDBのイメージ
    container_name: wp1-mariadb #MariaDBコンテナ名
    ports:
      - "3306:3306" #ポートがバッティングする場合は変える 例) - "33060:3306"
    volumes:
      - db_mysql:/var/lib/mysql #dockerのvolumeにデータがマウントされる
    environment:
      MYSQL_ROOT_PASSWORD: mysql_password #MySQLのパスワード
    restart: always

  phpmyadmin:
    image: phpmyadmin/phpmyadmin #phpMyAdminのイメージ
    container_name: wp1-phpmyadmin #phpMyAdminコンテナ名
    ports:
      - 8080:80 #8080ポートでphpMyAdminにアクセスできる
    volumes:
      - ./phpmyadmin/sessions:/sessions #docker_wordpress/phpmyadmin/sessions にデータがマウントされる
    environment: #環境変数の指定
      - PMA_ARBITRARY=1
      - PMA_HOST=mysql
      - PMA_USER=root
      - PMA_PASSWORD=mysql_password
    depends_on:
      - mysql #コンテナをmysqlの後に立ち上げる

volumes:
  db_mysql:

docker-compose.yml ファイルは設定をまとめて書くことができ、Docker Composeのコマンドを使うことにより、簡単にDockerの起動が可能です。
YAMLファイル内でコメントをしていますが簡単に説明を記載します。
※ここは補足なので読み飛ばしてもOKです。

  • image:
    DockerのimageファイルでDocker Hubからもとになるファイルを取得します。一度ローカルに落としたら次からはimageはダウンロードし直さないため、2回目からは起動が早くなります。
  • container_name:
    コンテナの名前です。複数のWordPressを立ち上げるなどをする際はコンテナ名がバッティングする可能性があるので、必要に応じてコンテナ名は変更してください。
  • ports:
    ポートの設定です。例えばwordpressサービスのports設定では「8000:80」となっていますが、今回の場合はlocalhostの8000番ポートでlistenして、Dockerのネットワーク内の80番ポートにつなげているという感じです。
  • volumes:
    「【ローカル(Mac)のディレクトリ】:【Docker内のディレクトリ】 」で設定されています。
    ローカルとDocker内のディレクトリをマウントして紐付けしています。
    wordpressの方では、同じローカルディレクトリ内の「html」ディレクトリにDockerコンテナ内の「/var/www/html」をマウントしています。ローカルの「html」内を変更すると、今回の場合であればlocalhost:8000で表示されている表示が更新されます。
    mysqlでは、Docker Volume内の db_mysql に紐付けしており、一番下のvolumes: と db_mysql:の記述も必要になります。

    volumes:
      db_mysql:
  • environment:
    環境変数の設定です。
    wordPressでは
    「WORDPRESS_DB_NAME (DBの名前)」
    「WORDPRESS_DB_PASSWORD(rootとなるmysqlコンテナで設定しているパスワード)」
    を設定しています。
    この他「WORDPRESS_DB_USER」でDBユーザをroot以外に変更するなどの設定もあります。
  • depends_on:
    WordPressはmariaDB(mysql)が起動した後に、起動させる必要があります。
    「depends_on」で紐付けをすることができ、コンテナの起動の順番をコントロールすることができます。wordpress, phpmyadminはmysqlの起動後に立ち上がるという設定になっています。
  • restart:
    docker単体でOSの起動時にコンテナを起動させる設定です。

Dockerの立ち上げ

ターミナルで「docker_wordpress」ディレクトリ(作成した任意のディレクトリ)へ移動します。

$ cd $HOME/docker_wordpress

docker-compose up -d」コマンドでdockerを起動します。「-d」オプションでバックグランドで起動します。

$ docker-compose up -d

以下のような結果が出れば、起動成功です。

Creating network "docker_wordpress_default" with the default driver
Creating volume "docker_wordpress_db_mysql" with default driver
Creating wp1-mariadb ... done
Creating wp1-phpmyadmin ... done
Creating wp1-wordpress ... done

WordPressの設定

Dockerが立ち上がるのを少し待ち(数十秒程度)、ブラウザでlocalhost:8000にアクセスします。
WordPressのインストール画面になれば正常に起動できています。

※もし「Error establishing a database connection」というエラーが出るときはDBの接続に失敗しているので、わからなければターミナルにて「docker-compose down --volumes」コマンドで設定を消して、「docker_wordpress」ディレクトリ内のhtml, phpmyadminディレクトリも削除し、最初からやり直してみてください。

ユーザー名やパスワードなど初期設定をして、インストールを完了させれば、WordPressが立ち上がります。
「docker_wordpress」ディレクトリ内に作成された「html」ディレクトリにWordPressのファイルができているので、ここからWordPressテーマの制作などを行います。
Volumesでデータをマウントしており、データには永続性があります。

データーベースへのアクセス

phpMyAdminをインストールしているので、localhost:8080にアクセスすれば、phpMyAdminの画面が立ち上がって操作することができます。
データベースを直接操作する必要がある場合はここから操作可能です。

Dockerの起動状況の確認

余談になりますが、Dockerの状況などを確認するコマンドを紹介します。

「docker ps -a」 コマンド

Dockerのコンテナの状況を確認することができます。「-a」オプションで起動していないコンテナを含めて、存在するコンテナをすべて確認できます。

$ docker ps -a

CONTAINER ID        IMAGE                   COMMAND                  CREATED             STATUS              PORTS                    NAMES
f2425751854e        wordpress               "docker-entrypoint.s…"   29 seconds ago      Up 22 seconds       0.0.0.0:8000->80/tcp     wp1-wordpress
205a432b0c79        phpmyadmin/phpmyadmin   "/docker-entrypoint.…"   30 seconds ago      Up 23 seconds       0.0.0.0:8080->80/tcp     wp1-phpmyadmin
63654239d6a9        mariadb                 "docker-entrypoint.s…"   32 seconds ago      Up 29 seconds       0.0.0.0:3306->3306/tcp   wp1-mariadb

docker volume ls」コマンド

Dockerのvolumeを確認できます。mariaDBを「db_mysql」の名前で設定したので以下のようになります。

$ docker volume ls

DRIVER              VOLUME NAME
local               docker_wordpress_db_mysql

Dockerの停止方法

一時的に停止する場合は「docker-compose stop」でコンテナを停止させます。

$ docker-compose stop

Stopping wp1-wordpress  ... done
Stopping wp1-phpmyadmin ... done
Stopping wp1-mariadb    ... done

※参考までに起動中のすべてのコンテナの停止は「docker stop $(docker ps -q)」で行えます。
※個別に止める場合は「docker ps」でコンテナIDを確認し「docker stop 【コンテナID】」で個別に停止することもできます。

Dockerを再度起動させる方法

一時的に停止したコンテナは「docker-compose start」コマンドで再度、起動できます。またstop→startをしたい時は「docker-compose restart」で対応できます。
docker-compose.yml」の設定を変えた場合は「docker-compose up -d」で設定を上書きして起動させます。

$ docker-compose restart

Restarting wp1-wordpress  ... done
Restarting wp1-phpmyadmin ... done
Restarting wp1-mariadb    ... done

Dockerのコンテナを削除する方法

別のプロジェクトを立ち上げるときなど、Dockerコンテナの名前がバッティングしてしまうなどの際に、コンテナを削除したい場合には「docker-compose down」コマンドを使います。

コンテナを消しても、volumesでマウントしているため、設定は存続し続けるのでデータは消えません。

$ docker-compose down

Stopping wp1-wordpress  ... done
Stopping wp1-phpmyadmin ... done
Stopping wp1-mariadb    ... done
Removing wp1-wordpress  ... done
Removing wp1-phpmyadmin ... done
Removing wp1-mariadb    ... done
Removing network docker_wordpress_default

※ コンテナを消すのではなく、別プロジェクトでコンテナ名(docker-compose.yml の container_name)を違うものにするという方法もあります。

docker-compose down」コマンドでコンテナを停止した時は「docker-compose up -d」で起動すると再度コンテナが作成されてDockerが立ち上がります。Volumesのデータを消していなければ、データが復元されます。

Dockerのコンテナと設定もすべて削除する方法

Dockerのコンテナだけでなく、WordPressで設定したデータなど含めて削除したい場合は、「docker-compose down –volumes」コマンドでvolumesのデータも消します。

$ docker-compose down --volumes

Stopping wp1-phpmyadmin ... done
Stopping wp1-wordpress  ... done
Stopping wp1-mariadb    ... done
Removing wp1-phpmyadmin ... done
Removing wp1-wordpress  ... done
Removing wp1-mariadb    ... done
Removing network docker_wordpress_default
Removing volume docker_wordpress_db_mysql

「–volumes」オプションでvolumesのデータを削除します。

また「docker_wordpress」ディレクトリ内の「html」「phpmyadmin」ディレクトリも削除します。

※参考までですが、「--rmi all」オプションをつけて「docker-compose down --volumes --rmi all」を実行するとDockerのimageも削除できます。
(もとのWordPressやmariaDBなどを最新にする場合などimageを消したいとき)

Dockerのメリットとデメリット【初心者ベースでの解説】

Dockerのメリットとデメリットのまとめです。
WordPressでテーマ開発をしたことがあれば、「local by flywheel」や「MAMPP」「XAMPP」でよいのでは?と思うかもしれません。Dockerには設定ファイルさえあればコマンドひとつで高度な環境を簡単に構築できるなど使いこなせると様々なメリットがあります。

Dockerのメリット

  • 簡単に環境構築ができる
    初期設定はほぼコピペでよく、初期設定さえしてしまえば次回からの立ち上げが早いです。
  • 開発現場でも難しい設定なく全員同じ環境を作り出せる
    開発現場では、基本的にはDockerの起動と停止がわかっていれば良く、難しい設定をせず簡単にプロジェクトの開発環境を構築できます。
    システム開発の現場では大本のDocker環境構築はインフラやバックエンドのレベルの高いエンジニアが設定してくれている事が多く、自分で設定することはあまりないと思います。
  • 環境の違いを吸収でき、効率よく開発できる
    使いこなせるようになると、別々の環境で同じ状態を容易に作り出すことができるので開発効率があがり、動作も軽いです。
    例えば、Windows環境とMac環境で同じ環境を作り出せる、サーバとローカルの違いも吸収できる などが上げられます。

Dockerのデメリット

  • 学習コストが少し高め
    細かい設定をしようと思ったらそれなりの学習が必要な点です。
    初心者が細かい設定をしていこうとすると理解できないとハマってしまうことが多いと思います。
    例えばDBをmariaDBでなくmysqlにしようとした時、慣れていれば簡単ですが設定を少しいじろうと思うと、意外と途端に動かなくなってハマってしまうなどということがあったりします。(mysqlだと現時点では認証の関係で最新バージョンで正常に動かない場合があり、mysql:5.7を指定しなければならないなどクリアすべき点があります。)
  • レンタルサーバでは基本Dockerは動かせない
    サーバ上でDockerを使うにはレンタルサーバではなく、基本的にはVPSなどを使う必要があるので、実際の運用をする場合にはそれなりのスキルが必要です。
    サーバ上で動かすにはVPSやクラウド(AWSGCPなど)を使う必要があります。
  • 初心者にとっては、あくまでローカル環境を簡単に構築できるツールとして利用するのがベター。

Dockerを使ってWordPressを構築するまとめ

Dockerを使ってWordPressを簡単に起動させる方法を紹介しました。
Dockerはホームページ制作の現場レベルでは、ほぼ使うことは無いといってよいですが、SIerなどWeb系システム開発レベルの現場では逆に使う可能性が高くなるため、慣れておいた方がよいはずです。
企業に常駐でフロントエンドのエンジニアとして入るのであれば、Dockerの基本操作は知っておいた方がよいかもしれません。

  • Dockerは簡単に環境構築ができるツールです。
    違うPC環境などでも、設定ファイルから簡単に同じ環境を作り出すことが可能です。
  • Dockerを使って、ローカル環境にWordPressを簡単に立ち上げるには、docker-compose.yml を作成して、「docker-compose up -d」を実行すればOKです。

サーバでDockerの設定ができるようになると、各種ツールの導入などが驚くほど簡単にできるなどのメリットもあります。

参考になれば幸いです。

※当サイトでは一部のリンクについてアフィリエイトプログラムを利用して商品を紹介しています