前回は、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>"WordPress in docker-machine" – Just another WordPress site</title>
<link rel='dns-prefetch' href='//s.w.org' />
<link rel="alternate" type="application/rss+xml" title=""WordPress in docker-machine" » フィード" href="http://wp.local/?feed=rss2" />
<link rel="alternate" type="application/rss+xml" title=""WordPress in docker-machine" » コメントフィード" 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」へコピーします。
- まず、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
- 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
これでコンテナ、ボリューム、ネットワークの作成ができました。
- 最後に、バックアップされた内容をリストアします。
$ 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>"WordPress in docker-machine" – Just another WordPress site</title>
<link rel='dns-prefetch' href='//s.w.org' />
<link rel="alternate" type="application/rss+xml" title=""WordPress in docker-machine" » フィード" href="http://wp.local/?feed=rss2" />
<link rel="alternate" type="application/rss+xml" title=""WordPress in docker-machine" » コメントフィード" 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にコピーする方法を説明します。次回をお楽しみに。