Docker menyediakan alat untuk menjembatani filesystem container dan sistem operasi host yang menjalankan container, seperti bind mount dan volume. Ini bisa sangat berguna baik di lingkungan pengembangan maupun produksi.
Mengapa Mount Dari Host?
Umumnya, dengan Docker, Anda ingin gambar berjalan secara independen dari sistem host. Jika Anda ingin, misalnya, memperbarui kode aplikasi atau file konfigurasi, Anda mungkin ingin membuat versi baru penampung dan men-deploy ulang. Ini memungkinkan Anda menskalakan dan memindahkan gambar dengan cepat tanpa mengkhawatirkan perangkat keras yang digunakan untuk menjalankannya.
Namun, di lingkungan dev, dapat langsung memasang direktori untuk mengaktifkan hot-reload konfigurasi atau kode bisa sangat berguna. Misalnya, Anda mungkin sedang mengerjakan file JS atau plugin PHP yang bisa Anda seret-dan-lepaskan ke dalam wadah. Atau Anda mungkin ingin memasang seluruh direktori konfigurasi NGINX agar berfungsi di situs web Anda. Apa pun kasus penggunaan Anda, memasang file bukanlah solusi yang buruk.
Ini juga berguna dalam produksi, jika Anda memiliki layanan host yang bergantung pada file dalam wadah. Misalnya, Anda mungkin memiliki penyerapan log dan layanan agregasi yang lebih disukai jika file log penampung berada di direktori yang dapat diakses dari host. Meskipun kemungkinan ada beberapa solusi murni dalam Docker untuk masalah Anda, terkadang lebih mudah untuk memasang volume saja.
Kompatibilitas macOS
Catatan:karena mount ditangani melalui Docker API, mereka akan bekerja terlepas dari OS host. Namun, macOS memiliki perlindungan ekstra, dan pemasangan di luar beberapa direktori host mungkin gagal dengan "mount ditolak" saat runtime. Ini termasuk /Users
, yang mencakup sebagian besar operasi, tetapi jika perlu, Anda dapat memperbaikinya di setelan Docker di bagian Preferences> Resources> File Sharing dengan menambahkan direktori target ke daftar.
Memasang Direktori Host
Membuat mount bind cukup sederhana. Tambahkan dengan --mount type=bind
tandai saat startup, menentukan direktori sumber dan target untuk dipasang.
docker run -d -it --name container --mount type=bind,source=/nginxconfig,target=/etc/nginx nginx:latest
Bind mount adalah yang paling sederhana, tetapi Docker menyediakan Volume API untuk mengelola mount semacam ini sedikit lebih baik. Data yang disimpan akan dikelola oleh Docker, dan direktori volume akan dibuat secara otomatis di direktori Docker. Ini mungkin bukan yang Anda inginkan jika Anda memiliki direktori yang ada, tetapi metode ini lebih baik karena tidak bergantung pada struktur file OS host.
docker volume create nginx-config docker run -d --name devtest --mount source=nginx-config,target=/etc/nginx nginx:latest
Anda juga dapat menggunakan Docker Compose untuk menentukan volume:
version: "3.0" services: web: image: nginx:latest ports: - "80:80" volumes: - nginx-config:/etc/nginx/ volumes: nginx-config:
Ini disimpan dalam format standar yang dapat diakses oleh Linux:
/var/lib/docker/volumes/volumeID/_data
Namun, di macOS, Anda harus terhubung ke mesin virtual Docker untuk dapat melihat volume.
TERKAIT: Apa Itu Volume Docker, dan Bagaimana Cara Menggunakannya?
Memasang File Tunggal
Memasang seluruh direktori berfungsi dengan baik ketika Anda ingin mengedit banyak file konfigurasi/kode yang disimpan di host. Namun, terkadang Anda mungkin hanya ingin memasang satu file untuk diedit, tanpa menyentuh file lainnya.
Untuk melakukan ini, Anda dapat menjalankan wadah dengan pengikatan mount, yang mendukung file individual jika Anda menentukan jalur:
docker run -it --mount type=bind,source=/path/file.cfg,target=/etc/example/file.cfg nginx sh
Jika Anda memiliki banyak file untuk dipasang dengan cara ini, Anda dapat meletakkan semuanya di direktori host yang sama, dan memasang direktori tersebut ke lokasi berbeda dalam penampung. Anda kemudian dapat menggunakan symlink di dalam wadah untuk menautkan file di direktori yang dipasang ke lokasi yang tepat.