Pengenalan Docker
Docker merupakan platform kontainerisasi yang memungkinkan kita untuk mengemas aplikasi beserta dependensinya ke dalam satu wadah (kontainer) yang bisa dijalankan pada berbagai environment. Dengan adanya docker, developer menjadi dipermudah dalam membuat, menguji dan menyebarkan aplikasi yang dibuat dengan lebih konsisten. Manfaat-manfaat dari penggunaan docker antara lain:
Portabilitas: Aplikasi yang dikemas dalam kontainer Docker dapat dijalankan di berbagai environment termasuk di mesin lokal, server, dan cloud.
Isolasi: Kontainer Docker berjalan dalam isolated environment, artinya dipastikan bahwa aplikasi dan dependensinya tidak saling bertabrakan.
Efisiensi: Kontainer menggunakan resource jauh lebih efisien dibandingkan dengan VMs, karena mereka tidak melakukan instalasi sistem operasi di setiap kontainer.
Kemudahan Pengelolaan: Docker menyediakan alat untuk mengelola siklus hidup container, termasuk pembuatan, penyebaran, dan penghapusan.
Dockerfile
Dockerfile adalah file teks yang berisikan sejumlah instruksi untuk membuat image Docker. Instruksi di dalam Dockerfile akan menentukan bagaimana nantinya konfigurasi suatu environment di dalam container, dari aplikasi saja yang harus diinstal, dan bagaimana aplikasi tersebut harus dijalankan. Ibarat suatu resep masakan, yang mana di dalamnya terdapat bahan-bahan dan langkah yang harus diikuti untuk membuat masakan tersebut. Begitu pula dengan Dockerfile, yang mana isinya adalah bahan dan langkah yang harus diikuti untuk membuat suatu image docker. Untuk membangun image docker, Dockerfile memiliki berbagai instruksi yang bisa dijalankan. Berikut adalah beberapa instruksi dasar dalam Dockerfile:
FROM: Menentukan base image yang akan digunakan.
WORKDIR: Menentukan direktori kerja di dalam container.
COPY: Menyalin file dari host ke container.
RUN: Menjalankan perintah di dalam container selama proses build.
CMD: Menentukan perintah yang dijalankan ketika container mulai berjalan.
LABEL: Menambahkan metadata ke image Docker.
ADD: Menyalin file dari host atau URL ke container.
FROM
Instruksi FROM
digunakan untuk menentukan base image yang akan digunakan sebagai dasar untuk membangun image baru. Base image adalah titik awal untuk membangun image kita.
Contoh:
FROM python:3.9
Instruksi di atas berarti kita akan menggunakan image Python versi 3.9 sebagai dasar untuk membangun image baru. Base image ini sudah berisi instalasi Python 3.9.
WORKDIR
Instruksi WORKDIR
menetapkan direktori kerja di dalam container. Semua instruksi berikutnya dalam Dockerfile akan dieksekusi relatif terhadap direktori ini.
Contoh:
WORKDIR /code
Dalam instruksi di atas, direktori kerja ditetapkan ke path /code
. Sehingga seluruh perintah nantinya bakal dijalankan di dalam direktori ini.
COPY
Instruksi COPY
digunakan untuk menyalin file atau direktori dari host (komputer lokal Anda) ke image Docker.
Contoh:
COPY requirements.txt /code/
Instruksi di atas menyalin file requirements.txt
dari direktori saat ini di host ke direktori /code/
di dalam image Docker.
RUN
Instruksi RUN
digunakan untuk menjalankan perintah di dalam container selama proses build. Biasanya digunakan untuk menginstal dependensi atau menjalankan skrip konfigurasi.
Contoh:
RUN pip install -r requirements.txt
Instruksi di atas menjalankan perintah pip install -r requirements.txt
di dalam container untuk menginstal semua dependensi yang tercantum dalam file requirements.txt
.
CMD
Instruksi CMD
digunakan untuk menentukan perintah default yang akan dijalankan ketika container mulai berjalan.
Contoh:
CMD ["python", "manage.py", "runserver", "0.0.0.0:8000"]
Instruksi di atas menentukan bahwa perintah python
manage.py
runserver 0.0.0.0:8000
akan dijalankan ketika container mulai berjalan. Perintah ini akan menjalankan server pengembangan Django pada alamat 0.0.0.0
dan port 8000
.
LABEL
Instruksi LABEL
digunakan untuk menambahkan metadata ke image Docker. Metadata ini dapat digunakan untuk memberikan informasi tambahan tentang image, seperti pemelihara (maintainer) image tersebut.
Contoh:
LABEL maintainer="your-email@example.com"
Instruksi di atas menambahkan label maintainer
dengan nilai your-email@example.com
ke image Docker.
ADD
Instruksi ADD
digunakan untuk menyalin file atau direktori dari host atau URL ke container. ADD
juga dapat mendeteksi dan mengekstrak arsip (seperti file .tar
).
Contoh:
ADD . /code
Instruksi di atas menyalin semua file dan direktori dari direktori saat ini di host ke direktori /code
di dalam image Docker.
COPY Instruction
Instruksi COPY
juga digunakan untuk menyalin file atau direktori dari host ke container. Namun, tidak seperti ADD
, COPY
hanya mendukung penyalinan dari sistem file host.
Contoh:
COPY requirements.txt /code/
Instruksi di atas menyalin file requirements.txt
dari direktori saat ini di host ke direktori /code/
di dalam image Docker.
Contoh Dockerfile Lengkap
Berikut adalah contoh Dockerfile lengkap untuk aplikasi Django:
# Gunakan image python sebagai base
FROM python:3.9
# Set working directory
WORKDIR /code
# Salin file requirements.txt
COPY requirements.txt /code/
# Install dependencies
RUN pip install -r requirements.txt
# Salin kode aplikasi
COPY . /code/
# Set environment variable
ENV DJANGO_SETTINGS_MODULE=todoproject.settings
# Jalankan server
CMD ["python", "manage.py", "runserver", "0.0.0.0:8000"]
Penjelasan:
FROM python:3.8: Menggunakan image Python versi 3.8 sebagai dasar.
WORKDIR /code: Menetapkan direktori kerja ke
/code
.COPY requirements.txt /code/: Menyalin file
requirements.txt
dari host ke container.RUN pip install -r requirements.txt: Menginstal semua dependensi yang tercantum dalam file
requirements.txt
.COPY . /code/: Menyalin semua file dan direktori dari host ke container.
ENV DJANGO_SETTINGS_MODULE=todoproject.settings: Menetapkan variabel lingkungan
DJANGO_SETTINGS_MODULE
ketodoproject.settings
.CMD ["python", "manage.py", "runserver", "0.0.0.0:8000"]: Menjalankan perintah untuk memulai server pengembangan Django.
Docker Compose
Docker Compose adalah tool yang digunakan untuk mendefinisikan dan menjalankan beberapa container Docker. Docker Compose memungkinkan kita untuk mendefinisikan dan mengelola aplikasi multi-container. Dengan menggunakan file konfigurasi YAML, kita bisa mendefinisikan layanan, jaringan, dan volume yang dibutuhkan oleh aplikasi kita.
Menginstall Docker Compose
Docker Compose merupakan bagian terpisah dari Docker yang perlu diinstal secara terpisah. Namun, di dalam versi Docker terbaru, Docker Compose sudah termasuk dalam instalasi Docker Desktop. Untuk memeriksa apakah Docker Compose sudah terinstal, kita bisa menjalankan perintah berikut:
docker-compose --version
Kita juga bisa menggunakan perintah docker compose --version
(tanpa tanda -
). Namun pada artikel ini kita akan menggunakan docker-compose
.
File Konfigurasi
File konfigurasi Docker Compose memiliki format YAML yang berisi definisi layanan, jaringan, dan volume. Nama default untuk file konfigurasi ini adalah docker-compose.yml
.
YAML
YAML (YAML Ain't Markup Language) adalah bahasa serialisasi data yang digunakan untuk menulis file konfigurasi. YAML mirip dengan JSON tetapi lebih mudah dibaca dan ditulis oleh manusia.
Contoh sederhana file YAML:
version: '3.8'
services:
web:
build: .
command: python manage.py runserver 0.0.0.0:8000
volumes:
- .:/code
ports:
- "8000:8000"
depends_on:
- db
db:
image: postgres:latest
environment:
POSTGRES_DB: tododb
POSTGRES_USER: postgres
POSTGRES_PASSWORD: password
Membuat Container
Untuk membuat container dengan Docker Compose, kita bisa menggunakan perintah docker-compose up
. Perintah ini akan membangun image dan menjalankan container berdasarkan definisi di file docker-compose.yml
.
Menjalankan Container
Untuk menjalankan container, kita bisa menggunakan perintah berikut:
docker-compose up
Melihat Container
Untuk melihat status container yang dikelola oleh Docker Compose, kita bisa menggunakan perintah:
docker-compose ps
Menghentikan Container
Untuk menghentikan container, kita bisa menggunakan perintah:
docker-compose stop
Menghapus Container
Untuk menghentikan dan menghapus semua container, jaringan, dan volume yang terkait, gunakan perintah:
docker-compose down
Project Name
Nama proyek Docker Compose secara default diambil dari nama direktori tempat file docker-compose.yml
berada. Kita bisa mengganti nama proyek dengan menggunakan opsi -p
pada perintah Docker Compose.
docker-compose -p myproject up
Kesimpulan
Dockerfile dan Docker Compose merupakan tool yang sangat berguna untuk mengelola aplikasi berbasis container. Dockerfile memungkinkan kita untuk mendefinisikan environment dan dependensi aplikasi kita ke dalam satu file, sedangkan Docker Compose memudahkan pengelolaan aplikasi multi-container. Dengan memahami dan menggunakan kedua tool ini, kita bisa membangun, mengelola, dan menjalankan aplikasi kita dengan lebih efisien dan konsisten.