Pengenalan Docker

Logo docker

Docker sendiri dikembangkan oleh google menggunakan bahasa pemrograman go(lang) dan sudah di rilis sejak tahun 2013 atau 8 tahun yang lalu

Docker adalah aplikasi untuk menyatukan berbagai file software dan pendukungnya dalam sebuah wadah (container) agar memudahkan proses pengembangan software. Docker dengan containernya docker mampu menggantikan peran Virtual Machine

Perbandingan VM dan Container

Dapat dilihat sekilas pada gambar diatas, untuk VM (sebelah kiri) menggunakan Hypervisor dan perlu menginstall OS sendiri agar bisa dipakai untuk menjalankan aplikasinya. Sedangkan pada docker, docker engine menggunakan kernel dari OS untuk kontainerisasi aplikasi-aplikasinya sehingga memakan lebih sedikit memory dibandingkan VM yang memerlukan OS

Docker Untuk Development

Untuk development kita tidak perlu untuk memahami docker secara mendalam. Yang perlu kita siapkan sebelum memulai development di mesin lokal (laptop/desktop) adalah:

  • Docker Engine (Untuk windows wajib windows 10 dan install wsl2).
  • Docker Compose (Untuk windows biasanya sudah terinstall bersama docker desktop).

Untuk memastikan docker terinstall dapat di cek melalui terminal/console dengan menjalankan perintah docker maka akan keluar list bantuan. Begitu juga untuk docker-compose Menjalankan Docker Console

Aplikasi sederhana

Setelah docker-compose kita bisa membuka teks editor (VSCODE paling mantap). Pada contoh disini, kita membuat folder contoh-1/ untuk membuat konfigurasi docker-compose.yml. Isi dari file tadi adalah seperti dibawah ini.

# contoh-1\docker-compose.yml

version: "3.0"

services:
  db:
    image: postgres:14.0
    environment:
      - POSTGRES_USER=admin
      - POSTGRES_PASSWORD=123
    volumes:
      - ./data:/var/lib/postgresql/data

  adminer:
    image: adminer
    ports:
      - 8080:8080

Penjelasan dari file diatas, pada baris pertama kita perlu mendefinisikan versi dari docker compose kita, disarankan untuk menggunakan versi diatas 3.0.
Kemudian pada bagian services, kita menjabarkan aplikasi/container yang mau kita jalankan. disini kita mendefinisikan dua aplikasi yaitu db dan adminer. Container db bertugas untuk menjalankan image postgres versi 14.0 dengan user admin dan password 123. Untuk mencegah data kita hilang, maka pada bagian volumes data postgresql kita simpan pada local machine pada direktori ./data. adminer adalah database viewer sederhana, yang dapat diakses melalui http://localhost:8080 sesuai yang sudah kita atur pada bagian ports.

Untuk menjalankan konfigurasi diatas, arahkan terminal pada direktori contoh-1, kemudian jalankan perintah docker-compose up tunggu hingga selesai. compose up

Buka browser dan http://localhost:8080, pilih koneksi ke postgresql, gunakan user admin dan password 123 untuk bagian database secara default adalah postgres. Maka kita akan masuk ke halaman dashobard adminer adminer

Sampai disini kita berhasil menjalankan Aplikasi Sederhana Kita.

Aplikasi Dengan Source Code

Sebelum memulai pastikan container pada contoh-1 sudah dihentikan

Tentunya ketika mengembangkan aplikasi kita wajib menambahkan/edit/hapus baris kodingan sesuai kebutuhan. Pada contoh kali ini, kita akan membuat aplikasi django. Direktori contoh-2 sudah terinstall django. Mari kita lihat modifikasi apa saja yang perlu dilakukan.

Yang pertama adalah file docker-compose, jika dibandingkan dengan contoh-1 kita menambahkan container web. Pada bagian build adalah lokasi dimana kita menaruh Dockerfile. depends_on menunjukkan container mana yang harus dijalankan terlebih dahulu, disini web menunggu db. command disini adalah perintah yang dijalankan pertamakali oleh kontainer ketika diaktifkan.

# contoh-2/docker-compose.yml

version: "3.0"

services:
  web:
    build: .
    depends_on:
      - db
    volumes:
      - .:/code
    ports:
      - "8000:8000"
    command: python manage.py runserver 0.0.0.0:8000
  db:
    image: postgres:14.0
    volumes:
      - ./data:/var/lib/postgresql/data
    environment:
      - POSTGRES_DB=example
      - POSTGRES_USER=admin
      - POSTGRES_PASSWORD=123

  adminer:
    image: adminer
    ports:
      - 8080:8080
    

Kemudian kita buat file Dockerfile yang bertujuan untuk melakukan kostumisasi image yang akan kita pakai. Dalam kasus ini kita install dependency pada requirements.txt. Dan menjalankan migrasi ke database.

# contoh-2/Dockerfile
FROM python:3.9
ENV PYTHONUNBUFFERED=1

USER root

WORKDIR /code
COPY requirements.txt /code/
RUN pip install -r requirements.txt
COPY . /code/
RUN python3 manage.py makemigrations
RUN python3 manage.py migrate

File requirements.txt

Django==3.0.14
psycopg2==2.8.6

Kemudian pada file django, kita modifikasi file settings.py bagian database untuk menghubungkan dengan PostgreSQL

# docker_example/settings.py
...
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql_psycopg2',
        'NAME': 'example',
        'HOST': 'db',
        'PORT': 5432,
        'USER': 'admin',
        'PASSWORD': '123',
    }
...
}

Setelah langkah diatas selesai, jalankan perintah build

docker-compose build

Tunggu hingga selesai dan jalankan aplikasi kita

docker-compose up

Jika kita membuka adminer http://localhost:8080 maka akan terlihat table dari django sudah terinstall
adminer Kemudian buka http://localhost:8000 untuk melihat aplikasi django kita berjalan dengan normal
django

Link Terkait