前回はWordPress以外の、Concrete5、Drupal、LAMP環境のprovision について説明しました。今回からは、KUSANAGI RoDを使用したWordPressの開発方法について説明します。まずは、Docker Machineを使用した provision の方法を説明します。
サポートOSの追加
先日公開された Ubuntu 20.04 LTS ですが、正規のパッケージリポジトリからインストールした docker.io およびdocker-compose で、KUSANAGI RoDが正常に動作することを確認しました。特にRoD自体に変更点はありませんが、ご報告のみさせていただきます。
Docker Machine とは
Docker Machine は、他のDockerホストと接続して自マシンで実行するのと同じように、dockerコマンド、docker-compose コマンドを使用できるコマンドです。
Docker Machine のインストール
Docker Machine をインストールするには、以下のコマンドを実行してdocker-machine
コマンドをダウンロードしてください。現在のDocker Machineの最新版は0.16.2です。bashを使用している場合は、以下のようにbash用の補完スクリプトをダウンロードしてお置くと便利です。以下の/etc/bash_complete.d/
に配置すると、bash起動時に読み込まれるので便利です。zsh用の補完スクリプトも、最後のコマンドでダウンロードしています。
$ DM_VERS=0.16.2
$ sudo curl -L https://github.com/docker/machine/releases/download/v${DM_VER}/docker-machine-`uname -s`-`uname -m` -o /usr/local/bin/docker-machine
$ sudo chmod a+x /usr/local/bin/docker-machine
$ sudo wget -P /etc/bash_complete.d https://raw.githubusercontent.com/docker/machine/master/contrib/completion/bash/docker-machine-prompt.bash
$ sudo wget -P /etc/bash_complete.d https://raw.githubusercontent.com/docker/machine/master/contrib/completion/bash/docker-machine-wrapper.bash
$ sudo wget -P /etc/bash_complete.d https://raw.githubusercontent.com/docker/machine/master/contrib/completion/bash/docker-machine.bash
$ sudo wget -P /usr/share/zsh/vendor-completions/ https://raw.githubusercontent.com/docker/machine/master/contrib/completion/zsh/_docker-machine
docker-machine コマンドの使い方
docker-machine コマンドを使用するには、対象となるマシンを作成・指定する必要があります。
インストール後にdocker-mashine の登録内容をみると、何も設定されていません。
$ docker-machine ls
NAME ACTIVE DRIVER STATE URL SWARM DOCKER ERRORS
今回は、VirtualBoxで新しくDocker Machine、default を作成してみます。
$ docker-machine create --driver=virtualbox default
Running pre-create checks...
Creating machine...
(default) Copying /home/user/.docker/machine/cache/boot2docker.iso to /home/user/.docker/machine/machines/default/boot2docker.iso...
(default) Creating VirtualBox VM...
(default) Creating SSH key...
(default) Starting the VM...
(default) Check network to re-create if needed...
(default) Waiting for an IP...
Waiting for machine to be running, this may take a few minutes...
Detecting operating system of created instance...
Waiting for SSH to be available...
Detecting the provisioner...
Provisioning with boot2docker...
Copying certs to the local machine directory...
Copying certs to the remote machine...
Setting Docker configuration on the remote daemon...
Checking connection to Docker...
Docker is up and running!
To see how to connect your Docker Client to the Docker Engine running on this virtual machine, run: 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
これで、default という名前の仮想マシンがdockerを動作する環境として登録されました。一度、自環境でnginxのDockerイメージを動作させます。virtualbox以外にも、クラウド上などいくつかのドライバが存在します。
$ docker run nginx:1.17.10-alpine
Unable to find image 'nginx:1.17.10-alpine' locally
1.17.10-alpine: Pulling from library/nginx
cbdbe7a5bc2a: Already exists
c554c602ff32: Pull complete
Digest: sha256:763e7f0188e378fef0c761854552c70bbd817555dc4de029681a2e972e25e30e
Status: Downloaded newer image for nginx:1.17.10-alpine
88b5a5d0ab6bb1b51cd3b29b520b9d8ef0bc021802ce3200db52e0a5076bd875
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
88b5a5d0ab6b nginx:1.17.10-alpine "nginx -g 'daemon of…" About a minute ago Up About a minute 80/tcp zealous_moore
では、作成したDocker Mashine に接続してみましょう。docker-machine env default
を実行すると、以下のように表示されます。つまり環境変数をecho するだけです。
$ docker-machine env default
export DOCKER_TLS_VERIFY="1"
export DOCKER_HOST="tcp://192.168.99.102:2376"
export DOCKER_CERT_PATH="/home/user/.docker/machine/machines/default"
export DOCKER_MACHINE_NAME="default"
# Run this command to configure your shell:
# eval $(docker-machine env default)
最後のコメントに書いてあるとおり、eval を実行します。
$ eval $(docker-machine env default)
$ printenv | grep DOCKER_
DOCKER_TLS_VERIFY=1
DOCKER_HOST=tcp://192.168.99.102:2376
DOCKER_CERT_PATH=/home/user/.docker/machine/machines/default
DOCKER_MACHINE_NAME=default
上記で、環境変数を設定したことが分かります。この状態で docker ps
を実行すると、先程起動したDockerのプロセスが表示されません。
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ここで再度docker を起動すると、別のContainerIDやNAMEで起動することが分かります。
$ docker run -d nginx:1.17.10-alpine
Unable to find image 'nginx:1.17.10-alpine' locally
1.17.10-alpine: Pulling from library/nginx
cbdbe7a5bc2a: Pull complete
c554c602ff32: Pull complete
Digest: sha256:763e7f0188e378fef0c761854552c70bbd817555dc4de029681a2e972e25e30e
Status: Downloaded newer image for nginx:1.17.10-alpine
eabb9f592055d99e92b9528c908a1fa13894f8ef08780c8d8dcf33c39faa9c9a
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
eabb9f592055 nginx:1.17.10-alpine "nginx -g 'daemon of…" 13 seconds ago Up 12 seconds 80/tcp dazzling_austin
ではDocker プロセスを停止し、docker-machineである default から離脱します。
$ docker stop eabb9f592055
eabb9f592055
$ docker rm eabb9f592055
eabb9f592055
$ eval $(docker-machine env -u)
$ printenv | grep DOCKER_
Docker Machine 環境でのprovision 方法
RoDをDocker Machineにデプロイするのは簡単です。docker-machineコマンドでDocker環境を指定マシンに設定した状態で、kusanagi-docker provision
を実行するだけです。
$ eval $(docker-machine env default)
$ kusanagi-docker provision --wplang=ja --wp-title='WordPress in docker-machine' --fqdn wp.local wordpress
Creating network "wordpress_default" with driver "bridge"
Creating volume "wordpress_kusanagi" with default driver
Creating volume "wordpress_database" with default driver
(中略)
INFO: 完了しました。
選択したDocker MachineのIPアドレスは、docker-machine ls
か、docker-machine url
コマンドで取得可能です。起動したRoD環境に接続するためには、そのIPアドレスを使用します。
$ docker-machine url
tcp://192.168.99.102:2376
$ curl -H 'Host: wp.local' http://192.168.99.102/ 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" />
確認の為に、curlコマンドで Titleの部分のみを確認しました。
hosts ファイルに上記エントリを記述すれば、ブラウザ上でWordPressの構築を行えます。
終わりに
今回は、Docker Machineを使用した provision の方法を説明しました。次回は、Docker Machineによる開発・ステージング・本番環境の切り替えについて話します。次回をお楽しみに。