도커 컨테이너 삭제는 정말 간단하게 이루어진다. 이럴 경우 컨테이너에서 사용되었던 데이터들도 같이 사라진다. 이렇게 간단하게도 데이터가 삭제되기 쉬운 도커의 특성을 위해 안전한게 데이터를 저장하는 방법에는 무엇이 있는지 알아보았습니다.

볼륨

도커 컨테이너에서 사용되는 데이터는 별다른 조치가 없다면 컨테이너 삭제 시 같이 삭제됩니다. 문제는 도커 컨테이너 삭제가 굉장히 손쉽게 이루어 진다는 것인데. 잠시 화장실을 1~2분 사이 누가 나의 모든 컨테이너를 싹 삭제할 수 도 있을 정도로 손쉽습니다. 이럴 경우 의도치 않게 버튼 클릭 미스로 삭제되거나 많은 야근으로 정신이 혼미할 경우 아무 생각없이 삭제하여 눈물을 흘리 경우가 발생합니다. 이를 방지하기 위하여 볼륨 을 사용할 수 있습니다.

볼륨 를 활용하면 쉽게 사라질 수 있는 데이터들을 영속화 할 수 있습니다.

볼륨 을 사용하는 방식에는 대표적인 3가지 방식이 존재합니다.

  • 호스트 볼륨 공유
  • 볼륨 컨테이너 (컨테이너 간의 볼륨 공유)
  • 도커 자체에서 제공하는 볼륨 기능 (docekr volume 명령어 사용)

호스트 볼륨 공유

첫번째로 호스트 볼륨 공유 방식입니다. 말 그대로 호스트(도커가 실행되고있는 OS)와 볼륨을 공유하는 것 인데, 쉽게 말해 마운트 라고 보시면 됩니다. 호스트 OS 의 원하는 디렉토리를 컨테이너의 디렉토리에 마운트 시켜서 호스트의 디스크 자원을 컨테이너가 사용할 수 있게 해주는 것 이지요.

사용에 대한 예시 코드는 아래와 같습니다.

docker run -v [호스트의 공유 디렉토리]:[컨테이너의 공유 디렉토리]
# docker run -d \
--name wordpressdb_hostvolume \
-e MYSQL_ROOT_PASSWORD=password \
-e MYSQL_DATABASE=wordpress \
-v /home/wordpress_db:/var/lib/mysql \  # 이 부분이 실제 사용 부
mysql:5.7

특징으로는 위 예시의 호스트 공유 디렉토리인 /home/wordpres_db 디렉토리는 호스트에 미리 생성하지 않았어도 도커가 자동으로 이를 생성합니다.

여기서 잠깐 만약 호스트 공유 디렉토리와, 컨테이너의 공유 디렉토리가 이미 존재하고, 그 안에 파일도 존재하는 경우는 어떻게 될까요? 결과는 컨테이너의 공유 디렉토리 파일 내용이 사라지고 호스트 공유 디렉토리의 파일 내용만 보인다 입니다. 그 이유는 -v [호스트의 공유 디렉토리]:[컨테이너의 공유 디렉토리] 는 정말 단순 마운팅이라고 볼 수 있기 때문입니다..

볼륨 컨테이너 공유

도커 자체에서 제공하는 볼륨 기능