본문 바로가기

Docker

도커 볼륨

도커 볼륨이란


도커 컨테이너를 삭제하면 컨테이너 계층에 저장돼있는 모든 정보도 같이 사라진다. 한 번 삭제가 되면 데이터를 복구할 수 없기 때문에 이를 방지하기 위해 컨테이너의 데이터를 영속적 데이터로 활용할 수 있는 방법이 있는데 그것이 바로 도커 볼륨이다.

 

호스트 볼륨 공유

볼륨을 활용하는 첫 번째 방법은 호스트의 볼륨을 공유하는 것이다. 호스트 볼륨을 공유하려면 run 명령어에 -v 옵션을 추가하는 것이다.

 

docker run -d --name my_mysql -v /home/my_dir:/var/lib/mysql mysql:5.7

 

MySQL 데이터베이스 애플리케이션을 운영한다고 가정한다면 데이터베이스 내부의 데이터는 손실이 나면 안 되기 때문에 호스트의 디렉터리로 공유하는 것이 안정적이다. 데이터베이스의 데이터는 /var/lib/mysql에 저장되어있는데 이 디렉터리의 내용을 호스트의 /home/my_dir 디렉터리와 공유를 시키는 명령어가 바로 위 명령어이다.

 

주의해야 할 점은 호스트의 디렉터리 안에 이미 파일이 존재하면 덮어씌워지기 때문에 -v 옵션을 쓸 때 미리 확인을 하는 것을 추천한다.

 

도커 볼륨

볼륨을 활용하는 다른 방법은 docker volume 명령어를 사용하는 것이다.

 

### my_volume 이라는 도커 볼륨을 생성한다
docker volume create --name my_volume

### 생성된 볼륨을 확인한다
docker volume ls

### my_volume 볼륨을 실행되는 컨테이너의 /root/ 디렉터리에 마운트한다
docker run --name my_volume_container -v my_volume:/root/ ubuntu:18.04

 

위의 예시에서 my_volume_container의 /root/ 디렉터리에 파일을 생성한 다음 또 다른 컨테이너를 실행해 동일한 my_volume 볼륨에 마운트 하면 해당 파일이 존재하는 것을 확인할 수 있다.

 

실제 도커 볼륨의 디렉터리가 어디 있는지 알고 싶으면 inspect 명령어를 사용하면 실제로 어디에 저장되는지 알 수 있다. Mountpoint에 해당하는 값이 실제 호스트의 어디에 저장됐는지를 의미한다.

 

도커의 모든 명령어는 docker 접두어 다음에 container, image, volume 등을 명시함으로써 특정 구성단위를 제어하는 명령어를 사용할 수 있다.

 

이처럼 볼륨 공유를 통해 데이터를 저장하는 법을 알아보았다. 이처럼 컨테이너가 아닌 외부에 데이터를 저장하고 컨테이너는 그 데이터로 동작하도록 설계하는 것을 stateless 하다 라고 표현한다. 

이런 식으로 컨테이너를 설계하면 컨테이너가 삭제돼도 데이터는 보존되므로 매우 바람직한 설계라고 볼 수 있다.

'Docker' 카테고리의 다른 글

컨테이너 자원 할당 제한  (0) 2021.09.11
도커 네트워크  (0) 2021.09.11
도커 실행 옵션 정리  (0) 2021.09.09
도커 이미지와 컨테이너  (0) 2021.09.09
도커란 무엇인가?  (0) 2021.09.08