2021.04.08

2 bước đơn giản để chạy một chương trình Flask Python trên docker

2 bước đơn giản để chạy một chương trình Flask Python trên docker

Flask là một Framework web của Python nhưng là một Micro-framework bởi nó chỉ có phần khung cơ bản, các phần còn lại cho phép người dùng tùy chọn mà đắp vào, không yêu cầu các công cụ hoặc thư viện cụ thể. Được phát triển bởi Armin Ronacher, người dẫn đầu Pocco – một nhóm những người đam mê Python quốc tế. Flask phát triển dựa trên bộ công cụ Werkzeug WSGI, Jinja2  và cả hai đều là các dự án của Pocco.

Flask cho phép bạn xây dựng các ứng dụng web từ đơn giản tới phức tạp. Nó có thể xây dựng các api nhỏ, ứng dụng web chẳng hạn như các trang web, blog, trang wiki hoặc một website dựa theo thời gian hay thậm chí là một trang web thương mại. Flask cung cấp cho bạn công cụ, các thư viện và các công nghệ hỗ trợ bạn làm những công việc trên.

Là một Micro-framework nên Flask rất gọn nhẹ, có tính độc lập và bảo mật cao do ít phụ thuộc vào các thư viện bên ngoài. Để hiểu rõ hơn, chúng ta cùng nhau cài đặt Flask và tạo thử ứng dụng đầu tiên Hello world nhé.

Ở đây mình sẽ dùng Docker để xây dựng môi trường phát triển Python để không ảnh hưởng tới môi trường thật trên máy tính của mình và cài Flask trên môi trường này.

Bước 1: Tạo môi trường phát triển Python 3 và cài đặt Flask

Trước tiên chúng ta tạo một thư mục chứa project của mình, ở đây mình sẽ đặt tên cho thư mục này là demo-flask.

Tạo file Dockerfile trong thư mục docker/python với nội dung sau:

FROM python:3.9.2-alpine
WORKDIR /home/app
RUN apk add --no-cache gcc musl-dev linux-headers
RUN pip install Flask
ENV FLASK_APP=app.py
ENV FLASK_RUN_HOST=0.0.0.0
ENV FLASK_ENV=development
EXPOSE 5000
COPY . .
CMD ["flask", "run"]

FROM: Khai báo image Python và phiên bản.Trong đó chú ý đến:

  • WORKDIR: Khai báo thư mục làm việc mặc định.

  • RUN: Dùng để chạy lệnh command.

  • ENV: Dùng khai báo biến môi trường Python cho Flask.

  • Flask sẽ được cài trong Python qua lệnh pip install Flask

Tạo file docker-compose.yml trong thư mục gốc project với nội dung sau:

version: "3.9"
services:
  python:
    container_name: "SV-Python3-Flask"
    build: ./docker/python
    ports:
      - "5000:5000"
    volumes:
      - $PWD/backend:/home/app
  • Chạy lệnh docker-compose up -d để khởi tạo container.
  • Chạy lệnh docker exec -it SV-Python3-Flask sh  để truy cập vào container.
  • Chạy lệnh flask --version  để kiểm tra thử Flask đã cài thành công hay chưa.
  • Nếu chưa thì có thể sử dụng command sau đây để cài Flask: pip install Flask 

Ngoài cách trên, bạn cũng có thể tham khảo qua các cách cài đặt khác từ tác giả tại đây

Bước 2: Khởi tạo chương trình Hello world

Sau khi cài xong môi trường, chúng ta bắt đầu tạo ứng dụng Hello world. Như ở phần 1, lúc tạo Dockerfile chúng ta đã khai báo các biến môi trường cho ứng dụng Flask. Trong đó có khai báo file chạy mặc định là app.py tại dòng ENV FLASK_APP=app.py. Vì vậy chúng ta hãy tạo file app.py trong thư mục làm việc /app và code vào đó.

from flask import Flask
app = Flask(__name__)
 
@app.route('/')
def hello_world():
    return 'Hello, World!'
 
if __name__ == '__main__':
    app.run()

Mình sẽ giải thích từng dòng code như sau:

Dòng 1: Thực hiện import thư viện Flask. Cụ thể ở đây chúng ta import class Flask. Đây là việc cần và phải làm cho mỗi ứng dụng sử dụng Flask.

Dòng 2: Khai báo 1 thể hiện của class Flask. Nó sẽ được sử dụng xuyên suốt trong chương trình của chúng ta.

Dòng 3: Định tuyến URL truy cập thực thi hàm hello_world() ở dòng 4.

Dòng if __name__ == '__main__':: Hàm main của chương trình, trong hàm này chúng ta thêm dòng code app.run() để chương trình chúng ta lắng nghe các request từ user.

Sau khi tạo xong file chương trình, chúng ta mở link localhost:5000 để xem kết quả.

Tổng kết

Như vậy, chúng ta vừa tìm hiểu xong thư viện Flask Python là gì? Hi vọng rằng bài viết đem lại được cho bạn cái nhìn tổng quan về micro-framework Flask. Trong bài viết này, mình chủ yếu giới thiệu về Flask. Nếu bạn hứng thú thì bạn có thể tìm hiểu thêm tại đây. Chúc các bạn thành công.

0 Comments
Inline Feedbacks
View all comments