Gambar docker saya dibuat di server Jenkins CI dan didorong ke Docker Registry pribadi kami. Tujuan saya adalah untuk menyediakan lingkungan dengan komposisi buruh pelabuhan yang selalu memulai kondisi gambar yang awalnya dibuat.
Saat ini saya menggunakan docker-compose 1.3.2 serta 1.4.0 pada mesin yang berbeda tetapi kami juga menggunakan versi yang lebih lama sebelumnya.
Saya selalu menggunakan docker-compose pull && docker-compose up -d
perintah untuk mengambil gambar baru dari registri dan memulai. Saya percaya perilaku yang saya sukai berfungsi seperti yang diharapkan hingga titik waktu tertentu, tetapi sejak itu docker-compose up
mulai menjalankan kembali kontainer yang dihentikan sebelumnya alih-alih memulai gambar yang dibuat semula setiap saat.
Apakah ada cara untuk menghilangkan perilaku ini? Mungkinkah itu yang ditransfer dalam file konfigurasi docker-compose.yml untuk tidak bergantung "tidak lupa" sesuatu pada baris perintah pada setiap doa?
ps. Selain menemukan cara untuk mencapai tujuan saya, saya juga ingin tahu sedikit lebih banyak tentang latar belakang perilaku ini. Saya pikir ide dasar Docker adalah membangun infrastruktur yang tidak berubah. Tingkah laku docker-compose saat ini tampaknya jelas berbenturan dengan pendekatan ini .. atau apakah saya kehilangan beberapa poin di sini?
sumber
docker-compose run -d
tidak ada? Anda ingin mengatakandocker-compose up -d
tidak?docker-compose pull
sebelumdocker-compose rm -f
Anda dapat menghemat lebih banyak waktuSatu-satunya solusi yang bekerja untuk saya adalah perintah ini:
Ini akan secara otomatis menarik gambar baru dari repo dan tidak akan menggunakan versi cache yang dibuat ulang dengan parameter apa pun yang telah Anda gunakan sebelumnya.
sumber
Dengan dokumentasi resmi saat ini ada jalan pintas yang berhenti dan menghapus kontainer, jaringan, volume, dan gambar yang dibuat oleh, jika mereka sudah berhenti atau dihapus sebagian dan seterusnya, maka itu akan melakukan trik juga:
Kemudian jika Anda memiliki perubahan baru pada gambar Anda atau gunakan Dockerfiles:
Akhirnya:
docker-compose up
Dalam satu perintah:
docker-compose down && docker-compose build --no-cache && docker-compose up
sumber
docker-compose build --no-cache
diperlukan hanya jika ada perubahan pada Dockerfiles.docker-compose up
, perlu untuk membangun kembali layanan dengandocker-compose build
.Anda dapat melewati
--force-recreate
kedocker compose up
, yang harus menggunakan kontainer segar.Saya pikir alasan di balik menggunakan kembali wadah adalah untuk melestarikan perubahan apa pun selama pengembangan. Perhatikan bahwa Tulisan melakukan sesuatu yang mirip dengan volume, yang juga akan bertahan di antara rekreasi wadah (wadah yang dibuat ulang akan menempel pada volume pendahulunya). Ini dapat membantu, misalnya, jika Anda memiliki wadah Redis yang digunakan sebagai cache dan Anda tidak ingin kehilangan cache setiap kali Anda melakukan perubahan kecil. Di lain waktu itu hanya membingungkan.
Saya tidak percaya ada cara apa pun Anda bisa memaksakan ini dari file Menulis.
Bisa dibilang itu berbenturan dengan prinsip-prinsip infrastruktur yang tidak dapat diubah. Argumen tandingannya mungkin karena Anda belum menggunakan Tulis dalam produksi (belum). Juga, saya tidak yakin saya setuju bahwa infra abadi adalah ide dasar Docker, meskipun tentu saja ini adalah use case / selling point yang baik.
sumber
--force-recreate
tidak berfungsi untuk saya ... Gambar tidak ditarik meskipun versi yang lebih baru ada di sana ...ATAU
sumber
Jika ada sesuatu yang baru itu akan dibangun kembali.
sumber