kazu22002の技術覚書

PHPer, Golang, AWS エンジニアの日々

vagrant+docker <mac> で構築しなおした話

dockerの機能が便利で最近のプロジェクトでは全て適用してきました。

ローカルPCでのインストールの手間と環境の共有が簡単にできるので積極的に使ってきました。

ただ最近のプロジェクトでPHPを使用したAPIが異常に遅くなったのでもう限界を感じていろいろと試していましたが、vagrant+dockerに落ち着いてしまいました。

以前windowsを使用していた時にもvagrantを使用した開発環境にしていました。ただメンバーと共有する際にvagrantミドルウェアをインストールする必要があったりサーバーの知識がないと構築できない仕組みになっていたため避けていました。

今回macvagrantをいれて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単体ではあまり発生していなかった分、辛い点の一つだと思う。

参考

qiita.com