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.
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...