Untuk dapat lebih memahami Docker, pada bagian ini kita akan membuat Docker Image sendiri. Agar lebih mudah, di sini aplikasi yang dikontainerisasi dengan Docker adalah HTTP server sederhana yang dibuat menggunakan Python.

1. Membuat HTTP Server Sederhana dengan Python

Untuk aplikasinya sendiri, pertama buat main.py dan isi seperti ini (karena topik bagian ini tentang Docker, kode di bawah bisa langsung di-copas saja).

import os
from http.server import BaseHTTPRequestHandler, HTTPServer

class SimpleHTTPRequestHandler(BaseHTTPRequestHandler):
    def do_GET(self):
        message = f"Halo {TARGET_USER}! Bagaimana kabarnya?".encode('utf-8')

        self.send_response(200)
        self.send_header('Content-type', 'text/html')
        self.end_headers()
        self.wfile.write(message)

def run(server_class=HTTPServer, handler_class=SimpleHTTPRequestHandler):
    server_address = ('', PORT)
    httpd = server_class(server_address, handler_class)
    print(f"Server berjalan di port {PORT}")
    httpd.serve_forever()

if __name__ == '__main__':
    PORT = int(os.environ.get('PORT', 8000))
    TARGET_USER = os.environ.get('TARGET_USER', 'Asep')
    run()

Kode tersebut bisa kita jalankan langsung di komputer yang sudah terinstall Python/Python3, misal di Ubuntu di WSL yang sudah kita install dengan perintah berikut.

python3 main.py

Jika kita pergi ke browser dan menuju http://localhost:8000 kita akan mendapatkan hasil seperti ini.

Untitled

yang berarti HTTP server kita sudah berjalan.

<aside> 🧐 Jika diperhatikan ada dua environment variable yang digunakan di kode yang kita buat di atas, yakni PORT dan TARGET_USER. Kita bisa menambahkannya (agar tidak menjadi default) dengan perintah berikut (misal PORT yang ingin kita gunakan adalah 8080, dan TARGET_USER-nya Budi).

$ export PORT=8080

$ export TARGET_USER=Budi

Tetapi hal ini tidak wajib dilakukan.

</aside>

Selanjutnya, misalkan kita ingin memasang HTTP server ini di tempat lain, misal di laptop lain yang memakai Windows dan tidak ada Python3 di dalamnya, apakah memungkinkan? Inilah salah satu kegunaan dari Docker.

2. Membuat Image HTTP Server Yang Sudah Dibuat

Misalkan di tempat lain memakai OS Windows dan tidak terinstall Python/Python3 tetapi sudah terpasang Docker Engine di dalamnya, jika kita ingin memasang HTTP server yang kita buat di atas, Python/Python3 tidak perlu di-install lagi karena akan “dibungkus” di dalam container yang akan kita buat. Berikut ini cara mengkontainerisasi HTTP server yang sudah kita buat.

di root folder/direktori yang ada main.py buat file Dockerfile (tanpa ekstensi) seperti ini.

# dockerfile
# Base Image
FROM python:3.9-slim

# Set working directory di dalam container
WORKDIR /app

# Salin main.py ke dalam container
COPY main.py .

# Expose port yang digunakan di container
EXPOSE 8000

# Environment variable (meskipun PORT bisa kita ubah, tidak perlu diubah saja)
ENV PORT=8000 \\
    TARGET_USER=Asep

# Eksekusi kode Python ketika container-nya jalan
CMD ["python", "main.py"]

Untuk sedikit penjelasan.