Wednesday, September 12, 2018

Belajar Docker: Docker "Teknologi Virtualisasi Berbasis Kontainer "



Docker adalah platform terbuka untuk pengembangan, pengiriman, dan menjalankan aplikasi. Docker memungkinkan untuk memisahkan aplikasi dari infrastruktur yang ada sehingga dapat mengirimkan perangkat lunak dengan cepat. Dengan Docker, kita dapat mengelola infrastruktur  dengan cara yang sama seperti mengelola aplikasi. Dengan memanfaatkan metodologi Docker untuk pengiriman, pengujian, dan menerapkan kode dengan cepat, kita dapat secara signifikan mengurangi penundaan antara menulis kode dan menjalankannya dalam produksi.


Platform Docker
Docker menyediakan kemampuan untuk mengemas dan menjalankan aplikasi dalam lingkungan yang terisolasi yang disebut kontainer. Isolasi dan keamanan memungkinkan Anda menjalankan banyak kontainer secara bersamaan pada host yang diberikan. kontainer ringan karena mereka tidak memerlukan beban ekstra dari hypervisor, tetapi dijalankan langsung di dalam kernel mesin host. Ini berarti Anda dapat menjalankan lebih banyak kontainer pada kombinasi perangkat keras yang diberikan daripada jika Anda menggunakan mesin virtual. Anda bahkan dapat menjalankan kontainer Docker dalam mesin host yang sebenarnya mesin virtual.
Docker menyediakan Utilitas dan platform untuk mengelola siklus hidup container seperti:
·         Pengembangan aplikasi dan komponen pendukungnya menggunakan kontainer.
·         Kontainer menjadi unit untuk mendistribusikan dan menguji aplikasi Anda.
Saat Kita siap, kita dapat menyebarkan aplikasi ke lingkungan produksi, sebagai container atau layanan yang diatur. Ini berfungsi sama baik apakah lingkungan produksi Anda adalah pusat data lokal, penyedia cloud, atau gabungan dari keduanya.

Mesin Docker
Source : docks.docker.com

Docker Engine adalah aplikasi client-server dengan komponen-komponen utama ini:

·         Server yang merupakan jenis program lama yang disebut proses daemon.
·         A REST API yang menentukan antarmuka yang dapat digunakan program untuk berbicara dengan daemon dan memerintahkannya apa yang harus dilakukan.
·         Klien command line interface (CLI).
·         CLI menggunakan API Docker REST untuk mengontrol atau berinteraksi dengan daemon Docker melalui perintah CLI scripting atau langsung. Banyak aplikasi Docker lain menggunakan API dan CLI yang mendasarinya.

Daemon menciptakan dan mengatur objek Docker , seperti image, kontainer, jaringan, dan volume.
Image dan Container
 Kontainer Dijalankan dengan menjalankan image. Sebuah image adalah paket executable yang mencakup semua yang diperlukan untuk menjalankan sebuah aplikasi - kode, runtime, perpustakaan, variabel lingkungan, dan file konfigurasi. Kontainer adalah contoh runtime dari suatu image. Kalian dapat melihat daftar kontainer yang berjalan dengan perintah,, docker ps”.
Docker menyederhanakan siklus hidup pengembangan dengan memungkinkan pengembang untuk bekerja di lingkungan standar menggunakan kontainer lokal yang menyediakan aplikasi dan layanan Anda. Container sangat bagus untuk integrasi berkelanjutan dan pengiriman berkelanjutan (CI / CD) alur kerja.
Penyebaran dan penskalaan responsi
Platform berbasis kontainer Docker memungkinkan beban kerja yang sangat portabel. Kontainer Docker dapat berjalan di laptop lokal pengembang, pada mesin fisik atau virtual di pusat data, di penyedia cloud, atau dalam campuran lingkungan. Portabilitas Docker dan sifatnya yang ringan juga memudahkan untuk mengelola beban kerja secara dinamis, meningkatkan atau meruntuhkan aplikasi dan layanan sesuai kebutuhan bisnis, dalam waktu dekat.
Menjalankan lebih banyak beban kerja pada perangkat keras yang sama
Docker ringan dan cepat. Ini menyediakan alternatif yang layak, biaya-efektif untuk mesin virtual berbasis hypervisor, sehingga Anda dapat menggunakan lebih dari kapasitas komputasi Anda untuk mencapai tujuan bisnis Anda. Docker sangat cocok untuk lingkungan dengan kepadatan tinggi dan untuk penyebaran kecil dan menengah di mana Anda perlu melakukan lebih banyak dengan sumber daya yang lebih sedikit.
Arsitektur Docker
Source : docks.docker.com

Docker menggunakan arsitektur client-server. Klien Docker berbicara dengan daemon Docker , yang melakukan pengangkatan berat, menjalankan, dan mendistribusikan kontainer Docker Anda. Klien dan daemon Docker dapat berjalan di sistem yang sama, atau Anda dapat menghubungkan klien Docker ke daemon Docker jarak jauh. Klien dan daemon Docker berkomunikasi menggunakan REST API, melalui soket UNIX atau antarmuka jaringan.

Daemon Docker
Docker daemon ( dockerd) mendengarkan permintaan Docker API dan mengatur objek Docker seperti image, kontainer, jaringan, dan volume. Sebuah daemon juga dapat berkomunikasi dengan daemon lain untuk mengelola layanan Docker.

Klien Docker
Docker Client( docker) adalah cara utama banyak pengguna Docker berinteraksi dengan Docker. Ketika Anda menggunakan perintah seperti docker run, klien mengirimkan perintah-perintah ini dockerd, yang menjalankannya. The dockerperintah menggunakan API Docker. Klien Docker dapat berkomunikasi dengan lebih dari satu daemon.

Docker Registry
Sebuah Docker registrymenyimpan Docker image. Docker Hub dan Docker Cloud adalah pendaftar publik yang dapat digunakan siapa saja, dan Docker dikonfigurasi untuk mencari image di Docker Hub secara default. Anda bahkan dapat menjalankan registri pribadi Anda sendiri. Jika Anda menggunakan Docker Datacenter (DDC), itu termasuk Docker Trusted Registry (DTR). Saat Anda menggunakan perintah docker pullatau docker run, image yang diperlukan ditarik dari registri Anda yang dikonfigurasi. Ketika Anda menggunakan docker pushperintah, image Anda didorong ke registri Anda yang dikonfigurasi.

Docker store memungkinkan Anda untuk membeli dan menjual image Docker atau mendistribusikannya secara gratis. Misalnya, Anda dapat membeli image Docker yang berisi aplikasi atau layanan dari vendor perangkat lunak dan menggunakan image untuk menyebarkan aplikasi ke dalam lingkungan pengujian, pementasan, dan produksi Anda. Anda dapat meningkatkan aplikasi dengan menarik versi baru dari image dan menerapkan ulang container.

Objek Docker
Saat Anda menggunakan Docker, Anda membuat dan menggunakan image, container, jaringan, volume, plugin, dan objek lainnya. Bagian ini adalah imagean singkat dari beberapa objek tersebut.

IMAGE
Sebuah Image adalah read-only template dengan petunjuk untuk membuat container Docker. Seringkali, image didasarkan pada image lain, dengan beberapa penyesuaian tambahan. Misalnya, Anda dapat membuat image yang didasarkan pada ubuntu image, tetapi menginstal server web Apache dan aplikasi Anda, serta detail konfigurasi yang diperlukan untuk membuat aplikasi Anda berjalan.

Anda dapat membuat image Anda sendiri atau Anda mungkin hanya menggunakan yang dibuat oleh orang lain dan dipublikasikan di registri. Untuk membangun citra Anda sendiri, Anda membuat Dockerfile dengan sintaks sederhana untuk menentukan langkah-langkah yang diperlukan untuk membuat image dan menjalankannya. Setiap instruksi dalam Dockerfile menciptakan lapisan pada image. Ketika Anda mengubah Dockerfile dan membangun kembali image, hanya lapisan yang telah diubah yang dibangun kembali. Ini adalah bagian dari apa yang membuat image sangat ringan, kecil, dan cepat, jika dibandingkan dengan teknologi virtualisasi lainnya.



Container
 Container adalah contoh Image yang dapat dijalankan. Anda dapat membuat, memulai, menghentikan, memindahkan, atau menghapus container menggunakan API Docker atau CLI. Anda dapat menghubungkan container ke satu atau beberapa jaringan, melampirkan penyimpanan ke dalamnya, atau bahkan membuat image baru berdasarkan statusnya saat ini. Secara default, kontainer relatif terisolasi dengan baik dari kontainer lain dan mesin host-nya. Anda dapat mengontrol bagaimana mengisolasi jaringan container, penyimpanan, atau subsistem yang mendasarinya dari kontainer lain atau dari mesin host.

Container ditentukan oleh imagenya serta opsi konfigurasi apa pun yang Anda berikan saat Anda membuat atau memulainya. Ketika sebuah container dihapus, setiap perubahan pada statusnya yang tidak disimpan dalam penyimpanan persisten menghilang.

Contoh docker runperintah
Perintah berikut menjalankan sebuah ubuntucontainer, menempel secara interaktif ke sesi baris perintah lokal Anda, dan berjalan /bin/bash.

$ docker run -i -t ubuntu /bin/bash
Ketika Anda menjalankan perintah ini, hal berikut terjadi (dengan asumsi Anda menggunakan konfigurasi registri default):

1.      Jika Anda tidak memiliki ubuntuimage secara lokal, Docker menariknya dari registri Anda yang dikonfigurasi, seolah-olah Anda telah menjalankan docker pull ubuntusecara manual.

2.      Docker membuat penampung baru, seolah Anda telah menjalankan docker container create perintah secara manual.

3.      Docker mengalokasikan filesystem read-write ke container, sebagai lapisan terakhirnya. Ini memungkinkan container berjalan untuk membuat atau memodifikasi file dan direktori di sistem file lokalnya.

4.      Docker membuat antarmuka jaringan untuk menghubungkan container ke jaringan default, karena Anda tidak menentukan opsi jaringan apa pun. Ini termasuk menetapkan alamat IP ke penampung. Secara default, kontainer dapat terhubung ke jaringan eksternal menggunakan koneksi jaringan mesin host.

5.      Docker memulai container dan mengeksekusi /bin/bash. Karena container sedang berjalan secara interaktif dan dilampirkan ke terminal Anda (karena -idan -t bendera), Anda dapat memberikan masukan menggunakan keyboard Anda saat output dicatat ke terminal Anda.

6.      Saat Anda mengetik exituntuk mengakhiri /bin/bashperintah, penampung berhenti tetapi tidak dihapus. Anda dapat memulainya lagi atau menghapusnya.

SERVICE
Layanan memungkinkan Anda untuk menskalakan kontainer di beberapa daemon Docker, yang semuanya bekerja bersama sebagai kawanan dengan banyak manajer dan pekerja . Setiap anggota kawanan adalah daemon Docker, dan daemon semua berkomunikasi menggunakan API Docker. Layanan memungkinkan Anda menentukan keadaan yang diinginkan, seperti jumlah replika layanan yang harus tersedia pada waktu tertentu. Secara default, layanan ini load-balanced di semua node pekerja. Untuk konsumen, layanan Docker tampaknya merupakan aplikasi tunggal. Docker Engine mendukung mode swarm di Docker 1.12 dan lebih tinggi.


Namespaces
Docker menggunakan teknologi yang disebut namespaces untuk menyediakan ruang kerja yang terisolasi yang disebut container . Saat Anda menjalankan penampung, Docker membuat satu set ruang nama untuk container itu. Ruang-ruang nama ini memberikan lapisan isolasi. Setiap aspek container berjalan di ruang nama yang terpisah dan aksesnya terbatas pada ruang nama itu.

Kelompok kontrol
Docker Engine di Linux juga bergantung pada teknologi lain yang disebut grup kontrol ( cgroups). Cgroup membatasi aplikasi ke satu set sumber daya tertentu. Grup kontrol memungkinkan Docker Engine untuk berbagi sumber daya perangkat keras yang tersedia ke kontainer dan secara opsional menegakkan batasan dan kendala. Misalnya, Anda dapat membatasi memori yang tersedia untuk container tertentu.

Sistem file Union
Sistem file Union, atau UnionFS, adalah sistem file yang beroperasi dengan membuat lapisan, membuatnya sangat ringan dan cepat. Docker Engine menggunakan UnionFS untuk menyediakan blok bangunan untuk kontainer. Docker Engine dapat menggunakan beberapa varian UnionFS, termasuk AUFS, btrfs, vfs, dan DeviceMapper.

Format penampung
Docker Engine menggabungkan ruang nama, grup kontrol, dan UnionFS menjadi pembungkus yang disebut format kontainer. Format penampung default adalah libcontainer. Di masa depan, Docker dapat mendukung format kontainer lainnya dengan mengintegrasikan dengan teknologi seperti BSD Jails atau Solaris Zones.


Sumber :
https://docs.docker.com/engine/docker-overview/

Terimakasih telah berkomentar
EmoticonEmoticon