Memahami Docker

Saya telah menggunakan Docker selama beberapa bulan untuk menyusun proses pengembangan/pengiriman proyek web. Saya menawarkan kepada pembaca Habrakhabr terjemahan artikel pengantar tentang buruh pelabuhan - "Memahami buruh pelabuhan".

Apa itu buruh pelabuhan?

Docker adalah platform terbuka untuk mengembangkan, mengirimkan, dan mengoperasikan aplikasi. Docker dirancang untuk mengirimkan aplikasi Anda lebih cepat. Dengan buruh pelabuhan, Anda dapat memisahkan aplikasi dari infrastruktur dan memperlakukan infrastruktur sebagai aplikasi terkelola. Docker membantu Anda mengirimkan kode lebih cepat, menguji lebih cepat, mengirimkan aplikasi lebih cepat, dan mengurangi waktu antara menulis kode dan menjalankan kode. Docker melakukan ini melalui platform virtualisasi container yang ringan, menggunakan proses dan utilitas yang membantu Anda mengelola dan menghosting aplikasi Anda.

Pada intinya, buruh pelabuhan memungkinkan Anda menjalankan hampir semua aplikasi, diisolasi dengan aman dalam sebuah wadah. Isolasi aman memungkinkan Anda menjalankan banyak container di host yang sama secara bersamaan. Sifat container yang ringan, yang berjalan tanpa beban tambahan hypervisor, memungkinkan Anda memaksimalkan perangkat keras Anda.

Platform dan alat virtualisasi kontainer dapat berguna dalam kasus berikut:

  • mengemas aplikasi Anda (dan komponen yang Anda gunakan) ke dalam wadah buruh pelabuhan;
  • distribusi dan pengiriman kontainer ini ke tim Anda untuk pengembangan dan pengujian;
  • meletakkan kontainer ini di lokasi produksi Anda, baik di pusat data maupun di cloud.

Untuk apa saya menggunakan buruh pelabuhan?

Publikasikan aplikasi Anda dengan cepat

Docker sangat bagus untuk mengatur siklus pengembangan. Docker memungkinkan pengembang untuk menjalankan container lokal dengan aplikasi dan layanan. Yang selanjutnya memungkinkan Anda untuk berintegrasi dengan proses integrasi berkelanjutan dan alur kerja penerapan.

Misalnya, pengembang Anda menulis kode secara lokal dan membagikan tumpukan pengembangan mereka (satu set gambar Docker) dengan rekan kerja. Jika sudah siap, mereka memasukkan kode dan container ke situs pengujian dan menjalankan pengujian apa pun yang diperlukan. Dari situs pengujian, mereka dapat mengirimkan kode dan gambar ke produksi.

Lebih mudah ditata dan dibuka

Platform berbasis kontainer buruh pelabuhan memudahkan porting muatan Anda. Kontainer Docker dapat berjalan di mesin lokal Anda, baik nyata atau di mesin virtual di pusat data, atau di cloud.

Portabilitas dan sifat ringan dari buruh pelabuhan memudahkan pengelolaan beban kerja Anda secara dinamis. Anda dapat menggunakan buruh pelabuhan untuk menyebarkan atau mematikan aplikasi atau layanan Anda. Kecepatan buruh pelabuhan memungkinkan hal ini dilakukan hampir secara real-time.

Beban lebih tinggi dan muatan lebih banyak

Docker ringan dan cepat. Ini memberikan alternatif yang tangguh dan hemat biaya dibandingkan mesin virtual berbasis hypervisor. Ini sangat berguna di lingkungan dengan beban tinggi, misalnya, saat membuat cloud atau platform-as-service Anda sendiri. Namun ini juga berguna untuk aplikasi berukuran kecil dan menengah ketika Anda ingin memaksimalkan sumber daya yang Anda miliki.

Komponen Docker Utama

Docker terdiri dari dua komponen utama:

  • Docker: platform virtualisasi sumber terbuka;
  • Docker Hub: Platform kami sebagai layanan untuk mendistribusikan dan mengelola container Docker.

Catatan! Docker didistribusikan di bawah lisensi Apache 2.0.

Arsitektur buruh pelabuhan

Docker menggunakan arsitektur client-server. Klien Docker berkomunikasi dengan daemon Docker, yang mengambil alih beban pembuatan, menjalankan, dan mendistribusikan container Anda. Baik klien maupun server dapat berjalan pada sistem yang sama, Anda dapat menghubungkan klien ke daemon buruh pelabuhan jarak jauh. Klien dan server berkomunikasi melalui soket atau RESTful API.

Memahami Docker

Daemon buruh pelabuhan

Seperti yang ditunjukkan pada diagram, daemon berjalan di mesin host. Pengguna tidak berinteraksi dengan server secara langsung, tetapi menggunakan klien untuk ini.

Klien buruh pelabuhan

Klien Docker, program buruh pelabuhan, adalah antarmuka utama ke Docker. Ia menerima perintah dari pengguna dan berinteraksi dengan daemon buruh pelabuhan.

Di dalam buruh pelabuhan

Untuk memahami apa yang dimaksud dengan buruh pelabuhan, Anda perlu mengetahui tiga komponen:

  • gambar-gambar
  • registri
  • Wadah

Gambar

Gambar Docker adalah templat hanya-baca. Misalnya, gambar mungkin berisi sistem operasi Ubuntu dengan Apache dan aplikasi di dalamnya. Gambar digunakan untuk membuat wadah. Docker memudahkan untuk membuat image baru, memperbarui image yang sudah ada, atau Anda dapat mendownload image yang dibuat oleh orang lain. Gambar adalah komponen dari build buruh pelabuhan.

Register

Registri Docker menyimpan gambar. Ada registri publik dan swasta tempat Anda dapat mengunduh atau mengunggah gambar. Registri Docker publik adalah Hub Docker. Ada banyak sekali koleksi gambar yang disimpan di sana. Seperti yang Anda ketahui, gambar dapat dibuat oleh Anda atau Anda dapat menggunakan gambar yang dibuat oleh orang lain. Registri adalah komponen distribusi.

Wadah

Kontainer mirip dengan direktori. Kontainer berisi semua yang dibutuhkan aplikasi untuk dijalankan. Setiap wadah dibuat dari sebuah gambar. Kontainer dapat dibuat, dimulai, dihentikan, dimigrasikan atau dihapus. Setiap kontainer diisolasi dan menyediakan platform yang aman untuk aplikasi. Kontainer merupakan komponen pekerjaan.

Jadi bagaimana cara kerja Docker?

Sejauh ini kita mengetahui bahwa:

  • kita dapat membuat gambar di mana aplikasi kita berada;
  • kita dapat membuat wadah dari gambar untuk menjalankan aplikasi;
  • Kita dapat mendistribusikan image melalui Docker Hub atau image registry lainnya.

Mari kita lihat bagaimana komponen-komponen ini cocok satu sama lain.

Bagaimana cara kerja gambarnya?

Kita telah mengetahui bahwa gambar adalah template read-only yang menjadi tempat pembuatan container. Setiap gambar terdiri dari serangkaian level. penggunaan buruh pelabuhan sistem file gabungan untuk menggabungkan level ini menjadi satu gambar. Sistem file gabungan memungkinkan file dan direktori dari sistem file berbeda (cabang berbeda) tumpang tindih secara transparan, menciptakan sistem file yang koheren.

Salah satu alasan mengapa buruh pelabuhan ringan adalah karena menggunakan lapisan seperti ini. Saat Anda mengubah gambar, seperti memperbarui aplikasi, lapisan baru akan dibuat. Jadi, tanpa mengganti keseluruhan image atau membangunnya kembali, seperti yang mungkin Anda lakukan dengan mesin virtual, hanya layer yang ditambahkan atau diperbarui. Dan Anda tidak perlu mendistribusikan seluruh gambar baru, hanya pembaruan yang didistribusikan, sehingga lebih mudah dan cepat untuk mendistribusikan gambar.

Inti dari setiap gambar adalah gambar dasar. Misalnya, ubuntu, image dasar Ubuntu, atau fedora, image dasar distribusi Fedora. Anda juga dapat menggunakan gambar sebagai dasar untuk membuat gambar baru. Misalnya, jika Anda memiliki image apache, Anda dapat menggunakannya sebagai image dasar untuk aplikasi web Anda.

Catatan! Docker biasanya mengambil image dari registri Docker Hub.

Gambar Docker dapat dibuat dari gambar dasar ini; kami memanggil langkah-langkah untuk membuat instruksi gambar ini. Setiap instruksi menciptakan gambar atau level baru. Instruksinya adalah sebagai berikut:

  • jalankan perintah
  • menambahkan file atau direktori
  • membuat variabel lingkungan
  • petunjuk tentang apa yang harus dijalankan ketika penampung gambar ini diluncurkan

Instruksi ini disimpan dalam sebuah file Dockerfile. Docker membaca ini Dockerfile, saat Anda membuat gambar, jalankan instruksi ini dan kembalikan gambar akhir.

Bagaimana cara kerja registri buruh pelabuhan?

Registri adalah tempat penyimpanan image buruh pelabuhan. Setelah gambar dibuat, Anda dapat mempublikasikannya ke registri Docker Hub publik atau ke registri pribadi Anda.

Dengan klien buruh pelabuhan, Anda dapat mencari gambar yang sudah diterbitkan dan mengunduhnya ke mesin buruh pelabuhan Anda untuk membuat kontainer.

Docker Hub menyediakan repositori gambar publik dan pribadi. Mencari dan mengunduh gambar dari repositori publik tersedia untuk semua orang. Konten penyimpanan pribadi tidak disertakan dalam hasil pencarian. Dan hanya Anda dan pengguna Anda yang dapat menerima gambar ini dan membuat wadah dari gambar tersebut.

Bagaimana cara kerja wadah?

Kontainer terdiri dari sistem operasi, file pengguna, dan metadata. Seperti yang kita ketahui, setiap container dibuat dari sebuah gambar. Gambar ini memberi tahu buruh pelabuhan apa yang ada di dalam container, proses apa yang harus dimulai, kapan container dimulai, dan data konfigurasi lainnya. Gambar Docker bersifat hanya-baca. Ketika buruh pelabuhan memulai sebuah container, ia menciptakan lapisan baca/tulis di atas gambar (menggunakan sistem file gabungan seperti yang dinyatakan sebelumnya) di mana aplikasi dapat dijalankan.

Apa yang terjadi ketika penampung dimulai?

Atau menggunakan program docker, atau menggunakan RESTful API, klien buruh pelabuhan memberitahu daemon buruh pelabuhan untuk memulai kontainer.

$ sudo docker run -i -t ubuntu /bin/bash

Mari kita lihat perintah ini. Klien diluncurkan menggunakan perintah docker, dengan opsi run, yang menyatakan bahwa container baru akan diluncurkan. Persyaratan minimum untuk menjalankan container adalah atribut berikut:

  • gambar mana yang akan digunakan untuk membuat wadah. Dalam kasus kami ubuntu
  • perintah yang ingin Anda jalankan saat container dimulai. Dalam kasus kami /bin/bash

Apa yang terjadi saat kita menjalankan perintah ini?

Docker, secara berurutan, melakukan hal berikut:

  • mengunduh gambar ubuntu: buruh pelabuhan memeriksa ketersediaan gambar ubuntu di mesin lokal, dan jika tidak ada, unduh dari Hub Docker. Jika ada gambar, ia menggunakannya untuk membuat wadah;
  • membuat wadah: ketika gambar diterima, buruh pelabuhan menggunakannya untuk membuat sebuah wadah;
  • menginisialisasi sistem file dan memasang level read-only: wadah dibuat di sistem file dan gambar ditambahkan ke tingkat hanya-baca;
  • menginisialisasi jaringan/jembatan: membuat antarmuka jaringan yang memungkinkan buruh pelabuhan berkomunikasi dengan mesin host;
  • Mengatur alamat IP: menemukan dan menetapkan alamat;
  • Memulai proses yang ditentukan: meluncurkan aplikasi Anda;
  • Memproses dan menghasilkan keluaran dari aplikasi Anda: menghubungkan dan mencatat input, output, dan aliran kesalahan standar aplikasi Anda sehingga Anda dapat melacak kinerja aplikasi Anda.

Anda sekarang memiliki wadah yang berfungsi. Anda dapat mengelola wadah Anda, berinteraksi dengan aplikasi Anda. Saat Anda memutuskan untuk menghentikan aplikasi, hapus wadahnya.

Teknologi yang digunakan

Docker ditulis di Go dan menggunakan beberapa fitur kernel Linux untuk mengimplementasikan fungsi di atas.

Ruang nama

Docker menggunakan teknologi namespaces untuk mengatur ruang kerja yang terisolasi, yang kami sebut kontainer. Saat kita memulai sebuah container, buruh pelabuhan membuat sekumpulan namespace untuk container tersebut.

Hal ini menciptakan lapisan terisolasi, dengan setiap aspek wadah berjalan di namespacenya sendiri dan tidak memiliki akses ke sistem eksternal.

Daftar beberapa namespace yang digunakan buruh pelabuhan:

  • alamat: untuk mengisolasi proses;
  • bersih: untuk mengelola antarmuka jaringan;
  • ipc: untuk mengelola sumber daya IPC. (ICP: Komunikasi AntarProses);
  • menit: untuk mengelola titik pemasangan;
  • UTC: untuk mengisolasi kernel dan mengontrol pembuatan versi (UTC: Sistem pembagian waktu Unix).

Kelompok kontrol

Docker juga menggunakan teknologi cgroups atau kelompok kontrol. Kunci untuk menjalankan aplikasi secara terpisah adalah menyediakan aplikasi hanya dengan sumber daya yang ingin Anda sediakan. Hal ini memastikan bahwa kontainer akan menjadi tetangga yang baik. Grup kontrol memungkinkan Anda berbagi sumber daya perangkat keras yang tersedia dan, jika perlu, menetapkan batasan dan batasan. Misalnya, batasi kemungkinan jumlah memori untuk container.

Sistem File Persatuan

Union File Sysem atau UnionFS adalah sistem file yang bekerja dengan membuat lapisan sehingga sangat ringan dan cepat. Docker menggunakan UnionFS untuk membuat blok tempat kontainer dibuat. Docker dapat menggunakan beberapa varian UnionFS antara lain: AUFS, btrfs, vfs dan DeviceMapper.

Format Wadah

Docker menggabungkan komponen-komponen ini ke dalam pembungkus yang kita sebut format kontainer. Format default disebut libcontainer. Docker juga mendukung format container tradisional di Linux menggunakan LXC. Di masa depan, Docker mungkin mendukung format container lainnya. Misalnya saja berintegrasi dengan BSD Jails atau Solaris Zones.

Sumber: www.habr.com

Tambah komentar