Hallo guys, setelah kita mengetahui tentang dasar2 flask disini dan docker disini. sekarang saatnya kita mencoba mengimplementasikan flask ke dalam docker.
Mengapa docker? Sebagaimana kita ketahui, docker adalah mini virtual box (pendapat pribadi). Dengan docker kita mencoba membuat environment development layaknya environment production. Harapannya setelah proses development selesai, tidak ada lagi hambatan di proses deploying ke server productionnya.
Contoh paling nyata keuntungan menggunakan docker adalah jika kita develop web app di windows sedangkan server production di linux. Seringkali terjadi error di production, padahal di development lancar2 saja. Yak, masalahnya adalah case-sensitif. Di windows tidak case-sensitif, sedangkan di linux berlaku case sensitif. Problem seperti ini dapat dihindari jika kita menggunakan docker.
Langsung saja, pada artikel ini kita akan membuat web untuk menghitung jumlah akses pada sebuah halaman menggunakan flask dan redis.
Implementasi app Flask untuk menghitung pageview
Sebelum masuk ke materi docker, terlebih dahulu kita buat appnya. Lakukan langkah2 berikut:
- buat project di pycharm dengan nama web_counter
- buat python package dengan nama web_app
- buat file app.py dan tambahkan kode berikut
from flask import Flask
from redis import Redis
def create_app():
app = Flask(__name__)
redis = Redis(host='redis', port=6379)
@app.route('/')
def index():
redis.incr('hits')
return 'This page has been viewed %s time(s).' % redis.get('hits')
return app
Pada kode diatas kita tidak menggunakan app.run() karena flask app nya akan dijalankan menggunakan gunicorn.
Implementasi Flask menggunakan docker
Untuk mengimplementasikan flask dengan docker, kita perlu membuat file requirements.txt untuk menyimpan package2 python, file Dockerfile untuk mendifinisikan langkah2 upload ke docker dan file docker-compose.yml untuk meregister service yang disediakan oleh docker.
Lebih detail, berikut langkah2 yang perlu dilakukan:
- buat file requirements.txt dibawah direktori proyek
- isikan baris berikut
flask redis gunicorn
- buat file Dockerfile
- isikan baris kode berikut
FROM python:3 MAINTAINER choirul ihwan <[email protected]> ENV INSTALL_PATH /web_app RUN mkdir -p $INSTALL_PATH WORKDIR $INSTALL_PATH COPY requirements.txt requirements.txt RUN pip install -r requirements.txt COPY . . CMD gunicorn -b 0.0.0.0:8000 --access-logfile - "web_app.app_redis:create_app()"
- buat file docker-compose.yml
- isikan baris berikut
version: '2'
services:
web:
build: .
command: >
gunicorn -b 0.0.0.0:8000
--access-logfile -
--reload
"web_app.app_redis:create_app()"
environment:
PYTHONUNBUFFERED: 'true'
ports:
- "80:8000"
volumes:
- '.:/web_app'
depends_on:
- redis
redis:
image: redis
- Untuk menjalankan docker diatas, jalankan perintah berikut
sudo docker-compose up --build
- jika berhasil, akan muncul tampilan seperti berikut
- untuk melihat hasilnya, kita bisa membuka chrome dan akses ke localhost
Selamat, flask dengan docker sudah berhasil kita jalankan. Happy programming 🙂
Fullstack Developer yang tinggal di yogyakarta. Suka eksplorasi hal baru yang berhubungan dengan pemrograman dan ilmu keislaman. Berpengalaman dalam pemrograman PHP, Delphi dan sedang upgrade skill dengan python. Just as simple that.