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

Cara Membuat Gambar Docker Dari Wadah yang Berjalan

Kontainer Docker umumnya merupakan contoh aplikasi singkat yang tidak memiliki status internal. Itulah cara praktik terbaik untuk menanganinya yang memungkinkan Anda menghentikan atau memulai ulang penampung kapan saja.

Terkadang modifikasi pada sistem file container tidak dapat dihindari. Mungkin Anda sedang mencoba perangkat lunak dan ingin snapshot kembali lagi nanti. Kasus penggunaan lainnya dapat berupa situasi di mana perangkat lunak di dalam penampung berhenti bekerja dan Anda ingin menyimpan replika yang dapat Anda debug di masa mendatang.

Berikut cara membuat image Docker baru dari container yang sudah ada. Anda kemudian dapat memulai yang lain wadah dari gambar itu yang akan diisi dengan sistem file dari yang pertama.

Mengkomit Wadah

docker commit perintah digunakan untuk mengambil wadah dan menghasilkan gambar baru darinya. Ini bekerja dengan kontainer yang berhenti atau sedang berjalan.

Sintaks dasarnya adalah sebagai berikut:

docker commit example-container example-image:latest

Ini membuat gambar dari wadah bernama example-container . Anda juga dapat mengidentifikasi penampung berdasarkan ID jika Anda mau. Kedua informasi tersebut tersedia dari output docker ps yang mencantumkan semua container di host Anda.

Gambar yang dihasilkan diberi tag yang diberikan sebagai parameter kedua perintah. Ini adalah example-image:latest dalam contoh yang ditunjukkan di atas. Sama seperti operasi penandaan gambar biasa, gambar baru akan menggantikan referensi tag jika sudah ada.

Sekarang Anda dapat menggunakan gambar Anda untuk memulihkan sistem file dari example-container menjadi contoh wadah baru:

docker run -d example-image:latest

Konten sistem file akan cocok dengan example-container container pada saat docker commit perintah dieksekusi Ada satu peringatan penting:konten volume yang dipasang tidak akan disertakan, jadi lokasi pemasangannya akan kosong di gambar wadah yang dibuat. Untuk menjalankan wadah baru dengan data volume utuh, gunakan -v tandai untuk memasang kembali volume dari wadah pertama saat Anda memulai instance kedua dengan docker run .

Poin penting lainnya adalah bagaimana Docker menangani komit dari menjalankan container. Untuk sebagian besar, ini harus bekerja dengan mulus tetapi defaultnya adalah menjeda wadah target sebelum komit dibuat. Semua proses dalam wadah akan ditangguhkan dan kemudian dilanjutkan setelah pembuatan gambar selesai. Ini meningkatkan konsistensi data dalam gambar baru tetapi membuat wadah tidak dapat diakses untuk sementara. Anda dapat menonaktifkan perilaku ini dengan menyertakan --pause false dengan docker commit . Anda perintah.

Menambahkan Pesan Komit

docker commit command mendukung pesan komit dengan cara yang mirip dengan perangkat lunak kontrol versi seperti Git. Menambahkan pesan saat Anda membuat gambar dari wadah memungkinkan Anda mendokumentasikan apa yang berubah dan alasan di balik komit Anda.

Gunakan --message atau -m tandai untuk menerapkan pesan komit:

docker commit -m "Example commit" example-container example-image:latest

Anda juga dapat menambahkan informasi kepengarangan dengan bendera khusus. Berikan string dalam First Name <[email protected]> yang umum format ke --author atau -a bendera. Itu akan disimpan di samping pesan komit.

docker commit -a "Example Author <[email protected]>" -m "Example commit" example-container example-image:latest

Pesan komit ditampilkan saat Anda menggunakan docker history perintah untuk melihat lapisan dalam gambar. Mereka akan muncul di COMMENT kolom paling kanan.

Cara lain untuk mengakses informasi ini adalah dengan menggunakan docker inspect bersamaan dengan grep untuk mengekstrak nilai kepengarangan dan komentar dari representasi JSON gambar:

docker inspect <image-id> | grep 'Created|Author|Comment'

Ini akan menampilkan data yang terkait dengan lapisan paling atas pada gambar.

Mengubah Instruksi Dockerfile

Mengkomit gambar memberi Anda kesempatan untuk mengubah beberapa instruksi Dockerfile-nya. Anda dapat mengganti nilai berikut di gambar baru Anda:

  • CMD
  • ENTRYPOINT
  • ENV
  • EXPOSE
  • LABEL
  • ONBUILD
  • USER
  • VOLUME
  • WORKDIR

Untuk menyetel instruksi, gunakan --change atau -c bendera:

docker commit --change 'ENTRYPOINT ["sh"]' example-container example-image:latest

Anda dapat mengulangi tanda tersebut sebanyak yang diperlukan untuk menerapkan semua perubahan yang diinginkan.

Hanya instruksi yang memengaruhi lapisan sistem file paling atas yang didukung. Anda tidak dapat dengan mulus memperluas gambar yang dikomit dengan lapisan baru melalui instruksi seperti RUN dan COPY . Namun Anda dapat mengambil hasil dari komit dan menulis Dockerfile baru yang menambahkan konten baru jika diperlukan:

# Created via `docker commit`
FROM example-image:latest
RUN apt install example-package

Jika Anda mengubah instruksi Dockerfile pada waktu komit, ada baiknya menambahkan pesan komit yang menjelaskan apa yang Anda modifikasi dan alasannya. Ini akan membantu orang lain yang memiliki akses ke gambar untuk memahami perbedaan perilaku apa pun dibandingkan dengan penampung tempat gambar itu dibuat.

Ringkasan

Gambar Docker biasanya dibuat dari Dockerfiles dan digunakan untuk memulai wadah sekali pakai. Perubahan pada status sistem file container dibuat dengan membangun kembali image, menghancurkan container yang ada, dan memulai yang baru. Di dunia yang ideal, container tidak memiliki status internal, tetapi dalam praktiknya hal ini tidak selalu benar.

Mengkomit sebuah wadah memberi Anda cara untuk memulihkan sistem file saat ini di masa mendatang. Commit berguna untuk membuat replika container yang bermasalah sehingga Anda dapat melakukan debug di lingkungan terpisah sambil mempertahankan akses ke log dan file sementara yang dibuat sebelumnya.

Meskipun komit penampung sering kali terasa mirip dengan snapshot VM, mereka bukanlah hal yang sama. VM mengontrol perangkat keras virtual dan status perangkat keras tersebut akan ada dalam snapshot. Kontainer Docker hanyalah sekumpulan proses yang berjalan di host; komit adalah gambar Docker baru yang mewakili sistem file penampung tetapi tidak memiliki data apa pun tentang status proses, kernel, dan perangkat keras Anda.


Docker
  1. Ekstrak File Dari Gambar Docker?

  2. Cara Membuat Wadah Docker MySQL untuk Pengujian

  3. Cara Mengakses Namespace Jaringan Docker Container dari Host

  1. Cara Membuat, Mendaftar &Menghapus Wadah Docker di Linux

  2. Cara Menjalankan Perintah di Running Docker Container

  3. OS mana yang berjalan di wadah Docker saya?

  1. Cara Melepaskan Dari Wadah Docker Tanpa Menghentikannya

  2. Cara membuat gambar khusus dari wadah Docker

  3. Cara membuat Gambar Docker dari Wadah dan File Docker