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:
- FROM gunanya sebagai base image untuk image yang akan dibuat.
- Menetapkan WORKDIR ke /opt/sample-web agar instruksi lainnya langsung mengarah workdir tersebut.
- Membuat environment dengan nama MYENV sebagai virtual environment nantinya
- Instruksi RUN digunakan untnuk membuat virtual environment dari MYENV yang sudah di set sebelumnya.
- Menetapkan environment PATH untuk virtual environment yang sudah dibuat, sama saja seperti export PATH di linux.
- Menginstall Flask dengan menggunakan virtual environment yang sudah dibuat tadi.
- Mengcopy file dari local directory ke dalam image.
- EXPOSE hanya untuk menginformasikan bahwa image tersebut menggunakan port 80, instruksi ini hanya opsional.
- 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/
ada pembahasan yang bagian running normal service ngga ya