도커를 사용하여 파이썬 스크립트 실행하기

Run Python Script Docker

파이썬 스크립트를 실행하는 것은 자동화에서 가장 일반적인 작업 중 하나입니다. 그러나 다양한 시스템에서 종속성을 관리하는 것은 어려울 수 있습니다. 이때 도커가 필요합니다. 도커를 사용하면 파이썬 스크립트와 모든 필수 종속성을 컨테이너에 패키징하여 어떤 머신에서도 동일하게 실행되도록 보장합니다. 이 단계별 가이드에서는 실제 파이썬 스크립트를 만들고 이를 도커 컨테이너 내에서 실행하는 과정을 안내합니다.

파이썬 스크립트에 도커를 사용하는 이유

파이썬 스크립트를 작업할 때 상황이 매우 복잡해질 수 있습니다. 서로 다른 프로젝트는 서로 다른 라이브러리를 필요로 하며, 당신의 머신에서 실행되는 것이 다른 사람의 머신에서는 작동하지 않을 수 있습니다. 도커는 스크립트와 그 환경을 함께 패키징하여 이 문제를 해결합니다. 따라서 “내 머신에서는 작동해”라고 말하는 대신, 어디서나 동일하게 작동한다는 것을 확신할 수 있습니다.

또한 시스템을 깔끔하게 유지합니다. 모든 파이썬 패키지를 전역적으로 설치하거나 버전 충돌에 대해 걱정할 필요가 없습니다. 모든 것이 컨테이너 내부에 유지됩니다.

스크립트를 배포하거나 다른 사람에게 전달할 경우에도 도커는 이를 쉽게 만들어 줍니다. 설정 지침이 필요 없고, “이것과 저것을 설치하세요“라는 말도 필요 없습니다. 단 한 명령어로 실행됩니다.

파이썬 스크립트 작성하기

파이썬 스크립트와 도커파일을 보관할 프로젝트 디렉토리를 생성해 보겠습니다. 생성한 후, cd 명령어를 사용하여 이 디렉토리로 이동합니다:

mkdir docker_file_organizer  
cd docker_file_organizer

디렉토리를 스캔하고 파일 확장자에 따라 파일을 폴더로 그룹화하는 “organize_files.py”라는 이름의 스크립트를 생성합니다:

nano organize_files.py

다음 코드를 “organize_file.py” 파일에 붙여넣습니다. 여기서는 osshutil이라는 두 개의 미리 구축된 파이썬 모듈을 사용하여 파일을 처리하고 동적으로 디렉토리를 생성합니다:

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)

이 스크립트에서는 주어진 디렉토리에서 파일을 확장자에 따라 정리합니다. os 모듈을 사용하여 파일 목록을 가져오고, 각 항목이 파일인지 확인하고, 확장자를 추출하고, 해당 확장자 이름으로 폴더를 생성합니다(존재하지 않는 경우). 그런 다음 shutil 모듈을 사용하여 각 파일을 해당 폴더로 이동합니다. 각 이동에 대해 파일의 새 위치를 보여주는 메시지를 출력합니다.

도커파일 생성하기

이제 스크립트가 실행될 환경을 정의하는 도커파일을 생성합니다:

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

이 도커파일을 사용하여 파이썬이 포함된 컨테이너를 생성하고, 우리의 스크립트를 추가하며, 컨테이너가 시작될 때 스크립트가 자동으로 실행되도록 합니다:

Create Docker File

도커 이미지 빌드하기

도커 이미지를 빌드하기 전에 먼저 도커를 설치해야 합니다. 그 후, 다음 명령어를 실행하여 모든 것을 도커 이미지로 패키징합니다:

sudo docker build -t file-organizer .

이 명령어는 우리의 도커파일을 읽고 파이썬 설정과 우리의 스크립트를 함께 조합하여 단일 컨테이너 이미지에서 실행할 준비를 합니다:

Build Docker Image

파일이 있는 샘플 폴더 생성하기

스크립트가 작동하는 모습을 보기 위해, 다양한 유형의 파일이 있는 “sample_files”라는 테스트 폴더를 생성합니다. 이 파일들은 폴더를 약간 어지럽히고 우리의 파이썬 스크립트가 이를 어떻게 처리하는지 보기 위해 생성되었습니다:

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

도커 내에서 스크립트 실행하기

마지막으로, 도커 컨테이너를 실행하고 샘플 폴더를 컨테이너에 마운트합니다. -v 플래그는 로컬 “~/sample_files” 디렉토리를 컨테이너의 “/files” 디렉토리에 마운트하여 파이썬 스크립트가 호스트 머신에서 파일을 읽고 정리할 수 있도록 합니다:

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

여기서 --rm 옵션을 사용하여 실행이 끝난 후 컨테이너를 자동으로 제거하여 디스크 공간을 절약합니다:

결국, tree 명령어를 사용하여 파일이 확장자에 따라 폴더로 정리되었는지 확인합니다:

tree sample_files

Verify Result With Tree Command

참고: tree 명령어는 대부분의 시스템에 사전 설치되어 있지 않습니다. Ubuntu의 apt, macOS의 brew와 같은 패키지 관리자를 사용하여 쉽게 설치할 수 있습니다.

최종 생각

도커 내에서 파이썬 스크립트를 실행하면 깔끔하고 휴대 가능하며 일관된 개발 환경을 최대한 활용할 수 있습니다. 이 컨테이너화된 워크플로를 다른 자동화 작업에 쉽게 재사용하고, 종속성에 대한 걱정 없이 스크립트를 공유하며, 시스템을 깔끔하게 유지할 수 있습니다. 다음 단계로는 다중 스크립트 도커 이미지 빌드, 크론 작업으로 컨테이너 예약, 또는 Git, Jenkins 또는 클라우드 플랫폼과 같은 다른 도구와 스크립트를 통합하여 자동화 및 배포 프로세스를 간소화하는 방법을 탐색해 보세요.