공부용/Docker

[Docker]Docker 컨테이너와 데이터를 공유하는 방법

엑스포스 2017. 11. 22. 18:02
반응형

 

Docker 컨테이너와 데이터를 공유하는 방법

이미지에서 텍스트를 추출하는 OCR을 테스트하다가 호스트의 데이터를 도커에서 사용하는 것은 간단한데,
도커 컨테이너의 데이터를 호스트에서 사용하는 것은 생각보다 까다로웠고, 그 방법도 내가 원하는 방법이 아니였다.
그래서 찾아보다가 Volume을 만들어서 데이터를 공유하는 방법이 있었다.

Volume 생성

아래의 명령어를 입력하여 Volume을 생성한다.

$ docker volume create --name hjVolume

입력한 Volume의 이름이 나오면 성공이다.

hjVolume

Volume 확인하기

아래의 명령어를 입력하면 Volume의 정보를 확인할 수 있다.

$ docker volume inspect hjVolume
[
    {
        "CreatedAt""2017-11-21T18:14:45+09:00",
        "Driver""local",
        "Labels": {},
        "Mountpoint""/var/lib/docker/volumes/hjVolume/_data",
        "Name""hjVolume",
        "Options": {},
        "Scope""local"
    }
]
 

Docker 컨테이너와 데이터 공유하기

내가 Volume을 사용하고자 하는 목적은 Docker로 설치한 Tesseract를 사용해 이미지의 텍스트를 추출하여 해당 텍스트 파일을 호스트에서 사용할 수 있도록 하는 것이다.

아래 스크립트는 텍스트를 추출하고자 하는 이미지 파일을 Volume으로 복사하고, Docker컨테이너에서 그 이미지의 텍스트를 추출하여 다시 Volume에 txt파일로 저장하는 것이다.

#!/bin/bash
 
VOLUMEPATH=/var/lib/docker/volumes/hjVolume
FILEPATH=/home/hyeonjung/tesseract/
 
if [ ! -n "$1" ]
then
 echo "사용법) `basename $0` 파일이름"
 exit
fi
 
if [ -f "${FILEPATH}$1" ]
then
 cp ${FILEPATH}$1 ${VOLUMEPATH}/_data/$1
 
 docker run -i --rm -v hjVolume:/hjvolume hyeonjung/tesseract tesseract /hjvolume/$1 /hjvolume/$1 -l kor+eng
 
 cp ${VOLUMEPATH}/_data/${1}.txt /home/hyeonjung/tesseract/output
else
 echo "파일이 존재하지 않습니다."
fi

docker run 부분을 보면 되는데 -i 옵션은 컨테이너와 상호작용을 한다는 옵션이고
-v hjVolume:/hjvolume 옵션은 호스트 OS 디렉터리와 Docker 컨테이너의 디렉터리를 공유시키는 것으로 hjVolume 디렉터리를 Docker 컨테이너에서 hjvolume이라는 이름으로 사용한다는 의미이다.

참고

How To Share Data between Docker Containers

 

반응형