Cách chạy tập lệnh Python bằng Docker

Chạy các tập lệnh Python là một trong những nhiệm vụ phổ biến nhất trong tự động hóa. Tuy nhiên, việc quản lý các phụ thuộc trên các hệ thống khác nhau có thể là một thách thức. Đó là nơi Docker đến. Docker cho phép bạn đóng gói tập lệnh Python của mình cùng với tất cả các phụ thuộc cần thiết của nó vào một container, đảm bảo nó chạy theo cách tương tự trên bất kỳ máy nào. Trong hướng dẫn từng bước này, chúng tôi sẽ đi qua quá trình tạo ra một kịch bản Python ngoài đời thực và chạy nó bên trong một container Docker.

Mục lục

Tại sao sử dụng Docker cho các kịch bản Python

Khi bạn làm việc với các kịch bản Python, mọi thứ có thể trở nên lộn xộn/phức tạp rất nhanh. Các dự án khác nhau cần các thư viện khác nhau và những gì chạy trên máy của bạn có thể bị hỏng trên người khác. Docker giải quyết điều đó bằng cách đóng gói kịch bản của bạn và môi trường của nó cùng nhau. Vì vậy, thay vì nói rằng nó hoạt động trên máy của tôi, bạn có thể chắc chắn rằng nó hoạt động giống nhau ở mọi nơi.

Nó cũng giữ cho hệ thống của bạn sạch sẽ. Bạn không phải cài đặt mọi gói Python trên toàn cầu hoặc lo lắng về xung đột phiên bản. Mọi thứ vẫn ở bên trong container.

Nếu bạn đang triển khai hoặc trao tập lệnh của mình cho người khác, Docker cũng dễ dàng. Không có hướng dẫn thiết lập, không có cài đặt này và đó. Chỉ cần một lệnh, và nó chạy.

Viết kịch bản Python

Hãy tạo một thư mục dự án để giữ cho tập lệnh Python của bạn và Dockerfile. Sau khi được tạo, điều hướng vào thư mục này bằng cách sử dụngcdyêu cầu:

mkdir docker_file_organizer
cd docker_file_organizer

Tạo một tập lệnh có tên là tổ chức

nano organize_files.py

Dán mã sau vào tệp tổ chức trên mạng_file.py. Ở đây, chúng tôi sử dụng hai mô-đun Python được xây dựng sẵn, được đặt tênosshutil, để xử lý các tệp và tạo thư mục một cách linh hoạt:

import os
import shutil

SOURCE_DIR = "/files"

def organize_by_extension(directory):
try:
for fname in os.listdir(directory):
path = os.path.join(directory, fname)
if os.path.isfile(path):
ext = fname.split('.')[-1].lower() if '.' in fname else 'no_extension'
dest_dir = os.path.join(directory, ext)
os.makedirs(dest_dir, exist_ok=True)
shutil.move(path, os.path.join(dest_dir, fname))
print(f"Moved: {fname} → {ext}/")
except Exception as e:
print(f"Error organizing files: {e}")

if __name__ == "__main__":
organize_by_extension(SOURCE_DIR)

Trong tập lệnh này, chúng tôi sắp xếp các tệp trong một thư mục nhất định dựa trên các tiện ích mở rộng của chúng. Chúng tôi sử dụngosMô -đun để liệt kê các tệp, kiểm tra xem mỗi mục là một tệp, trích xuất tiện ích mở rộng của nó và tạo các thư mục được đặt tên theo các tiện ích mở rộng đó (nếu chúng không tồn tại). Sau đó, chúng tôi sử dụngshutilMô -đun để di chuyển mỗi tệp vào thư mục tương ứng của nó. Đối với mỗi lần di chuyển, chúng tôi in một thông báo hiển thị vị trí mới của tệp.

Tạo Dockerfile

Bây giờ, hãy tạo một Dockerfile để xác định môi trường mà tập lệnh của bạn sẽ chạy:

FROM python:latest
LABEL maintainer="[email protected]"
WORKDIR /usr/src/app
COPY organize_files.py .
CMD ["python", "./organize_files.py"]

Chúng tôi sử dụng Dockerfile này để tạo một container với Python, thêm tập lệnh của chúng tôi vào đó và đảm bảo tập lệnh chạy tự động khi container bắt đầu:

Trước khi bạn có thể xây dựng hình ảnh Docker, bạn cần cài đặt Docker trước. Sau đó, hãy chạy lệnh sau để đóng gói mọi thứ vào hình ảnh docker:

sudo docker build -t file-organizer .

Nó đọc Dockerfile của chúng tôi và kết hợp thiết lập Python và tập lệnh của chúng tôi để chúng sẵn sàng để chạy trong một hình ảnh container duy nhất:

Tạo một thư mục mẫu với các tệp

Để xem tập lệnh của chúng tôi trong hành động, chúng tôi tạo một thư mục thử nghiệm có tên là Sample Sample_Files, với một vài tệp thuộc các loại khác nhau. Chúng tôi đã tạo các tệp này chỉ để làm cho thư mục hơi lộn xộn và xem cách tập lệnh Python của chúng tôi xử lý nó:

mkdir ~/sample_files
touch ~/sample_files/test.txt
touch ~/sample_files/image.jpg
touch ~/sample_files/data.csv

Chạy kịch bản bên trong Docker

Cuối cùng, chúng tôi chạy container Docker của chúng tôi và gắn thư mục mẫu vào đó. Các-vFlag gắn thư mục địa phương của bạn

Đọc thêm:Cách tạo hình ảnh Docker đầu tiên của bạn với Dockerfile

docker run --rm -v ~/sample_files:/files file-organizer

Ở đây, chúng tôi sử dụng--rmTùy chọn tự động tháo container sau khi hoàn thành việc chạy, giúp tiết kiệm không gian đĩa:

Cuối cùng, chúng tôi sử dụngtreelệnh để kiểm tra xem các tệp đã được sắp xếp thành các thư mục dựa trên các tiện ích mở rộng của chúng:

tree sample_files

Ghi chú:CáctreeLệnh không được cài đặt sẵn trên hầu hết các hệ thống. Bạn có thể dễ dàng cài đặt nó bằng cách sử dụng trình quản lý gói nhưapttrên ubuntu,brewtrên macOS, và như vậy.

Suy nghĩ cuối cùng

Với tập lệnh Python của bạn chạy bên trong Docker, tất cả bạn đều sẵn sàng tận dụng tối đa thiết lập phát triển sạch, di động và nhất quán. Bạn có thể dễ dàng sử dụng lại quy trình làm việc của container này cho các tác vụ tự động hóa khác, chia sẻ tập lệnh của bạn mà không phải lo lắng về các phụ thuộc và giữ cho hệ thống của bạn không lộn xộn. Bước tiếp theo, hãy xem xét khám phá cách xây dựng hình ảnh docker đa kịch bản, lên lịch các thùng chứa với các công việc cron hoặc tích hợp các tập lệnh của bạn với các công cụ khác như Git, Jenkins hoặc thậm chí các nền tảng đám mây để hợp lý hóa quy trình tự động hóa và triển khai của bạn.

Related Posts