- 更新日: 2019年06月27日
- 公開日: 2019年06月26日
Dockerを使ってWordPressの環境を構築する方法
Docker、なんだか便利そうだけど公式サイトや参考書を読んでもわかるようなわからないような、という方も多いのでは。また実際に Docker をチュートリアル通りに実行しても、エラーで上手くいかず疲れている方もいらっしゃるのではないでしょうか?
こちらではプログラミング初心者、サーバーサイド開発初心者を対象として、 Docker を噛み砕いてご紹介。なるべく専門用語は避けて、 Docker をイメージできるようにまとめてみました。
【記事内の実行環境】
OS: Ubuntu 16.04 デスクトップ(Linux系)
Docker: Version 18.09.6
Docker Compose: Version 1.22.0
尚、記事内の Docker コードは基本 Mac でも共通して使えると思いますし、 Windows版のコードもご紹介しています。
- Dockerとは
- Dockerの概要
- Docker社
- Dockerのトレンド
- Dockerを使うメリット・デメリット
- Dockerのメリット大分類
- Dockerのメリット小分類
- Dockerのデメリット経営者目線
- Dockerのデメリット開発者目線
- メリット・デメリットまとめ
- Dockerのインストール
- WindowsにDockerをインストール
- MacにDockerをインストール
- Linux(Ubuntu)にDockerをインストール
- とりあえずブラウザで試す
- DockerでWordPressの環境を構築する方法
- WordPressの動く仕組みを改めて確認
- DockerでWordPressを動かすために
- DockerでWordPressの環境を構築する方法(コマンドのみ)
- DockerでWordPressの環境を構築する方法(docker-compose編)
- Dockerを使ってWordPressを構築する様子の動画
- Dockerを学べるプログラミングスクール
- まとめ
Dockerとは
Dockerの概要
img: Docker公式サイト
Docker は、開発中のアプリケーションのプログラムや開発中の人工知能のプログラムを実行環境付きで管理したり、共有することができるソフトウェアになります。
Docker をパソコンにインストールすることで、簡易的なパソコンの仮想環境を構築。Windows でも Mac でも簡単に Linux サーバーの実行環境を複数作成でき、直克軽量でスピーディーな操作感が特徴的。
そして Docker 対応のクラウドサーバーを利用することで、自分のパソコンで Docker 使って作成したアプリケーションの実行環境およびプログラムを、クラウドサーバーで比較的容易にデプロイ(公開)することが可能です。 容易にデプロイできる理由としては、Docker を使って開発した場合、プログラムのみならず Apache や MySQL、 git 、 jQuery に Node.js などのソフトウェアも一緒にパッケージ管理できるから。
この結果、従来は自分のパソコンに Apache や Nginx、それから MySQL や PostgreSQL などの開発環境を整えてから、プログラミング。そして VPS や クラウドサーバーで自分のパソコン同様の Apache や Nginx、 MySQL や PostgreSQL の環境を整えてからデプロイ、という一連の流れが、大幅に簡素化。ローカル環境で開発した内容を、そのままサーバーにデプロイすることができるようになります、スゴイですね。
「自分のパソコンではプログラムが動いたけど、サーバー環境でも同じように動くだろうか?」と心配に思った経験はありませんか? Docker が解決してくれるというワケですね。
Docker社
img: Docker Facebook
Docker ソフトウェアは、2010年に開発がスタートし、2013年 3月に初回版がリリースされた比較的新しいソフトウェアになります。 Docker ソフトウェアの開発・管理・運営は、2010年に設立された Docker社が担当。 アメリカ サンフランシスコに本社を置き、従業員は 400名以上。
会社設立以来の資金調達額は累計 250億円を超えており、 企業価値は 1000億円とも言われるユニコーン企業の一つ。アメリカ情報機関の C.I.A 投資部門が Docker 社に出資したり、世界 750以上の企業・団体で使用されたりと、もはやインフラ的な存在になっています。つまり安心して Docker ソフトウェアを利用することができる、ということですね。
Dockerのトレンド
Google 検索で Docker について調べていくと、
- 会社で Docker 採用になったから
- 今度のプロジェクトは Docker 管理
など、仕事上で Docker が必用になり、学習するケースが多い様子。参考までに就職・転職する際に、 Docker スキルの需要がどれだけあるか調べてみました。
求人紹介サイト | 検索キーワード | ||
Docker | Rails | PHP | |
2216 | 2851 | 5069 | |
indeed | 2490 | 3083 | 41354 |
doda | 176 | 251 | 2139 |
クラウドワークス | 1 | 40 | 105 |
upwork | 120 | 123 | 3135 |
クラウドワークスを除いては、ほぼ Ruby on Rails と同じぐらい Docker スキルには需要がある様子、スゴイですね。IT企業への就職・転職を考えているなら Docker 学習も検討要因になるということでしょう。
ちなみに Google トレンドで Docker の様子を確認すると、以下のように。
img: Google Trends
Docker のトレンドは AWS や Azure と比例関係にあり、 Azure と検索ボリュームが同じぐらいであることが確認できます。また国別で確認すると、中国、ロシアで Docker は人気の様子。
今後も AWS や Azure などのクラウドサーバー市場は伸びると予測されていますので、 Docker もそれに比例してニーズが高まると考えられますね。つまり Docker、できた方がいいということでしょう。
Dockerを使うメリット・デメリット
Dockerのメリット大分類
- 開発コストの削減
- 開発時間の削減
Docker のメリットは、何といっても開発スピードを加速させ、シームレスにデプロイできること。 Docker 社が公開している成功事例をいくつかご紹介。
- メットライフ(保険会社)
新規サービスの開発にかかる時間を 1/3 に短縮、トータルコストの削減に[*] - VISA(金融)
Docker採用半年後、カード決済処理能力が 10倍に[*] - ロッキード・マーティン(軍・宇宙開発)
2017年 Docker 採用、結果は?[*]
この他にも教育、ヘルスケア、政府系などの成功事例が存在*。どれもスケールの大きいプロジェクトの紹介ですが、小規模開発においてもそのメリットは通じることでしょう。
またこうした世界トップランナーの企業が Docker を採用し、成功しているということは、それらに関係する各業種の企業も今後 Docker の採用が進むかもしれません。ますます Docker スキル、必用かもしれませんね。
Dockerのメリット小分類
メリット大分類では、 「コスト削減や開発時間の短縮化」に焦点を当てご紹介しましたが、もう少し実務レベルでの Docker メリットを確認してみたいと思います。
- タダでスグにどのパソコンでも利用できる
- WordPress やRails、Node.js などのサンプルアプリは3分で起動可能
- 人工知能開発もOK
自分のパソコンにアプリの開発環境を作らなくてもOK
200万以上のLinuxイメージを利用できる
5万以上のGitHubで公開されているLinuxイメージを利用できる
自分で作ったLinuxイメージを公開できる
VirtualBox に比べて軽量
AWS などを利用すれば開発した Docker製アプリを容易にデプロイできる
アプリケーションの開発環境を簡単に共有できる
Docker ローカル内のデータ共有が簡単
Linuxイメージ・・・ OSファイルのこと
この他にも Docker のメリットはあると思いますが、代表的なものをリストアップしてみました。各項目の詳細内容については、以下のタブを開いてチェックしてみてください。
「タダでスグにどのパソコンでも利用できる」について
Docker は Windows でも Mac でも Linux でも OS 問わずパソコンにインストールしてすぐに利用することができます。また Docker のソフトウェア自体も GitHub で公開されているオープンソース型、公平性と安全面が担保されていますね。「WordPress やRails、Node.js などのサンプルアプリは3分で起動可能」について
Docker にはマルチで Linuxイメージ(コンテナ)を操作できる Compose という機能が備わっています。Compose を使えば Apache サーバーと MySQLデータベースの構築も一発で完了、つまり少ない作業で開発に必用なベースアプリの環境を構築することができます。「人工知能開発もOK」について
「人工知能開発もOK」、これは Docker 環境下で TensorFlow や Keras などの人工知能系ライブラリが使えることや GPU との連動も可能にするLinuxイメージ(nvidia/cuda)があること。自分のパソコンのスペックが低くても、Docker とクラウドサーバーの CPU・GPU 機能を利用して、ハイスペックな開発環境を利用することができますね。「自分のパソコンにアプリの開発環境を作らなくてもOK」について
通常アプリケーションや人工知能ソフトの開発を行おうと思うと、自分のパソコンにプログラミング言語 Python や Ruby、 それから Apache や Nginx などのサーバー、 MySQL や NoSQL などのデータベースソフトをインストールすると思います。 中にはこの開発環境を作成する段階でうまくいかずに、プログラミング学習やアプリ開発を断念される方も。。。Docker を使えば、こうした開発環境を自分のパソコンではなく、 Docker の中に作成することができます。そしてその Docker の開発環境の作り方は基本簡単で、
docker run -it -p 8000:80 nginx
などでOK。ブラウザの URL 欄に localhost:8000 を入力すると Nginx サーバーが起動していることが確認できます。
最初の内は便利だな、と思いますが、実際に Docker ベースで開発しようと思うと Volume などの知識が必用に。
「200万以上のLinuxイメージを利用できる」について
Docker社は、Docker で作成した Linuxイメージのデータを共有できるプラットフォーム「Docker Hub」を公開中。 Ubuntu や CentOS といった Linuxの基幹OS をはじめ、 OS: Debian に Apache がセットされた Linuxイメージ・ファイルや OS: Ubuntu に WordPress がセットされた Linux イメージ・ファイルなどたくさんの Linuxイメージファイルが存在し、その累計数は200万超え。 この環境を利用することで設定が複雑な Java フレームワークの Spring なども簡単に利用することができます。「自分で作ったLinuxイメージを公開できる」について
Docker を使って自分で作成した Linux のイメージファイルは、 Docker Hub に公開することが可能です(*)。例えば WordPress のイメージファイルにキャッシュ機能を追加した以下のようなイメージファイル。
【Dockerfile】
FROM wordpress
RUN apt-get update
RUN apt-get install -y libz-dev libmemcached-dev && \
pecl install memcached && \
docker-php-ext-enable memcached
GitHubの様なバージョン管理機能はないものの、イメージファイルをタグ管理することによってバージョン制御することができます。
チームでアプリケーションを開発する際に便利ですよね。
また 上記では Linuxイメージの「WordPress」 をベースにキャッシュ機能を追加した 「wp-cahe」 という新しい Linuxイメージファイルを作成し、公開しました。https://hub.docker.com/r/oshimamasara/wp-cache
次はこの「wp-cache」という Linux イメージファイルをベースに git や Node.js など追加していくことが可能。つまり段階的に機能を追加していくことができ、スケーラビリティ(拡張性)に富んだ開発環境を構築することができる、ということですね。
* Docker Hub への公開には、無料・有料プランで制限が違ってきます。
* 普通、Linux のイメージファイルを自分で編集することはできません。Docker は、Linux イメージを「コンテナ」として管理することでイメージファイルの編集を可能にしています。
「VirtualBox に比べて軽量」について
一つのパソコンの中で他の OS を利用することができるツールとしては、 Docker の他に VirtualBOX や VMware などが有名でしょう。VirtualBox などを利用しても Linuxのイメージファイルを利用することはできますが、イメージファイルのデータサイズは比較的大きく、編集することもできません。
【Ubuntu 18.04のイメージファイル・サイズ】
VirtualBox で利用する場合 2GB
Docker で利用する場合 64MB
Docker で Ubuntu を利用すると、従来のイメージファイルのサイズより小さく利用・管理することが可能。これによってクラウドサーバーでもイメージファイルをデプロイしやすい環境となっています。また自分のパソコンのハードディスクの使用領域を汚すことなく、たくさんの Linux イメージファイルを作成・管理することが可能に。
「AWS などを利用すれば開発した Docker製アプリを容易にデプロイできる」について
Docker を使用すればサーバーサイドの開発環境を基本的に構築する必要がありません。 Docker Hub に自分で作った Linux イメージをアップする要領でサーバーにアプリケーションをデプロイできます。大幅に作業時間を短縮化できますね。
【Dockerに対応しているサーバー例】
・AWS
・Azure
・Google Cloud
・Arukas
AWSだったら無料利用枠で Docker デプロイを試せますし、国内サーバーの Arukas も 1CPU 1GBメモリー環境で 1000円/月ぐらいの料金。個人でも利用できるスモールスタート可能な利用環境となっています。
「アプリケーションの開発環境を簡単に共有できる」について
チームでアプリケーションを開発する際は、プログラミング言語やフレームワーク、ライブラリなどのバージョンを整えておく必要がありますね。その点 Docker はストレスフリーかもしれません。 Docker には OS 環境を自動で整えてくれる Dockerfile がありますから。docker build .
この一つのコマンドで、特定のOS や vim、 git、 Apache などを含む Linuxイメージファイルを自動作成してくれます。
【Dockerfile サンプル】
【ファイル名 Dockerfile】
FROM ubuntu:18.04
MAINTAINER oshimamasara
RUN apt-get update && apt-get -y upgrade
RUN apt-get install -y vim
RUN apt-get install -y apache2
【実行コマンド】
docker build -t new-app:1.0 .
docker run -it new-app:1.0 bash
vim -version
apache2 -version
exit
【結果】
「Docker ローカル内のデータ共有が簡単」について
アプリケーションを開発する際、プログラムは一定で実行環境だけ色々試したい時ってありますよね。Docker なしの場合は、フレームワーク作成→ファイルのコピペ という流れで、手間はかかるし、ハードディスクの使用領域も増える一方。しかし、 Docker なら Volume という機能で一つのファイルを他の Linuxイメージ内(コンテナ内)で使用することが可能です。慣れれば便利な Volume機能ですが、最初の内はチョット手間取るかもしれません。
Dockerのデメリット経営者目線
- 運用コスト
- エンジニアへの周知徹底
- サーバー環境
Docker 自体は無料ですぐに利用できますが、Docker 共有サイトの Docker Hub プライベート領域を使おうと思うとお金が必要です。
img : Docker Hub
月 800円程度から利用でき、また 1アカウント 1プライベート・レポジトリが割り当てられていますので、スモールスタートで試すことはできますが、 GitHub に比べると割高かもしれません。
Docker | GitHub | |
料金(USD/Month) | 7 | 9 |
プライベート・レポジトリ数 | 5 | ∞ |
そして Docker を採用して開発を進めようと決めると、エンジニア全員に Docker の利用を周知徹底する必要があります。 Qiita の書き込みから見ても、 Docker 慣れていない方もいますので「学習コスト」が発生するでしょう。
また Docker に対応したサーバー・プロバイダーは、AWS や Azure 、 Google Cloud、 Arukas と限定的。場合によってはデプロイ先のサーバーを変更する必要が。
こうした ”お金” と ”初期の運営環境” が、経営者目線で見るとデメリットになるかもしれません。
Dockerのデメリット開発者目線
- Dockerスキルの習得
- 通信パケットの増加
開発者目線で Docker を見た時、やはり一番に心配になるのが「使いこなせるかどうか」でしょう。 Docker 特有の実行環境、データ形式は独特で、パソコンや OS、ネットワークに関する一通りの知識が必要。また基本的にはコマンドライン(ターミナル)で実行しますので、サーバー環境の開発経験がない方はシンドイかもしれません。
ただ Docker のコマンド入力については、kitematic というソフトが Docker 操作を手伝ってくれますので、多少は安心かもしれませんね。
img: kitematic
kitematic を使用するとコマンド入力無しで、 Docker Hub 上の Linuxイメージを導入でき、 Linuxイメージ(コンテナ)も編集することができる便利なツールです。
あと通信パケットの増加、これは自宅で Docker を使う場合に注意が必要で、 Docker をいろいろ操作していると頻繁に Docker Hub から Linux イメージファイルをダウンロードします。200MB、 400MB と普通のイメージファイルに比べれば Docker のイメージファイルは軽量というものの、回数が多くなれば 3日で 10GB も超えてくるので要注意です。
メリット・デメリットまとめ
Docker のメリット・デメリットをまとめますと、
- 便利そうだけど、慣れるまではチョット大変
といったところでしょう。
パソコンをはじめて使い始めた時、開発環境をはじめて作った時、なんでもはじめはチョット大変なものです。
Dockerのインストール
WindowsにDockerをインストール
- Docker インストール for Windows 公式ページ
- Docker ダウンロードサイズ 540 MB
Windows に Docker をインストールする手順
まずは上記の Docker 公式ページにアクセスして、ダウンロードページを開きます。このとき Docker Hub のアカウント情報が必要になりますので、合わせて Docker Hub に登録しておきましょう。
Docker のダウンロードが完了したら、 Docker for Windows Installer.exe をダブルクリックでインストール実行。
インストールが完了したら画面右下のインジゲーターを開いて、くじらのマークを右クリック、 Settings を選択。下記画像のように Windows で Docker を使えるように設定項目を変更します。
Docker のインストール、設定が完了したら PowerShell を開いて下記コマンドを実行してみましょう。
docker --version
docker pull hello-world
docker images
Docker を使い始めた頃は、とにかく Linuxイメージ(docker images) は貯まりますし、イメージファイルの稼働状況(docker container ls)もチンプンカンプンになりやすいです。
そんなときは Docker の Settings 画面から Docker をリセットしてあげると、溜まったイメージファイル、データファイル(volume) を全削除することができます。
MacにDockerをインストール
- Docker インストール for Mac 公式ページ
- Docker ダウンロードサイズ 546 MB
Mac に Docker をインストールする手順
上記公式ページにアクセスして、「Download from Docker Hub」 をクリック。Docker Hub のアカウント情報が求められますので、合わせて Docker Hubのアカウント作っておきましょう。
Docker ファイルのダウンロードが完了したら、ダウンロードファイルをダブルクリック。すると上図のようなインストールの画面が開きますので Dockerアイコンをアプリケーション・フォルダにドラッグ&ドロップ。
Docker のインストールが完了するとアプリケーション・フォルダーに Docker が追加されていることが確認できます。
次は Docker アプリケーションを起動する必要がありますので、アプリフォルダを開いて Docker を起動。
Docker が起動すると画面上部ツールバーに Docker アイコンが表示されて、クリックしてみると Docker が起動中であることが確認できます。
Docker が使えるか確認するために以下のコマンドをターミナルに入力して Docker を確認してみましょう。
docker --version
docker pull hello-world
docker images
上図のようにエラーなく Docker イメージが作成できれば、Docker の利用環境 OK です。
Linux(Ubuntu)にDockerをインストール
Ubuntu に Docker をインストールする手順
ソフトウェアセンターからも Docker をインストールすることできますが、今回は公式チュートリアルに沿って Ubuntu 16.06 にインストール。Docker 公式ページには、Ubuntu のほかに CentOS、Debian、 Fedora、 Binaries へのインストール方法が紹介されています。 基本的にはチュートリアルに書かれているコマンドを実行するだけで OK。
【Ubuntuに Docker をインストールするコマンド】
docker
sudo apt-get update
sudo apt-get install \
apt-transport-https \
ca-certificates \
curl \
gnupg-agent \
software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo apt-key fingerprint 0EBFCD88
sudo add-apt-repository \
"deb [arch=amd64] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) \
stable"
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io
【インストールを確認するコマンド】
sudo docker run hello-world
docker images
docker --version
docker container ls -a
下図のようなリアクションがあれば Docker の環境設定 OK です。
とりあえずブラウザで試す
画像クリックで拡大
「ちょっと500 MB の Docker ソフトをダウンロードするのはしんどいな」「パソコンのハードディスク、空きスペースあまりないんだよな」、そんな時はとりあえずブラウザで Docker を試すことができます。
テストサイトにアクセスし、画面左の 「ADD NEW INSTANCE」 をクリック。すると任意の IP アドレスが割り当てられた Ubuntu サーバーが起動。
試しに
docker images
と入力すると Docker の利用環境が整ってることが確認できます。
docker run -it -p 8000:80 nginx
上記コマンドを実行すると Docker Hub に公開されている Nginx サーバーをインストールし、起動・確認することができますね(上図参照)。
ここで行っている内容を可視化すると以下のようなイメージに。
ちょっと複雑ですが、きちんと Docker を利用できますし、メモリ 4GB、 CPU Intel Xeon E5-2673 v3* というなかなか良いスペックのテストサーバー環境。制限時間も 4時間ありますので、結構楽しめます。
DockerでWordPressの環境を構築する方法
WordPressの動く仕組みを改めて確認
Docker を操作する前に、これから設定する WordPress を使うためにどんな要件がサーバーに必要なのか知っておく必要があります。なので改めて WordPress の仕組みを簡単に確認。
上図で示すように WordPress 製の WEB サービスを作ろうと思った時、
- PHP搭載のサーバー環境が必要
- データベースの環境が必要
最低この二つの要件を満たす必要があります。
そしてこのサーバーとデータベースの要件を満たそうと Docker モデルを考えた時、以下のようなやり方が考えられるでしょう。
- Ubuntu や CentOS の Linuxイメージを作成して、そのイメージファイルにサーバー環境や PHP、データベースを追加していく方法
- Docker Hub で公開されている WordPress や MySQL を使う方法
今回は先人の知恵を借りて後者の「Docker Hub で公開されている WordPress や MySQL を使う方法」を選択して、 WordPress を動かしたいと思います。
DockerでWordPressを動かすために
Docker Hub で 「WordPress」 と検索すると Apache や PHP のみ搭載されたレポジトリが見つかります。データベース機能も一緒になったリポジトリは見当たりません。せっかくなのでデータベースもセットされた WordPress のリポジトリを作成しようと考えましたが、設定項目をリストアップしてみると、、、膨大なコード量で制御しにくいため辞めました。
今回は既に公開されている 「WordPress」 と 「MySQL」 のリポジトリを利用して WordPress の環境を作成してみたいと思います。
【Docker で WordPress を動かすイメージ】
これから Docker で作成する WordPress を可視化すると上図のようなイメージ。リポジトリ: WordPress の中は Dockerfile に書かれている内容で動作し、それを読み込んでみると冒頭に
FROM php:7.1-apache
と書かれています。
これは Docker Hub のリポジトリ: php:7.1-apache を継承する意味(下図参照)。
画像クリックで拡大
そしてその継承元の php:7.1-apache を見てみると
FROM debian:jessie
と OS: Debian の上に PHP がセットされていることが確認できます(下図参照)。
画像クリックで拡大
Docker を使った Linuxイメージファイルの継承例で、 ドンドン機能を拡張できる気がしますね。
DockerでWordPressの環境を構築する方法(コマンドのみ)
docker run --name my_mysql -e MYSQL_ROOT_PASSWORD=pass -d mysql:5.7
docker run -e WORDPRESS_DB_PASSWORD=pass --link my_mysql:mysql -d -p 8080:80 wordpress
上記コマンドを実行し、ブラウザの URL欄に
localhost:8080
と入力すると WordPress の設定画面に移動します。
上記コマンド内容を可視化してみると以下のようなイメージ。
【最初のコマンド MySQLについて】
画像クリックで拡大
docker run --name my_mysql -e MYSQL_ROOT_PASSWORD=pass -d mysql:5.7
上記コマンド実行によって
- MySQL 機能搭載の Linuxイメージ 「mysql」 バージョン 5.7 を用意
- その Linuxイメージの名称は my_mysql として、コンテナ化
- コンテナ化された Linuxイメージの my_mysql 内に MySQLパスワードを pass としてセット
- バックグランドで実行(-d)
Linuxイメージをコンテナ化することで、本来編集できないイメージ内の構成を編集可能にしています。このコンテナ化こそが Docker のメイン機能。 そして編集できるようになった Linuxイメージの mysql に、データベースのパスワードを設定。
【最初のコマンド実行結果】
画像クリックで拡大
最初の状態を docker images や docker volumes で確認。何もない状態から mysql のイメージ作成、コンテナ作成、データ(volume) が作成できていることが確認できます。これらの Docker のコンテナ詳細情報は、
docker container inspect my_mysql
でも確認可能。
【2回目のコマンド WordPressについて】
画像クリックで拡大
docker run -e WORDPRESS_DB_PASSWORD=pass --link my_mysql:mysql -d -p 8080:80 wordpress
上記コマンド実行によって
- WordPress 機能搭載の Linuxイメージ 「wordpress」 最新版 を用意、それと同時に + Docker によって自動的にコンテナ化
- 自分のパソコン内の Docker にあるコンテナ: my_mysql とリンク
- その際必要となるパスワードは pass を使用
- 出力先のポートは 8080
- バックグランドで実行(-d)
【2回目のコマンド実行結果】
画像クリックで拡大
先ほどの mysql 同様に wodrpressイメージの導入、 WordPress 用コンテナ、 wordPress用 volume が作成されたことが確認できます。そしてブラウザの URL に localhost:8080 と入力すると WordPress の設定画面が確認できますね。
画像クリックで拡大
そして各設定を行って WordPress をオープンすると、トップページや管理画面は開きますが、自分のパソコンにファイルは何も存在しません(下図参照)。
画像クリックで拡大
この従来の WordPress 操作感とは違う違和感。ここの部分の理解、慣れるのが Docker の最初の難関と思います。
まず Docker で作成・起動した WordPress、これらのファイル群は docker volume ls で確認する事ができます。
画像クリックで拡大
docker volume ls を実行すると現在自分のパソコン内にある Docker で管理しているデータ群(volume) を確認することが可能。そしてさらに詳細を確認するために docker volume inspect ボリューム名 を実行すると、データの保存先が確認できます(上図)。
データの保存先にアクセスすると WordPress に必要なファイル群が存在することが確認できます(下図)。
画像クリックで拡大
Windows は volume ファイルへのアクセス困難
しかし、なぜ WordPress のデータがこんなパソコン内部に作成され、管理されているのでしょうか? これには Docker の volume 機能が関係。文量的に今回は volume の説明を割愛させていただきますが、この volume の”感覚”は実際に Docker を触って、試して実感するしかないと思います。
せっかく便利な Docker なのに、簡単にアプリケーションを編集できなければおもしろくありません(特に Windows)。 試しに WordPress を編集しやすいように、現在作業しているディレクトリに WordPress の一部ファイルを表示させてみたいと思います。
ls
pwd
docker run -e WORDPRESS_DB_PASSWORD=pass --link my_mysql:mysql -d -p 8888:80 -v /home/oshimamasara/4:/var/www/html/wp-content/ wordpress
【実行結果】
画像クリックで拡大
先程までなかった WordPress のファイル群が現在のディレクトリに表示されました。これで WordPress の CSS や PHP を編集することができますね。
現在の作業ディレクトリに WordPress のファイル群を表示できたポイントは、コマンド内に volume に関する記述を行ったため。
【volume に関するコード】
-v /home/oshimamasara/4:/var/www/html/wp-content/
-v が volume 指示で、 /home/oshimamasara/4 がボリュームの表示先、 /var/www/html/wp-content/ が Docker コンテナ内の今回抽出したいディレクトリになります。 /var/www/html/wp-content/themes とすると theme フォルダのみを表示できます。
ただしこの volume 操作、Docker の Volume 機能を理解した上で使わないと、チンプンカンプンになるので要注意です。
sudo code --user-data-dir="~/.vscode-root"
などのコマンドで Super User として Visual Studio Code を起動し、ファイルを編集する必要があります。
また Windows の場合は、 Mac や Linux とディレクトリ構造が違いますので、下記コマンドを実行する必要がありますね。
docker run -e WORDPRESS_DB_PASSWORD=pass --link my_mysql:mysql -d -p 8888:80 -v /C/Users/ユーザー名/保存先のディレクトリ:/var/www/html/wp-content/ wordpress
【例】
docker run -e WORDPRESS_DB_PASSWORD=pass --link my_mysql:mysql -d -p 8080:80 -v /C/Users/oshim/programming/docker3:/var/www/html/wp-content/ wordpress
DockerでWordPressの環境を構築する方法(docker-compose編)
先ほどの WordPress 設定で使った Docker のコマンド
docker run --name my_mysql -e MYSQL_ROOT_PASSWORD=pass -d mysql:5.7
docker run -e WORDPRESS_DB_PASSWORD=pass --link my_mysql:mysql -d -p 8888:80 -v /home/oshimamasara/4:/var/www/html/wp-content/ wordpress
一時的に使う分にはいいかもしれませんが、設定の変更や管理にはチョット不適切な感じですよね。この問題、 Docker の Compose 機能が解決してくれます。
上記コマンドを docker-compose.yml という決まったファイルに収めることで、コマンドを管理できるように。たとえば上記コマンドを docker-compose.yml に置き換えてみると
version: '3'
services:
wordpress:
image: wordpress
container_name: my_wordpress
restart: always
ports:
- 8880:80
environment:
WORDPRESS_DB_PASSWORD: pass
volumes: ['./:/var/www/html/wp-content']
mysql:
image: mysql:5.7
container_name: my_mysql
restart: always
environment:
MYSQL_ROOT_PASSWORD: pass
Windows版の docker-compose.yml
【Windowsの場合】
Windows と Linux、Mac ではディレクトリ構造が異なるためvolume のコードが変わってきます。以下のコードを元にユーザー名ディレクトリを適切なものに変更し、 docker-compose up を実行すると WordPress の起動および WordPress のファイル一覧が表示できると思います。
version: '3'
services:
wordpress:
image: wordpress
container_name: my_wordpress2
restart: always
ports:
- 8880:80
environment:
WORDPRESS_DB_PASSWORD: pass
volumes: ['/C/Users/ユーザ名/ディレクトリ:/var/www/html/wp-content']
mysql:
image: mysql:5.7
container_name: my_mysql2
restart: always
environment:
MYSQL_ROOT_PASSWORD: pass
【実行結果】
//Windows版の docker-compose.yml おわり//
【実行結果】
画像クリックで拡大
上記コードを実行した結果、 my_mysql という Docker コンテナはもう存在するので ❌ 、とのこと。 my_mysql2 に名称を変えて再度実行してみると上手くいきました。また Docker のコンテナを止めていない場合は、ポート番号も変える必要が。
コマンドで Docker を操作するのに比べて、 docker-compose.yml を使うことで以下の様なメリットを感じることができるでしょう。
- 体系的に Dockr コンテナを作成、編集できる
- コマンド入力の手間が省ける
- Docker のコンテナ環境を他の人と共有しやすい
- ファイルの保存先や出力ポートを簡単に編集できる
- Docker コンテナの RUN・STOP を管理しやすい
基本的にはコマンドのみの Docker 実行に比べると docker-compose の方が管理しやすく、分かりやすいです。また docker-compose.yml のファイルを共有すれば、他の人も自分と同じ Docker コンテナをすぐに作れるので便利。
そして docker-compose up とすれば Docker コンテナの実行、 -d のオプションを付けて docker-compose up -d とすればバックグランドで Docker コンテナ実行、とコンテナの制御性もイイです。
このようなことから多くの Docker 製 WordPress では、 docker-compose.yml を用いて Docker コンテナを作成していますね。
コンテナの作成・制御に優れている点を利用して、 phpMyAdmin も足してみました。
phpMyAdmin付きのWordPress docker-compose.yml
version: '3'
services:
# Database
db:
image: mysql:5.7
volumes:
- db_data:/var/lib/mysql
restart: always
environment:
MYSQL_ROOT_PASSWORD: password
MYSQL_DATABASE: wordpress
MYSQL_USER: wordpress
MYSQL_PASSWORD: wordpress
networks:
- wpsite
# phpmyadmin
phpmyadmin:
depends_on:
- db
image: phpmyadmin/phpmyadmin
restart: always
ports:
- '8888:80'
environment:
PMA_HOST: db
MYSQL_ROOT_PASSWORD: password
# LogIn// user name root password password
networks:
- wpsite
# Wordpress
wordpress:
depends_on:
- db
image: wordpress:latest
ports:
- '8080:80'
restart: always
volumes: ['./:/var/www/html/wp-content']
environment:
WORDPRESS_DB_HOST: db:3306
WORDPRESS_DB_USER: wordpress
WORDPRESS_DB_PASSWORD: wordpress
networks:
- wpsite
networks:
wpsite:
volumes:
db_data:
【実行結果】
画像クリックで拡大
ちょっと WordPress と MySQL と phpMyAdmin を接続するネットワーク関係のことが複雑ですが、 localhost:8080 にアクセスすると WordPress、 localhost:8888 に アクセスすると phpMyAdmin 確認できますね。
このように Docker の Compose 機能を使うと、アプリケーションをスムーズに体系的に拡張でき、必要に応じてバージョンを変えたり、ネットワークを変えたりでき、アプリ開発がはかどると思います。
Dockerを使ってWordPressを構築する様子の動画
動画では、 OS に Ubuntu を使っていますが、 Mac でも Windows でも同じコマンド内容です。 Windows の場合は、 PowerShell で操作しましょう。
Dockerを学べるプログラミングスクール
CodeCampGATEは、オンライン × マンツーマンで定評のあるプログラミングスクール CodeCamp が運営するエンジニア育成コース。 PHP をベースに Web アプリケーションを学習する中で Docker も学習。
4か月間即戦力となるためにプログラミング・リテラシーを集中的に高め、 IT 企業への就職・転職をサポートしてくれるという内容。エンジニアとしての活躍も視野に入れている方は、まずは公式ページにアクセスして無料相談から始めてみてはいかがでしょうか?
【CodeCampGATE の特徴】
● オンライン学習型
● 現役エンジニアからのマンツーマン指導
● たくさんの就職・転職実績
● 東証一部上場企業のグループ会社なので安心
● 受講料 494,640円(税・入会金込)/4か月間
自走するエンジニア育成が得意の DIVE INTO CODE で公開されている「機械学習エンジニアコース」で Docker を学習することが可能です。 Python や データサイエンティスト、人工知能エンジニアを目指している方は参考になりますね。
【DIVE INTO CODE 機械学習エンジニアコースの特徴】
● 事前テストあり
● 通学型(東京渋谷)
● 少人数制(10名)
● 資本金 1000万円
● 受講料 998,000円(税・入会金込)/4か月間
プログラミングスクールはたくさんありますが、 Docker のレッスンを取り入れているスクールは上記 2校しか確認できませんでした。Docker、現場ではニーズがあるものの教育環境はまだまだ、といったところでしょうか。
\一流デザイナーのスキルが身に付く/
まとめ
Docker、一週間学習しましたが、本当に奥が深く、感覚的には新しいコンピューティング・システムを一から理解するといった感じで、モチベーションと根気、作業時間が必要になると感じました。
Docker の理解・操作は、最初チョット大変ですが、現場レベルでは Docker 根付いていきそうなのでエンジニア就職・転職を考えている方は必須項目かもしれません。
Python、 Django、 TensorFlow、 iOS開発、 Android開発、 WordPress、 Node.js、 Angular など数多くのプログラミング言語やフレームワーク、アプリ開発を体験したことある私ですが、 Docker、 一番難しかったかもしれません。
「Docker、参考書を買ったけど。。。」「同じようにコマンドを実行してもエラー、、、」という方、モチベーションが低下していませんか? 時間が浪費していってませんか? 違うことを考えるようになってきていませんか?
今後も途絶えることのない IT テクノロジー、ちょっとお金はかかるかもしれませんが自分への 人生投資 としてプログラミング・スクール検討してみませんか?
CodeCampでは、 プログラミング初心者の方にマッチした学習メソッドが得意。無料体験や無料相談も随時行なっていますので、まずは公式ページより確認してみてください。
- この記事を書いた人
- オシママサラ