컨테이너들은 다른 컨테이너의 OS와 별도의 자신만의 자원(DRAM 영역), CPU시간을 사용하도록 되어 있으며,
디스크와 같은 persistent storage를 사용하지 않고 기본적인 in-memory 파일시스템을 사용한다.
컨테이너가 run 명령에 의해 시작된 뒤에 우리가 작업을 하며 만들어지는 파일들은 우리에게 익숙한 persistent 장치(디스크)에 저장되는 것처럼 사용되지만 실제로는 in-memory 파일시스템에 쓰여지고 있는 것이기 때문에 컨테이너가 종료되면 같이 사라진다.
그래서 동일한 이미지로부터 컨테이너를 다시 만들어보면 이전에 저장했다고 생각한 데이터가 없게 된다.
컨테이너 볼륨 (Container volume)
이러한 단점을 해소하기 위해 제공되는 기능이 컨테이너 볼륨 (Container volume) 이다.
컨테이너 볼륨은 호스트 기계의 on-disk persistent filesystem을 컨테이너의 in-memory filesystem에 mount하여 컨테이너가 종료되어도 데이터가 사라지지 않고 호스트 기계의 파일시스템에 저장되어, 다시 동일 컨테이너가 시작되었을 때 과거 데이터를 사용할 수 있도록 제공된 기능이다.
하지만 컨테이너의 장점 중 하나가 컨테이너들 사이에 파일시스템을 통한 간섭이 없어서 보안이 뛰어나다는 것인데
볼륨 기능을 사용할 경우 잘못된 코딩, 혹은 바이러스에 의해 이러한 장점을 훼손시킬 수도 있다.
But, DB를 사용하는 컨테이너의 경우에는 데이터베이스가 유지되어야 하기 때문에 필수적!!
Docker volume 생성 및 마운트
*도커 볼륨 생성
docker volume create <볼륨 이름>
-> 위의 명령어로 도커 볼륨을 생성해주면 호스트 기계의 /var/lib/docker/volumes에 <볼륨 이름>의 docker volume을 만들어준다.
docker volume inspect <볼륨 이름>
-> json 포맷으로 도커볼륨의 내용을 보여줌
docker volume ls
-> 도커 볼륨 목록 보기
*도커 볼륨 마운트
docker run -v <호스트 디렉토리>:<컨테이너 디렉토리>
-> docker run에서 -v옵션을 주어서 원하는 도커 볼륨을 마운트하여 컨테이너에서 호스트 기계의 persistent 저장소에 데이터를 저장할 수 있고, 이를 통해 여러 컨테이너들 사이에서 persistent한 데이터를 공유할 수 있다.
*도커 볼륨 삭제
docker volumw rm <볼륨 이름>
Docker volumes의 종류
도커 볼륨은 3가지 종류가 존재한다.
- host volume
- anonymous volume
- named volume
1) host volume
-> 특정 호스트를 지정하는 방식. but, 호스트를 지정하면 다른 호스트에서 사용할 수가 없기 때문에 도커를 사용하는 의미가 없어진다. (거의 쓸모 X)
ex) docker run -v /home/mount/data:/var/lib/mysql/data
2) anonymous volume
-> docker에서 정해진 경로로 호스트마다 알아서 마운트 하는 방식.
(호스트 기계의 볼륨을 지정하지 않으면 docker가 호스트 기계의 정해진 경로에 폴더를 생성하고, 이때 매 폴더마다 hash하여 경로 이름을 달리한다.)
ex) docker run -v /var/lib/mysql/data # 호스트 기계의 볼륨 따로 지정하지 X
3) named volume
-> docker가 생성하게 하되 생성된 볼륨에 이름을 붙여서 여러 컨테이너가 이름을 통해 공유할 수 있도록 함. 가장 많이 사용되는 방법
ex) docker run -v name:/var/lib/mysql/data
'Docker Container' 카테고리의 다른 글
[Docker] Docker swarm (0) | 2022.04.17 |
---|---|
[Docker] Docker-compose (0) | 2022.04.13 |
[Docker] Dockerfile (도커파일) (0) | 2022.04.12 |
[Docker] 도커(Docker)? (0) | 2022.04.01 |
[Conatiner] 컨테이너(Container)? (0) | 2022.04.01 |