こんにちは、イタンジの福崎です。 Docker for Macですがプロジェクトが大きくなるのに比例して重くなっていき、我慢できなくなりました。 docker syncを試したりもしたんですが安定しないので、もうMacからLinuxに変更しようかと思ったりもしましたがVagrant使うことで解決しました。 以下はその内容の共有です。
やりたいこと
環境構築手順
$ mkdir vagrant $ cd vagrant $ vagrant init bento/ubuntu-19.04
- Vagrantfileにdockerのprovisionとフォルダの共有設定を追記
# Vagrantfile
Vagrant.configure("2") do |config|
+ config.vm.synced_folder "/Users/user/Work", "/home/vagrant/work",create:"true"
+ config.vm.provision "docker"
# forwardしたいportをお好みで、rails使ってるので3000をforward
+ config.vm.network "forwarded_port", guest: 3000, host: 3000
end
$ vagrant provision
- 後はdocker-compose入れてdocker起動したいプロジェクトに移動してdocker-compose up
$ vagrant up ## vagrantにつなぐ $ vagrant ssh ## vagrant上でdocker-composeのinstall $ sudo apt install docker-compose ## 後は起動したいプロジェクトに移動してdocker-compose up $ cd work/project $ docker-compose up
あとがき
これでWork以下のソースをMac上で修正して、Vagrantのdocker上で動作確認できる環境ができました。 Vagrantを起動するという手間は増えますが一瞬で起動するのでそんなに苦にならないと思います。 動作は感動するくらい早くなりました、もっと早くからやっとけばよかった。 Docker for Mac使ってて重いなと感じてる方は是非お試しください。
参考
Docker for MacをやめてVM(Ubuntu 16.04)の中でDockerを動かして開発する - こんちゃんブログ
はまったとこ
こんな感じでmysqlのデータをvolumesでprojectの下に突っ込んでいた影響で、permission errorになりました。
# docker-compose.yml
db:
image: mysql:5.7
volumes:
- ./docker/db:/var/lib/mysql
- ./docker/sql:/sqlscripts
db/mysql以下は systemd-coredump で作成されるようなのでsynced_folderで以下を追加
# Vagrantfile
Vagrant.configure("2") do |config|
+ config.vm.synced_folder "/Users/user/Work/project/docker/db", "/home/vagrant/work/project/docker/db", owner: 'systemd-coredump', group: 'systemd-coredump'
end
変更してもこんな感じのエラーが出ます
[ERROR] InnoDB: Operating system error number 95 in a file operation. [ERROR] InnoDB: Error number 95 means 'Operation not supported' [ERROR] InnoDB: File ./ib_logfile0: 'Linux aio' returned OS error 195. Cannot continue operation [ERROR] InnoDB: Cannot continue operation.
これはcommandに innodb-use-native-aio を指定するといけました
# docker-compose.yml
db:
command: mysqld --character-set-server=utf8 --collation-server=utf8_general_ci --innodb-use-native-aio=0