Beranda
Topics
Docker
Diterbitkan: 6 Juni 2024
Kontributor: Stephanie Susnjara, Ian Smalley
Docker adalah platform sumber terbuka yang memungkinkan pengembang untuk membangun, menerapkan, menjalankan, memperbarui, dan mengelola kontainer.
Kontainer adalah komponen standar yang dapat dieksekusi yang menggabungkan kode sumber aplikasi dengan pustaka sistem operasi (OS) dan dependensi yang diperlukan untuk menjalankan kode tersebut di lingkungan apa pun.
Perlu dicatat bahwa ketika orang berbicara tentang Docker, mereka biasanya mengacu pada Docker Engine, runtime untuk membangun dan menjalankan kontainer. Docker juga mengacu pada Docker, Inc.1, perusahaan yang menjual versi komersial Docker. Hal ini juga berkaitan dengan proyek sumber terbuka Docker2, yang mana Docker, Inc. dan banyak organisasi dan individu lainnya berkontribusi.
Kontainer menyederhanakan pengembangan dan pengiriman aplikasi terdistribusi. Mereka menjadi kian populer karena organisasi beralih ke pengembangan cloud native dan lingkungan hybrid multicloud . Pengembang dapat membuat kontainer tanpa Docker dengan bekerja secara langsung menggunakan kemampuan yang dibangun di Linux dan sistem operasi lainnya, namun Docker membuat kontainerisasi lebih cepat dan mudah. Saat tulisan ini dibuat, Docker melaporkan bahwa lebih dari 20 juta pengembang menggunakan platform ini setiap bulannya3. Layaknya teknologi kontainerisasi lainnya, termasuk Kubernetes, Docker berperan penting dalam pengembangan perangkat lunak modern, khususnya arsitektur layanan mikro.
Berbeda dari pendekatan monolitik tradisional dari aplikasi besar yang digabungkan erat, layanan mikro menyediakan kerangka kerja arsitektur cloud native. Kerangka kerja ini menyusun satu aplikasi dari banyak komponen atau layanan yang lebih kecil, yang digabungkan secara longgar dan dapat digunakan secara independen. Setiap layanan dapat dikontainerisasi menggunakan Docker, sehingga menyederhanakan penerapan dan memungkinkan tim untuk meluncurkan versi baru dan menskalakan aplikasi sesuai kebutuhan.
Pelajari bagaimana organisasi dapat meningkatkan dampak AI dengan menggunakan hybrid cloud untuk mendorong hasil bisnis.
Kontainer dimungkinkan oleh isolasi proses dan kemampuan virtualisasi yang dibangun ke dalam kernel Linux. Kemampuan ini termasuk kelompok kontrol (Cgroups) untuk mengalokasikan sumber daya di antara proses dan namespace untuk membatasi akses proses atau visibilitas ke sumber daya atau area lain dari sistem.
Kontainer memungkinkan beberapa komponen aplikasi untuk berbagi sumber daya dari satu contoh sistem operasi host. Pembagian ini menyerupai cara hypervisor memungkinkan beberapa virtual machines (VM) berbagi unit pemrosesan pusat (CPU) server perangkat keras tunggal, memori, dan sumber daya lainnya.
Teknologi kontainer menawarkan semua fungsi dan manfaat virtual machines (VM) - termasuk isolasi aplikasi dan skalabilitas yang hemat biaya, serta manfaat lain yang signifikan:
Organisasi yang menggunakan kontainer melaporkan berbagai manfaat lain termasuk peningkatan kualitas aplikasi, respons yang lebih cepat terhadap perubahan pasar, dan masih banyak lagi.
Docker adalah alat kontainerisasi yang paling banyak digunakan, dengan pangsa pasar 82,84%.4 Docker sangat populer saat ini sehingga "Docker" dan "kontainer" digunakan secara bergantian. Namun, teknologi terkait kontainer telah tersedia selama bertahun-tahun—bahkan puluhan tahun5—sebelum Docker dirilis secara publik sebagai sumber terbuka pada 2013.
Yang paling menonjol, pada tahun 2008, LinuXContainers (LXC) diimplementasikan dalam kernel Linux, yang sepenuhnya memungkinkan virtualisasi untuk satu instance Linux. Meskipun LXC masih digunakan sampai sekarang, teknologi kernel Linux yang lebih baru juga tersedia. Ubuntu, sistem operasi Linux sumber terbuka modern, juga menyediakan kemampuan ini. Docker memungkinkan pengembang mengakses kemampuan kontainerisasi asli ini dengan menggunakan perintah sederhana dan menjadikannya otomatis melalui antarmuka pemrograman aplikasi (API) yang menghemat pekerjaan.
Ada banyak keuntungan menggunakan Docker dibandingkan LXC yang lebih lama dan kurang kompatibel.
Sementara kontainer LXC sering merujuk pada konfigurasi khusus mesin, kontainer Docker berjalan tanpa modifikasi di seluruh desktop, pusat data, atau lingkungan komputasi cloud.
Dengan Docker, pengembang dapat menggabungkan beberapa proses dalam satu wadah. Fleksibilitas ini memungkinkan untuk membangun aplikasi yang dapat terus berjalan sementara salah satu bagiannya dihapus untuk pembaruan atau perbaikan.
Docker dapat secara otomatis membangun kontainer berdasarkan kode sumber aplikasi.
Docker dapat melacak versi gambar kontainer, memutar kembali ke versi sebelumnya dan melacak siapa yang membuat versi dan bagaimana. Docker bahkan dapat mengunggah hanya delta (rilis parsial modul perangkat lunak) antara versi yang sudah ada dengan versi baru.
Pengembang dapat mengakses registri sumber terbuka yang berisi ribuan kontainer yang disumbangkan pengguna.
Saat ini, kontainerisasi Docker juga berfungsi dengan Microsoft Windows Server dan Apple macOS. Pengembang dapat menjalankan kontainer Docker pada sistem operasi apa pun. Semua penyedia layanan cloud (CSP) terkemuka, termasuk Amazon Web Services (AWS), Microsoft Azure, Google Cloud Services, dan IBM Cloud, menawarkan layanan khusus untuk membantu pengembang membangun, menerapkan, dan menjalankan aplikasi yang dikontainerisasi dengan Docker.
Docker menggunakan arsitektur klien/server. Berikut ini adalah perincian komponen inti yang terkait dengan Docker, bersama dengan istilah dan alat Docker lainnya.
Host Docker: Host Docker adalah mesin fisik atau virtual machine yang menjalankan Linux (atau OS lain yang kompatibel dengan Docker-Engine).
Docker-Engine: Docker-Engine adalah aplikasi klien/server yang terdiri atas daemon Docker, API Docker yang berinteraksi dengan daemon, dan antarmuka baris perintah (CLI) yang berbicara dengan daemon.
Daemon Docker: Daemon Docker adalah layanan yang membuat dan mengelola citra Docker, dengan menggunakan perintah dari klien. Pada dasarnya daemon Docker berfungsi sebagai pusat kendali implementasi Docker Anda.
Klien Docker: Klien Docker menyediakan CLI yang mengakses Docker API (REST API) untuk berkomunikasi dengan daemon Docker melalui soket Unix atau antarmuka jaringan. Klien dapat dihubungkan ke daemon dari jarak jauh, atau pengembang dapat menjalankan daemon dan klien pada sistem komputer yang sama.
Objek Docker: Objek Docker adalah komponen penerapan Docker yang membantu mengemas dan mendistribusikan aplikasi. Termasuk di dalamnya adalah gambar, kontainer, jaringan, volume, plug-in, dan banyak lagi.
Kontainer Docker: Kontainer Docker adalah contoh image Docker yang hidup dan berjalan. Sementara image Docker adalah file hanya baca, kontainer adalah konten langsung, sementara, dan dapat dieksekusi. Pengguna dapat berinteraksi dengan mereka dan administrator dapat menyesuaikan pengaturan dan ketentuan mereka menggunakan perintah Docker.
Image Docker: Image Docker berisi kode sumber aplikasi yang dapat dieksekusi dan semua alat, pustaka, dan ketergantungan yang dibutuhkan kode aplikasi untuk berjalan sebagai kontainer. Ketika pengembang menjalankan image Docker, hal tersebut menjadi satu instance (atau beberapa instance) dari kontainer.
Membangun image Docker dari awal , tetapi sebagian besar pengembang menariknya turun dari repositori umum. Pengembang dapat membuat beberapa image Docker dari satu image dasar dan akan berbagi kesamaan tumpukan mereka.
Image Docker terdiri dari beberapa lapisan, dan setiap lapisan sesuai dengan versi image. Kapan pun pengembang membuat perubahan pada image, lapisan atas baru dibuat, dan lapisan atas ini menggantikan lapisan atas sebelumnya sebagai versi gambar saat ini. Lapisan sebelumnya disimpan untuk rollback/pengembalian atau untuk digunakan kembali di proyek lain.
Setiap kali kontainer dibuat dari image Docker, lapisan baru lain yang disebut lapisan kontainer dibuat. Perubahan yang dilakukan pada kontainer—seperti menambahkan atau menghapus file—disimpan pada lapisan kontainer, dan perubahan ini hanya ada saat kontainer berjalan.
Proses pembuatan image berulang ini meningkatkan efisiensi secara keseluruhan karena beberapa instance kontainer langsung dapat dijalankan hanya dari satu image dasar. Ketika dijalankan, instance tersebut memanfaatkan tumpukan umum.
Docker build: Docker build adalah perintah yang memiliki alat dan fitur untuk membangun image Docker.
Dockerfile: Setiap kontainer Docker dimulai dengan file teks sederhana yang berisi instruksi tentang cara membangun image kontainer Docker. Dockerfile mengotomatiskan proses pembuatan image Docker. Ini pada dasarnya adalah daftar instruksi CLI yang akan dijalankan oleh Docker Engine untuk merakit gambar. Daftar perintah Docker sangat banyak, tetapi terstandardisasi: Operasi Docker berfungsi sama terlepas dari konten, infrastruktur, atau variabel lingkungan lainnya.
Dokumentasi Docker: Dokumentasi Docker, atau dokumen Docker, merujuk pada pustaka sumber daya, manual, dan panduan resmi Docker untuk membangun aplikasi terkontainerisasi.
Docker Hub: Docker Hub6 adalah repositori publik untuk citra Docker, yang menyebut dirinya sebagai perpustakaan dan komunitas terbesar di dunia untuk image kontainer7. Ini menyimpan lebih dari 100.000 image kontainer yang bersumber dari vendor perangkat lunak komersial, proyek sumber terbuka, dan pengembang individu. Docker Hub mencakup image yang diproduksi oleh Docker, Inc., image bersertifikat milik Docker Trusted Registry, dan ribuan image lainnya.
Semua pengguna Docker Hub dapat membagikan image mereka sesuka hati. Mereka juga dapat mengunduh image dasar yang telah ditentukan dari sistem file Docker sebagai titik awal untuk proyek kontainerisasi apa pun.
Repositori image lain ada, termasuk GitHub8. GitHub adalah layanan hosting repositori, yang terkenal dengan alat pengembangan aplikasi dan sebagai platform yang mendorong kolaborasi dan komunikasi. Pengguna Docker Hub mampu membuat repositori (repo) yang dapat menampung banyak gambar. Repositori dapat bersifat publik atau pribadi dan ditautkan ke akun GitHub atau BitBucket.
Docker Desktop: Docker Desktop adalah aplikasi untuk Mac atau Windows yang mencakup Docker Engine, Docker CLI client, Docker Compose, Kubernetes, dan lainnya. Docker Desktop juga menyediakan akses ke Docker Hub.
Registri Docker: Registri Docker adalah sistem penyimpanan dan distribusi yang dapat diskalakan, bersumber terbuka, untuk image Docker. Ini memungkinkan pengembang untuk melacak versi image di repositori dengan menggunakan penandaan untuk identifikasi. Pelacakan dan identifikasi ini dilakukan dengan menggunakan Git, alat kontrol versi.
Plug-in Docker: Pengembang menggunakan plug-in untuk membuat Docker Engine menjadi lebih fungsional. Beberapa plugin Docker yang mendukung otorisasi, volume, dan jaringan disertakan dalam sistem plugin Docker Engine; plugin pihak ketiga juga dapat dimuat.
Ekstensi Docker: Ekstensi Docker memungkinkan pengembang untuk menggunakan alat bantu pihak ketiga di dalam Docker Desktop untuk memperluas fungsinya. Ekstensi untuk developer tools termasuk pengembangan aplikasi Kubernetes, keamanan, observabilitas, dan banyak lagi.
Docker Compose: Pengembang dapat menggunakan Docker Compose untuk mengelola aplikasi multikontainer, di mana semua kontainer berjalan pada host Docker yang sama. Docker Compose membuat berkas YAML (.YML) yang menentukan layanan mana yang disertakan dalam aplikasi dan dapat menerapkan serta menjalankan kontainer dengan satu perintah. Karena sintaksis YAML bersifat agnostik bahasa, file YAML dapat digunakan dalam program yang ditulis dalam Java, Python, Ruby, dan banyak bahasa lainnya.
Developer juga dapat menggunakan Docker Compose untuk mendefinisikan volume persisten untuk penyimpanan, menentukan node dasar, dan mendokumentasikan serta mengonfigurasi ketergantungan layanan.
Saat menjalankan beberapa kontainer saja, mengelola aplikasi dalam Docker Engine, runtime de facto industri, cukup sederhana. Namun, untuk penerapan yang terdiri dari ribuan kontainer dan ratusan layanan, hampir tidak mungkin memantau dan mengelola siklus hidup kontainer tanpa alat orkestrasi kontainer .
Sementara Docker menyertakan alat orkestrasinya sendiri (disebut Docker Swarm), Kubernetes telah menjadi standar industri. Platform orkestrasi kontainer populer lainnya termasuk Apache Mesos dan Nomad.
Kubernetes adalah platform orkestrasi kontainer sumber terbuka yang berasal dari Borg, proyek yang dikembangkan untuk penggunaan internal di Google. Diperkenalkan kepada publik pada tahun 2014, Kubernetes menjadwalkan dan mengotomatiskan tugas-tugas yang tidak terpisahkan untuk mengelola arsitektur berbasis kontainer, termasuk penerapan kontainer, pembaruan, penemuan layanan, penyediaan penyimpanan, penyeimbangan beban, pemantauan kondisi kesehatan, dan banyak lagi. Pada tahun 2015, Google menyumbangkan Kubernetes ke Cloud Native Computing Foundation (CNCF)9, pusat komputasi cloud-native sumber terbuka yang netral terhadap vendor.
Selain itu, ekosistem alat sumber terbuka untuk Kubernetes, termasuk Istio, Knative, dan Tekton, memungkinkan organisasi untuk menerapkan platform sebagai layanan (PaaS) dengan produktivitas tinggi untuk aplikasi yang terkontainerisasi. Ekosistem ini juga menyediakan on-ramp yang lebih cepat ke komputasi tanpa server.
Didirikan pada tahun 2015 setelah Docker menyumbangkan spesifikasi image kontainer dan kode runtime runc, Open Container Initiative (OCI)10 adalah proyek Linux Foundation yang berkomitmen untuk menciptakan standar industri terbuka terkait format image kontainer dan runtime. OCI terdiri dari perusahaan-perusahaan terkemuka, termasuk Docker, IBM, dan Red Hat. OCI mendukung inovasi sekaligus membantu organisasi menghindari vendor lock-in.
Meskipun Docker adalah teknologi kontainer terkemuka dan banyak digunakan, ekosistem yang lebih luas telah memiliki standar pada containerd dan alternatif lainnya, termasuk LXC, CRI-O, Podman, dan lainnya. Pada tahun 2017, Docker menyumbangkan proyek containerd ke CNCF. Containerd adalah runtime kontainer standar industri yang menggunakan runc dan merupakan runtime kontainer inti dari Docker Engine.
Kompleksitas seputar beban kerja berkontainer membutuhkan penerapan dan pemeliharaan kontrol keamanan yang melindungi kontainer dan infrastruktur yang mendasarinya. Praktik keamanan kontainer Docker dirancang untuk melindungi aplikasi kontainer dari risiko seperti pelanggaran keamanan, malware, dan pelaku kejahatan.
Karena kontainer Docker diisolasi satu sama lain dan sistem host, kontainer tersebut memiliki tingkat keamanan yang melekat sesuai peruntukannya. Namun, isolasi ini tidak bersifat mutlak. Keamanan Docker berkisar pada kerangka kerja zero trust holistik yang mencakup runtime, build, dan orkestrasi kontainer.
Kebutuhan akan Docker dan keamanan terkait kontainer lainnya telah meningkatkan popularitas DevSecOps. Yang merupakan pendekatan keamanan yang mengotomatiskan integrasi praktik keamanan di setiap fase siklus hidup pengembangan perangkat lunak—yang mencakup desain awal hingga integrasi, pengujian, pengiriman, dan penyebaran. Selain itu, praktik terbaik keamanan Docker mencakup alat dan solusi keamanan kontainer pihak ketiga, termasuk pemindaian dan pemantauan, yang dapat mendeteksi masalah keamanan sebelum berdampak pada produksi.
Portabilitas Docker menyederhanakan dan mempercepat proses migrasi cloud dari berbagai lingkungan—baik memindahkan data, aplikasi, dan beban kerja dari pusat data on premises (lokal) ke infrastruktur berbasis cloud atau dari satu lingkungan cloud ke lingkungan cloud lainnya.
Menurut Statista, lebih dari 85% organisasi global besar menggunakan layanan mikro untuk pengembangan aplikasi mereka11. Docker menyederhanakan penerapan aplikasi karena setiap layanan mikro dapat dikontainerisasi dan diskalakan serta dikelola secara independen, sehingga menghilangkan kebutuhan pengembang untuk mengonfigurasi dan mengelola lingkungan tertentu.
Docker ideal untuk pipeline integrasi berkelanjutan dan pengiriman berkelanjutan (CI/CD) karena menyediakan lingkungan yang konsisten untuk pengujian dan penerapan aplikasi, sehingga mengurangi kemungkinan kesalahan selama penerapan.
Kombinasi layanan mikro sebagai pendekatan pengembangan perangkat lunak dan Docker menciptakan fondasi yang kuat untuk tim DevOps . Hal ini memungkinkan mereka untuk mengadopsi praktik-praktik yang tangkas sehingga mereka dapat mengulang dan bereksperimen dengan cepat, yang sangat penting untuk menghadirkan perangkat lunak dan layanan dengan kecepatan sesuai permintaan pasar.
Teknologi terkontainerisasi yang ringan seperti Docker memudahkan pemindahan aplikasi di berbagai lingkungan. Semua penyedia layanan cloud utama menawarkan layanan pengembangan dan manajemen terkait Docker yang mendukung proses Docker di lingkungan hybrid cloud, yang menyatukan pengaturan on premise, cloud publik, cloud pribadi, dan edge. Docker dapat dengan mudah digunakan di seluruh infrastruktur TI multicloud, yang mengacu pada layanan cloud dari lebih dari satu vendor cloud.
Kontainer sebagai layanan (CAaS) memungkinkan pengembang untuk mengelola dan menerapkan aplikasi kontainer, sehingga memudahkan untuk proses berjalannya kontainer Docker dalam skala besar. Semua CSP utama menawarkan CaaS sebagai bagian dari portofolio layanan cloud mereka, bersama dengan infrastruktur sebagai layanan (IaaS), perangkat lunak sebagai layanan (SaaS), dan sebagainya.
Docker mempercepat pengembangan kecerdasan buatan dan machine learning dengan pengembangan aplikasi yang cepat, mudah, dan portabel, sehingga mempercepat inovasi dan waktu penyiapan produk. Selain itu, Docker Hub adalah rumah bagi ratusan image AL/ML yang lebih lanjut mendukung tim pengembangan AL/ML. Pada tahun 2023, Docker meluncurkan Docker AI12, yang menawarkan panduan otomatis yang spesifik secara konteks kepada pengembang ketika mereka mengedit file Dockerfile atau Docker Compose.
Jelajahi bagaimana Red Hat OpenShift on IBM Cloud memanfaatkan Red Hat OpenShift di lingkungan publik dan hybrid untuk kecepatan, daya tanggap pasar, skalabilitas, dan keandalan.
Gunakan IBM Cloud Satellite untuk memulai layanan cloud yang konsisten di mana saja—di lokasi/on premises, di tepi, dan di lingkungan cloud publik.
Lanjutkan perjalanan cloud dan AI Anda. Mulailah dengan mengevaluasi investasi TI dan merancang fondasi terbuka dan terintegrasi yang dapat diakses dengan cepat dan konsisten di seluruh lingkungan digital.
Simpan dan distribusikan image kontainer dalam registri pribadi yang dikelola sepenuhnya. Dorong image pribadi untuk menjalankannya dengan mudah di IBM Cloud Kubernetes Service dan lingkungan runtime lainnya.
1 Tentang Docker (tautan berada di luar ibm.com), Docker
2 Proyek Sumber Terbuka, (tautan berada di luar ibm.com), Docker
3 Docker Builds, (tautan berada di luar ibm.com), Docker
4 5 teknologi kontainerisasi teratas pada tahun 2024, (tautan berada di luar ibm.com), 6sense
5 Sejarah Singkat Kontainer: Dari Tahun 1970-an Hingga Sekarang, (tautan berada di luar ibm.com) Aqua, 10 Januari 2020
6 Docker Hub, (tautan berada di luar ibm.com), Docker
7 Ikhtisar Docker Hub, (tautan berada di luar ibm.com), Docker
8 GitHub, (tautan berada di luar ibm.com)
9 Cloud Native Computing Foundation, (tautan berada di luar ibm.com)
10 Open Container Initiative, (tautan berada di luar ibm.com)
11 Penggunaan Global Layanan Mikro dalam Organisasi 2021, berdasarkan Ukuran Organisasi, (tautan berada di luar ibm.com), Statista, 2023
12 Docker mengumumkan Docker AI Meningkatkan Produktivitas Pengembang Melalui Panduan Otomatis yang Sesuai dengan Konteks,(tautan berada di luar ibm.com), Docker, 2023