Program
Pengalaman langsung sangat penting untuk menguasai Docker. Docker adalah alat inti dalam pengembangan perangkat lunak dan data science modern, yang memungkinkan Anda membangun, menerapkan, dan mengelola aplikasi dalam container.
Dalam artikel ini, saya memberikan contoh proyek Docker tingkat pemula, menengah, dan lanjutan dengan fokus pada multi-stage builds, optimasi image Docker, dan penerapan Docker dalam data science. Proyek-proyek ini dirancang untuk memperdalam pemahaman Anda tentang Docker dan meningkatkan keterampilan praktis Anda.
Mulai dengan Proyek Docker
Sebelum memulai proyek, pastikan Docker sudah terpasang di komputer Anda. Bergantung pada OS Anda (Windows, macOS, Linux), Anda dapat mengunduh Docker dari situs web resmi Docker.
Anda juga perlu pemahaman dasar tentang:
- Dockerfile (untuk mendefinisikan isi container Anda)
- Docker Compose (untuk aplikasi multi-container)
- Perintah CLI dasar seperti
docker build,docker run,docker-compose up, dll.
Jika Anda perlu menyegarkan pemahaman tentang konsep-konsep di atas, lihat kursus Introduction to Docker atau Containerization and Virtualization Concepts.
Mari mulai!
Proyek Docker untuk Pemula
Saat mulai menggunakan Docker, penting untuk memilih proyek yang sesuai dengan tingkat keterampilan Anda sekaligus menantang Anda mempelajari konsep baru. Berikut beberapa ide proyek untuk memulai:
Proyek 1: Menyiapkan web server sederhana
Dalam proyek ini, Anda akan membuat container Docker yang menjalankan web server dasar menggunakan Nginx. Nginx adalah salah satu web server open-source paling populer untuk reverse proxy, load balancing, dan lainnya. Di akhir proyek ini, Anda akan mempelajari cara membuat dan menjalankan container dengan Docker serta membuka port agar aplikasi dapat diakses dari komputer lokal Anda.
Tingkat kesulitan: Pemula
Teknologi yang digunakan: Docker, Nginx
Langkah-langkah
- Instal Docker: Pastikan Docker terpasang di sistem Anda.
- Buat direktori proyek: Buat folder baru dan file
index.htmldi dalamnya yang akan disajikan oleh Nginx. - Tulis Dockerfile: Dockerfile adalah skrip yang mendefinisikan lingkungan container. Ini memberi tahu Docker image dasar apa yang digunakan, file apa yang disertakan, dan port apa yang diekspos:
FROM nginx:alpine
COPY ./index.html /usr/share/nginx/html
EXPOSE 80
- Bangun image Docker: Masuk ke folder proyek Anda dan bangun image menggunakan:
docker build -t my-nginx-app .
- Jalankan container: Mulai container dan petakan port 80 di container ke port 8080 di mesin Anda:
docker run -d -p 8080:80 my-nginx-app
- Akses web server: Buka browser dan buka http://localhost:8080 untuk melihat halaman yang Anda buat.
Proyek 2: Mendockerisasi skrip Python
Proyek ini melibatkan peng-container-an skrip Python sederhana yang memproses data dari file CSV menggunakan pustaka pandas. Tujuannya adalah mempelajari cara mengelola dependensi dan mengeksekusi skrip Python di dalam container Docker, sehingga skrip menjadi portabel dan dapat dijalankan di lingkungan mana pun.
Tingkat kesulitan: Pemula
Teknologi yang digunakan: Docker, Python, pandas
Langkah-langkah
- Tulis skrip Python: Buat skrip bernama
process_data.pyyang membaca dan memproses file CSV. Berikut contoh skripnya:
import pandas as pd
df = pd.read_csv('data.csv')
print(df.describe())
- Buat file
requirements.txt: File ini mencantumkan pustaka Python yang dibutuhkan skrip. Dalam kasus ini, kita hanya membutuhkanpandas:
pandas
- Tulis Dockerfile: File ini akan mendefinisikan lingkungan untuk skrip Python:
FROM python:3.9-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install -r requirements.txt
COPY . .
CMD ["python", "process_data.py"]
- Bangun image Docker:
docker build -t python-script .
- Jalankan container:
docker run -v $(pwd)/data:/app/data python-script
Proyek 3: Membangun aplikasi multi-container sederhana
Proyek ini akan membantu Anda mengenal Docker Compose dengan membangun aplikasi multi-container. Anda akan membuat aplikasi web sederhana menggunakan Flask sebagai frontend dan MySQL sebagai database backend. Docker Compose memungkinkan Anda mengelola beberapa container yang saling bekerja.
Tingkat kesulitan: Pemula
Teknologi yang digunakan: Docker, Docker Compose, Flask, MySQL
Langkah-langkah
- Tulis aplikasi Flask: Buat aplikasi Flask sederhana yang terhubung ke database MySQL dan menampilkan pesan. Berikut contohnya:
from flask import Flask
import mysql.connector
app = Flask(__name__)
def get_db_connection():
connection = mysql.connector.connect(
host="db",
user="root",
password="example",
database="test_db"
)
return connection
@app.route('/')
def hello_world():
connection = get_db_connection()
cursor = connection.cursor()
cursor.execute("SELECT 'Hello, Docker!'")
result = cursor.fetchone()
connection.close()
return str(result[0])
if __name__ == "__main__":
app.run(host='0.0.0.0')
- Buat file
docker-compose.yml: Docker Compose mendefinisikan dan menjalankan aplikasi Docker multi-container. Dalam file ini, Anda akan mendefinisikan layanan aplikasi Flask dan database MySQL:
version: '3'
services:
db:
image: mysql:5.7
environment:
MYSQL_ROOT_PASSWORD: example
MYSQL_DATABASE: test_db
ports:
- "3306:3306"
volumes:
- db_data:/var/lib/mysql
web:
build: .
ports:
- "5000:5000"
depends_on:
- db
environment:
FLASK_ENV: development
volumes:
- .:/app
volumes:
db_data:
- Tulis Dockerfile untuk Flask: Ini akan membuat image Docker untuk aplikasi Flask:
FROM python:3.9-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install -r requirements.txt
COPY . .
CMD ["python", "app.py"]
- Bangun dan jalankan container: Gunakan Docker Compose untuk menyalakan seluruh aplikasi:
docker-compose up --build
- Akses aplikasi Flask: Buka http://localhost:5000 di browser Anda.
Proyek Docker Tingkat Menengah
Proyek berikut ditujukan bagi mereka yang telah memahami dasar-dasar Docker dengan baik. Proyek ini akan memperkenalkan konsep yang lebih kompleks, seperti multi-stage builds dan teknik optimasi.
Proyek 4: Multi-stage build untuk aplikasi Node.js
Multi-stage builds membantu mengurangi ukuran image Docker dengan memisahkan lingkungan build dan runtime. Dalam proyek ini, Anda akan mengcontainerkan aplikasi Node.js menggunakan multi-stage builds.
Tingkat kesulitan: Menengah
Teknologi yang digunakan: Docker, Node.js, Nginx
Langkah-langkah
- Buat aplikasi Node.js sederhana: Tulis server Node.js dasar yang mengembalikan pesan sederhana. Berikut contohnya:
const express = require('express');
const app = express();
app.get('/', (req, res) => res.send('Hello from Node.js'));
app.listen(3000, () => console.log('Server running on port 3000'));
- Tulis Dockerfile dengan multi-stage build: Tahap pertama membangun aplikasi, dan tahap kedua menjalankan aplikasi dengan image dasar yang lebih ringan.
# Stage 1: Build
FROM node:14 as build-stage
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
# Add the following line if there's a build step for the app
# RUN npm run build
# Stage 2: Run
FROM node:14-slim
WORKDIR /app
COPY --from=build-stage /app .
EXPOSE 3000
ENV NODE_ENV=production
CMD ["node", "server.js"]
- Bangun image:
docker build -t node-multi-stage .
- Jalankan container:
docker run -p 3000:3000 node-multi-stage
Proyek 5: Mendockerisasi model machine learning dengan TensorFlow
Proyek ini akan melibatkan peng-container-an model machine learning menggunakan TensorFlow. Tujuannya adalah membuat lingkungan portabel di mana Anda dapat menjalankan model TensorFlow di berbagai sistem tanpa khawatir tentang pengaturan dasar.
Tingkat kesulitan: Menengah
Teknologi yang digunakan: Docker, TensorFlow, Python
Langkah-langkah
- Instal TensorFlow dalam skrip Python: Buat skrip Python
model.pyyang memuat dan menjalankan model TensorFlow pre-trained:
import tensorflow as tf
model = tf.keras.applications.MobileNetV2(weights='imagenet')
print("Model loaded successfully")
- Tulis Dockerfile: Definisikan lingkungan untuk TensorFlow di dalam Docker:
FROM tensorflow/tensorflow:latest
WORKDIR /app
COPY . .
CMD ["python", "model.py"]
- Bangun image:
docker build -t tensorflow-model .
- Jalankan container:
docker run tensorflow-model
Proyek 6: Membuat lingkungan data science dengan Jupyter dan Docker
Proyek ini berfokus pada pembuatan lingkungan data science yang reprodusibel menggunakan Docker dan Jupyter notebook. Lingkungan ini akan mencakup pustaka Python populer seperti pandas, NumPy, dan scikit-learn.
Tingkat kesulitan: Menengah
Teknologi yang digunakan: Docker, Jupyter, Python, scikit-learn
Langkah-langkah
- Buat file
docker-compose.yml: Definisikan layanan Jupyter Notebook dan pustaka yang diperlukan. Berikut contohnya:
version: '3'
services:
jupyter:
image: jupyter/scipy-notebook
ports:
- "8888:8888"
volumes:
- ./notebooks:/home/joelwembo/work
- Mulai Jupyter Notebook: Gunakan Docker Compose untuk memulai Jupyter Notebook.
docker-compose up
- Akses Jupyter Notebook: Buka browser Anda dan pergi ke http://localhost:8888.
Proyek Docker Tingkat Lanjutan
Proyek tingkat lanjutan ini akan berfokus pada aplikasi dunia nyata dan konsep Docker tingkat lanjut, seperti pipeline deep learning dan pipeline data otomatis.
Proyek 7: Mengurangi ukuran image Docker untuk aplikasi Python
Dalam proyek ini, Anda akan mengoptimalkan image Docker untuk aplikasi Python dengan menggunakan image dasar minimal seperti Alpine Linux dan menerapkan multi-stage builds agar ukuran image sekecil mungkin.
Tingkat kesulitan: Lanjutan
Teknologi yang digunakan: Docker, Python, Alpine Linux
Langkah-langkah
- Tulis skrip Python: Buat skrip yang menganalisis data menggunakan pandas. Berikut contoh skripnya:
import pandas as pd
df = pd.read_csv('data.csv')
print(df.head())
- Optimalkan Dockerfile: Gunakan multi-stage builds dan Alpine Linux untuk membuat image ringan.
# Stage 1: Build stage
FROM python:3.9-alpine as build-stage
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY script.py .
# Stage 2: Run stage
FROM python:3.9-alpine
WORKDIR /app
COPY --from=build-stage /app/script.py .
CMD ["python", "script.py"]
- Bangun image:
docker build -t optimized-python-app .
Proyek 8: Mendockerisasi pipeline deep learning dengan PyTorch
Proyek ini melibatkan peng-container-an pipeline deep learning menggunakan PyTorch. Fokusnya adalah mengoptimalkan Dockerfile untuk kinerja dan ukuran, sehingga mudah menjalankan model deep learning di berbagai lingkungan.
Tingkat kesulitan: Lanjutan
Teknologi yang digunakan: Docker, PyTorch, Python
Langkah-langkah
- Instal PyTorch dalam skrip Python: Buat skrip yang memuat model PyTorch pre-trained dan melakukan inferensi. Berikut contohnya:
import torch
model = torch.hub.load('pytorch/vision', 'resnet18', pretrained=True)
print("Model loaded successfully")
- Tulis Dockerfile: Definisikan lingkungan untuk PyTorch:
FROM pytorch/pytorch:1.9.0-cuda11.1-cudnn8-runtime
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY model.py .
CMD ["python", "model.py"]
- Bangun image:
docker build -t pytorch-model .
- Jalankan container:
docker run pytorch-model
Proyek 9: Mengotomatisasi pipeline data dengan Apache Airflow dan Docker
Dalam proyek ini, Anda akan menyiapkan dan mengcontainerkan lingkungan Apache Airflow untuk mengotomatisasi pipeline data. Apache Airflow adalah alat populer untuk mengorkestrasi workflow kompleks yang banyak digunakan dalam rekayasa data.
Tingkat kesulitan: Lanjutan
Teknologi yang digunakan: Docker, Apache Airflow, Python, PostgreSQL
Langkah-langkah
- Buat file
docker-compose.yml: Definisikan layanan Airflow dan database PostgreSQL:
version: '3'
services:
postgres:
image: postgres:latest
environment:
POSTGRES_USER: airflow
POSTGRES_PASSWORD: airflow
POSTGRES_DB: airflow
ports:
- "5432:5432"
volumes:
- postgres_data:/var/lib/postgresql/data
webserver:
image: apache/airflow:latest
environment:
AIRFLOW__CORE__SQL_ALCHEMY_CONN: postgresql+psycopg2://airflow:airflow@postgres/airflow
AIRFLOW__CORE__EXECUTOR: LocalExecutor
depends_on:
- postgres
ports:
- "8080:8080"
volumes:
- ./dags:/opt/airflow/dags
command: ["webserver"]
scheduler:
image: apache/airflow:latest
environment:
AIRFLOW__CORE__SQL_ALCHEMY_CONN: postgresql+psycopg2://airflow:airflow@postgres/airflow
AIRFLOW__CORE__EXECUTOR: LocalExecutor
depends_on:
- postgres
- webserver
volumes:
- ./dags:/opt/airflow/dags
command: ["scheduler"]
volumes:
postgres_data:
- Mulai lingkungan Airflow: Gunakan Docker Compose untuk menyalakan lingkungan Airflow:
docker-compose up
- Akses UI Airflow: Buka browser Anda dan pergi ke http://localhost:8080.
Proyek 10: Mendeploy API data science dengan FastAPI dan Docker
Bangun dan deploy API data science menggunakan FastAPI. Anda akan mengcontainerkan API menggunakan Docker dan berfokus pada pengoptimalannya untuk lingkungan produksi.
Tingkat kesulitan: Lanjutan
Teknologi yang digunakan: Docker, FastAPI, Python, scikit-learn
Langkah-langkah
- Tulis aplikasi FastAPI: Buat API sederhana yang menggunakan model machine learning untuk prediksi. Berikut contohnya:
from fastapi import FastAPI
import pickle
app = FastAPI()
with open("model.pkl", "rb") as f:
model = pickle.load(f)
@app.post("/predict/")
def predict(data: list):
return {"prediction": model.predict(data)}
- Tulis Dockerfile: Buat Dockerfile yang mendefinisikan lingkungan untuk FastAPI:
FROM python:3.9-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install -r requirements.txt
COPY . .
CMD ["uvicorn", "app:app", "--host", "0.0.0.0", "--port", "8000"]
- Bangun image:
docker build -t fastapi-app .
- Jalankan container:
docker run -p 8000:8000 fastapi-app
Tips untuk Mengerjakan Proyek Docker
Saat Anda mengerjakan proyek-proyek ini, ingat tips berikut:
- Mulai dari yang kecil: Mulailah dengan proyek yang sedikit menantang, lalu beralih ke tugas yang lebih kompleks. Membangun kepercayaan diri melalui tugas yang lebih sederhana itu penting.
- Dokumentasikan kemajuan Anda: Simpan catatan rinci proyek Anda untuk melacak pembelajaran dan sebagai referensi untuk upaya di masa depan.
- Bergabung dengan komunitas Docker: Ikuti forum daring dan meetup lokal untuk berbagi pengalaman, bertanya, dan belajar dari orang lain.
- Bereksperimen dan kustomisasi: Jangan ragu mengutak-atik proyek, mencoba pendekatan berbeda, dan mengeksplorasi fitur Docker baru.
- Terus belajar: Lanjutkan memperluas pengetahuan Docker Anda dengan mengeksplorasi topik dan alat tingkat lanjut seperti Kubernetes, Docker Swarm, atau arsitektur microservices.
Kesimpulan
Menguasai Docker bukan hanya soal mempelajari perintah dan konfigurasi. Ini tentang memahami bagaimana Docker cocok dalam pengembangan aplikasi modern, alur kerja data science, dan manajemen infrastruktur.
Proyek-proyek yang saya bagikan dalam panduan ini memberikan beberapa ide untuk membangun keterampilan dasar dan pengalaman langsung yang dibutuhkan agar akhirnya unggul dalam skenario dunia nyata.
Pada tahap ini, saya menyarankan memperkuat pengetahuan Anda dengan mengikuti kursus berikut:
FAQs
Apa praktik terbaik untuk menulis Dockerfile yang efisien?
Praktik terbaik untuk menulis Dockerfile yang efisien mencakup meminimalkan jumlah layer dengan menggabungkan perintah, menggunakan multi-stage builds untuk mengurangi ukuran image, memilih image dasar yang ringan, melakukan cache dependensi, dan menghindari menyertakan file yang tidak diperlukan dalam image final.
Apa itu multi-stage build dalam Docker?
Multi-stage build adalah metode untuk mengoptimalkan image Docker dengan memisahkan lingkungan build dan runtime. Ini menghasilkan image yang lebih kecil dan lebih aman.
Bagaimana cara mengurangi ukuran image Docker?
Gunakan image dasar minimal, kelola dependensi secara efisien, dan terapkan multi-stage builds untuk mengurangi ukuran image dan meningkatkan kinerja.
Bagaimana cara memecahkan kesalahan umum saat membangun image Docker?
Kesalahan umum saat membangun image Docker mencakup masalah perizinan, sintaks Dockerfile yang salah, dan kegagalan instalasi dependensi. Untuk pemecahan masalah, periksa log build Docker, pastikan Anda menggunakan image dasar yang benar, dan konfirmasi bahwa jalur atau izin file sudah diatur dengan benar. Alat seperti docker build --no-cache dapat membantu mengidentifikasi masalah caching.
Bisakah saya menggunakan Docker dengan Kubernetes untuk proyek-proyek ini?
Ya, setelah Anda nyaman dengan Docker, Kubernetes dapat menjadi langkah berikutnya. Kubernetes membantu mengelola aplikasi tercontainer dalam skala besar. Anda dapat mendeploy proyek Docker Anda di klaster Kubernetes untuk mengelola banyak instance, menangani penskalaan, dan mengotomatisasi deployment.
Apa saja praktik terbaik untuk mengelola volume Docker dan data persisten?
Saat bekerja dengan volume Docker, penting untuk menggunakan named volume untuk memastikan persistensi data saat container dimulai ulang. Secara berkala lakukan backup volume Anda dan pantau potensi bottleneck kinerja akibat I/O disk. Hindari menyimpan data sensitif langsung di container; gunakan solusi penyimpanan yang aman atau database eksternal.
Apa tujuan direktif ENTRYPOINT dalam Dockerfile?
Direktif ENTRYPOINT dalam Dockerfile menentukan perintah yang selalu dijalankan saat container dimulai. Ini memungkinkan container diperlakukan seperti executable, di mana argumen dapat diteruskan saat runtime, sehingga meningkatkan fleksibilitas.
Apa perbedaan antara CMD dan ENTRYPOINT dalam Dockerfile?
Baik CMD maupun ENTRYPOINT menentukan perintah yang dijalankan saat container dimulai. Namun, CMD menyediakan argumen default yang dapat ditimpa, sedangkan ENTRYPOINT mendefinisikan perintah yang selalu berjalan. ENTRYPOINT berguna untuk membuat container yang bertindak seperti executable, sementara CMD lebih fleksibel untuk menentukan perintah default.
Arsitek Solusi Cloud Bersertifikat AWS, DevOps, dan Cloud Engineer dengan pemahaman mendalam tentang arsitektur dan konsep ketersediaan tinggi. Saya memiliki pengetahuan di bidang rekayasa cloud dan DevOps serta mahir memanfaatkan sumber daya open-source untuk menjalankan aplikasi tingkat perusahaan. Saya membangun aplikasi berbasis cloud menggunakan AWS, AWS CDK, AWS SAM, CloudFormation, Serverless Framework, Terraform, dan Django.

