Hướng dẫn cách triển khai và debug code Python trên Docker

Tác giả: Kiên (Software Engineer | CAI)

Bạn đã bao giờ mất hàng tiếng đồng hồ, thậm chí vài ngày để cài đặt một số thư viện cần thiết cho việc chạy một project trên máy tính của mình chưa? Nếu có thì đây là bài viết dành cho bạn.

Thông thường, khi bạn tham gia vào quá trình phát triển một project, bạn sẽ cần tải mã nguồn của project đó về. Tiếp theo là cài đặt môi trường và chạy được code của project đó trên máy tính của mình, trước khi bạn có thể bắt tay vào code thêm bất cứ tính năng nào.

Với Python, những thư viện cần thiết cho quá trình cài đặt môi trường phát triển sẽ được khai báo trong file requirements.txt. Một trong những vấn đề bạn có thể gặp phải đó là thư viện được yêu cầu có version không tương thích với nền tảng máy tính của bạn. Việc này rất dễ xảy ra nếu version của thư viện đã quá cũ hoặc máy tính của bạn là một máy tính quá mới (ví dụ Macbook sử dụng chip M1 hay M2). Để khắc phục vấn đề này, bạn có thể phải build lại thư viện từ mã nguồn của thư viện đó. Mà việc này thì rất hay lỗi do máy tính thiếu thư viện này, thiếu thư viện kia hoặc các thư viện cần thiết cho việc build chưa được link đúng.

Vậy làm sao để có thể cài đặt môi trường phát triển một cách dễ dàng, không bị phụ thuộc vào nền tảng máy tính? Docker chính là một lựa chọn sáng suốt! Docker cho phép bạn đóng gói ứng dụng của mình vào các container, bảo đảm việc cung cấp một môi trường đồng nhất, giúp bạn dễ dàng chạy và triển khai ứng dụng trên bất kỳ máy tính nào.

Trong bài viết này, Got It sẽ hướng dẫn cách triển khai và debug code Python trên Docker sử dụng các IDE phổ biến như Pycharm hay Visual Studio Code. 

Lưu ý: Nội dung bài viết này hướng tới những độc giả đã có kiến thức cơ bản về Docker. Nếu bạn chưa từng sử dụng Docker, vui lòng tìm hiểu thêm tại đây. 

Chạy code Python trên Docker

Project được sử dụng trong bài viết này có cấu trúc hết sức đơn giản. Nó chỉ gồm một file app.py và file requirements.txt với nội dung như sau:

File app.py

# This is a sample Python script.
import requests

if __name__ == '__main__':
    # Get content of w3schools python demopage
    response = requests.get('https://w3schools.com/python/demopage.htm')

    # Print the content
    print(response.text)

File requirements.txt

requests

Để chạy code Python trên Docker, trước hết, bạn cần cài đặt Docker Desktop. Bạn có thể tải Docker Desktop và cài đặt theo hướng dẫn trên trang chủ https://www.docker.com.

Tiếp theo, bạn cần tạo một Dockerfile. Dockerfile là một tập tin văn bản đơn giản chứa các chỉ thị cho việc xây dựng một Docker image. Sau khi bạn xây dựng image, bạn có thể tạo ra các container từ image đó.

Dưới đây là một ví dụ về Dockerfile:

FROM python:3.9
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
CMD [ "python", "./app.py" ]

Trong ví dụ này, chúng ta sử dụng image Python 3.9 làm image gốc. Sau đó, chúng ta đặt thư mục làm việc là /app, sao chép file requirements.txt từ host vào thư mục /app trong image và cài đặt các thư viện được liệt kê trong requirements.txt. Cuối cùng, chúng ta sao chép toàn bộ mã nguồn từ host vào thư mục /app và chạy lệnh python ./app.py khi container được tạo ra.

Sau khi bạn đã tạo được Dockerfile, bạn có thể sử dụng lệnh sau để xây dựng image:

docker build -t my-python-app .

Trong đó, tùy chọn -t đặt tên cho image (ở đây là my-python-app) và dấu . cuối dòng chỉ định đường dẫn tới Dockerfile.

Sau khi xây dựng thành công image, bạn có thể tạo container từ image đó bằng lệnh:

docker run my-python-app

Khi container được tạo ra, dòng lệnh python ./app.py sẽ được thực thi và in ra kết quả như sau:

<!DOCTYPE html>
<html>
<body>

<h1>This is a Test Page</h1>

</body>
</html>

Debug code Python trên Docker với Pycharm

Debug là một phần việc không thể thiếu trong quá trình phát triển sản phẩm. Nếu bạn đang sử dụng Pycharm và muốn debug code Python trên Docker, bạn có thể làm như sau:

  1. Bật Docker plugin trong PyCharm
    Trước khi bắt đầu, bạn cần đảm bảo Docker plugin đã được bật. Docker plugin được đóng gói cùng với PyCharm và được bật mặc định khi bạn cài PyCharm. Trong trường hợp plugin bị tắt, bạn có thể vào phần Plugins trong Settings của PyCharm để bật lên. Tham khảo hướng dẫn chi tiết ở đây.
  2. Thiết lập kết nối với Docker Desktop
    Vào Settings, chọn Build, Execution, Deployment  > Docker, sau đó chọn Docker for <Tên hệ điều hành của bạn> ở bên dưới Connect to Docker daemon with. Ví dụ, nếu bạn dùng MacBook thì bạn cần lựa chọn Docker for Mac.
  3. Tạo trình thông dịch Python mới trên Docker
  • Vào Settings, chọn Projects: <tên project hiện tại của bạn>, chọn tiếp Python Interpreter.
  • Trong cửa sổ Python Interpreter, chọn Add Interpreter, chọn tiếp On Docker…
  • Trong cửa sổ New Target: Docker, chọn Dockerfile mà bạn muốn dùng để tạo Docker image. Đồng thời điền tên (tag) thích hợp cho Docker image để dễ quản lý sau này.
  • Bấm Next và chờ để Docker image được tạo ra. Sau đó tiếp tục bấm Next.
  • Bấm Create rồi OK để tạo trình thông dịch Python mới.
  1. Debug code Python trên Docker
  • Tạo Run/Debug Configurations mới cho chương trình của bạn. Chọn Python interpreter mà bạn vừa tạo ở bước 3.
  • Debug chương trình của bạn.

Debug code Python trên Docker với Visual Studio Code

Nếu bạn đang sử dụng Visual Studio Code và muốn gỡ lỗi mã Python trên Docker, bạn có thể làm như sau:

  1. Cài đặt extension Python cho Visual Studio Code. Bạn có thể tham khảo hướng dẫn cài đặt extension cho Visual Studio Code ở đây.
  2. Cài đặt extension Docker cho Visual Studio Code.

Tạo file tasks.json trong thư mục .vscode của project của bạn (bạn có thể tạo thư mục .vscode nếu thư mục này chưa tồn tại trong project của mình). Sau đó thêm cấu hình cho build task và run task như sau:
File tasks.json

{
    "version": "2.0.0",
    "tasks": [
        {
            "label": "docker-build",
            "type": "docker-build",
            "dockerBuild": {
                "context": "${workspaceFolder}",
                "dockerfile": "${workspaceFolder}/Dockerfile",
                "tag": "test:1.0.0"
            }
        },
        {
            "type": "docker-run",
            "label": "docker-run: debug",
            "dependsOn": [
                "docker-build"
            ],
            "python": {
                "file": "app.py"
            },
            "dockerRun": {
                "containerName": "test",
                "image": "test:1.0.0",
                "volumes": [
                    {
                        "containerPath": "/app",
                        "localPath": "${workspaceFolder}"
                    }
                ]
            }
        }
    ]
}
  1. Tạo file launch.json trong thư mục .vscode với nội dung như sau:
{
    "version": "0.2.0",
    "configurations": [
      {
        "name": "Debug App",
        "type": "docker",
        "request": "launch",
        "preLaunchTask": "docker-run: debug",
        "python": {
          "pathMappings": [
            {
              "localRoot": "${workspaceFolder}",
              "remoteRoot": "/app"
            }
          ]
        }
      }
    ]
  }
  1. Bật chế độ debug bằng cách ấn F5 hoặc chọn Start Debugging trong Run menu.

Đó là những bước cơ bản để chạy và debug code Python trên Docker bằng Pycharm và Visual Studio Code. Hy vọng bài viết này sẽ giúp bạn triển khai và phát triển ứng dụng của mình một cách dễ dàng hơn trên các môi trường khác nhau.

Nếu bạn có kiến thức hữu ích nào khác thì hãy cùng chia sẻ với chúng mình bên dưới comment nhé! Đừng quên theo dõi các bài viết Tech Blogs của Got It để thu nạp những kiến thức siêu hay ho và cực kỳ bổ ích!

Nguồn tham khảo:

Nếu bạn quan tâm, hãy xem các vị trí đang tuyển dụng của Got It tại: bit.ly/gotit-hanoi và đọc thêm về quy trình tuyển dụng tại đây.

https://d1iv5z3ivlqga1.cloudfront.net/wp-content/uploads/2021/04/29235048/1_QAG9RXQyyMAY7i9OYo84FA.png
Got It Vietnam
March 31, 2023
Share this post to:
Tags:
0 Comments
Inline Feedbacks
View all comments
Các bài viết liên quan
Các bước tạo một thư viện Python

Các bước tạo một thư viện Python

Tác giả: Minh (Software Engineer | CAI) Trong Tech Blog số này, Got It sẽ cùng bạn tìm hiểu về 6 bước để tạo và phân phối một thư viện Python. Cụ thể, chúng ta sẽ viết một CLI command tương tự cowsay cùng với một function để các package khác có thể import và […]
Sử dụng pre-commit để thực thi PEP8 chỉ trong 3 bước

Sử dụng pre-commit để thực thi PEP8 chỉ trong 3 bước

Tác giả: Kiên (Software Engineer | CAI) Đảm bảo code tuân thủ đầy đủ các quy tắc được đề xuất trong PEP8 là một điều vô cùng quan trọng, đặc biệt là trong làm việc nhóm, khi mà yếu tố dễ đọc, dễ hiểu, và dễ bảo trì code được đặt lên hàng đầu. Dẫu […]
Hướng dẫn cách triển khai và debug code Python trên Docker

Hướng dẫn cách triển khai và debug code Python trên Docker

Tác giả: Kiên (Software Engineer | CAI) Bạn đã bao giờ mất hàng tiếng đồng hồ, thậm chí vài ngày để cài đặt một số thư viện cần thiết cho việc chạy một project trên máy tính của mình chưa? Nếu có thì đây là bài viết dành cho bạn. Thông thường, khi bạn tham […]
Readable Code

Readable Code

Tác giả: Minh (Software Engineer, CAI) & Hương (TPM, CAI) Mục lục1. Readable code là gì?2. Làm thế nào để viết code dễ đọc?2.1. Style guide2.2. Viết function nhỏ, tập trung vào một tính năng2.3. Đặt tên hợp lý2.3.1. Dùng các tiền tố thích hợp để phân loại function2.3.2. Hạn chế thêm thông tin về […]
Tìm hiểu Tuple trong Python, phân biệt Tuple và List

Tìm hiểu Tuple trong Python, phân biệt Tuple và List

Ở bài viết này, chúng ta sẽ cùng đi tìm hiểu về Tuple trong Python, cách sử dụng chúng như thế nào, và sự khác biệt giữa Tuple và List là gì? Tất cả những nội dung trong bài đọc sẽ đều có ví dụ minh hoạ cụ thể, hi vọng các bạn đọc có […]
Anaconda là gì? Tìm hiểu nền tảng Khoa học dữ liệu phổ biến nhất

Anaconda là gì? Tìm hiểu nền tảng Khoa học dữ liệu phổ biến nhất

Để có thể tạo nên một ứng dụng của riêng mình, điều quan trọng nhất đó là phải thiết lập môi trường làm việc đúng cách. Vì vậy, bạn cần các công cụ để xử lý dữ liệu, xây dựng các mô hình và biểu diễn trên đồ thị. Việc sử dụng nhiều công cụ […]