Skip to content

G. Docker Compose

ilhamsakti27 edited this page Oct 16, 2023 · 2 revisions

Docker Compose merupakan tool yang digunkan untuk mendefinisikan dan menjalankan aplikasi yang terdiri dari beberapa container secara sekaligus menggunakan file YAML. Docker Compose mempermudah dalam mengelola aplikasi yang terdiri dari berbagai layanan yang harus berinteraksi satu sama lain. Docker Compose berjalan di semua lingkungan; production, staging, development, pengujian, serta CI workflows. Docker Compose juga memiliki perintah untuk mengelola seluruh siklus hidup aplikasi:

  • Start, stop, dan rebuild service.
  • Melihat status layanan yang sedang berjalan.
  • Stream log output dari layanan yang sedang berjalan.
  • Menjalankan perintah satu kali pada sebuah layanan.

Contoh Implementasi

Step 1: Define the application dependencies

  1. Membuat direktori composetest:

    mkdir composetest
    cd composetest
    
  2. Buat file bernama app.pydi direktori proyek dan copy kode berikut:

    import time
    
    import redis
    from flask import Flask
    
    app = Flask(__name__)
    cache = redis.Redis(host='redis', port=6379)
    
    def get_hit_count():
        retries = 5
        while True:
            try:
                return cache.incr('hits')
            except redis.exceptions.ConnectionError as exc:
                if retries == 0:
                    raise exc
                retries -= 1
                time.sleep(0.5)
    
    @app.route('/')
    def hello():
        count = get_hit_count()
        return 'Hello World! I have been seen {} times.\n'.format(count)

    Dalam contoh ini, redisadalah nama host container redis di jaringan aplikasi. Port default Redis adalah 6379.

  3. Buat file requirements.txtdi direktori proyek Anda dan tempelkan kode berikut di:

    flask
    redis
    

Step 2: Create a Dockerfile

Buat Docker Image menggunakan Dockerfile.

# syntax=docker/dockerfile:1
FROM python:3.7-alpine
WORKDIR /code
ENV FLASK_APP=app.py
ENV FLASK_RUN_HOST=0.0.0.0
RUN apk add --no-cache gcc musl-dev linux-headers
COPY requirements.txt requirements.txt
RUN pip install -r requirements.txt
EXPOSE 5000
COPY . .
CMD ["flask", "run"]

Keterangan:

  • Build image dengan base image Python 3.7.
  • Set working direktori ke /code.
  • Set environment variables yang digunakan oleh perintah flask .
  • Install gcc dan dependensi lainnya.
  • Copy requirements.txt and install Python dependensi.
  • Menambahkan port 5000
  • Copy direktori saat ini . ke dalam working direktori image.
  • Set default command untuk container untuk flask run.

Step 3: Define services in a Compose file

Buat sebuah file bernama compose.yaml di direktori proyek Anda dan paste kode berikut:

services:
  web:
    build: .
    ports:
      - "8000:5000"
  redis:
    image: "redis:alpine"

File compose ini berisi dua layanan, yaitu web dan redis.

web services menggunakan Image yang dibuat dari file Dockerfile di direktori saat ini. Lalu, ia bind container dan host machine ke port 8000. Pada contoh ini menggunakan port default untuk server web Flask, 5000.

redis services menggunakan public Redis Image.

Step 4: Build and run your app with Compose

  1. Start aplikasi dengan menjalankan perintah.

    docker compose up
    
  2. Cek pada browser untuk melihat aplikasi yang sedang berjalan. http://localhost:8000/ atau http://127.0.0.1:8000 docker compose

Clone this wiki locally