[파이썬] 도커 컨테이너와 호스트 간 데이터 볼륨 설정

도커(Docker)는 컨테이너 기반 가상화 플랫폼으로, 애플리케이션을 격리된 환경에서 실행할 수 있도록 해줍니다. 도커는 애플리케이션의 실행 환경을 포함한 모든 종속성을 패키징하여 이식성을 높이고, 개발 및 배포 프로세스를 단순화할 수 있는 장점을 가지고 있습니다.

도커 컨테이너는 호스트와 분리된 파일 시스템을 가지며, 기본적으로 컨테이너 내부에서 발생하는 데이터는 컨테이너 내부에서만 접근 가능합니다. 그러나 때로는 도커 컨테이너와 호스트 사이에서 데이터를 공유해야 할 때가 있습니다. 이를 위해 도커는 데이터 볼륨 설정을 제공합니다.

데이터 볼륨 설정

데이터 볼륨 설정을 사용하면 도커 컨테이너와 호스트 간에 파일을 공유할 수 있습니다. 데이터 볼륨을 사용하면 컨테이너 내부에서 발생한 데이터를 호스트의 파일 시스템에 저장할 수 있으며, 호스트의 파일을 컨테이너 내부에서 사용할 수도 있습니다.

호스트와 공유

먼저 호스트와 데이터 볼륨을 공유하는 방법을 알아보겠습니다. 아래의 예제는 파이썬에서 도커 SDK를 사용하여 데이터 볼륨을 생성하고 호스트 파일과 컨테이너 내부의 파일을 공유하는 과정을 보여줍니다.

import docker

client = docker.from_env()

# 호스트와 공유할 데이터 볼륨 생성
volume = client.volumes.create()

# 호스트 파일을 컨테이너 내부로 복사
container = client.containers.create(image='ubuntu', volumes={volume.name: {'bind': '/data', 'mode': 'rw'}})
container.start()
container.exec_run('cp /path/to/host/file /data')

# 복사한 파일을 컨테이너 내부에서 사용
container.exec_run('python script.py')

위 예제에서 docker.from_env()를 사용하여 도커 클라이언트를 생성하고, client.volumes.create()를 통해 데이터 볼륨을 생성합니다. 이후 컨테이너를 생성할 때 volumes 매개변수를 사용하여 생성한 데이터 볼륨을 추가하고, 볼륨과 컨테이너 내부의 디렉토리를 매핑합니다.

마지막으로 container.exec_run()을 사용하여 컨테이너 내부에서 호스트 파일을 복사하고, 복사한 파일을 컨테이너 내부에서 사용하는 예제입니다.

컨테이너 내부와 공유

반대로 컨테이너 내부에서 생성된 데이터를 호스트와 공유하는 방법을 알아보겠습니다. 아래의 예제는 도커 컨테이너 내부에서 생성된 로그 파일을 호스트의 특정 디렉토리로 복사하는 과정을 보여줍니다.

import docker

client = docker.from_env()

# 컨테이너 생성
container = client.containers.create(image='nginx')

# 컨테이너 실행
container.start()

# 컨테이너 내부에서 로그 파일 생성
container.exec_run('touch /var/log/app.log')

# 로그 파일을 호스트로 복사
container.exec_run('cp /var/log/app.log /path/to/host/directory')

위 예제에서도 docker.from_env()를 사용하여 도커 클라이언트를 생성하고, client.containers.create()를 통해 컨테이너를 생성합니다. 컨테이너 시작 후 container.exec_run()을 사용하여 컨테이너 내부에서 로그 파일을 생성하고, 생성된 파일을 호스트로 복사하는 예제입니다.

결론

도커 컨테이너와 호스트 간 데이터 볼륨 설정을 통해 데이터를 공유할 수 있습니다. 데이터 볼륨을 사용하면 컨테이너와 호스트 간의 데이터 이동을 간편하게 할 수 있으며, 애플리케이션의 이식성과 개발 및 배포 프로세스의 단순화에 도움을 줄 수 있습니다.