Containers 101: Dasar-dasar Docker

Docker dimulai pada tahun 2012 sebagai proyek open source, awalnya bernama dotcloud, untuk membangun container Linux aplikasi tunggal. Sejak itu, Docker telah menjadi alat pengembangan yang sangat populer, semakin banyak digunakan sebagai lingkungan runtime. Beberapa - jika ada - teknologi telah berhasil digunakan oleh pengembang secepat Docker.

Salah satu alasan Docker sangat populer adalah karena Docker menjanjikan "kembangkan sekali, jalankan di mana saja". Docker menawarkan cara sederhana untuk mengemas aplikasi dan dependensi runtime-nya ke dalam satu container; ia juga menyediakan abstraksi waktu proses yang memungkinkan penampung untuk dijalankan di berbagai versi kernel Linux.

Menggunakan Docker, pengembang dapat membuat aplikasi dalam container di workstation-nya, lalu dengan mudah menerapkan container ke server yang mendukung Docker. Tidak perlu menguji ulang atau menyetel ulang penampung untuk lingkungan server, baik di cloud atau di lokasi.

Selain itu, Docker menyediakan berbagi perangkat lunak dan mekanisme distribusi yang memungkinkan pengembang dan tim operasi untuk dengan mudah berbagi dan menggunakan kembali konten kontainer. Mekanisme distribusi ini, ditambah dengan portabilitas di seluruh mesin, membantu menjelaskan popularitas Docker dengan tim operasi dan dengan pengembang.  

Komponen Docker

Docker adalah alat pengembangan dan lingkungan runtime. Untuk memahami Docker, pertama-tama kita harus memahami konsep image container Docker. Penampung selalu dimulai dengan gambar dan dianggap sebagai contoh gambar itu. Gambar adalah spesifikasi statis dari penampung yang seharusnya dalam waktu proses, termasuk kode aplikasi di dalam penampung dan setelan konfigurasi waktu proses. Gambar Docker berisi lapisan hanya-baca, yang berarti bahwa setelah gambar dibuat, itu tidak pernah dimodifikasi.

Gambar 1 menunjukkan contoh gambar container. Gambar ini menggambarkan gambar Ubuntu dengan instalasi Apache. Gambar tersebut adalah komposisi dari tiga lapisan dasar Ubuntu ditambah lapisan pembaruan, dengan lapisan Apache dan lapisan file kustom di atasnya.

Container Docker yang berjalan adalah instance dari sebuah image. Penampung yang diturunkan dari gambar yang sama identik satu sama lain dalam hal kode aplikasi dan dependensi waktu prosesnya. Namun tidak seperti gambar, yang bersifat hanya-baca, menjalankan kontainer menyertakan lapisan yang dapat ditulis (lapisan kontainer) di atas konten hanya-baca. Perubahan runtime, termasuk penulisan dan pembaruan apa pun pada data dan file, disimpan di lapisan penampung. Karenanya, beberapa container yang berjalan secara bersamaan yang berbagi gambar dasar yang sama mungkin memiliki lapisan container yang sangat berbeda.

Saat wadah yang berjalan dihapus, lapisan wadah yang dapat ditulis juga dihapus dan tidak akan bertahan. Satu-satunya cara untuk mempertahankan perubahan adalah dengan melakukan docker commitperintah eksplisit sebelum menghapus penampung. Saat Anda melakukan a docker commit, konten kontainer yang berjalan, termasuk lapisan yang dapat ditulis, ditulis ke dalam gambar kontainer baru dan disimpan ke disk. Ini menjadi gambar baru yang berbeda dari gambar yang digunakan untuk membuat instance container.

Dengan menggunakan docker commitperintah eksplisit ini , seseorang dapat membuat kumpulan gambar Docker yang terpisah dan berurutan, masing-masing dibuat di atas gambar sebelumnya. Selain itu, Docker menggunakan strategi salin-saat-tulis untuk meminimalkan jejak penyimpanan kontainer dan gambar yang berbagi komponen dasar yang sama. Ini membantu mengoptimalkan ruang penyimpanan dan meminimalkan waktu mulai kontainer.

Gambar 2 menggambarkan perbedaan antara gambar dan container yang sedang berjalan. Perhatikan bahwa setiap kontainer yang berjalan dapat memiliki lapisan yang dapat ditulis berbeda.

Di luar konsep gambar, Docker memiliki beberapa komponen spesifik yang berbeda dari yang ada di wadah Linux tradisional.

  • Docker daemon. Juga dikenal sebagai Mesin Docker, daemon Docker adalah lapisan tipis antara container dan kernel Linux. Daemon Docker adalah lingkungan runtime persisten yang mengelola wadah aplikasi. Container Docker apa pun dapat berjalan di server apa pun yang mengaktifkan Docker-daemon, apa pun sistem operasi yang mendasarinya.
  • Dockerfile. Pengembang menggunakan Dockerfiles untuk membuat gambar kontainer, yang kemudian menjadi dasar untuk menjalankan kontainer. Dockerfile adalah dokumen teks yang berisi semua informasi konfigurasi dan perintah yang diperlukan untuk merakit image container. Dengan Dockerfile, daemon Docker dapat secara otomatis membangun image container. Proses ini sangat menyederhanakan langkah-langkah pembuatan kontainer.

Lebih khusus lagi, dalam Dockerfile, Anda terlebih dahulu menentukan image dasar tempat proses build dimulai. Anda kemudian menentukan urutan perintah, setelah itu gambar container baru dapat dibuat.

  • Alat antarmuka baris perintah Docker. Docker menyediakan sekumpulan perintah CLI untuk mengelola siklus proses container berbasis gambar. Perintah Docker menjangkau fungsi pengembangan seperti membangun, mengekspor, dan memberi tag, serta fungsi runtime seperti menjalankan, menghapus, memulai dan menghentikan container, dan banyak lagi.

Anda dapat menjalankan perintah Docker terhadap daemon Docker atau registri tertentu. Misalnya, jika Anda menjalankan docker -psperintah, Docker akan mengembalikan daftar kontainer yang berjalan di daemon.

Distribusi konten dengan Docker

Selain lingkungan runtime dan format kontainer, Docker menyediakan mekanisme distribusi perangkat lunak, umumnya dikenal sebagai registri, yang memfasilitasi penemuan dan distribusi konten kontainer.

Konsep registri sangat penting untuk keberhasilan Docker, karena Docker menyediakan seperangkat utilitas untuk mengemas, mengirim, menyimpan, menemukan, dan menggunakan kembali konten kontainer. Perusahaan Docker menjalankan registri publik gratis yang disebut Docker Hub.

  • Registri. Registri Docker adalah tempat di mana gambar kontainer diterbitkan dan disimpan. Registri bisa jarak jauh atau lokal. Ini bisa publik, sehingga semua orang dapat menggunakannya, atau pribadi, terbatas pada organisasi atau sekumpulan pengguna. Registri Docker dilengkapi dengan serangkaian API umum yang memungkinkan pengguna membuat, menerbitkan, mencari, mengunduh, dan mengelola gambar kontainer.
  • Docker Hub. Docker Hub adalah registri kontainer publik berbasis cloud yang dikelola oleh Docker. Docker Hub menyediakan dukungan alur kerja penemuan, distribusi, dan kolaborasi. Selain itu, Docker Hub memiliki sekumpulan gambar resmi yang disertifikasi oleh Docker. Ini adalah gambar dari penerbit perangkat lunak terkenal seperti Canonical, Red Hat, dan MongoDB. Anda dapat menggunakan gambar resmi ini sebagai dasar untuk membuat gambar atau aplikasi Anda sendiri.

Gambar 3 menggambarkan alur kerja di mana pengguna membuat gambar dan mengunggahnya ke registri. Pengguna lain dapat menarik image dari registri untuk membuat wadah produksi dan menerapkannya ke host Docker, di mana pun mereka berada.

Kekekalan kontainer Docker

Salah satu properti yang paling menarik dari kontainer Docker adalah kekekalannya dan mengakibatkan kontainer tanpa kewarganegaraan.

Seperti yang kami jelaskan di bagian sebelumnya, image Docker, setelah dibuat, tidak berubah. Penampung yang berjalan yang berasal dari gambar memiliki lapisan yang dapat ditulis yang dapat menyimpan perubahan runtime untuk sementara. Jika penampung dikomit sebelum dihapus dengan docker commit, perubahan pada lapisan yang dapat ditulis akan disimpan ke dalam gambar baru yang berbeda dari yang sebelumnya.

Mengapa kekekalan itu baik? Gambar dan penampung yang tidak dapat diubah menghasilkan infrastruktur yang tidak dapat diubah, dan infrastruktur yang tidak dapat diubah memiliki banyak manfaat menarik yang tidak dapat dicapai dengan sistem tradisional. Manfaat ini meliputi:

  • Kontrol versi. Dengan mengharuskan komit eksplisit yang menghasilkan gambar baru, Docker memaksa Anda melakukan kontrol versi. Anda dapat melacak versi gambar yang berurutan; memutar kembali ke gambar sebelumnya (oleh karena itu ke komponen sistem sebelumnya) sepenuhnya dimungkinkan, karena gambar sebelumnya disimpan dan tidak pernah dimodifikasi.
  • Pembaruan yang lebih bersih dan perubahan status yang lebih mudah dikelola. Dengan infrastruktur yang tidak dapat diubah, Anda tidak lagi harus meningkatkan infrastruktur server Anda, yang berarti tidak perlu mengubah file konfigurasi, tidak ada pembaruan perangkat lunak, tidak ada peningkatan sistem operasi, dan sebagainya. Saat perubahan diperlukan, Anda cukup membuat container baru dan mendorongnya keluar untuk mengganti yang lama. Ini adalah metode yang jauh lebih diskrit dan dapat dikelola untuk perubahan status.
  • Penyimpangan yang diminimalkan. Untuk menghindari penyimpangan, Anda dapat menyegarkan semua komponen di sistem Anda secara berkala dan proaktif untuk memastikan semuanya adalah versi terbaru. Praktik ini jauh lebih mudah dengan wadah yang merangkum komponen sistem yang lebih kecil daripada dengan perangkat lunak tradisional yang besar.

Perbedaan Docker

Format gambar Docker, API ekstensif untuk manajemen kontainer, dan mekanisme distribusi perangkat lunak yang inovatif telah menjadikannya platform yang populer untuk tim pengembangan dan operasi. Docker membawa manfaat penting ini ke organisasi.

  • Minimal, sistem deklaratif. Kontainer Docker adalah yang terbaik jika mereka kecil, aplikasi tujuan tunggal. Hal ini menimbulkan kontainer yang berukuran minimal, yang pada gilirannya mendukung pengiriman cepat, integrasi berkelanjutan, dan penerapan berkelanjutan.
  • Operasi yang dapat diprediksi. Sakit kepala terbesar dari operasi sistem selalu menjadi perilaku infrastruktur atau aplikasi yang tampaknya acak. Dengan memaksa Anda membuat pembaruan yang lebih kecil dan lebih mudah dikelola dan dengan menyediakan mekanisme untuk meminimalkan penyimpangan sistem, Docker membantu Anda membangun sistem yang lebih dapat diprediksi. Saat penyimpangan dihilangkan, Anda memiliki jaminan bahwa perangkat lunak akan selalu berperilaku dengan cara yang sama, tidak peduli berapa kali Anda menerapkannya.
  • Penggunaan kembali perangkat lunak yang ekstensif. Kontainer Docker menggunakan kembali lapisan dari gambar lain, yang secara alami mendorong penggunaan ulang perangkat lunak. Berbagi image Docker melalui register adalah contoh bagus lainnya dari penggunaan kembali komponen, dalam skala besar.
  • Portabilitas multicloud yang sebenarnya. Docker memungkinkan kemandirian platform yang sebenarnya, dengan memungkinkan container untuk bermigrasi secara bebas antara berbagai platform cloud, infrastruktur di lokasi, dan workstation pengembangan.

Docker telah mengubah cara organisasi membangun sistem dan memberikan layanan. Ini mulai membentuk kembali cara kita berpikir tentang desain perangkat lunak dan ekonomi pengiriman perangkat lunak. Sebelum perubahan ini benar-benar mengakar, organisasi perlu lebih memahami cara mengelola keamanan dan kebijakan untuk lingkungan Docker. Tapi itu topik untuk artikel lain.

Chenxi Wang adalah kepala petugas strategi untuk perusahaan keamanan kontainer Twistlock.

Forum Teknologi Baru menyediakan tempat untuk mengeksplorasi dan mendiskusikan teknologi perusahaan yang sedang berkembang secara mendalam dan luas. Pemilihannya subjektif, berdasarkan pilihan teknologi yang kami yakini penting dan paling menarik bagi pembaca. tidak menerima jaminan pemasaran untuk publikasi dan berhak untuk mengedit semua konten yang dikontribusikan. Kirim semua pertanyaan ke [email protected]