Tạo một Dockerfile cho ứng dụng Flask
By khoanc, at: 13:26 Ngày 08 tháng 6 năm 2023
Thời gian đọc ước tính: __READING_TIME__ minutes


Flask là một framework web nhẹ và mạnh mẽ cho Python được sử dụng rộng rãi để phát triển các ứng dụng web và API. Đây là lựa chọn tốt nhất cho các dự án nhỏ, trong khi Django phù hợp hơn với các dự án lớn hơn.
Docker giúp dễ dàng đóng gói ứng dụng Flask của bạn vào các container, đảm bảo tính nhất quán trong hoạt động trên các môi trường khác nhau.
Trong hướng dẫn này, chúng tôi sẽ hướng dẫn bạn cách tạo một Dockerfile tối giản cho ứng dụng Flask, lý tưởng cho người mới bắt đầu và những người tìm kiếm một cấu hình đơn giản.
Docker là gì và tại sao nên sử dụng nó với Flask?
Docker cho phép các nhà phát triển đóng gói ứng dụng và các phụ thuộc của chúng vào các container riêng biệt. Đối với ứng dụng Flask, Docker mang lại những lợi ích sau:
- Khả năng di chuyển: Đảm bảo ứng dụng của bạn chạy giống nhau trong môi trường phát triển, staging và sản xuất.
- Cách ly phụ thuộc: Tránh xung đột giữa các gói Python.
- Dễ dàng chia sẻ: Chia sẻ một image Docker duy nhất với nhóm của bạn hoặc triển khai nó một cách liền mạch.
Điều kiện tiên quyết
Để làm theo hướng dẫn này, bạn cần:
- Một ứng dụng Flask cơ bản.
- Docker đã được cài đặt trên hệ thống của bạn (Tải xuống Docker tại đây).
- Làm quen với các khái niệm cơ bản về Flask và Docker.
Tạo một Dockerfile tối giản cho ứng dụng Flask của bạn
Một Dockerfile
là một tập hợp các hướng dẫn để xây dựng một image Docker. Dưới đây là hướng dẫn từng bước để tạo một file cho ứng dụng Flask đơn giản.
Chọn một Image cơ sở
Chúng ta sẽ sử dụng image Python Slim nhẹ làm cơ sở:
FROM python:3.10-slim
Image này bao gồm Python mà không có các phần thừa không cần thiết, giúp nó hiệu quả đối với nhu cầu của chúng ta.
Đặt thư mục làm việc
Chỉ định thư mục nơi mã ứng dụng của bạn sẽ nằm:
WORKDIR /app
Điều này sắp xếp hệ thống file của container và đảm bảo các lệnh tiếp theo chạy trong thư mục /app
.
Cài đặt phụ thuộc
Sao chép file requirements.txt
vào container và cài đặt các phụ thuộc:
COPY requirements.txt /app/
RUN pip install --no-cache-dir -r requirements.txt
Cờ --no-cache-dir
ngăn chặn việc lưu trữ bộ nhớ cache file, giúp image nhẹ hơn.
Sao chép mã ứng dụng
Sao chép mã ứng dụng Flask của bạn vào container:
COPY . /app/
Điều này chuyển tất cả các file từ thư mục dự án cục bộ của bạn sang thư mục /app/
của container.
Công khai cổng
Công khai cổng 5000, đây là cổng máy chủ phát triển mặc định của Flask:
EXPOSE 5000
Điều này làm cho ứng dụng có thể truy cập được trên cổng 5000 khi container được chạy.
Đặt lệnh để chạy ứng dụng
Định nghĩa lệnh mặc định để khởi động ứng dụng Flask của bạn:
CMD ["python", "app.py"]
Thay thế app.py
bằng tên file chính của ứng dụng Flask của bạn. Lệnh này khởi động máy chủ phát triển Flask.
Xây dựng và chạy container của bạn
Xây dựng image Docker
Chạy lệnh sau trong thư mục chứa Dockerfile
của bạn:
docker build -t flask-app .
Điều này tạo ra một image Docker có tên là flask-app
.
Chạy container Docker
Khởi động container bằng:
docker run -p 5000:5000 flask-app
Điều này ánh xạ cổng 5000 trên container đến cổng 5000 trên máy cục bộ của bạn. Mở trình duyệt của bạn và điều hướng đến http://localhost:5000
để xem ứng dụng Flask của bạn đang chạy.
Cải tiến cho sản xuất
Cấu hình trên phù hợp cho phát triển. Đối với sản xuất, hãy xem xét những điều sau:
- Sử dụng
gunicorn
làm máy chủ ứng dụng thay vì máy chủ phát triển Flask.
- Thêm
nginx
làm proxy ngược để xử lý các yêu cầu HTTP.
- Sử dụng
docker-compose
để quản lý các dịch vụ như cơ sở dữ liệu.
Lỗi thường gặp và cách khắc phục
Thiếu phụ thuộc
Nếu các phụ thuộc không được cài đặt, hãy đảm bảo file requirements.txt
nằm trong thư mục chính xác và xây dựng lại container:
docker build --no-cache -t flask-app .
Ứng dụng không chạy
Hãy đảm bảo ứng dụng Flask của bạn hoạt động cục bộ trước khi đóng gói nó vào container. Kiểm tra nhật ký container để tìm lỗi:
docker logs
Kết luận
Bạn vừa tạo một Dockerfile tối giản để đóng gói ứng dụng Flask của bạn. Phương pháp này cung cấp một điểm khởi đầu vững chắc để tận dụng Docker trong quy trình làm việc phát triển của bạn. Thử nghiệm với các cấu hình sản xuất và khám phá các công cụ bổ sung như Docker Compose để quản lý các thiết lập đa container.
Để tìm hiểu thêm, hãy xem Tài liệu Docker và Tài liệu Flask.
Toàn bộ Dockerfile
ở đây
# Sử dụng một image Python nhẹ làm cơ sở
FROM python:3.10-slim
# Đặt thư mục làm việc trong container
WORKDIR /app
# Sao chép file requirements vào container
COPY requirements.txt /app/
# Cài đặt phụ thuộc
RUN pip install --no-cache-dir -r requirements.txt
# Sao chép mã ứng dụng vào container
COPY . /app/
# Công khai cổng 5000 cho máy chủ phát triển Flask
EXPOSE 5000
# Đặt lệnh để chạy ứng dụng Flask
CMD ["python", "app.py"]