Lewati ke konten utama

Containerd vs Docker: Memahami Runtime Container

Pelajari perbedaan utama antara Docker dan runtime container containerd. Ketahui arsitektur keduanya dan kapan menggunakan masing-masing alat untuk pengembangan.
Benito Martin
Benito Martin

Buat Akun Gratis Anda

Berlatih dan lacak kemajuan Anda.

Lanjutkan dengan GoogleDengan melanjutkan, Anda menyetujui Ketentuan Penggunaan, Kebijakan Privasi dan bahwa data Anda disimpan di AS.

Dalam ekosistem container, kebingungan umum sering muncul saat pengembang membandingkan Docker (sebuah platform komprehensif) dengan containerd, yang sebenarnya adalah komponen runtime yang terfokus. Perbandingan ini seperti membandingkan sebuah mobil lengkap dengan mesinnya: keduanya penting, tetapi berfungsi untuk tujuan yang berbeda pada tingkat abstraksi yang berbeda. 

Dalam panduan ini, saya akan memperjelas hubungan antara kedua teknologi ini, menelusuri arsitektur, integrasi Kubernetes, dan skenario spesifik tempat masing-masing alat unggul. Baik Anda membuat container secara lokal maupun mengelola klaster Kubernetes produksi, memahami kapan menggunakan Docker versus containerd dapat berdampak signifikan pada keputusan infrastruktur Anda.

Pada akhir artikel ini, Anda akan memiliki pemahaman yang jelas tentang bagaimana Docker dan containerd saling melengkapi, serta cara memilih alat yang tepat untuk kebutuhan spesifik Anda, baik untuk pengembangan lokal yang cepat maupun penyebaran produksi skala besar.

Jika Anda baru mengenal kontainerisasi, saya sangat merekomendasikan mengikuti kursus Konsep Kontainerisasi dan Virtualisasi kami.

Apa Itu Docker?

Docker merevolusi lanskap pengembangan perangkat lunak dengan membuat kontainerisasi menjadi mudah diakses dan praktis bagi pengembang sehari-hari. Sebagai platform komprehensif, Docker menyediakan semua yang dibutuhkan untuk membangun, mengirim, dan menjalankan aplikasi terkontainer.

Bagi pemula, Panduan Praktis tentang Container ini memberikan pengantar yang sangat baik tentang Docker dan container.

Platform container yang komprehensif

Docker berfungsi sebagai platform container serba ada, menawarkan tumpukan alat terintegrasi yang mencakup sebagian besar siklus hidup container. Intinya, Docker mengemas aplikasi beserta semua dependensinya ke dalam image portabel dan mandiri yang dapat berjalan secara konsisten di berbagai lingkungan, mulai dari laptop pengembang hingga server produksi.

Logo Docker

Pendekatan komprehensif ini menjadikan Docker standar industri untuk pengembangan lokal dan pengalaman pengembang. Beberapa manfaat utamanya meliputi:

  • Ekosistem yang luas: Docker Hub menampung jutaan image siap pakai, dari basis data hingga web server, menghilangkan prosedur instalasi yang rumit
  • Portabilitas universal: Sebuah container yang dibangun di macOS berjalan identik di Linux atau Windows, selama Docker terpasang
  • Fokus pada pengembang: Mengabstraksi perbedaan infrastruktur sehingga pengembang dapat berfokus pada aplikasi mereka alih-alih kompleksitas deployment
  • Onboarding cepat: Anggota tim baru dapat menyiapkan lingkungan pengembangan dalam hitungan menit, bukan jam

Komponen kunci dan alur kerja

Arsitektur Docker terdiri dari beberapa komponen yang saling terhubung dan bekerja mulus bersama. 

Docker CLI menyediakan antarmuka yang dihadapi pengguna tempat pengembang menjalankan perintah. Saat Anda menjalankan perintah seperti docker run, CLI berkomunikasi dengan daemon Docker (dockerd), yang berfungsi sebagai layanan inti yang mengelola container, image, jaringan, dan volume.

Bagi pengguna Windows dan macOS, Docker Desktop memberikan lapisan kemudahan tambahan dengan antarmuka grafis, membuat pengelolaan container dapat diakses bahkan oleh mereka yang kurang nyaman dengan alat baris perintah. Lingkungan terintegrasi ini mencakup semua yang dibutuhkan untuk pengembangan lokal, mulai dari dukungan Kubernetes hingga manajemen volume.

Alur kerja tipikal mengikuti pola yang jelas: 

  1. Pengembang membuat image menggunakan Dockerfile
  2. Mereka mengirimkannya ke registry seperti Docker Hub
  3. Akhirnya, image dijalankan sebagai container pada host yang mendukung Docker 

Yang tidak disadari banyak pengembang adalah Docker tidak mengeksekusi container secara langsung. Sebaliknya, dockerd mendelegasikan eksekusi container sebenarnya ke containerd, yang berjalan di latar belakang sebagai proses terpisah.

Komponen Docker

Desain modular ini, di mana Docker menggunakan containerd untuk operasi tingkat rendah, memungkinkan setiap komponen berfokus pada keahliannya: Docker menyediakan antarmuka dan ekosistem yang ramah pengembang, sementara containerd menangani detail teknis eksekusi container.

Baik Anda baru mulai menggunakan Docker atau ingin melangkah lebih jauh, lihat 10 Ide Proyek Docker kami untuk berbagai tingkat kemampuan.

Apa Itu Containerd?

Setelah membahas pendekatan platform komprehensif Docker, kini mari kita lihat containerd, runtime khusus yang menjalankan eksekusi container baik di dalam Docker maupun di seluruh ekosistem yang lebih luas.

Runtime container standar industri

Containerd adalah runtime container inti yang ringan dan standar industri yang telah lulus dari Cloud Native Computing Foundation (CNCF), yang menandakan kematangan, keandalan, dan adopsinya yang luas. Awalnya bagian dari Docker, containerd diekstraksi pada 2017 dan disumbangkan ke CNCF untuk memungkinkan adopsi ekosistem yang lebih luas.

Logo Containerd

Berbeda dengan set fitur komprehensif Docker, cakupan containerd sengaja dibatasi: ia mengelola operasi inti siklus hidup container seperti mulai, henti, jeda, dan hapus, serta menangani transfer dan penyimpanan image. Pendekatan terfokus ini membuat containerd sangat stabil dan efisien, kualitas yang esensial untuk lingkungan produksi.

Anggap containerd sebagai "plumbing": infrastruktur yang dirancang untuk ditanamkan ke dalam sistem yang lebih besar, bukan digunakan langsung oleh manusia. Platform besar seperti Kubernetes, AWS Fargate, dan Google Kubernetes Engine semuanya bergantung pada containerd untuk mengeksekusi container, meskipun pengguna berinteraksi dengan platform tersebut melalui antarmuka masing-masing.

Arsitektur dan desain

Untuk memahami mengapa containerd banyak diadopsi dalam sistem produksi, kita perlu meninjau prinsip arsitekturnya.

Arsitektur containerd mencerminkan prinsip desain modular. Dibangun dengan standar Open Container Initiative (OCI) sebagai inti, containerd memastikan kompatibilitas di seluruh ekosistem container. Artinya, image yang sesuai OCI akan bekerja dengan containerd, terlepas dari alat apa yang membuatnya.

Arsitekturnya terdiri dari beberapa lapisan kunci:

  • Lapisan API gRPC: Menyediakan model klien-server tempat banyak klien (Docker, Kubernetes, alat kustom) berkomunikasi dengan satu instance containerd
  • Daemon containerd: Memelihara status container yang berjalan, mengelola penyimpanan image melalui snapshotter, dan mengoordinasikan jaringan melalui plugin
  • Runtime runc: Runtime ringan yang sesuai OCI yang berinteraksi langsung dengan fitur kernel Linux, membuat namespace, menyiapkan cgroup, dan meluncurkan proses container
  • Plugin modular: Snapshotter kustom untuk penyimpanan khusus, runtime alternatif (gVisor, Kata Containers), dan plugin jaringan dapat diintegrasikan tanpa mengubah containerd

Saat containerd perlu memulai sebuah container, ia memunculkan runc, yang melakukan pekerjaan sebenarnya dalam membuat namespace terisolasi, menyiapkan cgroup untuk batas sumber daya, dan meluncurkan proses container. 

Pemisahan tanggung jawab ini membuat containerd sangat mudah diperluas. Organisasi dapat menyesuaikan hampir setiap aspek tanpa menyentuh kode inti containerd.

Perbedaan Utama Containerd vs Docker

Dengan pemahaman yang kuat tentang apa yang dilakukan masing-masing alat, mari kita telusuri bagaimana perbedaan keduanya dalam praktik, mulai dari arsitektur hingga pola integrasi.

Runtime container vs platform

Perbedaan mendasar terletak pada cakupan dan tujuan. 

Docker menggunakan arsitektur daemon terpusat di mana dockerd mengoordinasikan banyak aspek yang berbeda, seperti:

  • Pembuatan image
  • Eksekusi container
  • Jaringan
  • Manajemen volume

Desain serba ada ini menyederhanakan pengalaman pengembang tetapi memperkenalkan overhead melalui beberapa lapisan abstraksi.

Sebaliknya, containerd berfokus secara sempit pada eksekusi container. Ia tidak menyertakan kemampuan pembuatan image, fitur orkestrasi, atau antarmuka grafis. Untuk jaringan, Docker menyertakan Libnetwork di dalam daemonnya, sementara containerd mengandalkan plugin Container Network Interface (CNI) eksternal yang dapat ditukar sesuai kebutuhan.

Perbedaan arsitektur ini memiliki implikasi kinerja. Dalam lingkungan dengan perubahan tinggi di mana container sering mulai dan berhenti, seperti klaster Kubernetes yang autoscaling, desain ramping containerd dapat menghasilkan waktu mulai yang lebih cepat dan konsumsi sumber daya yang lebih rendah. Overhead yang berkurang berarti containerd menggunakan lebih sedikit memori dan CPU, yang menjadi signifikan pada skala besar.

Integrasi Kubernetes

Berbicara tentang Kubernetes, hubungan antara runtime container dan platform orkestrasi telah berkembang pesat, khususnya terkait cara Kubernetes terhubung ke containerd.

Hubungan antara Kubernetes dan runtime container mengalami perubahan besar pada Kubernetes 1.24, yang dirilis pada 2022. Versi ini menghapus "Dockershim", lapisan kompatibilitas yang memungkinkan Kubernetes menggunakan Docker sebagai runtime container.

Dockershim selalu dimaksudkan sebagai jembatan sementara. Ketika Kubernetes memperkenalkan Container Runtime Interface (CRI) untuk menstandarkan komunikasi dengan runtime, Docker tidak dapat menerapkannya secara langsung karena Docker sudah ada sebelum desain CRI. Dockershim menerjemahkan antara Kubernetes dan Docker, menambahkan lapisan translasi yang pada akhirnya tidak diperlukan.

Versi Kubernetes modern berkomunikasi langsung dengan containerd melalui CRI, menghilangkan sepenuhnya lapisan translasi Docker. Penyederhanaan ini menghadirkan manfaat nyata:

  • Latensi berkurang: Komunikasi langsung menghilangkan overhead translasi pada operasi container
  • Stabilitas meningkat: Lebih sedikit komponen berarti lebih sedikit titik potensi kegagalan
  • Kinerja lebih baik: Tumpukan runtime yang ramping sangat menguntungkan penyebaran skala besar
  • Debugging lebih sederhana: Integrasi CRI langsung membuat pemecahan masalah lebih lugas

Bagi pengguna Kubernetes, perubahan ini sebagian besar bersifat transparan. Image Docker tetap sepenuhnya kompatibel karena mematuhi standar OCI. Dampak praktisnya adalah klaster Kubernetes produksi kini berjalan lebih efisien dengan menggunakan containerd secara langsung, sementara pengembang dapat terus menggunakan Docker secara lokal untuk membangun dan menguji.

Jika Anda ragu tentang kelebihan dan kekurangan menggunakan Kubernetes sejak awal, lihat artikel perbandingan Docker Compose vs Kubernetes ini.

Pembuatan dan manajemen image

Meskipun integrasi runtime sangat penting untuk orkestrasi, alur kerja pengembang sangat bergantung pada cara masing-masing alat menangani pembuatan dan penyimpanan image. Pembuatan image merupakan kesenjangan kapabilitas yang signifikan antara Docker dan containerd. 

Docker menyediakan sistem build terintegrasi melalui Dockerfile dan BuildKit, memungkinkan pengembang membangun build multi-tahap yang kompleks dengan caching, paralelisasi, serta fitur lanjutan seperti build secret dan penerusan agen SSH.

Containerd, berdasarkan desain, tidak menyertakan alur kerja build image native. Untuk membangun image dengan containerd, pengembang harus menggunakan alat eksternal. Opsi yang ada termasuk menjalankan BuildKit sebagai daemon terpisah dan menggunakan buildctl untuk build melalui baris perintah, atau mengadopsi nerdctl, sebuah CLI yang kompatibel dengan Docker yang mengintegrasikan BuildKit.

Mekanisme penyimpanan juga berbeda dalam filosofi. Manajemen volume Docker memberikan abstraksi yang terasa alami bagi pengembang, dengan volume bernama yang mempertahankan data secara independen dari siklus hidup container. Containerd menggunakan sistem snapshotter yang lebih tingkat rendah, di mana driver snapshot yang berbeda dapat dipasang untuk menangani filesystem berlapis secara berbeda berdasarkan kebutuhan penyimpanan yang mendasarinya.

Perbedaan ini mencerminkan target audiens alat tersebut: 

  • Docker mengoptimalkan produktivitas pengembang dengan kemudahan bawaan
  • Containerd menyediakan primitif yang fleksibel yang dapat dirangkai pembangun platform sesuai kebutuhan spesifik mereka

CLI, pengalaman pengembang, dan nerdctl

Di luar arsitektur dan fitur, pengalaman harian pengembang paling langsung dibentuk oleh antarmuka baris perintah yang disediakan masing-masing alat. Pengalaman baris perintah paling jelas memperlihatkan perbedaan filosofi desain. 

CLI Docker terkenal karena kemudahan penggunaannya. Perintah seperti docker run, docker build, dan docker logs intuitif, terdokumentasi dengan baik, dan dirancang untuk manusia. CLI mencakup default yang membantu, pesan kesalahan yang jelas, dan opsi ekstensif yang mencakup sebagian besar kasus penggunaan.

Containerd menyertakan ctr, sebuah CLI minimal yang ditujukan murni untuk debugging dan pengujian fungsionalitas containerd tingkat rendah. Alat ctr sengaja tidak ramah bagi pengembang. Ia tidak memiliki fitur umum seperti singkatan pemetaan port, kebijakan mulai ulang otomatis, dan integrasi dengan credential helper. Alat ini dirancang untuk pengembang containerd, bukan pengembang aplikasi.

Menjembatani kesenjangan dengan nerdctl

Kesenjangan kegunaan ini memicu pembuatan nerdctl, sebuah CLI yang kompatibel dengan Docker untuk containerd. Menggunakan nerdctl terasa identik dengan menggunakan Docker, dengan sintaks perintah, flag, dan alur kerja yang sama, tetapi menggunakan containerd sebagai runtime yang mendasarinya. Ini menjadikan nerdctl jembatan yang sangat baik bagi tim yang bertransisi dari Docker ke containerd di lingkungan pengembangan.

Dalam praktiknya, pengembang jarang berinteraksi langsung dengan containerd. Saat mereka perlu melakukannya, nerdctl menyediakan antarmuka yang familiar seperti yang diharapkan, sementara operator platform dan administrator menggunakan API containerd secara terprogram melalui sistem orkestrasi seperti Kubernetes.

Untuk mengilustrasikan perbedaan dalam praktik, berikut perbandingan cara operasi container umum di tiga alat CLI tersebut:

Tugas

Docker

nerdctl

ctr

Menjalankan container

docker run -d -p 8080:80 nginx

nerdctl run -d -p 8080:80 nginx

ctr run --net-host -d docker.io/library/nginx:latest nginx_id

Daftar container

docker ps

nerdctl ps

ctr tasks list

Membangun image

docker build -t myapp .

nerdctl build -t myapp .

Tidak didukung

Melihat log

docker logs <container>

nerdctl logs <container>

Tidak didukung

Memeriksa container

docker inspect <container>

nerdctl inspect <container>

ctr containers info <container>

Mengambil image

docker pull nginx

nerdctl pull nginx

ctr images pull docker.io/library/nginx:latest

Dukungan Compose

docker compose up

nerdctl compose up

Tidak didukung

Catatan: ctr tidak memiliki pemetaan port (-p) dan memerlukan jaringan host (--net-host) untuk mengekspos layanan. Ia juga tidak secara otomatis mengambil image.

Gambaran perbedaan utama

Sebelum kita masuk ke rekomendasi untuk kasus penggunaan spesifik, mari kita rekap perbedaan yang telah kita bahas sejauh ini. Tabel berikut merangkum perbedaan fungsional utama antara Docker dan containerd, menyoroti kapabilitas dan target audiens yang berbeda:

Fitur

Docker

Containerd

Pembuatan Image

Terintegrasi (Dockerfile, BuildKit)

Memerlukan alat eksternal (buildctl, nerdctl)

Orkestrasi

Docker Swarm / Kubernetes

Tidak ada (digunakan oleh Kubernetes)

Manajemen Penyimpanan

Manajemen volume

Sistem snapshotter

Antarmuka Grafis

Docker Desktop

Tidak ada

Siklus Hidup Container

Manajemen penuh (melalui containerd)

Fokus inti (kompatibel CRI)

Pengguna Utama

Pengembang Aplikasi

Operator Klaster, Pembangun Platform

Mengapa Memilih Docker?

Setelah membahas perbedaan teknis, mari kita jelajahi skenario praktis tempat masing-masing alat unggul. Terlepas dari meningkatnya penggunaan containerd di lingkungan produksi, Docker tetap menjadi pilihan unggul untuk skenario tertentu ketika pengalaman pengembang dan tooling komprehensif sangat penting.

Untuk pengembangan lokal dan prototipe

Docker unggul ketika Anda membutuhkan solusi "serba ada" untuk menulis dan menguji kode. Rangkaian alat terintegrasi berarti pengembang dapat beralih dari nol ke menjalankan container dalam hitungan menit, tanpa menyusun banyak komponen atau mengonfigurasi jaringan yang kompleks.

Ekosistem Docker memberikan manfaat produktivitas yang besar:

  • Docker Hub: Jutaan image siap pakai untuk basis data, antrian pesan, dan web server
  • Docker Compose: Definisikan aplikasi multi-container dalam satu file YAML dan jalankan seluruh lingkungan pengembangan dengan satu perintah
  • GUI Docker Desktop: Manajemen container secara visual, penjelajahan volume, penyesuaian batas sumber daya, dan dukungan Kubernetes terintegrasi
  • Hambatan masuk lebih rendah: Alat grafis dan perintah yang intuitif membuat container dapat diakses oleh pengembang yang baru memulai

Ekosistem Docker

Untuk tim yang menggunakan Docker Desktop, GUI menyediakan kemudahan tambahan yang secara signifikan mempercepat onboarding dan alur kerja harian.

Untuk pipeline build yang kompleks

Di luar pengembangan, kapabilitas build Docker menjadikannya pilihan alami untuk alur kerja integrasi dan deployment berkelanjutan yang canggih.

BuildKit terintegrasi Docker menyediakan fitur lanjutan yang esensial untuk pipeline CI/CD modern. Build multi-tahap meminimalkan ukuran image sambil menjaga Dockerfile tetap mudah dibaca. Mekanisme caching BuildKit secara cerdas menggunakan ulang layer di seluruh build, secara drastis mengurangi waktu build di lingkungan integrasi berkelanjutan.

Sebagian besar platform otomasi, seperti GitHub Actions, GitLab CI, Jenkins, dan lainnya, memiliki integrasi Docker yang matang dan teruji. Integrasi ini menangani autentikasi, caching, dan publikasi image tanpa hambatan. 

Meskipun alat lain dapat mencapai hasil serupa, keberadaan Docker yang ubiquitous berarti solusi dan bantuan pemecahan masalah mudah tersedia, yang merupakan nilai tambah besar lainnya.

Mengapa Memilih Containerd?

Containerd menonjol dalam skenario produksi di mana minimalisme, kinerja, dan stabilitas lebih diutamakan daripada kenyamanan tooling terintegrasi.

Untuk klaster Kubernetes produksi

Menggunakan containerd sebagai runtime untuk node Kubernetes menghadirkan manfaat terukur:

  • Overhead berkurang: Menghilangkan daemon Docker berarti konsumsi sumber daya per node lebih rendah dan penghematan yang berarti pada skala besar
  • Stabilitas meningkat: Lebih sedikit komponen berarti lebih sedikit titik potensi kegagalan dalam infrastruktur Anda
  • Permukaan serangan lebih kecil: Lebih sedikit kode untuk diaudit dan lebih sedikit potensi kerentanan keamanan
  • Debugging lebih sederhana: Integrasi CRI langsung menghapus lapisan translasi dockershim, membuat pemecahan masalah lebih lugas
  • Kinerja lebih baik: Tumpukan runtime yang ramping meningkatkan waktu mulai container dan responsivitas

Containerd dengan Kubernetes

Status kelulusan CNCF untuk containerd menandakan kematangan dan keandalannya. Penyedia cloud besar, termasuk AWS, Google Cloud, dan Azure, telah menstandarkan containerd untuk penawaran Kubernetes terkelola mereka, menunjukkan keyakinan pada kesiapan produksinya untuk infrastruktur yang kritis.

Untuk lingkungan khusus yang minimal

Meskipun Kubernetes adalah kasus penggunaan produksi yang paling umum, sifat containerd yang ringan membuka peluang untuk skenario deployment di mana Docker akan kurang praktis.

Edge computing dan perangkat IoT sering beroperasi di bawah batasan sumber daya yang ketat. Desain containerd yang ringan membuatnya layak di lingkungan ini, di mana tumpukan penuh Docker akan memberatkan. Setiap megabita memori dan setiap siklus CPU sangat berarti saat berjalan di perangkat tertanam.

Skenario keamanan tingkat lanjut mendapatkan manfaat dari arsitektur runtime modular containerd. Organisasi dapat mengintegrasikan runtime sandbox untuk beban kerja yang memerlukan batas keamanan tambahan. Contohnya meliputi:

  • gVisor: menyediakan isolasi kernel yang kuat
  • Kata Containers: menjalankan container dalam VM ringan

Integrasi ini dipasang ke containerd tanpa memerlukan modifikasi ekstensif.

Migrasi dari Docker ke Containerd

Memahami kapan menggunakan masing-masing alat itu penting, tetapi mengetahui cara bertransisi di antara keduanya sama pentingnya. Transisi dari Docker ke containerd di lingkungan yang sudah ada memerlukan perencanaan cermat, namun prosesnya terdokumentasi dengan baik dan langsung.

Migrasi node Kubernetes

Langkah operasional untuk memigrasikan node Kubernetes dari Docker ke containerd mengikuti pola standar:

  1. Cordon node: Cegah pod baru dijadwalkan (kubectl cordon <node-name>)

  2. Drain pod yang ada: Pindahkan beban kerja ke node lain (kubectl drain <node-name>)

  3. Perbarui konfigurasi Kubelet: Arahkan ke soket CRI containerd di /run/containerd/containerd.sock

  4. Verifikasi plugin CNI: Pastikan containerd memiliki plugin jaringan yang diperlukan

  5. Mulai ulang Kubelet: Daftarkan dengan runtime baru dan bergabung kembali ke klaster

Menguji migrasi pada node non-produksi terlebih dahulu membantu mengidentifikasi masalah spesifik lingkungan sebelum melakukan perubahan di seluruh klaster. Untuk menghindari jebakan umum, pastikan mengikuti praktik terbaik berikut:

  • Perubahan path log: Docker dan containerd menggunakan lokasi log default yang berbeda, jadi perbarui infrastruktur logging Anda sesuai
  • Pasang plugin CNI yang hilang: Containerd memerlukan biner plugin CNI untuk jaringan; ini tidak selalu terpasang secara default
  • Perhatikan perbedaan pengambilan image: Autentikasi dan konfigurasi registry mungkin perlu penyesuaian
  • Waspadai ketidakcocokan driver penyimpanan: Pastikan volume persisten Anda kompatibel dengan snapshotter containerd

Menavigasi perbedaan CLI

Setelah infrastruktur Anda dimigrasikan, pengembang perlu menyesuaikan alur kerja harian mereka untuk bekerja dengan runtime baru.

Bagi pengembang yang terbiasa dengan perintah Docker, nerdctl memberikan pengalaman yang hampir identik. Perintah seperti nerdctl run, nerdctl build, dan nerdctl compose up bekerja persis seperti padanan Docker-nya, sehingga transisi menjadi mulus.

Untuk debugging, memahami cara memetakan alur kerja debugging Docker ke containerd sangat penting. Jika Anda menggunakan docker inspect untuk memeriksa container, ctr containers info menyediakan informasi serupa, meski dalam format berbeda. Demikian pula, ctr tasks list menampilkan container yang berjalan.

Sebagian besar pengembang menemukan bahwa nerdctl menghilangkan kebutuhan mempelajari sintaks ctr untuk tugas sehari-hari. ctr tingkat rendah tetap berguna untuk pemecahan masalah spesifik runtime atau saat bekerja langsung dengan API containerd.

Kesimpulan

Hubungan antara Docker dan containerd adalah contoh sempurna dari desain modular yang sukses dalam infrastruktur perangkat lunak. Docker tetap menjadi alat optimal untuk manusia yang menulis kode, karena menyediakan pengalaman terintegrasi, ekosistem komprehensif, dan antarmuka yang ramah pengembang yang membuat pembangunan aplikasi terkontainer menjadi produktif (dan menyenangkan).

Sementara itu, containerd unggul sebagai runtime bagi mesin yang mengeksekusi kode, menawarkan stabilitas, kinerja, dan minimalisme yang dibutuhkan untuk platform orkestrasi produksi. Fakta bahwa Docker Engine menggunakan containerd di balik layar menunjukkan bagaimana kedua alat ini saling melengkapi, bukan saling bersaing.

Saya merekomendasikan pendekatan yang pragmatis bagi sebagian besar organisasi: terus gunakan Docker di laptop pengembang di mana toolset-nya mempercepat alur kerja pengembangan, tetapi pertimbangkan untuk memigrasikan klaster Kubernetes produksi langsung ke containerd demi manfaat operasional berupa overhead yang berkurang dan tumpukan runtime yang lebih sederhana.

Apakah Anda memilih platform komprehensif Docker atau runtime terfokus containerd, keduanya tetap menjadi komponen esensial dari ekosistem container modern, masing-masing dioptimalkan untuk tahap yang berbeda dalam siklus hidup aplikasi.

Untuk terus belajar, pastikan Anda mendaftar di jalur keterampilan Kontainerisasi dan Virtualisasi dengan Docker dan Kubernetes kami.

Containerd vs Docker FAQs

Bisakah saya menggunakan image Docker dengan containerd?

Ya, tentu saja. Containerd mendukung image container yang sesuai OCI apa pun, termasuk yang dibangun dengan Docker. Karena Docker membangun image berstandar OCI, image tersebut bekerja mulus dengan containerd dan semua runtime yang sesuai OCI lainnya. Anda dapat menggunakan docker build secara lokal dan menjalankan image tersebut dengan containerd di produksi tanpa masalah kompatibilitas.

Apakah Docker menggunakan containerd di balik layar?

Ya, Docker Engine menggunakan containerd sebagai runtime container intinya. Mulai Docker 1.11, Docker mengintegrasikan containerd untuk menangani operasi siklus hidup container seperti pembuatan, eksekusi, dan pengelolaan. Saat Anda menjalankan docker run, daemon Docker (dockerd) mendelegasikan eksekusi container sebenarnya ke containerd, yang kemudian menggunakan runc untuk berinteraksi dengan kernel Linux.

Mengapa Kubernetes menghapus dukungan Docker?

Pada 2022, Kubernetes menghapus dockershim (lapisan kompatibilitas Docker) untuk menghilangkan lapisan translasi yang tidak perlu. Docker hadir sebelum Container Runtime Interface (CRI), sehingga Kubernetes memerlukan dockershim untuk menerjemahkan antara API-nya dan Docker. Dengan berkomunikasi langsung dengan containerd melalui CRI, Kubernetes memperoleh kinerja, stabilitas, dan tumpukan runtime yang lebih sederhana. Image Docker tetap berfungsi dengan sempurna di Kubernetes.

Haruskah saya beralih dari Docker ke containerd untuk pengembangan lokal?

Tidak, Docker tetap menjadi pilihan yang lebih baik untuk pengembangan lokal. Docker menyediakan rangkaian alat terintegrasi dengan Docker Compose, GUI Docker Desktop, dan dukungan ekosistem yang luas yang mempercepat alur kerja pengembangan. Gunakan containerd untuk klaster Kubernetes produksi, di mana overhead lebih rendah dan integrasi CRI langsung memberikan manfaat jelas, tetapi tetap gunakan Docker di laptop pengembang untuk pengalaman pengembang yang unggul.

Apa itu nerdctl, dan apakah saya membutuhkannya?

Nerdctl adalah CLI yang kompatibel dengan Docker untuk containerd yang memberikan pengalaman pengguna yang sama seperti Docker (mendukung sebagian besar perintah dan flag umum) tetapi menggunakan containerd sebagai runtime. Anda memerlukannya jika ingin berinteraksi langsung dengan containerd menggunakan perintah Docker yang familiar. Ini sangat berguna untuk lingkungan pengembangan yang menggunakan containerd atau saat mentransisikan tim dari alur kerja berbasis Docker ke containerd.

Benito Martin

Penulis

Benito Martin

Sebagai Founder Martin Data Solutions serta Data Scientist, ML, dan AI Engineer lepas, saya memiliki portofolio beragam dalam Regression, Classification, NLP, LLM, RAG, Neural Networks, Ensemble Methods, dan Computer Vision.

  • Berhasil mengembangkan sejumlah proyek ML end-to-end, termasuk pembersihan data, analitik, pemodelan, dan deployment di AWS dan GCP, menghadirkan solusi yang berdampak dan dapat diskalakan.
  • Membangun aplikasi web yang interaktif dan skalabel menggunakan Streamlit dan Gradio untuk berbagai use case industri.
  • Mengajar dan membimbing mahasiswa dalam data science dan analitik, mendorong perkembangan profesional mereka melalui pendekatan pembelajaran yang dipersonalisasi.
  • Merancang konten kursus untuk aplikasi retrieval-augmented generation (RAG) yang disesuaikan dengan kebutuhan enterprise.
  • Menulis blog teknis AI & ML berdampak tinggi, mencakup topik seperti MLOps, vector database, dan LLM, dengan capaian keterlibatan yang signifikan.

Dalam setiap proyek yang saya tangani, saya memastikan menerapkan praktik terkini dalam rekayasa perangkat lunak dan DevOps, seperti CI/CD, code linting, formatting, pemantauan model, pelacakan eksperimen, dan penanganan error yang tangguh. Saya berkomitmen menyajikan solusi menyeluruh, mengubah wawasan data menjadi strategi praktis yang membantu bisnis bertumbuh dan memaksimalkan pemanfaatan data science, machine learning, dan AI.

Topik

Terkait

blogs

Tutorial Korelasi di R

blogs

Spaghetti Plot dan Jalur Badai

blogs

40 Pertanyaan Wawancara DBMS Teratas di 2026