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

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

前回は、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カテゴリの最新記事