Apa Itu Docker? Sejauh Mana Kalian Mengenal Docker
MakalahSerbaAda.Com - Sebagai developer, Anda mungkin pernah mendengar tentang Docker di beberapa titik dalam kehidupan profesional Anda. Dan Anda mungkin menyadari bahwa itu telah menjadi teknologi penting untuk diketahui oleh setiap pengembang aplikasi. Jika Anda tidak tahu apa yang saya bicarakan, jangan khawatir untuk itulah artikel ini dibuat.
Kami akan melakukan perjalanan untuk menemukan apa yang dibicarakan semua orang Docker ini dan apa yang dapat Anda lakukan dengannya. Pada akhirnya, kita juga akan membuat, mempublikasikan, dan menjalankan image Docker pertama kita.
- Mau Tahu Apa Itu Cleaning Data? Berikut Definisi, Manfaat Serta Komponen Dalam Cleaning Data - Makalah Serba Ada
- Mau tahu apa itu Frontend, Backend dan Full Stack Developer? Yuk simak penjelasanya - Makalah Serba Ada
- Pengertian, jenis-jenis dan istilah dasar pada Framework
- Apa itu React JS? Berikut Penjelasan dan Manfaat React JS Bagi Pengembangan Proyek Anda
- Ingin Tau Apa Itu VPS Hosting? Berikut Penjelasan Lengkap Virtual Private Server (VPS)
Sejarah Container
Docker adalah runtime kontainer. Banyak orang berpikir bahwa Docker adalah yang pertama dari jenisnya, tetapi ini tidak benar Linux container telah ada sejak tahun 1970-an.
Docker penting bagi komunitas developer dan komunitas container karena dibuat menggunakan container dengan sangat mudah sehingga semua orang mulai melakukannya.
Apa itu Container?
Containers, atau Linux Containers, adalah teknologi yang memungkinkan kita untuk mengisolasi proses kernel tertentu dan mengelabui mereka agar berpikir hanya mereka yang berjalan di komputer yang benar-benar baru. Berbeda dari Mesin Virtual, sebuah container dapat berbagi kernel sistem operasi sementara hanya memiliki binari/pustaka yang berbeda yang dimuat di dalamnya. Dengan kata lain, Anda tidak perlu menginstal OS yang berbeda (disebut guest OS) di dalam OS host Anda. Anda dapat menjalankan beberapa wadah dalam satu OS tanpa menginstal beberapa OS guest yang berbeda.
Perbedaan antara Mesin Virtual dan Kontainer Docker (Sumber: Docker)
Ini membuat container jauh lebih kecil, lebih cepat, dan lebih efisien. Sementara VM dapat memakan waktu sekitar satu menit untuk berputar dan dapat menimbang beberapa Gigabytes, sebuah container rata-rata memiliki berat 400 hingga 600mb (yang terbesar)
Mereka juga hanya membutuhkan beberapa detik untuk berputar. Ini sebagian besar karena mereka tidak harus memutar seluruh sistem operasi sebelum menjalankan proses. Dan ini semua dimulai dengan enam karakter.
Sejarah Container
Sejarah container dimulai pada tahun 1979 dengan Unix v7. Saat itu, saya bahkan belum lahir, dan ayah saya berusia 13 tahun. Apakah kontainer sudah ada pada tahun 1979? Tidak!
Pada tahun 1979, Unix versi 7 memperkenalkan panggilan sistem yang disebut chroot, yang merupakan awal dari apa yang kita kenal sekarang sebagai virtualisasi proses.
Panggilan chroot memungkinkan kernel untuk mengubah direktori root yang jelas dari suatu proses dan anak-anaknya.
Singkatnya, proses berpikir itu berjalan sendiri di mesin, karena sistem filenya dipisahkan dari semua proses lainnya. Sistem yang sama ini diperkenalkan di BSD pada tahun 1982. Namun baru dua dekade kemudian kami menerapkannya secara luas untuk pertama kalinya.
Pada tahun 2000, penyedia hosting mencari cara yang lebih baik untuk mengelola situs web pelanggan mereka, karena semuanya dipasang di mesin yang sama dan bersaing untuk sumber daya yang sama. Solusi ini disebut jails, dan ini adalah salah satu upaya nyata pertama untuk mengisolasi hal-hal di tingkat proses. Jails memungkinkan setiap pengguna FreeBSD untuk mempartisi sistem menjadi beberapa sistem independen yang lebih kecil (yang disebut jails). Setiap jails dapat memiliki konfigurasi IP dan konfigurasi sistemnya sendiri.
Jails adalah solusi pertama untuk memperluas penggunaan chroot untuk memungkinkan tidak hanya segregasi di tingkat sistem file, tetapi juga memvirtualisasikan pengguna, jaringan, sub-sistem, dan sebagainya.
Pada tahun 2008, LXC (LinuX Containers) diluncurkan. Pada saat itu, ini adalah implementasi pertama dan terlengkap dari sistem manajemen container. Itu menggunakan grup kontrol, ruang nama, dan banyak dari apa yang dibangun sampai saat itu. Kemajuan terbesar adalah digunakan langsung dari kernel Unix, tidak memerlukan patch apa pun.
Docker
Akhirnya, pada 2010, Solomon Hykes dan Sebastien Pahl menciptakan Docker selama grup inkubator startup Y Combinator. Pada tahun 2011 platform ini diluncurkan. Awalnya, Hykes memulai proyek Docker di Prancis sebagai bagian dari proyek internal dalam dotCloud, sebuah perusahaan PaaS yang ditutup pada tahun 2016.
Docker tidak menambahkan banyak ke runtime container pada saat itu kontribusi terbesar dari Docker ke ekosistem container adalah kesadaran. CLI dan konsepnya yang mudah digunakan mendemokratisasikan penggunaan container untuk developer umum, dan tidak hanya untuk perusahaan hacking dalam yang membutuhkan container untuk beberapa alasan.
Setelah 2013, beberapa perusahaan mulai mengadopsi Docker sebagai runtime container default karena menstandarisasi penggunaan container di seluruh dunia. Pada tahun 2013, Red Hat mengumumkan kolaborasi Docker, pada tahun 2014 sudah waktunya untuk Microsoft, AWS, Stratoscale, dan IBM.
Pada tahun 2016, versi pertama Docker untuk OS yang berbeda dari Linux diumumkan. Windocks merilis port proyek OSS Docker yang dirancang untuk berjalan di Windows. Dan, pada akhir tahun yang sama, Microsoft mengumumkan bahwa Docker sekarang didukung secara native di Windows melalui Hyper-V.
Pada tahun 2019, Microsoft mengumumkan WSL2, yang memungkinkan Docker berjalan di Windows tanpa memerlukan mesin virtual di Hyper-V. Docker sekarang multiplatform asli sambil tetap memanfaatkan pendekatan kontainer Linux.
Akhirnya, pada tahun 2020, Docker menjadi pilihan container di seluruh dunia. Ini terjadi bukan karena lebih baik dari yang lain, tetapi karena menyatukan semua implementasi di bawah satu platform yang mudah digunakan dengan CLI dan Daemon. Dan ia melakukan semua ini sambil menggunakan konsep sederhana yang akan kita jelajahi di bagian selanjutnya.
Bagaimana Docker Bekerja?
Docker mengemas aplikasi dan semua dependensinya dalam wadah virtual yang dapat berjalan di server Linux mana pun. Inilah mengapa kami menyebutnya container. Karena mereka memiliki semua dependensi yang diperlukan yang terkandung dalam satu perangkat lunak.
Docker terdiri dari elemen-elemen berikut:
- sebuah Daemon, yang digunakan untuk membangun, menjalankan, dan mengelola container
- API tingkat tinggi yang memungkinkan pengguna berkomunikasi dengan Daemon,
- dan CLI, antarmuka yang kami gunakan untuk membuat semua ini tersedia.
Container Docker
Container adalah abstraksi dari lapisan aplikasi. Mereka mengemas semua kode, library, dan dependensi bersama-sama. Hal ini memungkinkan beberapa container berjalan di host yang sama, sehingga Anda dapat menggunakan sumber daya host tersebut dengan lebih efisien.
Setiap container berjalan sebagai proses yang terisolasi di ruang pengguna dan menggunakan lebih sedikit ruang daripada VM biasa karena arsitektur berlapis.
Lapisan ini disebut gambar perantara, dan gambar ini dibuat setiap kali Anda menjalankan perintah baru di Dockerfile, misalnya, jika Anda memiliki Dockerfile seperti ini:
FROM node:stable COPY . /usr/src/app WORKDIR /usr/src/app RUN npm install grpc RUN npm install ENTRYPOINT ["npm", "start"]
Pada setiap perintah seperti COPY atau RUN, Anda akan membuat layer lain di atas gambar container Anda. Ini memungkinkan Docker untuk membagi dan memisahkan setiap perintah menjadi bagian yang terpisah. Jadi jika Anda akhirnya menggunakan gambar node:stable ini lagi, itu tidak perlu menarik semua lapisannya, karena Anda telah menginstal gambar ini.
Selain itu, semua lapisan di-hash, yang berarti Docker dapat men-cache lapisan tersebut dan mengoptimalkan waktu pembuatan untuk lapisan yang tidak berubah di seluruh build. Anda tidak perlu membangun kembali dan menyalin ulang semua file jika langkah SALIN tidak berubah, yang sangat mengurangi jumlah waktu yang dihabiskan dalam proses pembuatan.
Di akhir proses build, Docker membuat layer kosong baru di atas semua layer yang disebut thin writable layer. Lapisan ini adalah yang Anda akses saat menggunakan docker exec -it <container> <ommand>. Dengan cara ini Anda dapat melakukan perubahan interaktif pada gambar dan mengkomitnya menggunakan komit Docker, seperti yang Anda lakukan dengan file yang dilacak Git.
Arsitektur lapisan hash-diffed ini dimungkinkan karena sistem file AuFS. Ini adalah FS berlapis yang memungkinkan file dan direktori ditumpuk sebagai lapisan satu sama lain. AuFS menimbulkan beberapa masalah ketika berhadapan dengan DnD (Docker di Docker), tetapi ini adalah subjek untuk artikel lain! Penjelasan lebih dalam bisa Anda simak di artikel ini.
Lapisan dapat di-hash-diff antar versi. Dengan cara ini Docker dapat memeriksa apakah suatu lapisan telah berubah saat membuat gambar dan memutuskan apakah akan membangunnya kembali, menghemat banyak waktu.
Jadi, jika Anda sudah memiliki gambar Ubuntu yang diunduh di komputer Anda, dan Anda sedang membuat gambar baru yang bergantung pada satu atau lebih lapisan gambar itu, Docker tidak akan membuatnya lagi. Itu hanya akan menggunakan kembali lapisan yang sama.
(sumber: Packt) Docker layers explained
Jika Anda ingin menggali lebih dalam ke lapisan, artikel ini memberikan banyak detail tentang cara menemukan, membuat daftar, dan mengelolanya.
Mengapa kontainer Docker bagus?
Anda mungkin pernah mendengar ungkapan ikonik "Ini berfungsi di mesin saya". Nah, mengapa kita tidak memberikan mesin itu kepada pelanggan?
Itulah masalah yang diselesaikan Docker dan container secara umum. Container Docker adalah kumpulan paket semua pustaka dan dependensi aplikasi yang sudah dibuat sebelumnya dan siap dieksekusi.
Banyak perusahaan telah berpindah dari VM ke container bukan hanya karena lebih ringan dan lebih cepat untuk dijalankan, tetapi juga karena sangat mudah dirawat.
Satu container dapat diversi menggunakan Dockerfile (kita akan membahas gambar di bagian berikutnya), sehingga cukup mudah bagi satu pengembang (atau bahkan tim kecil pengembang) untuk menjalankan dan memelihara seluruh ekosistem container. Di sisi lain, Anda akan membutuhkan orang infrastruktur hanya untuk dapat menjalankan dan mengurus VM.
(sumber: Docker) Your Datacenter with VMs and containers
Apakah ini berarti kita tidak membutuhkan VM lagi? Tidak, sebaliknya, VM masih sangat dibutuhkan jika Anda ingin memiliki keseluruhan sistem operasi untuk setiap pelanggan atau hanya membutuhkan seluruh lingkungan sebagai kotak pasir. VM biasanya digunakan sebagai lapisan tengah ketika Anda memiliki rak server besar dan beberapa pelanggan yang akan menggunakannya.
Kemudahan penggunaan dan pemeliharaan membawa kita ke aspek penting lain mengapa container begitu hebat: jauh lebih murah bagi perusahaan untuk menggunakan container daripada VM yang lengkap. Ini bukan karena infrastruktur atau perangkat kerasnya lebih murah, tetapi karena Anda membutuhkan lebih sedikit orang untuk mengurus container, yang berarti Anda dapat mengatur tim Anda dengan lebih baik untuk fokus pada produk daripada berfokus pada housekeeping.
Masih terkait dengan penghematan, satu VM berukuran sedang dapat menjalankan sekitar 3 hingga 8 container. Itu tergantung pada berapa banyak sumber daya yang digunakan container Anda dan berapa banyak OS yang mendasarinya yang perlu di-boot sebelum menjalankan seluruh aplikasi.
Beberapa bahasa, seperti Go, memungkinkan Anda membuat gambar hanya dengan biner terkompilasi dan tidak ada yang lain. Ini berarti Docker container akan memuat lebih sedikit dan karenanya akan menggunakan lebih sedikit sumber daya. Dengan cara ini Anda dapat memutar lebih banyak container per VM dan menggunakan perangkat keras Anda dengan lebih efisien. Karena container dibuat untuk sementara, itu berarti semua data di dalamnya akan hilang saat container dihapus. Itu bagus, karena kita dapat menggunakan container untuk tugas yang dapat meledak seperti CI.
Penggunaan container telah membawa kemajuan DevOps ke tingkat yang sama sekali baru. Sekarang Anda dapat dengan mudah memutar banyak container, masing-masing melakukan satu langkah kecil dari pipeline penerapan Anda, dan kemudian mematikannya tanpa khawatir jika Anda meninggalkan sesuatu.
Sifat container yang tidak memiliki kewarganegaraan menjadikannya alat yang sempurna untuk beban kerja yang cepat. Sekarang setelah kita melihat betapa hebatnya container, mari kita pahami bagaimana kita dapat membangun salah satunya!
Apa itu Docker Images?
Docker images adalah instruksi yang ditulis dalam file khusus yang disebut Dockerfile. Memiliki sintaksnya sendiri dan menentukan langkah apa yang akan diambil Docker untuk membangun container Anda. Karena container hanyalah lapisan demi lapisan perubahan, setiap perintah baru yang Anda buat dalam Docker images akan membuat lapisan baru di dalam container. Lapisan terakhir adalah apa yang kita sebut lapisan tipis yang dapat ditulis. Lapisan kosong yang dapat diubah oleh pengguna dan dikomit menggunakan perintah docker commit.
Berikut adalah contoh images sederhana untuk aplikasi Node.js:
FROM node:stable COPY . /usr/src/app/ RUN npm install && npm run build EXPOSE 3000 ENTRYPOINT ["npm", "start"]
Dalam contoh sederhana, kami membuat images baru. Semua images didasarkan pada images yang ada, atau images awal (yang saya jelaskan di artikel blog saya. Images ini diunduh dari Container Registry, sebuah repositori untuk menyimpan images container. Yang paling umum adalah Docker Hub, tetapi Anda juga dapat membuat yang pribadi menggunakan solusi cloud seperti Azure Container Registry.
Saat Anda menjalankan docker build. pada direktori yang sama dengan Dockerfile, daemon Docker akan mulai membangun image dan mengemasnya sehingga Anda dapat menggunakannya. Kemudian Anda dapat menjalankan docker run <image-name> untuk memulai wadah baru.
Perhatikan bahwa kami mengekspos port tertentu di Dockerfile. Docker memungkinkan kami untuk memisahkan jaringan dalam OS kami sendiri, yang berarti Anda dapat memetakan port dari komputer Anda ke wadah dan sebaliknya. Juga, Anda dapat menjalankan perintah di dalam wadah dengan docker exec.
Mari kita praktikkan ilmu ini.
Cara Deploy Aplikasi Docker
Ini akan menjadi panduan sederhana dan mudah tentang cara membuat image Docker dasar menggunakan server Node.js dan membuatnya berjalan di komputer Anda.
Pertama, mulai proyek baru di direktori yang Anda pilih, dan jalankan npm init -y untuk membuat file package.json baru. Sekarang mari kita buat direktori lain bernama src. Di direktori ini kita akan membuat file baru bernama server.js.
Sekarang, di file package.json Anda, ubah kunci utama menjadi src/server.js. Hapus juga skrip test yang telah dibuat dan ganti dengan "start": "node src/server.js". File Anda harus seperti ini:
{
"name": "your-project",
"version": "1.0.0",
"description": "",
"main": "src/server.js",
"scripts": {
"start": "node src/server.js"
},
"keywords": [],
"author": "",
"license": "ISC"
}
Sekarang, buat file bernama Dockerfile (tanpa ekstensi).
FROM node:lts-alpine COPY . /usr/src/app/ WORKDIR /usr/src/app EXPOSE 8089 ENTRYPOINT ["npm", "start"]
Penjelasan mengenai baris diatas :
- Pertama, kita mendapatkan image node dari Docker Hub. Karena gambar disimpan berdasarkan namanya, kami membedakan gambar berdasarkan tagnya. Anda dapat memeriksa semua tag di sini.
- Selanjutnya, kami menggunakan COPY untuk menyalin semua file di direktori saat ini (menggunakan .) ke direktori baru di container yang disebut /usr/src/app. Direktori dibuat secara otomatis. Ini diperlukan karena kita membutuhkan semua file aplikasi kita di sana.
- Sekarang kita mengubah direktori awal kita ke direktori /usr/src/app, sehingga kita dapat menjalankan sesuatu dari direktori root aplikasi kita.
- port telah terekspos
Demikian, segera setelah container kami berjalan, kami akan menjalankan "npm start". Mari kita membangun image dengan menjalankan docker build . -t simple-node-image. Dengan cara ini kita akan menandai Images kita dan memberinya nama.
Anda akan melihat bahwa itu akan membuat dan mengunduh images, bersama dengan semua lapisan yang diperlukan. Selanjutnya kita jalankan Images ini dengan perintah berikut:
docker run -p 80:8089 simple-node-image
Kami memetakan port 80 kami ke port 8089 di dalam container. Kita dapat memeriksanya dengan mengetikkan docker ps seperti ini:
Sekarang coba akses localhost:80, dan lihat apa yang terjadi:
Untuk Apa Docker Digunakan?
Sekarang setelah kita melihat cara membuat container Docker, mari kita beralih ke beberapa penggunaan praktis Docker dan bagaimana Anda bisa mendapatkan yang terbaik darinya.
Ephemeral Databases
Pernahkah Anda mencoba mengembangkan aplikasi yang membutuhkan database untuk dijalankan? Atau lebih buruk lagi, mencoba menjalankan aplikasi orang lain yang membutuhkan database yang belum Anda instal? Solusi lama adalah menginstal database terlebih dahulu, kemudian menjalankan aplikasi. Dengan Docker Anda hanya perlu menjalankan container database. Mari kita jalankan wadah MongoDB sederhana:
$ docker run -p 27017:27017 --name my-ephemeral-db mongo
Itu dia! Sekarang Anda dapat mengakses database dari komputer Anda melalui port 27017, seperti yang biasa Anda lakukan.
Persistent Database
Masalah dengan contoh sebelumnya adalah, jika Anda menghapus container, semua data Anda akan hilang. Jadi, bagaimana jika Anda ingin menjalankan database lokal tanpa perlu menginstalnya, tetapi menyimpan data setelah dihapus? Anda dapat mengikat Docker ke volume! Saat Anda mengikat Docker ke volume lokal, pada dasarnya Anda memasang sistem file Anda ke dalam wadah atau sebaliknya. Mari perhatikan:
$ docker run -p 27017:27017 -v /home/my/path/to/db:/data/db --name my-persistent-db mongo
Dalam perintah ini kami memasang /data/db ke /home/my/path/to/db. Sekarang jika kita menggunakan docker stop my-persistent-db dan docker rm my-persistent-db semua data kita akan terus disimpan di sana.
Nanti jika kita membutuhkan database lagi, kita bisa mount menggunakan perintah yang sama, dan semua data akan kembali.
One-use Tools
Hal lain yang dilakukan semua developer: kami menginstal aplikasi yang hanya kami gunakan sekali. Misalnya, CLI sederhana untuk mengakses database lama itu, atau GUI sederhana itu ke beberapa server CI. Banyak alat sudah memiliki Container Docker, dan Anda dapat menggunakannya seperti ini, sehingga Anda tidak perlu menginstal alat lain lagi di notebook Anda. Contoh terbaik adalah Redis. One-use tools Ini memiliki redis-cli yang dibangun di container lain, jadi Anda tidak perlu menginstal redis-cli di Shell Anda jika Anda jarang menggunakannya.
Bayangkan Anda menjalankan instance Redis dengan docker run -d --name redis redis --bind 127.0.0.1 terikat ke antarmuka localhost. Anda dapat mengaksesnya melalui wadah lain menggunakan:
baliknya. Mari perhatikan:$ docker run --rm -it --network container:redis redis-cli -h 127.0.0.1
Bendera --rm memberi tahu Docker bahwa ia harus menghapus wadah segera setelah dihentikan, sedangkan bendera -it memberi tahu bahwa kita menginginkan sesi interaktif (dengan shell) dan kita memerlukan TTY.
Jalankan seluruh tumpukan
Jika Anda perlu menguji aplikasi yang bergantung pada aplikasi lain, bagaimana Anda melakukannya? Docker membuatnya mudah dengan menyediakan docker-compose. Ini adalah alat lain di kotak alat Anda yang memungkinkan Anda membuat kode file docker-compose.yml yang menjelaskan lingkungan Anda
Filenya terlihat seperti ini:
version: "3.8"
services:
web:
build: .
ports:
- "5000:5000"
redis:
image: "redis:alpine"
ports:
- "6379:6379"
Seperti yang Anda lihat, kami mendefinisikan dua layanan, satu disebut web dan menjalankan dock er build di jalur web.build. Itu adalah file Docker.
Setelah itu, ia memperlihatkan port 5000 baik di host maupun di dalam container. Layanan lainnya adalah redis, yang menarik dan menjalankan image redis pada port 6379. Bagian terbaiknya adalah lapisan jaringan dibagikan, dengan kata lain, Anda dapat mengakses redis dari layanan web hanya dengan mengetik redis dan port.
Anda dapat memulai file ini dengan komposisi docker-compose up, dan melihat keajaiban terjadi.
Kesimpulan
Itu dia sejarah Docker, bagaimana hal itu terjadi, dan cara kerjanya dalam 3000 kata. Saya harap Anda menyukainya, dan saya harap ini membuat kemajuan Anda dengan Docker sedikit lebih mudah.
Seperti yang Anda lihat, sebagian besar penggunaan Docker adalah untuk membuat hidup lebih mudah bagi para developer saat mengembangkan aplikasi. Tetapi ada banyak kegunaan lain, seperti lapisan infrastruktur dan membuat pemeliharaan aplikasi Anda jauh lebih mudah.
Jika Anda ingin menghubungi saya, cukup ping saya di salah satu jejaring sosial saya di situs web saya. Apabila artikel ini bermanfaat bagi anda yang sedang belajar atau mendalami dunia programming besar harapan saya untuk anda menyisihkan sedikit rezeki untuk pengembangan website ini. Jika anda ingin berdonasi silahkan klik tombol donasi dibawah ini