컨테이너 내부에 저장된 데이터가 컨테이너와 함께 삭제되지 않도록 하려면? ‘도커 볼륨’을 활용해 보자!
도커 볼륨 (Docker Volume) 이란?
도커 컨테이너에서 데이터를 영속적으로 저장하기 위한 방법.
컨테이너 자체의 저장 공간을 사용하지 않고, 호스트 자체의 저장 공간을 공유해서 사용한다.
비전공자도 이해할 수 있는 Docker 입문/실전 (박재성)
도커 볼륨 사용 방법
$ docker run -v [호스트 디렉토리 절대 경로]:[컨테이너 디렉토리 절대 경로] [이미지명]:[태그명]
# 예시
$ docker run -e MYSQL_ROOT_PASSWORD=1234 -d -p 3306:3306 -v /docker/docker-mysql/mysql_data:/var/lib/mysql mysql
도커 볼륨 특징
#1 [호스트의 디렉토리 절대 경로]에 디렉토리가 이미 존재할 경우
호스트의 디렉토리 절대 경로에 디렉토리가 이미 존재할 경우, 호스트의 디렉토리가 컨테이너 디렉토리를 덮어씌운다.
Docker run 명령어에서 -v /my/host/dir:/var/lib/mysql 이렇게 마운트했을 때, /my/host/dir이 이미 존재하고 파일이 있으면 그 안에 있는 호스트 파일이 우선이 된다. 즉, 컨테이너 내부 /var/lib/mysql에 원래 있던 내용은 무시되고, 호스트의 파일이 그대로 컨테이너에 연결된다.
호스트에 디렉토리 이미 있음 → 컨테이너 내용은 무시됨
비전공자도 이해할 수 있는 Docker 입문/실전 (박재성)
#2 [호스트의 디렉토리 절대경로]에 디렉토리가 존재하지 않을 경우
[호스트의 디렉토리 절대경로]에 디렉토리가 존재하지 않을 경우, 호스트의 디렉토리 절대 경로에 디렉토리를 새로 만들고 컨테이너 디렉토리에 있는 파일들을 호스트의 디렉토리로 복사해 온다.
위와 동일하게 마운트 했는데 /my/host/dir이 존재하지 않으면 Docker가 자동으로 /my/host/dir을 만들고, 컨테이너 안 /var/lib/mysql에 있던 초기 파일을 호스트 디렉토리로 복사해온다. 이후부터는 이 복사된 파일을 컨테이너와 공유하게 된다.