Bagaimana cara menangani pembaruan keamanan dalam kontainer Docker?

Saat menerapkan aplikasi ke server, biasanya ada pemisahan antara apa yang bundel aplikasi dengan dirinya sendiri dan apa yang diharapkan dari platform (sistem operasi dan paket yang diinstal) untuk disediakan. Satu hal dari ini adalah bahwa platform dapat diperbarui secara independen dari aplikasi. Ini berguna misalnya ketika pembaruan keamanan perlu diterapkan segera ke paket yang disediakan oleh platform tanpa membangun kembali seluruh aplikasi.

Secara tradisional pembaruan keamanan telah diterapkan hanya dengan menjalankan perintah manajer paket untuk menginstal versi paket yang diperbarui pada sistem operasi (misalnya "pembaruan yum" di RHEL). Tetapi dengan munculnya teknologi kontainer seperti Docker di mana gambar kontainer pada dasarnya menggabungkan kedua aplikasi dan platform, apa cara kanonik menjaga sistem dengan wadah tetap mutakhir? Baik host dan kontainer memiliki Kumpulan paket mereka sendiri, independen, yang perlu diperbarui dan diperbarui pada host tidak akan memperbarui paket apa pun di dalam kontainer. Dengan dirilisnya RHEL 7 di mana kontainer Docker secara khusus ditampilkan, akan menarik untuk mendengar apa cara yang direkomendasikan Redhat untuk menangani pembaruan keamanan kontainer.

Pemikiran tentang beberapa opsi:

  • Membiarkan manajer paket memperbarui paket pada host tidak akan memperbarui paket di dalam wadah.
  • Harus membuat ulang semua gambar kontainer untuk menerapkan pembaruan tampaknya memutus pemisahan antara aplikasi dan platform (memperbarui platform memerlukan akses ke proses pembuatan aplikasi yang menghasilkan gambar buruh pelabuhan).
  • Menjalankan perintah manual di dalam setiap wadah yang sedang berjalan tampaknya rumit dan perubahan berisiko ditimpa saat wadah berikutnya diperbarui dari artefak rilis aplikasi.

Jadi tidak satu pun dari pendekatan ini tampaknya memuaskan.

Gambar Docker menggabungkan aplikasi dan" platform", itu benar. Tapi biasanya gambar terdiri dari gambar dasar dan aplikasi yang sebenarnya.

Jadi cara kanonik untuk menangani pembaruan keamanan adalah memperbarui gambar dasar, lalu membangun kembali gambar aplikasi Anda.

Wadah seharusnya ringan dan dapat dipertukarkan. Jika penampung Anda memiliki masalah keamanan, Anda membangun kembali versi penampung yang ditambal dan menerapkan penampung baru. (banyak kontainer menggunakan gambar dasar standar yang menggunakan alat manajemen paket standar seperti apt-get untuk menginstal dependensinya, pembangunan kembali akan menarik pembaruan dari repositori)

Meskipun Anda dapat menambal di dalam wadah, itu tidak akan berskala dengan baik.

Ini ditangani secara otomatis di SUSE Enterprise Linux menggunakan zypper-docker(1)

SUSE / zypper-docker

Docker Mulai Cepat

Pertama-tama, banyak pembaruan Anda yang secara tradisional Anda jalankan di masa lalu tidak akan berada di dalam wadah itu sendiri. Wadah harus menjadi bagian yang cukup ringan dan kecil dari sistem file lengkap yang biasa Anda lihat di masa lalu. Paket yang harus Anda Perbarui adalah paket yang merupakan bagian dari DockerFile Anda, dan karena Anda memiliki DockerFile, Anda harus dapat melacak paket dan ID kontainer yang memerlukan pembaruan. UI Cloudstein yang akan segera dirilis melacak bahan-bahan DockerFile ini untuk anda sehingga seseorang dapat membangun skema pembaruan yang paling sesuai untuk wadah mereka. Semoga ini bisa membantu

Jawaban Terbaik here sangat membantu karena ada skrip yang berisi baris perintah utama untuk melakukan apa yang dikatakan Johannes Ziemke:

Ide terbaik untuk ini yang pernah saya lihat sejauh ini adalah Project Atomic. saya tidak berpikir itu quite siap untuk prime time sekalipun.

Valko, alur kerja apa yang anda dapatkan? Saya menjalankan wadah jangka panjang(hosting php-cgi, misalnya) dan apa yang saya temukan sejauh ini adalah: docker pull debian/jessie untuk memperbarui gambar, lalu membangun kembali gambar saya yang ada, lalu hentikan wadah dan jalankan lagi (dengan gambar baru). Gambar yang saya buat memiliki nama yang sama dengan yang sebelumnya, jadi permulaan dilakukan melalui skrip. Saya kemudian menghapus gambar" tidak disebutkan namanya". Saya pasti akan menghargai alur kerja yang lebih baik.

Pertanyaan menarik. Aku bertanya-tanya tentang hal itu sendiri. Jika Anda memiliki 20 aplikasi yang berjalan pada satu host docker, Anda harus meng-upgrade gambar dasar, membangun kembali dan restart! 20 aplikasi dan Anda bahkan tidak tahu apakah pembaruan keamanan memengaruhi semuanya, atau hanya salah satunya. Anda harus membangun kembali gambar untuk mengatakan Apache ketika pembaruan keamanan hanya memengaruhi libpng misalnya. Jadi Anda berakhir dengan pembangunan kembali dan restart yang tidak perlu…

miha: kedengarannya mirip dengan apa yang akhirnya saya lakukan. Pada dasarnya terus memperbarui dan membangun kembali semua gambar sebagai bagian dari pembuatan rilis baru. Dan memulai ulang wadah menggunakan gambar baru.

Saya tidak punya jawabannya, tetapi jika ada yang menginginkan skrip sederhana yang dapat membantu mengotomatiskan pemeriksaan pembaruan gambar dasar: dockcheck