Chạy script Python là một trong những tác vụ phổ biến nhất trong tự động hóa. Tuy nhiên, việc quản lý các dependency trên nhiều hệ thống khác nhau có thể là một thách thức. Đó là lúc Docker xuất hiện. Docker cho phép bạn đóng gói script Python cùng với tất cả các dependency cần thiết vào một container, đảm bảo nó chạy theo cùng một cách trên mọi máy. Bài viết hôm nay sẽ hướng dẫn quy trình tạo script Python thực tế và chạy nó bên trong container Docker.
Mục lục bài viết
Tại sao nên sử dụng Docker cho các script Python?
Khi làm việc với các script 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 những thư viện khác nhau, và những gì chạy trên máy của bạn có thể không hoạt động trên máy của người khác. Docker giải quyết vấn đề này bằng cách đóng gói script và môi trường của nó lại với nhau. Vì vậy, thay vì nói "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.
Docker cũng giữ cho hệ thống của bạn sạch sẽ. Bạn không cần phải cài đặt mọi gói Python trên toàn cục hay lo lắng về xung đột phiên bản. Mọi thứ đều nằm trong container.
Nếu bạn đang triển khai hoặc chuyển giao script của mình cho người khác, Docker cũng giúp việc đó trở nên dễ dàng. Không cần hướng dẫn thiết lập, không cần "cài đặt cái này cái kia". Chỉ cần một lệnh, và nó sẽ chạy.
Viết script Python
Hãy tạo một thư mục dự án để lưu script Python và Dockerfile của bạn. Sau khi tạo, hãy điều hướng đến thư mục này bằng lệnh cd:
mkdir docker_file_organizer
cd docker_file_organizer
Tạo một script có tên “organize_files.py” để quét một thư mục và nhóm các file vào những thư mục dựa trên phần mở rộng của chúng:
nano organize_files.py
Dán code sau vào file “organize_file.py”. Ở đây, bài viết sử dụng hai mô-đun Python dựng sẵn, có tên là os và shutil, để xử lý file và tạo thư mục động:
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 script này, chúng ta sắp xếp các file trong một thư mục nhất định dựa trên phần mở rộng của chúng. Sử dụng mô-đun os để liệt kê các file, kiểm tra xem mỗi mục có phải là file không, trích xuất phần mở rộng của file và tạo những thư mục được đặt tên theo các phần mở rộng đó (nếu chúng chưa tồn tại). Sau đó, sử dụng mô-đun shutil để di chuyển từng file vào thư mục tương ứng. Đối với mỗi lần di chuyển, một thông báo hiển thị vị trí mới của file sẽ được xuất.
Tạo Dockerfile
Bây giờ, hãy tạo Dockerfile để xác định môi trường mà script sẽ chạy:
FROM python:latest
LABEL maintainer="you@example.com"
WORKDIR /usr/src/app
COPY organize_files.py .
CMD ["python", "./organize_files.py"]
Chúng ta sử dụng Dockerfile này để tạo một container bằng Python, thêm script vào đó và đảm bảo script tự động chạy khi container khởi động:

Build image Docker
Trước khi bạn có thể build image Docker, trước tiên bạn cần cài đặt Docker. Sau đó, hãy chạy lệnh sau để đóng gói mọi thứ vào một image Docker:
sudo docker build -t file-organizer .
Nó đọc Dockerfile, kết hợp thiết lập Python và script để chúng sẵn sàng chạy trong một image container duy nhất:

Tạo một thư mục mẫu với các file
Để xem script hoạt động, hãy tạo một thư mục thử nghiệm có tên là “sample_files” với một vài file ở nhiều loại khác nhau. Tạo các file này chỉ để làm cho thư mục lộn xộn một chút và xem script Python xử lý nó như thế nào:
mkdir ~/sample_files
touch ~/sample_files/test.txt
touch ~/sample_files/image.jpg
touch ~/sample_files/data.csv
Chạy script bên trong Docker
Cuối cùng, chạy container Docker và mount thư mục mẫu vào đó. Flag -v mount thư mục “~/sample_files” cục bộ vào thư mục “/files” trong container, cho phép script Python đọc và sắp xếp các file trên máy chủ của bạn:
docker run --rm -v ~/sample_files:/files file-organizer
Ở đây, bài viết sử dụng tùy chọn --rm để tự động xóa container sau khi chạy xong, giúp tiết kiệm dung lượng ổ đĩa:

Cuối cùng, sử dụng lệnh tree để kiểm tra xem các file đã được sắp xếp vào thư mục dựa trên phần mở rộng của chúng hay chưa:
tree sample_files

Lưu ý: Lệnh tree 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 lệnh này bằng trình quản lý gói như apt trên Ubuntu, brew trên macOS, v.v...
Với script Python chạy bên trong Docker, bạn đã sẵn sàng tận dụng tối đa thiết lập phát triển gọn gàng, linh hoạt và nhất quán. Bạn có thể dễ dàng tái sử dụng quy trình làm việc được đóng gói này cho các tác vụ tự động hóa khác, chia sẻ script mà không cần lo lắng về những dependency và giữ cho hệ thống gọn gàng. Bước tiếp theo, hãy cân nhắc khám phá cách xây dựng image Docker đa script, lên lịch container bằng cron job hoặc tích hợp script của bạn với các công cụ khác như Git, Jenkins hoặc thậm chí là những nền tảng đám mây để hợp lý hóa quy trình tự động hóa và triển khai.