[파이썬] 도커 컨테이너와 호스트 간 파일 공유

도커(Docker)는 운영 체제 레벨 가상화 기술을 이용하여 애플리케이션을 컨테이너로 패키징하고 실행하는 플랫폼입니다. 도커 컨테이너를 사용하면 애플리케이션을 격리된 환경에서 실행할 수 있으며, 이는 애플리케이션의 이식성과 확장성을 높여줍니다.

하지만 도커 컨테이너는 호스트 시스템과 분리되어 있기 때문에, 컨테이너 안에서 실행되는 애플리케이션이 호스트 시스템의 파일에 접근하거나 호스트 시스템으로부터 파일을 공유하기가 어렵습니다. 이러한 문제를 해결하기 위해서는 도커 컨테이너와 호스트 간의 파일 공유를 구현해야 합니다.

바인드 마운트를 이용한 파일 공유

도커에서는 바인드 마운트(Bind Mount)를 이용하여 도커 컨테이너와 호스트 간의 파일 공유를 구현할 수 있습니다. 바인드 마운트는 호스트 시스템의 특정 디렉토리를 컨테이너의 특정 디렉토리에 마운트하는 방식으로 동작합니다.

import docker

def create_container_with_bind_mount():
    client = docker.from_env()

    volumes = {"/app/host_files": {"bind": "/container_files", "mode": "rw"}}
    container = client.containers.run(image="my_image", volumes=volumes, detach=True)
    
    return container.id

위의 예제 코드에서는 docker 모듈을 사용하여 도커 API에 접근해 도커 컨테이너를 생성합니다. volumes 매개변수를 통해 호스트 시스템의 /app/host_files 디렉토리를 컨테이너의 /container_files 디렉토리에 바인드 마운트합니다.

컨테이너 내부에서의 파일 공유

이제 도커 컨테이너 내부에서 바인드 마운트된 디렉토리를 사용하여 호스트 시스템의 파일에 접근할 수 있습니다. 예를 들어, Python 애플리케이션이 /container_files/data.txt 파일을 읽어들이는 경우, 다음과 같이 파일 경로를 지정하여 접근할 수 있습니다.

def read_file_from_host():
    with open("/container_files/data.txt", "r") as file:
        content = file.read()
    return content

위의 예제 코드는 컨테이너 내부에서 /container_files/data.txt 파일을 열고 내용을 읽어들입니다. 이때, 실제로는 해당 파일이 호스트 시스템의 /app/host_files/data.txt 파일과 연결되어 있는 것입니다.

파일 옵션 설정

바인드 마운트 시 사용하는 volumes 매개변수에는 다양한 옵션을 설정할 수 있습니다. 대표적인 옵션은 다음과 같습니다.

옵션을 설정하여 파일 공유의 동작을 세밀하게 제어할 수 있습니다.

마무리

도커 컨테이너와 호스트 간의 파일 공유는 도커의 바인드 마운트를 통해 간단히 구현할 수 있습니다. 바인드 마운트를 이용하면 컨테이너 내부에서 호스트 시스템의 파일을 읽거나 쓸 수 있어, 데이터 공유가 필요한 경우에 유용하게 사용할 수 있습니다.

Python에서는 docker 모듈을 사용하여 도커 컨테이너를 관리하고 파일 공유를 구현할 수 있습니다. 위의 예제 코드를 참고하여 도커 컨테이너와 호스트 간의 파일 공유를 적용해 보세요.