Menjalankan Docker di dalam Docker (alias dind ), sedapat mungkin, harus dihindari, jika memungkinkan. (Sumber disediakan di bawah ini.) Sebaliknya, Anda ingin mengatur cara agar wadah utama Anda memproduksi dan berkomunikasi dengan wadah saudara .
Jérôme Petazzoni - penulis fitur yang memungkinkan Docker berjalan di dalam wadah Docker - sebenarnya menulis posting blog yang mengatakan tidak melakukannya . Kasus penggunaan yang dia gambarkan cocok dengan kasus penggunaan OP yang tepat dari wadah CI Docker yang perlu menjalankan pekerjaan di dalam wadah Docker lainnya.
Petazzoni mencantumkan dua alasan mengapa dind merepotkan:
- Itu tidak bekerja dengan baik dengan Modul Keamanan Linux (LSM).
- Ini menciptakan ketidakcocokan dalam sistem file yang menciptakan masalah untuk wadah yang dibuat di dalam wadah induk.
Dari posting blog itu, ia menjelaskan alternatif berikut,
[Cara] paling sederhana adalah dengan hanya mengekspos soket Docker ke wadah CI Anda, dengan mengikat-mount dengan -v
bendera.
Sederhananya, ketika Anda memulai wadah CI Anda (Jenkins atau lainnya), alih-alih meretas sesuatu bersama dengan Docker-in-Docker, mulailah dengan:
docker run -v /var/run/docker.sock:/var/run/docker.sock ...
Sekarang wadah ini akan memiliki akses ke soket Docker, dan karena itu akan dapat memulai wadah. Kecuali bahwa alih-alih memulai wadah "anak", itu akan memulai wadah "saudara".