Chào mừng bạn đến với cấp độ cuối cùng của khóa học về Docker!
Ở cấp độ này, chúng ta sẽ kết hợp tất cả kiến thức và kỹ năng đã học.
Trong các bài giảng, bạn có thể gặp phải ngôn ngữ lập trình hoặc công nghệ mà bạn chưa quen thuộc. Bạn sẽ phải cấu hình ports hoặc thêm tên methods – và tất cả điều này dựa trên đoạn code đã hoàn thành 99% công việc.
Đừng lo lắng nếu có điều gì đó bạn thấy lạ – điều này được làm có chủ ý để cải thiện kỹ năng của bạn: "tôi không biết điều này, nhưng tôi có thể nhanh chóng nắm bắt."
1.1 Xác định nhiệm vụ
Nào, chúng ta cùng tạo một ứng dụng nhỏ đa container và phân tích từng bước quá trình phát triển: từ việc xác định nhiệm vụ đến việc trình bày sản phẩm hoàn thiện.
Mục tiêu: tạo một ứng dụng đa container để quản lý nhiệm vụ, cho phép người dùng tạo, chỉnh sửa, xóa nhiệm vụ và gán chúng cho người dùng khác. Ứng dụng sẽ bao gồm ba thành phần chính: frontend sử dụng ReactJS, backend viết bằng Python (Flask) và cơ sở dữ liệu PostgreSQL.
Các nhiệm vụ chính:
- Xác định các yêu cầu chức năng cho từng thành phần của ứng dụng.
- Chọn các công nghệ và công cụ sẽ sử dụng.
- Chuẩn bị môi trường phát triển.
1.2 Định nghĩa yêu cầu chức năng
Yêu cầu chức năng cho ứng dụng quản lý công việc:
- Đăng ký và đăng nhập người dùng:
- Người dùng có thể đăng ký trong hệ thống.
- Người dùng có thể đăng nhập vào hệ thống.
- Quản lý công việc:
- Người dùng có thể tạo công việc.
- Người dùng có thể chỉnh sửa công việc.
- Người dùng có thể xóa công việc.
- Người dùng có thể xem danh sách công việc.
- Người dùng có thể gán công việc cho người dùng khác.
- Xem và lọc công việc:
- Người dùng có thể lọc công việc theo trạng thái (hoàn thành/chưa hoàn thành).
- Người dùng có thể xem công việc được gán cho người dùng khác.
1.3 Định nghĩa các công nghệ và công cụ được sử dụng
Để triển khai ứng dụng này, các công nghệ và công cụ sau sẽ được sử dụng:
- Frontend:
- ReactJS: thư viện để tạo giao diện người dùng.
- Axios: thư viện để thực hiện các HTTP request.
- Backend:
- Python: ngôn ngữ lập trình để xây dựng phần backend.
- Flask: web framework để tạo REST API.
- SQLAlchemy: ORM để tương tác với cơ sở dữ liệu.
- Database:
- PostgreSQL: cơ sở dữ liệu quan hệ để lưu trữ thông tin về người dùng và nhiệm vụ.
- Container hóa và điều phối:
- Docker: nền tảng để container hóa ứng dụng.
- Docker Compose: công cụ để quản lý các ứng dụng đa container.
1.4 Chuẩn bị môi trường phát triển
Để hoàn thành thành công dự án, cần thiết phải thiết lập môi trường phát triển và đảm bảo rằng tất cả các công cụ cần thiết đã được cài đặt.
Các bước để chuẩn bị môi trường:
- Cài đặt Docker:
- Nếu bạn chưa làm điều này, thì hãy quay lại bài giảng số 4 của cấp đầu tiên hoặc tuân theo hướng dẫn trên trang chính thức của Docker.
- Cài đặt Docker Compose:
- Nếu Docker Compose chưa được cài đặt, hãy tham khảo bài giảng số 2 của cấp độ 4 hoặc tuân theo hướng dẫn trên trang chính thức của Docker Compose.
- Tạo cấu trúc dự án:
- Tạo một thư mục cho dự án và các thư mục con chính cho từng dịch vụ:
mkdir task_management_app
cd task_management_app
mkdir frontend backend database
- Khởi tạo dự án:
- Bên trong thư mục frontend, khởi tạo một dự án ReactJS mới:
cd frontend
npx create-react-app .
cd ..
• Bên trong thư mục backend, tạo cấu trúc cho ứng dụng Python/Flask:
cd backend
mkdir app
touch app/__init__.py
touch app/models.py
touch app/routes.py
touch run.py
touch requirements.txt
cd ..
• Bên trong thư mục database, tạo Dockerfile cho PostgreSQL (nếu cần thiết):
cd database
touch Dockerfile
cd ..
1.5 Ví dụ về nội dung file:
File backend/app/__init__.py
:
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'postgresql://taskuser:taskpassword@database:5432/taskdb'
db = SQLAlchemy(app)
from app import routes
File backend/app/models.py
:
from app import db
class User(db.Model):
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(80), unique=True, nullable=False)
tasks = db.relationship('Task', backref='owner', lazy=True)
class Task(db.Model):
id = db.Column(db.Integer, primary_key=True)
title = db.Column(db.String(120), nullable=False)
description = db.Column(db.Text, nullable=True)
owner_id = db.Column(db.Integer, db.ForeignKey('user.id'), nullable=False)
File backend/app/routes.py
:
from app import app
@app.route('/')
def index():
return "Xin chào, Ứng dụng Quản lý Nhiệm vụ!"
File backend/run.py
:
from app import app
if __name__ == '__main__':
app.run(host='0.0.0.0')
File backend/requirements.txt
:
Flask
Flask-SQLAlchemy
psycopg2-binary
GO TO FULL VERSION