Intro
Saya tidak dapat menemukan cara yang baik untuk mengatur lingkungan pengembangan di OS X menggunakan Docker dan Boot2Docker. Masalah yang saya hadapi adalah bagaimana mengelola kode sumber sehingga:
- Saya dapat memodifikasi kode di OS X menggunakan alat (editor teks, IDE, git, dll) yang sudah saya instal.
- Modifikasi tersebut tercermin dalam wadah Docker jadi jika saya menjalankan ulang tes atau menyegarkan halaman web, saya dapat segera melihat perubahan saya.
Secara teori, ini seharusnya mudah dilakukan dengan memasang kode sumber saya sebagai volume:
docker run -it -v /path/to/my/source/code:/src some-docker-image
Sayangnya, ini memiliki dua masalah utama yang membuatnya benar-benar tidak dapat digunakan di OS X:
Masalah # 1: Volume yang dipasang di VirtualBox (yang menggunakan vboxsf) sangat lambat
Misalnya, berikut adalah berapa lama waktu yang dibutuhkan Jekyll untuk mengompilasi beranda saya jika kode sumbernya adalah bagian dari image Docker:
> docker run -it brikis98/yevgeniy-brikman-homepage:v1 bash
root@7aaea30d98a1:/src# time bundle exec jekyll build
[...]
real 0m7.879s
user 0m7.360s
sys 0m0.600s
Berikut adalah gambar Docker yang sama persis, kecuali kali ini, saya memasang kode sumber dari OS X:
> docker run -it -v $(pwd):/src brikis98/yevgeniy-brikman-homepage:v1 bash
root@1521b0b4ce6a:/src# time bundle exec jekyll build
[...]
real 1m14.701s
user 0m9.450s
sys 0m3.410s
Masalah # 2: Menonton file rusak
Mekanisme jam tangan default di SBT, Jekyll, dan grunt menggunakan teknologi seperti inotify, yang tidak berfungsi jika dijalankan di container Docker dan perubahan dilakukan di OS X ke folder yang dipasang.
Solusi yang saya coba
Saya mencari solusi (termasuk semua yang ada di SO) dan mencoba beberapa di antaranya, tetapi belum menemukan yang berhasil:
- Saya mengganti Boot2Docker untuk menggunakan NFS , tetapi juga lambat.
- Saya mencoba Vagrant + NFS , dan itu juga lambat.
- Saya mencoba memasang Samba , tetapi folder selalu muncul kosong di kontainer Docker.
- Saya mencoba menggunakan sistem file Unison , yang berfungsi sebentar untuk menyinkronkan file, tetapi kemudian terus menunjukkan kesalahan koneksi .
- Saya mengaktifkan pemungutan suara di Jekyll , tetapi itu secara signifikan meningkatkan penundaan sampai perubahan saya diambil.
- Saya mencoba Dinghy , sebuah "Docker yang lebih cepat dan lebih ramah di OS X dengan Vagrant" dan mendapat beberapa peningkatan. Alih-alih kompilasi Jekyll menjadi 10-15x lebih lambat, itu 2-3x lebih lambat. Itu lebih baik, tapi masih belum bisa digunakan.
Adakah yang menemukan solusi yang benar-benar berfungsi dan memungkinkan Anda untuk mengembangkan kode secara produktif dengan Docker dan OS X?
Pembaruan: solusi akhirnya!
Saya akhirnya menemukan solusi yang tampaknya produktif menggunakan Boot2Docker + rsync. Saya telah menangkap detail tentang cara mengatur ini dalam jawaban saya sendiri serta proyek sumber terbuka yang disebut docker-osx-dev .