LKSN2021 Modul C – Containerized Python Web Application

Running Python Web Application

  • Use the code Python Web Application in /opt/sample-web to create a Dockerfile
    • Use base image python:3.8-slim
    • Expose port 80
    • Copy all code into workdir.
    • Use /opt/sample-web as workdir inside the container.
    • Save the Dockerfile in /opt/sample-web/Dockerfile
  • Build the Dockerfile into image with name sampleweb:latest
    • Run the application from this image
    • Container Name : sampleweb
    • Configure to Listen in Port 80
  • Push the image to the local registry container with the same name and tag.

Answer

Dockerfile

Pada soal diminta bikin Dockerfile dengan base image python:3.8-slim, workdir /opt/sample-web, dan lokasi Dockerfile pada /opt/sample-web.

Bikin Dockerfile dengan isi berikut:

FROM python:3.8-slim

WORKDIR /opt/sample-web

ENV MYENV=/opt/env/myenv
RUN python3 -m venv $MYENV
ENV PATH="$MYENV/bin:$PATH"

RUN python -m pip install Flask

COPY main.py .

COPY templates templates

EXPOSE 80

CMD ["python", "main.py"]

Penjelasan:

  1. FROM gunanya sebagai base image untuk image yang akan dibuat.
  2. Menetapkan WORKDIR ke /opt/sample-web agar instruksi lainnya langsung mengarah workdir tersebut.
  3. Membuat environment dengan nama MYENV sebagai virtual environment nantinya
  4. Instruksi RUN digunakan untnuk membuat virtual environment dari MYENV yang sudah di set sebelumnya.
  5. Menetapkan environment PATH untuk virtual environment yang sudah dibuat, sama saja seperti export PATH di linux.
  6. Menginstall Flask dengan menggunakan virtual environment yang sudah dibuat tadi.
  7. Mengcopy file dari local directory ke dalam image.
  8. EXPOSE hanya untuk menginformasikan bahwa image tersebut menggunakan port 80, instruksi ini hanya opsional.
  9. Menetapkan default execution python main.py ketika container dijalankan.

Build Image

Kemudian build image dari Dockerfile yang barusan dibikin.

docker build /opt/sample-web/ -t sampleweb

Running Container

Selanjutnya running container dengan menggunakan image sampleweb dengan publish port 80.

docker run -dp 80:8080 --restart unless-stopped --name sampleweb sampleweb

Pada command saya tambahkan –restart unless-stopped agar container running secara otomatis ketika host server booting.

Push Image

Push image ke local registry yang sudah dibuat

docker push localhost:5000/sampleweb:latest

Full Code

Full code dapat dilihat pada git saya https://github.com/f00ds/Competition/tree/main/LKSN/2021/ModulC

Reference

https://docs.docker.com/engine/reference/builder/

https://docs.docker.com/config/containers/start-containers-automatically/

About Rizal Fadil

Leave a Reply

Your email address will not be published. Required fields are marked *