KUSANAGI RoDの使い方(8)(高速Dockerな話)

宮﨑悟

Docker-machineを使ったWordPress環境の別ホストへの複製の方法を詳細に説明。Docker Machine「default」で構築した環境を、「dock01」へコピーする一連の手順を示しました。更に、DockerとDocker Machine間やDocker-machine同士で任意の環境へデプロイできる利点、またGitでWordPress環境を管理しチーム内で共有することによるモダンな開発の可能性について述べました。具体的な操作手順から開発環境の応用までを包括的に解説します。

前回は、Docker Machineを使用した provision の方法を説明しました。今回は、Docker-machineで展開したWordPress環境を、別ホストにコピーする方法を説明します。

Docker Machine を使用して環境コピー

前回は、Docker Machine 「default 」上でのProvisionを行いました。今回は、別のDocker Machine 「dock01」を作成して、「default」で構築した環境をコピーします。

現在の状況確認

まずは、Docker machineのdefaultでprovisionされた状況を確認します。

$ cd wordpress
$ eval $(docker-machine env default)
$ docker-machine ls
NAME      ACTIVE   DRIVER       STATE     URL                         SWARM   DOCKER     ERRORS
default   *        virtualbox   Running   tcp://192.168.99.102:2376           v19.03.5   
dock01    -        virtualbox   Running   tcp://192.168.99.103:2376           v19.03.5 
$ kusanagi-docker status
      Name                     Command                 State                         Ports                   
-------------------------------------------------------------------------------------------------------------
wordpress_certbot   certbot --version                Restarting                                              
wordpress_config    docker-entrypoint.sh wp -- ...   Restarting                                              
wordpress_db        docker-entrypoint.sh mysqld      Up                                                      
wordpress_ftp       /bin/sh -c /docker-entrypo ...   Up                                                      
wordpress_httpd     /docker-entrypoint.sh /usr ...   Up           0.0.0.0:80->8080/tcp, 0.0.0.0:443->8443/tcp
wordpress_php       /usr/local/bin/docker-entr ...   Up                                                      
INFO: 完了しました。
$ curl -H 'Host: wp.local' http://192.168.99.102/ 2> /dev/null | head -15
<!DOCTYPE html>

<html class="no-js" lang="ja">

        <head>

                <meta charset="UTF-8">
                <meta name="viewport" content="width=device-width, initial-scale=1.0" >

                <link rel="profile" href="https://gmpg.org/xfn/11">

                <title>&quot;WordPress in docker-machine&quot; &#8211; Just another WordPress site</title>
<link rel='dns-prefetch' href='//s.w.org' />
<link rel="alternate" type="application/rss+xml" title="&quot;WordPress in docker-machine&quot; &raquo; フィード" href="http://wp.local/?feed=rss2" />
<link rel="alternate" type="application/rss+xml" title="&quot;WordPress in docker-machine&quot; &raquo; コメントフィード" href="http://wp.local/?feed=comments-rss2" />

現在の環境のバックアップ

次に「default」上のWordPress環境を、kusanagi-docker config backup を実行してバックアップします。データベースのダンプも実施するため、dbdumpというファイルが追加されます。

$ kusanagi-docker config backup
INFO: 完了しました。
$ ls
contents  dbdump  docker-compose.yml  wpcli
$ git add dbdump
$ git commit -m 'Add: dbdump'

dbdumpファイルは、 Git のバージョン管理対象に含めることをお勧めします。

別Docker Machineへのコピー

「default」で作成したWordPress環境を、別のDocker Machine である 「dock01」へコピーします。

  1. まず、Docker Machineを変更します。
   $ docker-machine ls
   NAME      ACTIVE   DRIVER       STATE     URL                         SWARM   DOCKER     ERRORS
   default   *        virtualbox   Running   tcp://192.168.99.102:2376           v19.03.5   
   dock01    -        virtualbox   Running   tcp://192.168.99.103:2376           v19.03.5  
   $ eval $(docker-machine env dock01)
   # Activeが変更されていることを確認
   $ docker-machine ls
   NAME      ACTIVE   DRIVER       STATE     URL                           SWARM   DOCKER     ERRORS
   default   -        virtualbox   Running   tcp://192.168.99.102:2376           v19.03.5   
   dock01    *        virtualbox   Running   tcp://192.168.99.103:2376           v19.03.5  
  1. Docker-machine dock01では、コンテナが作成されていません。
    そこで、docker-compose を使用して、コンテナ環境を再度作成します。
   # dock01では、コンテナが起動していない
   $ docker-compose ps
   kusanagi-docker statusName   Command   State   Ports
   ------------------------------
   # docker-composeをdaemonモードで起動
   $ docker-compose up -d
   Creating network "wordpress_default" with driver "bridge"
   Creating volume "wordpress_kusanagi" with default driver
   Creating volume "wordpress_database" with default driver
   Creating wordpress_httpd  ... done
   Creating wordpress_config ... done
   Creating wordpress_php     ... done
   Creating wordpress_ftp     ... done
   Creating wordpress_certbot ... done
   Creating wordpress_db      ... done
   $ docker-compose ps
         Name                     Command                 State                    Ports
   --------------------------------------------------------------------------------------------------
   wordpress_certbot   certbot --version                Restarting
   wordpress_config    docker-entrypoint.sh wp -- ...   Restarting
   wordpress_db        docker-entrypoint.sh mysqld      Up
   wordpress_ftp       /bin/sh -c /docker-entrypo ...   Up
   wordpress_httpd     /docker-entrypoint.sh /usr ...   Up           0.0.0.0:80->8080/tcp,0.0.0.0:443->8443/tcp
   wordpress_php       /usr/local/bin/docker-entr ...   Up

これでコンテナ、ボリューム、ネットワークの作成ができました。

  1. 最後に、バックアップされた内容をリストアします。
   $ kusanagi-docker config restore
   chown: unknown user/group kusanagi:www
   Success: Imported from '/home/kusanagi/wordpress/dbdump'.
   INFO: 完了しました。
   $ curl -H 'Host: wp.local' http://192.168.99.103/ 2> /dev/null | head -15
   <!DOCTYPE html>

   <html class="no-js" lang="ja">

           <head>

                   <meta charset="UTF-8">
                   <meta name="viewport" content="width=device-width, initial-scale=1.0" >

                   <link rel="profile" href="https://gmpg.org/xfn/11">

                   <title>&quot;WordPress in docker-machine&quot; &#8211; Just another WordPress site</title>
   <link rel='dns-prefetch' href='//s.w.org' />
   <link rel="alternate" type="application/rss+xml"     title="&quot;WordPress in docker-machine&quot; &raquo; フィード" href="http://wp.local/?feed=rss2" />
   <link rel="alternate" type="application/rss+xml" title="&quot;WordPress in docker-machine&quot; &raquo; コメントフィード" href="http://wp.local/?feed=comments-rss2" />

curl で、「default」環境と同じ結果が得られます。

Docker Machineを使用するメリット

今回はDocker-machine同士の環境コピーでしたが、自マシン上のDockerとDocker Machineとの間でもコピー可能です。
開発を自マシン上のDockerで行い、ステージング環境や本番環境をDocker Machineに構築することで、任意の環境へデプロイ可能になります。

RoDで作成された環境は、ターゲットディレクトリ以下をGitでバージョン管理しています。このGitリポジトリをチーム内で共有するGitリポジトリにpushすることにより、チーム内で同じGitリポジトリを使用可能です。GitでWordPressなどの環境を管理することにより、以下のようなモダンな開発が可能になります。

  • Gitのbranchを使用することで、開発・ステージング・本番環境の違いを管理
  • GitLab・GitHub・Jenkinsなどを使用することで、issue 管理ベースの開発が可能
  • CI/CDツールを使用した、自動テストやデプロイなどを使用可能

終わりに

今回は、Docker-machineで展開したWordPress環境を、別ホストにコピーする方法を説明しました。これにより、1つのDockerコンテナでWordPressなどの環境を開発・デプロイできるようになります。次回は、RoDで作成した環境を通常のKUSANAGIにコピーする方法を説明します。次回をお楽しみに。

<< KUSANAGI RoDの使い方(7)~高速Dockerの話~宮崎悟氏のコラム「KUSANAGI RoDの使い方(9)」(高速Dockerな話) >>

関連記事

Webサイト運用の課題解決事例100選 プレゼント

Webサイト運用の課題を弊社プロダクトで解決したお客様にインタビュー取材を行い、100の事例を108ページに及ぶ事例集としてまとめました。

・100事例のWebサイト運用の課題と解決手法、解決後の直接、間接的効果がわかる

・情報通信、 IT、金融、メディア、官公庁、学校などの業種ごとに事例を確認できる

・特集では1社の事例を3ページに渡り背景からシステム構成まで詳解