Data Engineering(Pipeline, Hadoop...)/Docker

Docker 파헤치기 2(데이터 공유 및 볼륨 마운트)

dtstory 2022. 9. 22. 19:48

앞선 포스트에서 언급한 바와 같이, 데이터 공유 및 볼륨 마운트에 대해 알아보고자 한다.

데이터 공유라 하면, Host - Container 간 공유일 수 있고, Container - Container 간 공유일 수 있다.

 

 

# Host -> Container 데이터 이동

docker cp [host 파일경로] [container name]:[container 내부 경로]

(예시)

docker cp ~/data/test.md my_container:/root/data/

 

# Container -> Host  데이터 이동

Host -> Container 로 이동과 반대로 명령을 하면 이동이 된다.

docker cp [container name]:[container 내부 경로] [host 파일경로]

(예시)

docker cp my_container:/root/data/test.md ~/data/

 

위의 두 명령을 보게된다면, 컨테이너 간의 공유도 비슷한 방식으로 할 수 있지 않을까? 라는 생각이 들 것이다.

docker cp [container1 name]:[container1 내부 경로] [container2 name]:[container2 내부 경로] 와 같이 말이다.

하지만 실제로 이 명령을 실행하게 되면, 아래 그림과 같은 에러를 뱉어낸다.

컨테이너 간 데이터를 주고 받는 것을 지원하지 않기 때문에, 우리는 다른 방법을 사용해서 컨테이너 간의 공유를 해야한다.

 

볼륨 마운트를 통해, Container 간의 공유가 가능해질 수 있다. 사실, Host - Container 간에 마운트를 하는 방식이 앞서 소개했던 cp를 통한 단발성 데이터 전송보다는 훨씬 편리하고 유용하다.

 

자 이제, 볼륨마운트에 대해 알아보자.

 

 

# Container -> Container 데이터 공유(마운트)

 

# 마운트할 볼륨 생성

docker volume create [볼륨명]
docker volume create mount_vol

 

# 볼륨 마운트 명령

docker run <option> -v <volume-name>:<container-route> <image-name>

 

 

# Jupyter Notebook 볼륨 마운트&실행

docker run -d -p 32888:8888 \
-v mount_vol:/tf/mount_vol/ \
--name jupyter -e ROOT=TRUE -e PASSWORD=password tensorflow/tensorflow:latest-jupyter



# Rstudio 볼륨 마운트&실행

docker run -it -p 32787:8787 \
-v mount_vol:/home/rstudio/mount_vol \
--name rstudio -e ROOT=TRUE -e PASSWORD=password rocker/verse:3.6.2



# AIirflow 볼륨 마운트&실행

docker run -it -p 32080:8080 \
-v mount_vol:/opt/airflow/mount_vol \
--entrypoint=/bin/bash \
--name airflow \
apache/airflow:2.0.0-python3.8 \
-c '( \
airflow db init && \
airflow users create --username admin --password admin --firstname Anonymous --lastname Admin --role Admin --email admin@example.org \
); \
airflow webserver & \
airflow scheduler \
'

 

이제 각 컨테이너 환경에서 mount_vol을 볼수 있을 것이고, 컨테이너별 '경로/mount_vol/' 에 파일 또는 폴더가 공유가능해진다.

 

다음 시간에는 자원 컨테이너 별 자원할당에 대해 알아보고자 한다.

728x90