dockerの機能が便利で最近のプロジェクトでは全て適用してきました。
ローカルPCでのインストールの手間と環境の共有が簡単にできるので積極的に使ってきました。
ただ最近のプロジェクトでPHPを使用したAPIが異常に遅くなったのでもう限界を感じていろいろと試していましたが、vagrant+dockerに落ち着いてしまいました。
以前windowsを使用していた時にもvagrantを使用した開発環境にしていました。ただメンバーと共有する際にvagrantにミドルウェアをインストールする必要があったりサーバーの知識がないと構築できない仕組みになっていたため避けていました。
今回macでvagrantをいれてdockerで動作させてみたところ、許容範囲かな。という感想になったので記事にしてみます。
速度面では圧倒的に早くなったので、docker for macを使用していて遅いと感じた場合は試すと良いと思います。
ほぼ参考のURLと同じです。ただmutagen周りのパーミッションで詰まったため、mutagen.ymlのみ構成が違います。
vagrant インストール
brew cask install virtualbox brew cask install vagrant vagrant box add ubuntu/xenial64 vagrant plugin install vagrant-disksize vagrant-hostsupdater vagrant-mutagen vagrant-docker-compose
vagrantのファイル構築
mkdir -p ~/vagrant/my_app cd ~/vagrant/my_app vagrant init ubuntu/xenial64
Vagrantfile編集
Vagrant.configure('2') do |config|
config.vm.box = 'ubuntu/xenial64'
config.vm.hostname = 'my-app'
config.vm.network :private_network, ip: '192.168.50.10'
config.vm.provider :virtualbox do |vb|
vb.gui = false
vb.cpus = 4
vb.memory = 4096
vb.customize ['modifyvm', :id, '--natdnsproxy1', 'off']
vb.customize ['modifyvm', :id, '--natdnshostresolver1', 'off']
end
config.disksize.size = '30GB'
config.mutagen.orchestrate = true
config.vm.synced_folder './', '/home/vagrant/app', type: "rsync",
rsync_auto: true,
rsync__exclude: ['.git/', 'node_modules/', 'log/', 'tmp/']
config.vm.provision :docker, run: 'always'
# config.vm.provision :docker_compose, yml: "/home/vagrant/app/project/docker-compose.yml", run: "always"
end
mutagenインストール
brew install mutagen-io/mutagen/mutagen cd ~/vagrant/my_app touch mutagen.yml
mutagen.yml編集
sync:
defaults:
ignore:
vcs: true
app:
mode: "two-way-resolved"
alpha: "./"
beta: "my-app:/home/vagrant/app"
configurationAlpha:
permissions:
defaultFileMode: 644
defaultDirectoryMode: 755
configurationBeta:
permissions:
defaultFileMode: 644
defaultDirectoryMode: 755
vagrant起動
起動
vagrant up
終了
vagrant halt
ssh接続
vagrant ssh
同期の確認
mutagen sync list
エラーの表示がある場合は同期できていないため、エラーの部分を解消する必要ある。
mutagenで同期がとられているため、dockerで作成するファイルとローカルで作成するファイルでパーミッションが変わってくるため影響が出るらしい。 このあたりはdocker単体ではあまり発生していなかった分、辛い点の一つだと思う。