[Docker] 도커 볼륨 정리

호성·2022년 6월 19일
0
post-thumbnail

도커 볼륨

도커 이미지로 컨테이너를 생성하면, 해당 이미지는 읽기 전용이 되고 컨테이너 실행 후 변경 사항만 별도로 저장하는 식으로 컨테이너 정보를 보존한다.

따라서 mysql:5.7 이미지로 컨테이너를 생성하면, 해당 데이터베이스의 실제 내용은 이미지가 아니라 컨테이너가 가지고 있다고 보면 된다.

이 때, 기본적으로 컨테이너를 제거하면 컨테이너 계층에 저장돼있던 데이터베이스 정보도 삭제된다. 이러한 점을 해결하기 위해 컨테이너의 데이터를 영속적 데이터로 활용하는 법이 몇가지 있다. 볼륨을 이용하는 것이다.

볼륨을 이용하는 방법은 아래와 같이 분류할 수 있는데...

  1. 호스트와 볼륨을 공유하기
  2. 볼륨 컨테이너 활용하기
  3. 도커가 관리하는 볼륨을 생성하기 (사실 1번과 동일하다)

호스트와 볼륨 공유

docker run -d --name sample_database -e MYSQL_ROOT_PASSWORD=password -e MYSQL_DATABASE=db \
-v /home/db:/var/lib/mysql mysql:5.7

위 명령어의 의미는 호스트의 /home/db 디렉토리와 도커 컨테이너 내부의 /var/lib/mysql 디렉토리를 공유한다는 의미이다.

/home/db가 실제로 생성돼있지 않더라도 도커는 자동으로 생성한다. (리눅스 기준)

docker stop sample_database
docker rm sample_database

위 명령어로 컨테이너를 제거하더라도, /home/db에 도커 컨테이너 계층의 데이터는 보존된다.

이 때, 이미 호스트 디렉토리에 파일이 존재하면 도커 컨테이너 계층의 데이터로 덮어씌워지므로 주의해야한다.

볼륨 컨테이너

이미 생성한 컨테이너로부터 공유를 공유받는 개념이다.

  • 볼륨 컨테이너 생성
docker run -it volume_override -v /home/sample:/home/testdir ${image}
  • 볼륨 컨테이너를 이용하여 컨테이너 생성
docker run -it --volumes-from volume_override --name volumes_share ${image}

도커가 관리하는 볼륨 생성

도커 명령어를 이용해 볼륨을 생성하고, 해당 볼륨을 이용하는 개념이다.

docker volume create --name myvolume

docker volume ls
DRIVER    VOLUME NAME
local     myvolume

위 명령어 처럼, 볼륨을 생성하고 아래와 같이 컨테이너 실행 시 옵션으로 넣어주면 된다.

docker run -it --name mycontainer -v myvolume:/root/ ${image}

도커 명령어를 통해 생성한 볼륨은 내부적으로 호스트의 특정 폴더에 마운팅된다. 즉 1번 방법과 동일한 방법인데, 사용자가 해당 볼륨이 어떤 폴더에서 마운팅되고 있는지 알 필요 없이 이용할 수 있다라는 장점이 있다.

아래 결과를 통해 어디에 저장돼있는지 확인할 수 있다.

docker inspect --type volume myvolume                                                   
[
    {
        "CreatedAt": "2022-05-29T02:12:08Z",
        "Driver": "local",
        "Labels": {},
        "Mountpoint": "/var/lib/docker/volumes/myvolume/_data",
        "Name": "myvolume",
        "Options": {},
        "Scope": "local"
    }
]
profile
스프링 깎는 노인

0개의 댓글