Docker応用チュートリアル:WordPress

  • 0
    いいね
  • 0
    コメント

    概要

    Docker Compose を使い、WordPress を実行します。

    0. 用語説明とセットアップ

    Docker Compose(コンポーズ)は、複数のコンテナを使うアプリケーションを、定義・実行するツールです。

    Docker Compose のセットアップは、root 権限で次のコマンドを実行します。

    # curl -L https://github.com/docker/compose/releases/download/1.13.0/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
    # chmod +x /usr/local/bin/docker-compose
    

    実行後、バージョン番号が表示されるのを確認します。

    $ docker-compose version
    docker-compose version 1.13.0, build 1719ceb
    docker-py version: 2.2.1
    CPython version: 2.7.13
    OpenSSL version: OpenSSL 1.0.1t  3 May 2016
    

    1. docker-compose.yml ファイルの準備

    Docker Compose は、 docker-compose.yml という名称の YAML 形式のファイルを通し、サービス(コンテナ)を定義します。どのようなイメージを元に実行するか、どのポートを使うか、あるいは、ボリュームやネットワークを定義できます。

    まず、作業用ディレクトリを作成し、移動します。

    $ mkdir wordpress
    $ cd wordpress
    

    エディタを開き docker-compose.yml ファイルを作成します。このファイルは「プロジェクトの定義ファイル」とも呼びます。Docker Compose では、デフォルトでディレクトリ名(この例では wordpress )が該当します(-p オプションを指定し、ディレクトリ名以外にも変更できます)。

    $ vi docker-compose.yml
    

    ファイルの中身は次のようにします。

    version: '3.1'
    
    services:
    
      wordpress:
        image: wordpress
        ports:
          - 80:80
        environment:
          WORDPRESS_DB_PASSWORD: example
    
      mysql:
        image: mysql:5.7
        environment:
          MYSQL_ROOT_PASSWORD: example
    

    ここではサービス(services)として wordpressmysql の2つのコンテナを定義しています。

    2. 必要なイメージのダウンロード

    docker-compose pull を実行すると、docker-compose.yml に含まれるサービスが必要なイメージを一括ダウンロードします。

    $ docker-compose pull
    

    docker images コマンドを実行すると、必要なイメージがダウンロードされているのが分かります。

    $ docker images
    REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
    wordpress           latest              ca96afcfa242        7 days ago          406MB
    mysql               5.7                 e799c7f9ae9c        2 weeks ago         407MB
    

    3. WordPress の実行

    サービスを実行するには docker-compose up -d コマンドを実行します。updocker-compose.yml ファイルに記述している全てのサービスを起動し、-d はデタッチド・モード(バックグラウンドで実行)します。

    まず mysql サービスのみ実行します。

    $ docker-compose up -d mysql
    Creating network "wordpress_default" with the default driver
    Creating wordpress_mysql_1 ...
    Creating wordpress_mysql_1 ... done
    

    サービスが稼働しているかどうかは docker-compose ps コマンドで確認します。

    $ docker-compose ps
          Name                    Command             State    Ports
    ------------------------------------------------------------------
    wordpress_mysql_1   docker-entrypoint.sh mysqld   Up      3306/tcp
    

    Up であれば、正常起動しています。

    ログ(標準出力)を docker-compose logs -f コマンドで確認します。特にエラーがなければ Ctrl-C を入力して、中断します。

    MySQL の起動を確認した後、WordPress コンテナを起動します(WordPressコンテナは、MySQL データベースに接続できないと起動中止してしまうため、あえてこの手順にしています)。

    $ docker-compose up -d
    wordpress_mysql_1 is up-to-date
    Creating wordpress_wordpress_1 ...
    Creating wordpress_wordpress_1 ... done
    

    そして、サービスの稼働状況を確認します。

    $ docker-compose  ps
            Name                       Command               State          Ports
    -------------------------------------------------------------------------------------
    wordpress_mysql_1       docker-entrypoint.sh mysqld      Up      3306/tcp
    wordpress_wordpress_1   docker-entrypoint.sh apach ...   Up      0.0.0.0:8080->80/tcp
    

    Wordpress コンテナのログを確認し、正常起動していることを確認します。

    $ docker-compose logs -f wordpress
    Attaching to wordpress_wordpress_1
    (省略)
    wordpress_1  | [Thu May 25 04:32:07.734697 2017] [core:notice] [pid 1] AH00094: Command line: 'apache2 -D FOREGROUND'
    

    ブラウザから http://<IPアドレス>/ にアクセスし、WordPress の画面が表示されるのを確認します。

    4. WordPress の停止と再起動

    停止は docker-compose stop です。

    $ docker-compose stop
    Stopping wordpress_wordpress_1 ... done
    Stopping wordpress_mysql_1 ... done
    $ docker-compose ps
            Name                       Command               State    Ports
    -----------------------------------------------------------------------
    wordpress_mysql_1       docker-entrypoint.sh mysqld      Exit 0
    wordpress_wordpress_1   docker-entrypoint.sh apach ...   Exit 0
    

    再起動するには、実行中であれば docker-compose restart、今回のように停止中であれば docker-compose start を実行します。

    $ docker-compose start
    Starting mysql ... done
    Starting wordpress ... done
    $ docker-compose ps
            Name                       Command               State          Ports
    -------------------------------------------------------------------------------------
    wordpress_mysql_1       docker-entrypoint.sh mysqld      Up      3306/tcp
    wordpress_wordpress_1   docker-entrypoint.sh apach ...   Up      0.0.0.0:8080->80/tcp
    

    5. WordPress の削除

    サービスを削除(使用していたコンテナの削除)は docker-compose rm または docker-compose down です。

    $ docker-compose down
    Stopping wordpress_wordpress_1 ... done
    Stopping wordpress_mysql_1 ... done
    Removing wordpress_wordpress_1 ... done
    Removing wordpress_mysql_1 ... done
    Removing network wordpress_default
    
    $ docker-compose ps
    Name   Command   State   Ports
    ------------------------------