驚くほど簡単!DockerでWordPress導入

実はこのサイトもDockerで動いています。
DockerでWordPressを動かすまでの手順を簡単にご紹介したいと思います。

Dockerとは何なのか?

一言でいえば、仮想コンテナ管理アプリケーション。
このアプリがやってることは従来の仮想サーバーアプリとほとんど変わりません。
ただ仮想サーバーを「コンテナ化」することで
従来の技術を様々な点で凌駕することができています。

サーバー起動の高速化

個人的に思うに、Dockerが一躍有名になった大きな利点のひとつです。
従来の仮想サーバー技術は、一般的なパソコンと同様に起動までに長い時間がかかりました。
これをDockerはコンテナ化技術によって数秒を実現しています。

構成のレイヤー管理

DockerはPhotoShopの画像レイヤーのように、サーバーの構成情報を細かく積み重ねます。
この管理方法によって、コンテナを再利用することができるようになりました。

例えば、自分の作ったWordPressのコンテナがありますが、
これは一番下にOSのDebian8コンテナ、
それを元にしたPHP7コンテナ、
そしてさらにそれを元にしたWordPressが順に重なってできたコンテナになっています。
このコンテナにさらに何か追加したいときは、このコンテナを再利用すればいいわけです。

構成のコード化

Dockerはコンテナの構成レシピをコード化しています。
この技術はChefなどが有名ですね。
それはDockerfileと呼ばれ、コード化することでSVNやGitを使った差分管理ができます。
DockerfileはGithub(Git管理ウェブアプリ)にて簡単に公開共有できます。

コンテナの高度な管理

Dockerはコマンドによってコンテナを管理できます。
異なるコンテナ間で、通信ができるようにしたり、ファイルを共有できるようにしたり、
コンテナの複製や負荷分散までできます。
Amazon AWSのようなサービスが個人サーバーで運用可能になりました。

他にも、特徴的な所がありますが、
要するに従来の仮想化技術を大きく進歩させた、新しいアプリケーションというわけです。
このDockerの恩恵を具体的に体感できるよう、これからWordPress導入を例にしてみたいと思います。

事前準備

DockerはOSではなく、コンテナ管理アプリケーションなので、Dockerをインストールするサーバーが必要です。筆者は「さくらVPS」さんを使っています。

レンタルサーバーなどはDockerをインストールできないので注意してください。
尚、ここではサーバーの設定などは説明しません。(WordPress導入のハードルが高い理由の大部分はここにあります)

Dockerのインストール

サーバーにDockerをインストールしましょう。
ここではCentOS7でのインストール方法を紹介します。
他のOSは公式のインストールドキュメントを参考にしてください。

公式の引用ですが

$ sudo yum update

CentOSのインストーラー「yum」を最新にして

$ sudo tee /etc/yum.repos.d/docker.repo <<-EOF
[dockerrepo]
name=Docker Repository
baseurl=https://yum.dockerproject.org/repo/main/centos/7/
enabled=1
gpgcheck=1
gpgkey=https://yum.dockerproject.org/gpg
EOF

yumにdockerのリポジトリを登録します。

$ sudo yum install docker-engine

そしてDockerをインストール

$ sudo systemctl enable docker.service

インストールしたDockerをサーバー起動時の自動起動の対象にして

$ sudo systemctl start docker

Dockerを起動します。

$ sudo docker run --rm hello-world

最初からある「hello-world」コンテナを起動して問題なければOK。
「–rm」はコンテナ終了時にコンテナを削除するオプションです。

コンテナをダウンロード

WordPressコンテナと、WordPressコンテナに追加で必要なコンテナをダウンロードします。
ダウンロードはDockerコマンドを使って行います。
コマンドを実行できるようなユーザー権限を持って下さい。

docker pull wordpress

公式WordPressコンテナをダウンロードします。
少し前までは、まだPHP7対応のWordPressが無くて自分でコンテナを作りましたが、今は公式がサポートしていますのでそれを安全だと思います。

docker pull mysql

次に公式WordPressコンテナの説明にもありますが、
データベース用のコンテナが必要なので、公式MySQLコンテナをダウンロードします。

余談ですが、ダウンロードするコンテナのバージョン番号などを省略すると、配信側が指定した最新タグ(latest)のコンテナが自動でダウンロードされます。
タグを指定する場合は、「mysql:5.6.34」のようにコロンを付けます。

コンテナを起動

docker run --name db -e MYSQL_ROOT_PASSWORD=hogehoge -d mysql

まず先にMySQLコンテナを起動します。
hogehogeのところは作成したパスワードに置き換えてください。

「–name」はコンテナの名前を決めるオプション
「-e」は環境変数設定オプション、MySQLコンテナに環境変数、この場合はMySQLのパスワードを設定します
「-d」はデタッチ実行オプション、つまりバックグラウンド実行にします

これでMySQLのコンテナが起動しているはずです。
「docker ps」で起動中のコンテナ一覧が見れます。

docker run --name wp --link db:mysql -p 8080:80 -d wordpress

次にWordPressコンテナを起動します。

「–link」オプションで、先ほど起動したコンテナ(コンテナ名:イメージ名)を指定します。
これによって、2つのコンテナが1つのコンテナのように動くことができます。

「-p」オプションは、コンテナの公開通信ポートの設定です。
これを指定しないと、コンテナはデフォルト外部サーバーから非公開になります。
「8080:80」の左側(8080)が外部公開ポート、右側(80)が内部受信ポートです。
つまり、ブラウザなどで8080番にアクセスすると、コンテナの80番ポートに通信が届きます。

これにてWordPressの設置は完了です。

後は、サーバーのポートフォワード設定で80番を8080番に変えたり、URLドメイン設定などネットワーク設定をしておけば、もうWordPressサイトを公開できるでしょう。

普通にインストールする場合と比べてどうでしょうか?簡単でしょうか?

最後に、DockerでWordPressを導入するデメリットについて、
自分が運用してみて思ったのは、ファイルの配置です。

WordPressのインストールされた場所へのファイル操作は、Dockerを経由してコンテナ内部にアクセスしなければならないため、従来のファイル送信フリーソフトだけではできません。

将来的に、Dockerのコンテナ内部にまでファイルを運んでくれるフリーソフトやウェブサービスが登場するとは思いますが、それまではDockerコマンド(docker cp)を使う必要があり、がっつりWordPressのファイル構成を弄る人には大きなデメリットかも知れません。
(WordPressの管理画面からファイル送信できたりするプラグインがあったりするのかな?)


Comments

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です