Pengenalan Docker yang Benar-Benar Beginners Friendly (Dengan Contoh)

Rendya Yuschak
6 min readMay 25, 2021

--

Source : https://www.docker.com/sites/default/files/d8/2019-07/vertical-logo-monochromatic.png

Sebelum mengikuti mata kuliah PPL, Docker merupakan salah satu aplikasi yang saya tahu keberadaannya, tapi belum cukup paham mengapa developer menggunakannya.

Dari beberapa tutorial Docker yang ada di Internet, kebanyakan dari mereka menjelaskan bagaimana cara kerja Docker dan cara memakainya, namun alasan dan tujuan mengapa menggunakan Docker kurang jelas, atau setidaknya bagi yang baru ingin belajar Docker.

Ketika saya mengikuti mata kuliah PPL, saya dikenalkan Docker oleh teman saya, dimana saya dijelaskan tujuan dan bagaimana penggunaan Docker secara nyata dalam pembuatan suatu aplikasi. Inilah hasil dari penjelasannya:

Pengenalan Docker

Source : https://hackr.io/blog/what-is-docker/thumbnail/large

Apa itu Docker?

Pada dasarnya Docker merupakan aplikasi open source yang digunakan untuk menghubungkan file dan mengatur data konfigurasi suatu aplikasi dalam suatu wadah tertentu sehingga dapat dijalankan dengan lancar dan efisien.

Hal ini memudahkan developer untuk menjalankan dan mendistribusi suatu aplikasi tanpa harus memikirkan bagaimana melakukan konfigurasi sistem yang diperlukan agar bisa menjalankan aplikasi.

Dari pengalaman saya sendiri, Docker digunakan untuk menghindari perkataan :

“Loh kok aplikasinya nggak jalan di komputer kamu, di sistem saya jalan kok.”

Tujuan Docker

Untuk memahami tujuan penggunaan Docker yang lebih dalam, mari kita gunakan suatu contoh untuk menjelaskan bagaimana Docker memudahkan developer menjalankan dan mendistribusi suatu aplikasi:

Permasalahan

Anggaplah kamu punya tiga aplikasi berbasis Python yang ingin kamu deploy dan host pada suatu server tertentu. Tapi ketiga aplikasi tersebut menggunakan versi Python yang berbeda, terus library dan depedency yang digunakan berbeda juga.

Karena kita tidak bisa menginstall 3 versi Python yang berbeda pada satu mesin, hal ini mencegah kita untuk menghosting ketiga aplikasi tersebut pada suatu komputer (atau server) yang sama.

Solusi Tanpa Docker

Solusi yang bisa dilakukan adalah kita bisa menggunakan 3 mesin yang berbeda, atau kita bisa menggunakan 1 mesin dengan 3 OS (atau minimal virtual OS) yang berbeda. Kedua opsi tersebut memberikan suatu cara untuk menginstall Python dengan versi yang berbeda pada mesin-mesin tersebut, termasuk dengan dependency-nya.

Tapi sayangnya, akibat dari penggunan mesin dan OS yang berbeda, membuat biaya untuk deploy dan maintain keseluruhan aplikasi, baik software maupun hardware menjadi cukup mahal.

Bagaimana kalau kita menggunakan Docker?

Solusi Dengan Docker

Dengan Docker, kamu hanya perlu menginstall docker pada satu mesin tertentu, membuat file konfigurasi dari tiap app, kemudian membuat menaruh aplikasi-aplikasi tersebut dan depedency-nya pada suatu wadah atau kita sebut sebagai Docker Container (atau container untuk selanjutnya). Tiga aplikasi artinya kita membuat 3 container, lalu container tersebut ditaruh pada docker pada mesin tersebut.

Berbeda dengan menggunakan 3 OS yang berbeda, di Docker mesin masih menggunakan satu OS yang dipakai secara bersamaan. Namun, tiap container memberikan suatu virtual copy Process Table, Network Interface, dan File System Mount Points yang didasari oleh OS mesin utama.

Source : https://cdn-media-1.freecodecamp.org/images/1*MbxLUFB2HRPmLAn60tQKZA.png

Dengan begitu, tiap container akan terisolasi satu sama lain di satu mesin, namun bisa dijalankan dengan lancar. Disini tentu biaya deploy dan maintain akan murah jika dibandingkan dengan menggunakan 3 OS yang berbeda.

Source : https://www.zdnet.com/a/hub/i/r/2017/05/08/af178c5a-64dd-4900-8447-3abd739757e3/resize/770xauto/78abd09a8d41c182a28118ac0465c914/docker-vm-container.png

Istilah pada Docker

  1. Image
    Image merupakan file dan bentuk data konfigurasi dari suatu aplikasi yang ingin dijalankan. Biasanya developer melakukan pull Image dari Docker Repository yang kita sebut sebagai Base Image, kemudian kita modifikasi sesuai kebutuhan dengan Dockerfile.
  2. Container
    Container merupakan keseluruhan komponen yang dibutuhkan untuk menjalankan suatu aplikasi dalam Docker.
  3. Docker Registries / Docker Hub
    Registries adalah server yang menyimpan Docker Repository. Pada dasarnya merupakan tempat dimana kita bisa pull atau push Docker Repository yang sudah dibuat.
  4. Docker Repository
    Docker Repository pada dasarnya adalah kumpulan Image yang bisa di pull oleh developer. Biasanya Docker Repository berisi Image suatu Framework yang sama namun dengan versi berbeda yang nantinya digunakan untuk pull Image dengan versi yang dibutuhkan developer.
  5. Dockerfile
    Dockerfile merupakan rangkaian perintah yang berfungsi untuk membuat sebuah image. Biasanya developer pull suatu Base Image, kemudian dimodifikasi sesuai kebutuhan dengan Docker File
  6. Docker Compose
    Docker compose adalah fitur untuk menjalankan beberapa container menjadi sebuah aplikasi / service.

Cara Memakai Docker

Dockerisasi Sebuah Project Django

Sekarang saya akan berikan contoh untuk membuat agar suatu project Django dapat dibuat container docker dan dijalankan didalamnya. Disini diharapkan sudah terinstall python dan django. Apabila belum, anda bisa download dan install dengan pergi ke python.org lalu kemudian pada cmd anda menuliskan

pip install django

untuk install django pada mesin anda.

  1. Download Docker Desktop

Kamu bisa download dan install Docker Desktop disini.

Pastikan docker sudah terinstall dengan baik dengan menuliskan command ini di cmd.

docker

Kalau tidak error maka harusnya keluar opsi command docker seperti pada gambar dibawah. Bila error, install ulang docker desktopnya

2. Cari Sebuah Project Django atau Buat Baru

Apabila membuat baru maka buatlah di folder yang anda inginkan dengan memberikan command:

django-admin startproject [nama project]
(contoh)=> django-admin startproject app_django

Seharusnya isi dari django yang baru adalah berupa berikut:

3. Buat dan Tulis requirements.txt

Selanjutnya adalah menulis requirements.txt. Disini seharusnya berisi segala depedency yang diperlukan untuk project django kita. Bila belum ada filenya bisa langsung buat filenya saja yang berisi seperti berikut:

4. Tulis Dockerfile

Selanjutnya kamu harus membuat Dockerfile untuk project django kamu. Idenya adalah disini kita perlu ngambil base image dari Docker Hub (dalam kasus ini base imagenya adalah python), kemudian kita berikan command untuk modifikasi agar sesuai kebutuhan.

Supaya bisa paham dengan instruksi pada dockerfile, kamu bisa baca docs buat instruksi dockerfile, namun yang perlu diingat adalah :

  • Baris yang berisi instruksi dimulai dengan keyword tertentu seperti RUN, FROM, COPY, WORKDIR, dll.
  • Baris yang dimulai dengan # adalah komentar.

Berikut adalah isi dari Dockerfile buat project Django kita.

#Mengambil image python versi 3 dari docker hub
FROM python:3
# Set environment variable
ENV PYTHONUNBUFFERED 1
# Set working directory dari container ke /app
WORKDIR /app
# Copy semua file dari local ke container
ADD ./app
# install semua dependency di requirements.txt
RUN pip install -r requirements.txt
#Host Port yang ingin dipakai
EXPOSE 8888
#runserver
CMD [ "python", "./manage.py", "runserver", "0.0.0.0:8000"]

Seharusnya begini hasilnya:

5. Buat Docker Image

Sekarang kita akan membuat docker imagenya, caranya berikan command ini pada cmd di folder project django anda.

docker build -t [nama image yang dinginkan]-f [nama Dockerfile
(contoh)=> docker build -t app_django -f Dockerfile .

Lalu tunggu hingga proses selesai. Proses ini membutuhkan waktu beberapa menit.

Apabila image telah selesai dibuat, kita dapat menggunakan perintah docker images untuk melihat image yang terbentuk.

6. Jalankan Docker Containernya

Di langkah terakhir ini, kita akan mencoba menjalankan Docker Container yang berisi image yang kita buat dengan menuliskan command ini di cmd:

docker run -it -p [Host port]:[Container port][nama image]
(contoh)=> docker run -it -p 8888:8000 app_django

Apabila image tidak bermasalah, maka apabila kita menjalankan url localhost:[Host port] akan menunjukan bahwa aplikasi kita berjalan.

Selamat, anda telah melakukan dockerisasi pada project django anda🎉.

Kesimpulan

Docker merupakan aplikasi yang dapat membantu kita untuk membuat aplikasi kita dapat dijalankan pada mesin apapun dengan membuat container yang berisi file atau data konfigurasi yang diperlukan untuk menjalankan aplikasi. Docker juga merupakan solusi untuk deployment banyak aplikasi dalam satu mesin dengan murah.

Sekian itu saja paparan saya mengenai Docker yang bisa saya bagikan pada artikel ini. Sampai jumpa lagi pada artikel lainnya 👋.

Referensi

--

--

Rendya Yuschak
0 Followers

Pelajar yang sedang belajar cara refaktoring hidupnya sendiri