目的
- Vagrant で構築する VM 内に Docker と docker-compose をインストールし、docker-compose を起動する。
vagrant-docker-compose プラグイン
shell プロビジョナ等で Docker や docker-compose をインストールして起動しても良いのですが、まさにこういった用途に合ったプラグインがあったのでこれを利用します。
$ vagrant plugin install vagrant-docker-compose
ファイル構成
VM の中で php
イメージを docker-compose で起動するようにします。
ファイル構成は下記のようにしています。
public/
+ index.php
docker-compose.yml
Vagrantfile
index.php は phpinfo() を実行するだけです。
<?php
phpinfo();
docker-compose.yml では、php:7.4-apache-buster
を起動します。volume に ./public
(VM 内では /vagrant/public
)をマウントしています。
version: '3'
services:
web:
image: php:7.4-apache-buster
ports:
- "80:80"
volumes:
- ./public:/var/www/html:cached
Vagrantfile では、docker
プロビジョンと docker-compose
プロビジョンを指定しています。run: "always"
を指定しているので、vagrant up
実行時に docker-compose up -d
が実行されます。
Vagrant.configure("2") do |config|
config.vm.box = "ubuntu/bionic64"
config.vm.network "private_network", ip: "192.168.33.30"
config.vm.provision :docker
config.vm.provision :docker_compose, yml: "/vagrant/docker-compose.yml", run: "always"
end
実行結果
vagrant up
を実行すると、VM が起動し、docker-compose が実行されます。
$ vagrant up
(snip)
==> default: Pulling web (php:7.4-apache-buster)...
default: 7.4-apache-buster: Pulling from library/php
default: Digest: sha256:c496c0f962eaaea0f52d9c068bf331fe477703d4657f99b955a2a35a4c3486c4
default: Status: Downloaded newer image for php:7.4-apache-buster
ブラウザで、VM の IP にアクセスすると phpinfo() の結果が表示されます。