Docker là một công cụ mã nguồn mở được thiết kế để giúp việc tạo, triển khai và chạy ứng dụng dễ dàng hơn bằng cách sử dụng các container. Container là một gói phần mềm đóng gói mã và tất cả các phần phụ thuộc của nó để ứng dụng chạy nhanh và đáng tin cậy từ môi trường điện toán này sang môi trường điện toán khác.
Flask là một khung web Python phổ biến. Nó được phân loại là một khung vi mô vì nó không yêu cầu các công cụ hoặc thư viện cụ thể. So với các khung khác, nó nhẹ và có cấu trúc cao.
Trong hướng dẫn này, chúng tôi sẽ giải thích cách triển khai ứng dụng Flask với Docker trên máy chủ Debian 10.
Sau khi tất cả các gói được cập nhật, hãy khởi động lại hệ thống của bạn để áp dụng các thay đổi.
Sau khi tất cả các gói được cài đặt, bạn có thể tiến hành bước tiếp theo.
Đầu tiên, hãy tải xuống và thêm khóa GPG bằng lệnh sau:
Tiếp theo, hãy thêm kho lưu trữ Docker bằng lệnh sau:
Tiếp theo, hãy cập nhật kho lưu trữ và cài đặt Docker bằng lệnh sau:
Sau khi quá trình cài đặt hoàn tất thành công, hãy xác minh trạng thái của Docker bằng lệnh sau:
Bạn sẽ nhận được kết quả đầu ra sau:
Lúc này, Docker đã được cài đặt và đang chạy. Bây giờ bạn có thể tiến hành bước tiếp theo.
Hãy tạo một thư mục có tên là flask bên trong thư mục /var/www/:
Tiếp theo, hãy đổi thư mục thành flask và tạo cấu trúc thư mục cho flask:
Thư mục tĩnh được sử dụng để lưu trữ hình ảnh, tệp CSS và JavaScript trong khi thư mục mẫu được sử dụng để lưu trữ các mẫu HTML cho dự án của bạn.
Tiếp theo, bạn sẽ cần tạo tệp __init__.py bên trong thư mục ứng dụng:
Thêm các nội dung sau để tạo một phiên bản Flask và nhập logic từ tệp views.py:
Lưu và đóng tệp sau đó tạo tệp views.py trong thư mục ứng dụng của bạn.
Thêm các dòng sau
Lưu và đóng tệp sau đó tạo tệp uwsgi.ini bằng lệnh sau:
Tệp này sẽ chứa các cấu hình uWSGI cho ứng dụng của chúng ta như được hiển thị bên dưới:
Lưu và đóng tệp khi bạn hoàn tất. uWSGI là tùy chọn triển khai cho Nginx, vừa là giao thức vừa là máy chủ ứng dụng.
Tiếp theo, bạn sẽ cần tạo tệp main.py để nhập phiên bản Flask có tên là app từ gói ứng dụng. Bạn có thể tạo tệp này bằng lệnh sau:
Thêm dòng sau:
Lưu và đóng tệp khi bạn hoàn tất. Tiếp theo, tạo tệp requirements.txt để chỉ định các phụ thuộc mà trình quản lý gói pip sẽ cài đặt vào triển khai Docker của bạn:
Thêm dòng sau khớp với phiên bản Flask mới nhất:
Lưu và đóng tệp khi bạn hoàn tất.
Lúc này, ứng dụng Flask của bạn đã được định cấu hình thành công. Bây giờ bạn có thể tiến hành bước tiếp theo.
Đầu tiên, hãy tạo Dockerfile bằng lệnh sau:
Thêm các dòng sau:
Lưu và đóng tệp khi bạn hoàn tất. Tiếp theo, tạo một tập lệnh start.sh để xây dựng một hình ảnh từ Dockerfile và tạo một container từ hình ảnh Docker kết quả.
Thêm dòng sau:
Lưu và đóng tệp khi bạn hoàn tất.
Lưu ý: Đảm bảo cổng 56733 trống và có thể sử dụng được.
Cuối cùng, hãy chạy tập lệnh bằng lệnh sau:
Điều này sẽ tạo hình ảnh Docker và xây dựng một vùng chứa từ hình ảnh kết quả như được hiển thị bên dưới:
Bây giờ bạn có thể liệt kê các container đang chạy bằng lệnh sau:
Bạn sẽ nhận được kết quả sau:
Bạn cũng có thể xác minh vùng chứa Docker bằng cách truy cập URL http://your-server-ip:56733. Bạn sẽ thấy màn hình sau:
Thêm các mã sau:
Lưu và đóng tệp khi bạn hoàn tất. Tiếp theo, bạn sẽ cần sửa đổi tệp views.py để phục vụ tệp mới tạo:
Cập nhật tệp như hiển thị bên dưới:
Lưu và đóng tệp. Sau đó, bạn sẽ cần khởi động lại các vùng chứa Docker để áp dụng các thay đổi.
Bạn có thể khởi động lại vùng chứa Docker có tên docker.test bằng lệnh sau:
Bây giờ, hãy mở trình duyệt web của bạn và nhập URL http://your-server-ip:56733/template. Bạn sẽ thấy mẫu mới tạo của mình trong màn hình sau:
Flask là một khung web Python phổ biến. Nó được phân loại là một khung vi mô vì nó không yêu cầu các công cụ hoặc thư viện cụ thể. So với các khung khác, nó nhẹ và có cấu trúc cao.
Trong hướng dẫn này, chúng tôi sẽ giải thích cách triển khai ứng dụng Flask với Docker trên máy chủ Debian 10.
Điều kiện tiên quyết
- Máy chủ chạy Debian 10.
- Mật khẩu gốc được cấu hình trên máy chủ của bạn.
Bắt đầu
Trước khi bắt đầu, bạn nên cập nhật gói hệ thống của mình lên phiên bản mới nhất. Bạn có thể cập nhật tất cả các gói bằng lệnh sau:
Mã:
apt-get update -y
apt-get upgrade -y
Cài đặt các phụ thuộc bắt buộc
Tiếp theo, bạn sẽ cần cài đặt máy chủ web Nginx và các phụ thuộc khác trong hệ thống của mình. Bạn có thể cài đặt tất cả chúng bằng lệnh sau:
Mã:
apt-get install nginx apt-transport-https ca-certificates curl gnupg2 software-properties-common curl -y
Cài đặt Docker
Theo mặc định, phiên bản Docker mới nhất không có trong kho lưu trữ Debian 10. Vì vậy, bạn nên cài đặt từ kho lưu trữ chính thức của Docker.Đầu tiên, hãy tải xuống và thêm khóa GPG bằng lệnh sau:
Mã:
wget https://download.docker.com/linux/debian/gpg apt-key add gpg
Mã:
add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/debian buster stable"
Mã:
apt-get update -y
apt-get install docker-ce -y
Mã:
systemctl status docker
Mã:
? docker.service - Docker Application Container Engine Đã tải: đã tải (/lib/systemd/system/docker.service; đã bật; cài đặt trước của nhà cung cấp: đã bật) Đang hoạt động: đang hoạt động (đang chạy) kể từ CN 2020-04-19 06:26:25 UTC; 1 phút 8 giây trước Tài liệu: https://docs.docker.com PID chính: 8883 (dockerd) Nhiệm vụ: 10 Bộ nhớ: 46,6M CGroup: /system.slice/docker.service ??8883 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock19/04 06:26:24 debian10 dockerd[8883]: time="2020-04-19T06:26:24.413828757Z" level=warning msg="Hạt nhân của bạn không hỗ trợ giới hạn bộ nhớ hoán đổi19/04 06:26:24 debian10 dockerd[8883]: time="2020-04-19T06:26:24.413876690Z" level=warning msg="Hạt nhân của bạn không hỗ trợ cgroup rt period"19/04 06:26:24 debian10 dockerd[8883]: time="2020-04-19T06:26:24.413889604Z" level=warning msg="Hạt nhân của bạn không hỗ trợ cgroup rt runtime19/04 06:26:24 debian10 dockerd[8883]: time="2020-04-19T06:26:24.414115814Z" level=info msg="Đang tải container: bắt đầu."19/04 06:26:24 debian10 dockerd[8883]: time="2020-04-19T06:26:24.788332166Z" level=info msg="Cầu nối mặc định (docker0) được gán với một IP a19/04 06:26:24 debian10 dockerd[8883]: time="2020-04-19T06:26:24.972022325Z" level=info msg="Đang tải container: xong."19/04 06:26:25 debian10 dockerd[8883]: time="2020-04-19T06:26:25.010940205Z" level=info msg="Trình nền Docker" commit=afacb8b7f0 graphdriver(s)=o19/04 06:26:25 debian10 dockerd[8883]: time="2020-04-19T06:26:25.011145541Z" level=info msg="Daemon đã hoàn tất quá trình khởi tạo"19/04 06:26:25 debian10 systemd[1]: Đã khởi động Docker Application Container Engine.19/04 06:26:25 debian10 dockerd[8883]: time="2020-04-19T06:26:25.074603639Z" level=info msg="API listen on /var/run/docker.sock"
Thiết lập Flask Directory Cấu trúc
Tiếp theo, bạn sẽ cần tạo một cấu trúc thư mục để chứa ứng dụng Flask của mình.Hãy tạo một thư mục có tên là flask bên trong thư mục /var/www/:
Mã:
mkdir -p /var/www/flask
Mã:
cd /var/www/flask
mkdir -p app/static
mkdir -p app/templates
Tiếp theo, bạn sẽ cần tạo tệp __init__.py bên trong thư mục ứng dụng:
Mã:
nano app/__init__.py
Mã:
from flask import Flaskapp = Flask(__name__)from app import views
Mã:
nano app/views.py
Mã:
from app import [email protected]('/')def home(): return "hello world!"
Mã:
nano uwsgi.ini
Mã:
[uwsgi]module = maincallable = appmaster = true
Tiếp theo, bạn sẽ cần tạo tệp main.py để nhập phiên bản Flask có tên là app từ gói ứng dụng. Bạn có thể tạo tệp này bằng lệnh sau:
Mã:
nano main.py
Mã:
from app import app
Mã:
nano requirements.txt
Mã:
Flask==1.1.2
Lúc này, ứng dụng Flask của bạn đã được định cấu hình thành công. Bây giờ bạn có thể tiến hành bước tiếp theo.
Cấu hình Docker để triển khai Flask
Tiếp theo, bạn sẽ cần tạo Dockerfile để xây dựng và triển khai ứng dụng flask.Đầu tiên, hãy tạo Dockerfile bằng lệnh sau:
Mã:
cd /var/www/flask
nano Dockerfile
Mã:
FROM tiangolo/uwsgi-nginx-flask:python3.6-alpine3.7RUN apk --update add bash nanoENV STATIC_URL /staticENV STATIC_PATH /var/www/app/staticCOPY ./requirements.txt /var/www/requirements.txtRUN pip install -r /var/www/requirements.txt
Mã:
nano start.sh
Mã:
#!/bin/bashapp="docker.test"docker build -t ${app} .docker run -d -p 56733:80 \ --name=${app} \ -v $PWD:/app ${app}
Lưu ý: Đảm bảo cổng 56733 trống và có thể sử dụng được.
Cuối cùng, hãy chạy tập lệnh bằng lệnh sau:
Mã:
bash start.sh
Mã:
Gửi ngữ cảnh xây dựng đến daemon Docker 9.728kBBước 1/6: TỪ tiangolo/uwsgi-nginx-flask:python3.6-alpine3.7python3.6-alpine3.7: Kéo từ tiangolo/uwsgi-nginx-flask48ecbb6b270e: Kéo hoàn tất692f29ee68fa: Hoàn tất kéof75fc7ac1098: Hoàn tất kéoc30e40bb471c: Hoàn tất kéoXây dựng thành công f5de17e1ce82Đã gắn thẻ docker.test:latest thành công22cd2bd23c9190cf2900fa1d7c55e4765a266e68c74dc1e6858872e9ebe7bdcd
Mã:
docker ps
Mã:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES22cd2bd23c91 docker.test "/entrypoint.sh /sta…" Khoảng một phút trước Lên Khoảng một phút 443/tcp, 0.0.0.0:56733->80/tcp docker.test
Triển khai Tệp Mẫu
Bạn cũng có thể triển khai các tệp mẫu để phục vụ nội dung tĩnh và động. Bạn có thể tạo mẫu trang chủ cho ứng dụng của mình bằng lệnh sau:
Mã:
nano app/templates/home.html
Mã:
Welcome Flask [HEADING=1]Home Page[/HEADING]
Đây là trang chủ của ứng dụng Flask của chúng tôi.
Mã:
nano app/views.py
Mã:
from flask import render_templatefrom app import [email protected]('/')def home(): return "hello world!"@app.route('/template')def template(): return render_template('home.html')
Bạn có thể khởi động lại vùng chứa Docker có tên docker.test bằng lệnh sau:
Mã:
docker stop docker.test
docker start docker.test