GNU/Linux >> Belajar Linux >  >> Panels >> Docker

Cara Menggunakan Docker Cp untuk Menyalin File Antara Host dan Kontainer

Perlu memasukkan beberapa file ke dalam atau keluar dari wadah Docker? docker cp perintah memungkinkan Anda menyalin antara sistem file host dan penampung sehingga Anda dapat menambahkan detail konfigurasi, membuat cadangan, dan memulihkan data yang ada.

Sintaks Dasar

docker cp menerima jalur sumber dan tujuan sebagai dua argumennya:

docker cp example.txt my-container:/example.txt

Di sini example.txt sedang disalin dari direktori kerja Anda ke /example.txt di my-container wadah. Anda dapat membalikkan dua argumen untuk menyalin /example.txt keluar dari wadah dan masuk ke direktori kerja Anda.

Argumen yang mereferensikan jalur penampung harus diawali dengan ID penampung atau nama diikuti dengan titik dua (: ). Anda dapat menemukan ID atau nama container yang sedang berjalan dengan docker ps .

Setiap docker cp perintah membutuhkan satu jalur sistem file lokal dan satu jalur wadah – Anda tidak dapat langsung menyalin di antara dua wadah. Gunakan prosedur multi-langkah jika Anda perlu melakukannya, salin dulu dari wadah sumber ke sistem file Anda, lalu dari jalur lokal baru ke wadah target.

Menyalin Seluruh Direktori

docker cp dapat menyalin direktori secara rekursif juga:

docker cp /home/demo/website apache-container:/var/www/html/.

Docker akan menyalin semuanya di /home/demo/website dan transfer ke /var/www/html .

Menyalin Perilaku

Saat Anda menyalin file, Docker membuat file baru di tujuan jika belum ada. File yang ada ditimpa dengan konten baru. Saat direktori tujuan, file akan disalin ke dalamnya menggunakan nama file sumber. Pengecualian adalah ketika tujuan yang ditentukan diakhiri dengan / , yang menunjukkan direktori, tetapi jalurnya belum ada. Dalam skenario ini, kesalahan akan muncul.

Prosesnya sedikit lebih rumit untuk salinan direktori. Direktori baru akan dibuat di tujuan dengan isi direktori sumber, jika jalur tujuan belum ada. Jika memang ada, perilakunya akan berbeda tergantung pada apakah Anda telah menyertakan /. . di akhir atau tidak komponen di jalur.

  • /. hadir – Sumber direktori disalin ke direktori tujuan yang ada.
  • /. tidak ada – konten dari direktori sumber disalin ke tujuan.

Perbedaan halus menentukan apakah subdirektori baru dibuat di dalam tujuan.

Batasan Perintah

Terlepas dari namanya, docker cp bukan implementasi lengkap dari cp perintah cangkang. cp bendera tidak didukung, kecuali untuk -a dan -L :

  • -a – Mode arsip, yang mempertahankan detail pengguna dan grup pada file yang disalin.
  • -L – Ikuti symlink di direktori sumber untuk menyalin konten target tautan, bukan tautan itu sendiri.

Untuk kasus penggunaan lanjutan yang memerlukan penyalinan selektif, Anda harus mundur menggunakan pendekatan yang berbeda.

Menggunakan Bind Mount untuk Menyalin File

Volume Docker menyediakan cara lain untuk memindahkan file antara container dan host Anda. Mengikat pemasangan direktori lokal ke dalam wadah memungkinkan Anda mengakses isinya dari sistem file host Anda, menghilangkan kebutuhan untuk menggunakan docker cp .

docker run -v /example/host/directory:/container/path my-image:latest

Isi /example/host/directory path dipasang ke sistem file container di /container/path . Anda dapat berinteraksi dengan file-file ini di luar Docker menggunakan alat yang sudah dikenal seperti cp , rsync , dan browser file grafis Anda.

Teknik ini hanya berguna saat Anda bekerja dengan satu direktori container. Ini tidak berfungsi dengan baik saat Anda menyalin dari lokasi sembarang karena Anda perlu mengetahui jalur yang akan Anda gunakan sebelumnya, saat penampung dibuat.

Anda juga harus berhati-hati dengan izin sistem file:file yang dibuat di dalam wadah biasanya dimiliki oleh root . Ini dapat membuat skenario canggung pada host di mana Anda tidak dapat mengedit atau menghapus file di dalam direktori terikat. Gunakan chown perintah pada host dan di dalam wadah untuk mengalihkan kepemilikan tergantung pada lingkungan jika perlu.

Bagaimana Dengan COPY di Dockerfiles?

docker cp terkadang bingung dengan COPY instruksi di Dockerfiles. Penting untuk diketahui bahwa kedua fitur ini memiliki kasus penggunaan yang sangat berbeda.

COPY tidak dapat digunakan untuk memindahkan file antara host Anda dan container yang sedang berjalan. Ini untuk memasukkan file ke dalam gambar selama proses pembuatan:

COPY /home/me/my-website /var/www/html/.

Di sini kode sumber situs web disalin ke dalam gambar sebagai bagian dari build. Ini adalah proses satu kali. Setiap penampung yang dimulai dari gambar akan menyertakan sumber situs web seperti saat Anda menjalankan docker build .

docker cp memungkinkan Anda mengganti kode sumber itu dengan versi yang lebih baru setelah wadah berjalan. COPY instruksi untuk membuat file menjadi bagian dari gambar statis; cp perintah berinteraksi dengan wadah langsung.

Kapan Menyalin File Dengan Docker?

Menyalin file secara manual dari host Anda ke wadah Docker, atau sebaliknya, seharusnya jarang terjadi. Gambar dimaksudkan untuk mandiri sehingga harus dilengkapi dengan semua yang Anda butuhkan untuk memulai sebuah instance. Konfigurasi biasanya ditangani melalui variabel lingkungan.

Wadah yang perlu menyimpan data secara terus-menerus harus menggunakan volume Docker. Volume memungkinkan data untuk hidup lebih lama dari satu wadah apa pun sehingga Anda tidak perlu docker cp secara manual sebelum mengganti sebuah instance. Saat Anda membuat cadangan, salin volume dari host Anda, alih-alih mengeluarkan file dari wadah.

docker cp paling berguna saat men-debug kontainer atau bekerja di lingkungan pengembangan. Terkadang Anda perlu secara manual menyuntikkan file konfigurasi sementara atau mengeluarkan log yang terkubur. Menggunakan docker cp lebih cepat dan lebih nyaman daripada membangun kembali seluruh gambar setiap kali Anda membuat perubahan kode.

Selalu ingat bahwa file disalin ke wadah hanya akan bertahan selama wadah itu hidup. Memulai wadah lain dari gambar yang sama akan memberi Anda catatan yang bersih, tanpa file yang Anda tambahkan dengan docker cp .

Ringkasan

docker cp memungkinkan Anda memindahkan file antara host dan container Docker Anda. Ini bekerja dengan file dan direktori tetapi tidak memiliki sebagian besar fungsionalitas lanjutan di cp berbasis shell perintah.

Penggunaan reguler docker cp menunjukkan potensi penyimpangan dari praktik terbaik kontainer. Adalah bijaksana untuk memperlakukannya sebagai alat kenyamanan untuk penggunaan pengembangan, daripada bagian integral dari bekerja dengan kontainer. Persistensi file jangka panjang harus diimplementasikan dengan volume karena ini adalah komponen kelas satu dalam ekosistem Docker.


Docker
  1. perbedaan antara podman dan buruh pelabuhan.

  2. Cara Menggunakan Gambar Docker, Wadah, dan File Docker Secara Mendalam

  3. Cara Menggunakan Tulis Docker

  1. Bagaimana dan Mengapa Menggunakan Host Docker Jarak Jauh

  2. Cara Menyalin File Antara Pod Kubernetes dan Mesin Anda

  3. Cara Berbagi Data Antar Wadah Docker

  1. Cara Mendaftar Kontainer Docker

  2. Cara mencadangkan dan memulihkan wadah Docker

  3. Cara Menjeda dan Melanjutkan Wadah Docker