클라우드/도커

[도커] 도커 7: 도커볼륨?(+ Dockerfile VOLUME)

KyuminKim 2024. 11. 17. 21:03

지난시간에는 도커파일 중 ENV를 알아보고, 환경변수도 알아봤다!

 

이번 시간에는 

도커파일의 VOLUME을 알아보자!


호스트 파일 <-> 컨테이너 파일 전송

호스트, 컨테이너 간 파일 전송이 필요할 때가 있다.

 

예를 들어 

컨테이너의 로그 파일을 호스트 파일로 가져와 분석하는 경우가 있다!

 

 

🙋‍♀️ docker cp 명령어

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

host ➔ container

 

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

container  host


볼륨 마운트로 호스트 <-> 컨테이너 파일 공유

docker cp 명령어 말고도,

볼륨 마운트 방식으로 공유 가능하다!

 

🙋‍♀️볼륨

컴퓨터, USB 메모리, 하드디스크 등의 저장장치에서 스토리지의 한 영역

 

🙋‍♀️볼륨 마운트

컨테이너에 쌓이는 데이터는 컨테이너가 삭제될 때 같이 사라지는데,
컨테이너의 데이터, 애플리케이션이 가동중인 컨테이너 내부에 저장하는 것이 아닌
외부(호스트 컴퓨터 혹은 도커 영역 내)에 저장함으로써 데이터의 영속성을 보장하는 개념

도커에서의 볼륨 마운트

🙋‍♀️1. 바인드 마운트

   - 사용자가 직접 관리하는 마운트 방식

   - 도커 엔진에서 관리하는 영역 뿐 아니라 호스트 컴퓨터 어디라도 마운트 가능

   - 사용자가 직접 파일 수정 가능 (호스트에 존재하는 기존의 파일 그대로 마운트하므로)

쉽게 말해서,

A 컨테이너의 파일 저장 위치 -> B 호스트 파일 시스템으로 변경한 개념으로

 

A를 수정해도 B가 수정되고,

B를 수정해도 A가 수정된다!

 

docker run -v 옵션

docker run -v (호스트_디렉토리_위치):(컨테이너_디렉토리_위치)​

  이 방법을 통해 호스트와 디렉토리를 공유하는 컨테이너를 생성가능하다!
 

docker cp VS docker run -v

$ docker run -dt -v  --name test_bind_mount -v ./study-docker:/home/docker ubuntu
$ docker exec -it test_bind_mount /bin/bash                 # 컨테이너에 진입
# ls /home/docker                                           # [컨테이너 내 명령어] /home/docker에 포함된 파일 확인
# cat /home/docker/hello.txt                                # [컨테이너 내 명령어] /home/docker 내 hello.txt파일 확인
이런 방식으로 구성되며

 

host에서 작성

 

도커 컨테이너에서 확인

이렇게 host에서 작성하면, 도커 컨테이너중

한 군데에서 수정하면 

다른 데에서도 수정사항이 똑같이 반영되는 것을 볼 수 있다.

 

 

🙋‍♀️2. 볼륨 마운트

   - 도커에서 관리해주는 마운트 방식

   - 사용자가 파일 위치를 신경 쓸 필요 없음

   - 도커 엔진이 관리하는 영역 내에서 마운트 가능

   - 기존의 파일이 직접 마운트되지 않고, 볼륨으로 생성되며 그것이 컨테이너에 마운트됨

$ docker volume create --name test_volume_mount
$ docker run -it --name test_ubuntu_mount -v test_volume_mount:/root/ ubuntu
# echo “hello” > /root/hello.txt     # [컨테이너 속 명령어] root위치에 hello.txt 파일 생성 (“hello”내용)
# exit				                 # [컨테이너 속 명령어] 컨테이너 나옴

이런 식으로 명령어를 주면,

 

다음 그림과 같은 구조로 생성이 된다!

이번 시간에는 

볼륨, 볼륨 마운트를 알아보았다!

 

다음 시간에는 도커 이미지에 대해 더 알아보자!