Docker for Windowsの使い方!ローカルでウェブサイトを作ろう!
みなさんは自分のPCでWordPress使っていますか?
この記事ではDocker for Windowsを使ってローカルにWordPress環境を作る方法を紹介します。
おそらくブログを作っている方でも、レンタルサーバーは持っているけど自分のPCに入れている人は多くないと思います。
本番環境とは別に開発環境としてWordPressを持っていると、いろいろ実験できるので、WordPressを使っている方は是非チャレンジしててみてください。
背景
ぼくは今のところBloggerを使っていて、当面変える予定はないのですが、WordPressの質問を受けることが多くなってきました。(WordPress環境もってないんですけど。。)
とはいえ、何とか力になりたいなぁと思い、WordPress環境を自分のPCに入れられないものかと調べていたら見つかりました。それがDocker for Windowsです。
先日、ローカルにWordPress環境を作る方法として、XAMPPの使い方の記事を書いています。
XAMPPは自分のPCに直接XAMPPをインストールしているので、PCが汚れてしまうのが嫌でした。それにセキュリティ的にもよろしくないと思い、ほかのものを探していたところDocker for Windowsに出会いました。
Docker for Windowsは仮想環境上に構築するので、基本的に自分の環境を汚さないで作れます。
前提条件
Docker for WindowsのOS要件は以下になります。
- Windows 10 Professional build 14393以降
- Windows 10 Enterprise build 14393以降
- Windows Server 2016
これはDocker for WindowsがHyper-Vを使用するためです。
もしHomeなどそれ以外のOSの場合はDocker toolboxを使用することで利用できます。Docker toolboxについては別の機会があれば記事にしたいと思います。
Docker for Windowsのインストール
Hyper-Vを有効にする
[コントロールパネル]を開く。
を押下し、controlと入力します。するとコントロールパネルが表示されるので選択します。
Docker for Windowsのインストールの前にHyper-Vを有効にしておきます。[コントロールパネル]を開き[プログラムと機能]を選択します。
[プログラムと機能]で[Windowsの機能の有効化または無効化]を選択します。
[Hyper-V]にチェックをつけ、[OK]を押します。
[OK]を押すとインストールが始まります。
しばらくするとインストールが完了します。
これでHyper-Vが有効になりました。
Docker for Windowsをインストールする
-
Docker for Windowsをダウンロードする
下記のサイトからDocker for Windowsをダウンロードします。Docker for WindowsをダウンロードするにはDockerアカウントが必要なため、アカウントを作成してダウンロードします。
Docker for Windows -
Docker for Windowsのインストーラーを起動する
Hyper-Vを使うので、[User Windows containers instead of Linux containers]はオフにします。[OK]を押すとインストールが始まります。
インストール中。
インストール完了です。
インストールが完了するとDocker for Windowsが起動します。
-
Docker for Windowsがインストールされたか確認する
Docker for Windowssの操作は基本的にPowerShellにコマンドを入力して行います。実際にコマンドを入力して動作するかを確認します。
以下のコマンドの例では
PS>と書かれている部分の右がコマンドです。実際に入力する際はPS>の右側を入力してください。なお、PowerShellは「Windows PowerShell」を使用してください。「Windows PowerShell ISE」だと正しく動作しません。
まずは、dockerから動作を確認します。正しく動作していればバージョンが表示されます。
PS> docker -v Docker version 18.09.0, build 4d60db4次に、docker-composeを確認します。正しく動作していればバージョンが表示されます。
PS> docker-compose -v docker-compose version 1.23.2, build 1110ad01 -
インストール完了です。
Docker for Windowsの共有設定を行う
Docker for Windowsのコンテナは仮想環境で動作するので、Windowsのドライブを共有して仮想環境からもアクセスできるようにします。
-
タスクトレイにDocker for Windowsのアイコンがあるので右クリックし、[Settings]をクリックします。
-
[Shared Drives]を開き、共有設定をしたいドライブにチェックし、[Apply]をクリックします。
-
すると、dockerにファイルアクセスを許可するためにWindowsのログインが要求されます。表示されたらパスワードを入力して認証します。
-
これで共有設定は完了です。
WordPressとMySQLの構築
続いてWordPressとMySQLを構築していきます。
WordPressとMySQLの構築は、dockerコマンドを1ずつ入力して構築することもできますが、ここではdocker-compose.ymlを作成して構築します。
docker-compose.ymlは料理で言えばレシピに当たるもので、これを作成しておけば、他の人でも、他のPCでも同じWordPress環境を作成できるというメリットがあります。
-
Docker for Windows用のフォルダの作成
先ほど共有設定をしたドライブにDocker for Windows用のフォルダを作成します。この記事では、d:\docker\wordpressを作成しました。このフォルダに、MySQLやWordPressのデータが格納されることになります。
-
docker-compose.ymlの作成
Windowsでも動作するdocker-compose.ymlを以下に記載します。作成したdocker-compose.ymlは先ほど作成したDocker for Windows用のフォルダ(d:\docker\wordpress)に保存しておきます。version: '3.3' services: mysql: image: mysql:5.7 volumes: - ./mysql:/var/lib/mysql restart: always environment: MYSQL_ROOT_PASSWORD: somewordpress MYSQL_DATABASE: wordpress MYSQL_USER: wordpress MYSQL_PASSWORD: wordpress wordpress: depends_on: - mysql image: wordpress:latest ports: - "8080:80" volumes: - ./html:/var/www/html restart: always environment: WORDPRESS_DB_HOST: mysql:3306 WORDPRESS_DB_USER: wordpress WORDPRESS_DB_PASSWORD: wordpress volumes: db_data: {}volumesにはMySQLとWordPressデータの保存先のパスを記載していますので、自分の環境に合わせて書き換えてください。environmentには、ユーザー名やパスワードを記載しているので、これもご自身の好きなものに書き換えてください。 -
WordPressとMySQLを構築する
先ほど作成したdocker-compose.ymlを使ってWordPressとMySQLを構築します。
まずはPowerShellを起動して、Docker for Windows用のフォルダに移動します。PS> d: PS> cd d:\docker\wordpress次に以下の
docker-composeで構築をします。PS> docker-compose up -d構築に成功すると以下がPowerShellのコンソールに出力されます。
Pulling db (mysql:5.7)... 5.7: Pulling from library/mysql 177e7ef0df69: Pull complete cac25352c4c8: Pull complete 8585afabb40a: Pull complete 1e4af4996053: Pull complete c326522894da: Pull complete 9020d6b6b171: Pull complete 55eb37ec6e5f: Pull complete 1a9d2f77e0e7: Pull complete d7e648ad64aa: Pull complete 4120d828ea6b: Pull complete 3b39dc5451af: Pull complete Pulling wordpress (wordpress:latest)... latest: Pulling from library/wordpress 177e7ef0df69: Already exists 9bf89f2eda24: Pull complete 350207dcf1b7: Pull complete a8a33d96b4e7: Pull complete c0421d5b63d6: Pull complete f76e300fbe72: Pull complete af9ff1b9ce5b: Pull complete d9f072d61771: Pull complete a6c512d0c2db: Pull complete 5a99458af5f8: Pull complete 8f2842d661a0: Pull complete 3c71c5361f06: Pull complete baeacbad0a0c: Pull complete e60049bf081a: Pull complete 78603f38298c: Pull complete c524c8ab00a2: Pull complete 88bb355773ee: Pull complete 0914e1413916: Pull complete 2cafe2fa9259: Pull complete Creating wordpress_db_1 ... done Creating wordpress_wordpress_1 ... done -
WordPressにアクセスしてみる
ブラウザを起動して、URLに
localhost:8080と入力してください。無事WordPressが表示されました!
アクセスしても応答がなく、以下のように表示される場合は1分ほど少し時間を置いてからアクセスしてみてください。
その他、使い方
次回以降の起動方法
docker-compose up -dコマンドはdocker-compose.ymlファイルにしたがって環境を構築します。2回目以降は環境の構築が不要なので、起動・停止する場合は、以下のコマンドで起動と停止ができます。
<起動する場合>
PS> docker-compose start
<停止する場合>
PS> docker-compose stop
コンテナを削除する方法
コンテナを削除する場合は、以下のコマンドを使用します。
<削除する場合>
PS> docker-compose rm
注意する点としては、起動時と削除時のdocker-compose.ymlが同一である必要があります。もし違っていると、正常に削除されない場合があります。これはdocker-compose stopでも同様です。
エラーが出る場合
まだdockerに慣れていないせいか、結構エラーに遭遇します。エラーが出た時の対処方法を記載しておきます。
docker-compose up -dでエラーが出る場合
docker-compose up -dコマンドを実行すると、以下のようなエラーが出る場合があります。
Pulling db (mysql:5.7)...
ERROR: Get https://registry-1.docker.io/v2/: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)
この場合は、[Settings]-[Network]-[DNS Server]の設定を[Fixed]に変更します。IPアドレスは[8.8.8.8]のままで問題ありません。これで再度docker-compose up -dを実行してみてください。
Windows再起動後、WordPressが立ち上がらない
理由がわかっていませんが、Windows再起動後にdocker-compose startで起動しようと思っても起動しない場合があります。
原因はWindows起動直後、まだdockerが立ち上がっていない状態でコンテナを起動しようとしているためです。
dockerが立ち上がると以下のような通知が表示されます。通知の表示を待ってコンテナを起動すると問題なく立ち上がります。
ポートがすでに割り当てられてしまっている場合
コンテナを立ち上げた場合に以下のようなdriver failed programming external connectivity on endpointエラーが発生する場合があります。
ERROR: for wordpress1_wordpress_1 Cannot start service wordpress: driver failed programming external connectivity on endpoint wordpress1_wordpress_1 (f774d6afbe664a9ca3c16ae3362660bec9ecf304acd40ba2ee57cce054d086eb): Error starting userland proxy: mkdir /port/tcp:0.0.0.0:8000:tcp:172.19.0.3:80: input/output error
このエラーはポートがすでに割り当たっている場合に起きるエラーのようです。おそらく以前使用していたコンテナのポートが残ってしまっているのが原因のようです。
この場合もDocker for Windowsを再起動すると解決します。
まとめ
XAMPPと比べて使えるOSが限定されますし、dockerコマンドなど覚えることもいくつかあって、少し手間な印象です。ですが一度作ってしまえば、何度でも同じ環境を構築できるのは大きな魅力ですね。
最後まで読んでいただきありがとうございます。
また読んでくださいませ。
そんじゃーね。
参考サイト
Docker DocumentationにもWordPress環境の作り方が記載されています。Docker Documentationの記載はLinux環境を前提としているので、Windows環境では動作しないことがありますので、注意が必要です。
Quickstart: Compose and WordPress | Docker Documentation