Yunindyo Prabowo

Wanna Be a Pythonist

Dockerize Dash Application

2021-06-26 yunindyo prabowopythondashdata engineerdata scientistdockerdocker-composegunicorn

Hello guys, melanjutkan tutorial mengenai Dash untuk membuat website data visualisasi, kita akan membungkus aplikasi kita kedalam container docker untuk tahap production di real world. Silahkan untuk mendownload source codenya dan masuk kedalam folder dash-bootstrap-docker, Untuk menjalankan tanpa docker, gunakan perintah,

python index.py

Pada kesempatan ini, saya akan menjelaskan bagaimana menggunakan gunicorn dan juga docker pada aplikasi dash.

Persiapan Instalasi Docker dan Docker-Compose

Pastikan docker dan docker-compose telah terinstall pada perangkat kalian, jika belum dapat menginstallnya dengan panduan berikut, Instalasi docker lalu dilanjutkan dengan instalasi docker-compose

Instalasi gunicorn

Untuk webserver, kita akan menggunakan gunicorn sebagai pengganti flask development server yang secara default sudah terkonfigurasi saya kita menjalankan perintah python index.py. Instalasi gunicorn dapat dilakukan dengan perintah,

pip install gunicorn

Dockerize the App

Kita akan membuat dockerfile dengan isi sebagai berikut :

FROM python:3.9
LABEL maintainer "Yunindyo Prabowo <yunindyo.prabowo@gmail.com>"
WORKDIR /code
COPY requirements.txt /
RUN pip install -r /requirements.txt
COPY ./ ./
ENV ENVIRONMENT_FILE=".env"

EXPOSE 8050
ENTRYPOINT ["gunicorn", "--config", "gunicorn_config.py", "index:server"]

Karena aplikasi akan disajikan dengan gunicorn sebagai webserver, maka kita perlu membuat gunicorn_config.py dengan isi sebagai berikut :

bind = "0.0.0.0:8050"
workers = 4
threads = 4
timeout = 120

Didalam docker image, host harus bernilai 0.0.0.0, selain itu maka tidak dapat diakses dari local host ataupun host yang telah didefinisikan.

kita juga perlu mendifisikan file Procfile :

web: gunicorn index:server

Dapat dilihat kita akan menjalankan server flask seperti yang telah didefinisikan pada file app.py dari entypoint index.py.

Kita juga perlu mendifisikan file docker-compose.yml untuk memudahkan kita mem-build image dan menjalankan Docker image,

version: "3.7"

#
services:
  dash-bootstrap:
    build:
      context: .
    container_name: dash-bootstrap
    ports:
      - "8050:8050"
    networks:
      - dash-bootstrap-networks
    #   devnet:
    #     external:
    #       name: development
    restart: unless-stopped

networks:
  dash-bootstrap-networks:
    driver: bridge

Kemudian kita build dari terminal dengan perintah berikut :

docker-compose up -d --build

Tunggu hingga prosesnya selesai kemudian buka 127.0.0.1:8050

Dan taraaa, kita telah berhasil mendeploy Aplikasi dash kita menggunakan docker.