DockerのインストールとWordPressの起動 - さくらのクラウド超入門・サーバ編(3)


概要

前回はサーバの安全性を高めるため TCP Wrapper で SSH のアクセス制限 をしました。次は、クラウドを使ってインフラ(IaaS)の操作を行う前段階(の続き)です。

実際のアプリケーション動作環境を想像しやすいように、開発環境から整えます。コンテナを使った開発・実行環境である Docker をセットアップし、WordPress (PHP+MySQL)のコンテナを Docker Compose で実行する手順と、サーバに対する電源操作手順を学びます。

解説

アプリケーション開発と操作を簡単にする Docker とは?

Docker 普及前後で、サーバを準備した後の環境構築方法が大きく変わりました。Apache(アパッチ) や PHP(ピーエイチピー) などウェブサーバや言語開発環境を整える前に、今は「Docker」(ドッカー)をセットアップする方法があります。Docker があれば、yum (ヤム)や apt (アプト)を使わなくても、1つのホスト上で複数のサーバ機能や開発言語の環境を同居できます。 Docker についての詳細は、 こちらのスライド資料をご覧ください

Docker は、アプリケーションを簡単迅速に開発・移動・実行するためのプラットフォーム(プログラム群)です。Docker Engine(エンジン)というプログラムを通して、アプリケーションをコンテナ(と呼ばれる、名前空間やリソースを分離する技術の組み合わせた、プロセス間の隔離という「特別な状態」)として操作できます。Docker は 2013 年に dotCloud, Inc.(当時のドットクラウド社、現在 はDocker, Inc.)によってオープンソースとして公開されており、誰でも自由に使えます。

Docker でコンテナを操作するには Docker Engine をセットアップする必要があります。セットアップ後は docker コマンドを使うだけで、コンテナ化したアプリケーションを操作できます。

Docker のインストール用スクリプトの利用

CentOS 7 での Docker インストールは、 [get.docker.com])(https://get.docker.com) で配布されているインストール用スクリプトの利用が便利です。覚えておくのは get.docker.com というホスト名のみ。これをブラウザで開くと、インストール用スクリプトが表示されていて、さらに中にインストール用のコマンドも書かれています。

Docker Engine の正確な手順は、 パッケージ等のセットアップ が必要です。本番向けではないテストや検証用途であれば、Docker Engine のリポジトリと常に最新安定版の Docker Engine をセットアップする方法が簡単です(逆に言いますと、インストールする時点で Docker のバージョンが変わってしまうため、本番環境での利用は推奨されていません)。

インストールするには、サーバにログイン後、以下のコマンドを実行します。

curl -fsSL https://get.docker.com -o get-docker.sh
sh get-docker.sh

コマンド実行直後は 20 秒間の待機時間です。その段階で Ctrl+C をキー入力するとインストールを中断できます。進行後は、セットアップが完了するまで待ちます。

セットアップが終わったら、Docker Engine デーモン(dockerd)の起動と、サーバ起動時に自動起動するコマンドを実行します。

systemctl start docker
systemctl enable docker

それから、 docker version コマンドを実行し、Docker のバージョン情報に Engine: の項目が出るかどうかを確認します。もし Engine の項目が表示されず Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running? が出る場合、Docker のセットアップが完了していない可能性があります。あるいは、 Docker Engine が停止している場合は、起動します。

以上で Docker のセットアップ作業は完了です。

Docker で Nginx を動かす

Nginx コンテナを起動して、ウェブサーバが表示できるかどうか確認しましょう。

次のコマンドは nginx:alpine という Nginx が Alpine Linux (アルパイン・リナックス)上で動作する小さな Docker イメージを使い、 --detach (デタッチ)モードというバックグラウンドでコンテナを実行し、かつ、 --publish 8080:80 でホスト側ポート 8080 をコンテナ内のポート 80 に割り当て(マッピング)し、 --name でコンテナ名を mynginx とします。

docker run --detach --publish 8080:80 --name mynginx nginx:alpine

それから docker ps コマンドを実行すると、 mynginx という名前でコンテナが実行中( StatusUp )になっているのがわかります。

この状態で、ウェブブラウザを使い、 http://<サーバのIPアドレス>:8080 を実行します。次のような「Welcome to nginx!」(nginxへようこそ!)と表示されれば正常です。

実行しおわった後の nginx コンテナは停止・削除します。

docker kill mynginx
docker rm mynginx

Docker Compose のインストール

WordPress (ワードプレス)のようなアプリケーションは、複数のプログラムが動作します。複数のコンテナを扱うには、Docker Engine を単体で使うのよりも、Docker Compose(コンポーズ)という名前のツールと一緒に使うのが便利です。コンテナに関する情報などを YAML (ヤムル)ファイルに記述しておきます。

Docker Compose をインストールした環境であれば、コマンド docker-compose up を実行するだけで、複数のプログラムを同時に制御できます。

Docker Compose のインストール方法は複数ありますが、ここでは yum を使ってパッケージをインストールします。

yum -y install docker-compose

インストール後は、次のようにして、バージョン情報が表示されるかどうかを確認しましょう。

# docker-compose  version
docker-compose version 1.18.0, build 8dd22a9
docker-py version: 2.6.1
CPython version: 3.6.8
OpenSSL version: OpenSSL 1.0.2k-fips  26 Jan 2017

Docker Compose で WordPress を動かす

Docker Compose でプログラムを動かすには、まず作業用のディレクトリを作成し、移動します。ここでは mywp をいう名前のディレクトリを作成して移動します。

mkdir mywp
cd mywp

それから、 vi docker-compose.yaml などを実行し、同じディレクトリ内に YAML ファイルを作成します。内容は以下の通りにします( 参考: Docker Hub の wordpress イメージのドキュメント(英語) )。

または、

curl https://gist.githubusercontent.com/zembutsu/e46c2a8f2ebb2ef4347a39914ba8e145/raw/9283112c756b7dfdc8066ca456b9adc4d987d909/docker-compose.yaml -o docker-compose.yaml

を実行して、 docker-compose.yaml を作成します。

yaml
version: '3.1'

services:

  wordpress:
    image: wordpress
    restart: always
    ports:
      - 80:80
    environment:
      WORDPRESS_DB_HOST: db
      WORDPRESS_DB_USER: exampleuser
      WORDPRESS_DB_PASSWORD: examplepass
      WORDPRESS_DB_NAME: exampledb
    volumes:
      - wordpress:/var/www/html

  db:
    image: mysql:5.7
    restart: always
    environment:
      MYSQL_DATABASE: exampledb
      MYSQL_USER: exampleuser
      MYSQL_PASSWORD: examplepass
      MYSQL_RANDOM_ROOT_PASSWORD: '1'
    volumes:
      - db:/var/lib/mysql

volumes:
  wordpress:
  db:

ここまで準備すると、同じディレクトリ内に docker-compose.yaml が出来ています。その状態で、次のコマンドを実行し、 Docker イメージのダウンロード(pull) と、Docker Compose のサービスとして複数のコンテナを同時実行します。

docker-compose pull
docker-compose up -d

そして、 docker-compose ps コマンドを実行し、2つのコンテナ( mywp_wordpress_1mywp_db_1)の StateUp になっているのを確認します。

# docker-compose ps
      Name                    Command               State          Ports
-------------------------------------------------------------------------------
mywp_db_1          docker-entrypoint.sh mysqld      Up      3306/tcp, 33060/tcp
mywp_wordpress_1   docker-entrypoint.sh apach ...   Up      0.0.0.0:80->80/tcp

今度はウェブブラウザで http://<サーバのIPアドレス> を実行します。今回の docker-compose.yaml の設定では、WordPress の wordpress コンテナを、ホスト側のポート 80 に割り当て(マッピング)するようにしました。そのため、ポート番号の入力は不要です(ウェブブラウザは、デフォルトのポート 80 を自動的に表示します)。

この図のように、WordPress 初期画面が表示されたら、初期設定をしてみましょう。

  1. 言語一覧では「日本語」を探し、「続ける」をクリックします。
  2. 次の画面では必要情報を入力の上「WordPressをインストール」をクリックします。

さらに次の画面では「ログイン」をクリックします。

そして、ユーザ名とパスワードを入力して「ログイン」しましょう。WordPress の管理画面にログインできたら、サイト名を確認したり、投稿したり、操作してみましょう。

また、 http://<サーバのIPアドレス> を実行し、 WordPress のコンテンツが表示されるのも確認しましょう。

以上で Docker Compose を使った WordPress のセットアップが完了しました。

サーバ電源操作と WordPress の動作確認

あとは、サーバが再起動しても表示されるかどうか、仮想マシンの停止・再起動を行い確認します。

さくらのクラウドのコントロールパネルを、ウェブブラウザで開き、「サーバ」一覧で対象サーバの情報を確認します。それから「サーバの行」をクリックして、行頭にあるチェックボックスに印を入れ、「電源操作」→「シャットダウン」をクリックします。

確認画面が表示されますので、作業対象のサーバが違っていないのを確認し、「シャットダウン」をクリックします。

操作確認ダイアログでは「実行」をクリックします。

そうすると、シャットダウン(停止)命令がサーバに対して送られます。ステータスが「成功」になるまで待ってから、次の確認画面は「閉じる」をクリックします。

そのままお待ちいただくと、サーバの状態を表す「緑色」のステータス(起動)が、「赤色」(準備中)から「灰色」(停止)に変わります。もし変わらなければ、コントロールパネル上の再読込ボタンをクリックします。

停止後は、再び起動しましょう。再びサーバをクリックしてチェックを入れ、「電源操作」→「起動」をクリックします。

対象のサーバを確認し、「起動」ボタンをクリックします。

あとは、確認ダイアログでは「実行」をクリックし、次の画面ではステータスが「成功」になってから「閉じる」をクリックします。しばらく待ち、サーバが起動状態になれば SSH の接続も出来ますし、WordPress も自動的に起動します。

ブラウザから http://<サーバのIPアドレス> を開き、 WordPress のサイトが表示できるかどうか確認します。

振り返り

Docker でコンテナを実行するには、Docker Engineのセットアップが必須です。 get.docker.com のセットアップ用スクリプトを使って手軽にセットアップし、Nginx ウェブサーバをコンテナで起動しました。 また、複数のコンテナを簡単に扱うためには、Docker Compose が便利であり、WordPress アプリケーションを Docker Compose で実行しました。あわせて、サーバの電源操作の仕方も学びました。

次回以降は、ここで作成した環境を使って、サーバのコピー方法やディスクの操作方法、クローンの作成の仕方を学びます。

参考情報