본문 바로가기
공부용/Docker

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

by 엑스포스 2017. 11. 22.
반응형

 

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

 

반응형