Saya telah mencoba gambar docker menggunakan baris perintah docker tanpa menentukan nama untuk volume. Sekarang saya menemukan bahwa saya ingin terus menggunakan wadah/gambar ini tetapi dengan mendefinisikan wadah di Docker compose.
Apa itu praktik terbaik untuk menyimpan data dari volume anonim / tidak disebutkan namanya dan menggunakannya dalam wadah baru yang dibuat oleh docker compose?
Dapatkah Saya mengubah volume yang tidak disebutkan namanya menjadi volume bernama?
atau haruskah saya membuat wadah baru dengan docker compose dengan volume bernama dan menyalin data?
Metode ini memiliki manfaat menggunakan docker API. Ini menggunakan gambar Linux ringan yang disebut alpine dan shell defaultnya, ash untuk menjalankan salinan berkas, cp -av dari volume lama ke volume yang baru bernama.
Saat ini Anda tidak dapat mengganti nama volume yang ada. (Ini benar apakah mereka sebelumnya bernama atau tidak disebutkan namanya dan nama mereka dibuat secara otomatis.)
Anda dapat melihat masalah ini untuk informasi lebih lanjut tentang pelaksanaan fitur ini, serta menambahkan Anda "+1"/"Thumbs up" untuk membiarkan pengembang tahu bahwa anda menginginkannya.
Tanpa itu, sejauh yang saya tahu, satu-satunya cara yang baik untuk melakukannya adalah dengan membuat volume bernama baru dan menyalin data.
Pada saat penulisan ini, satu-satunya pilihan adalah menyalin data. Rincian dapat bervariasi tergantung pada setup tertentu. Daftar Umum Langkah-langkah yang harus dilakukan adalah sebagai berikut:
Berhenti dan menghapus wadah sumber untuk membiarkan volume baru dibuat pada Langkah 3.
docker stop NAMEdocker rm NAME# ordocker-compose stop SERVICEdocker-compose rm SERVICE
Dalam beberapa kasus, Anda mungkin dapat menunda penghapusan wadah sumber, misalnya saat beralih dari docker-compose volume anonim untuk docker-compose bernama volume. Dalam hal ini up akan membuat volume baru. Dan Anda dapat melanjutkan dengan menyalin data. Tetapi bahkan dalam kasus ini menghentikan wadah disarankan untuk menghindari data diubah saat Anda menyalinnya. Dan Anda harus menghapus wadah sumber untuk docker-compose untuk beralih ke volume baru (memperhatikan peringatan).
Dalam beberapa kasus itu tidak benar-benar diperlukan, misalnya saat beralih dari wadah mandiri ke docker-compose.
Perubahan docker-compose.yml jika berlaku.
Mulai wadah baru untuk volume baru yang akan dibuat.
Wadah mandiri:
docker run ...# ordocker-compose up -d
Hentikan penampung baru untuk menghindari perubahan data.
docker stop ...# ordocker-compose stop
Dalam hal bermigrasi ke misalnya wadah mandiri dengan volume bernama, anda cukup membuat volume sebagai pengganti memulai/menghentikan wadah.
Salin datanya.
docker run --rm -v "SRC_VOLUME:/from" -v "DST_VOLUME:/to" \ bash -c ' shopt -s dotglob # rm -r /to/* # e.g. pg might have populated the new volume cp -r /from/* /to '
Di mana SRC_VOLUME, DST_VOLUME-nama volume, id, atau path absolut ke direktori pada host.
Untuk daftar volume yang melekat pada penggunaan kontainer: