이 포스팅은 위키북스의 시작하세요! 도커/쿠버네티스 를 보고 공부한 내용을 바탕으로 하고 있습니다. (문제가 된다면 비공개 처리하겠습니다😂😂)
도커 이미지로 컨테이너를 생성하면 이미지는 읽기 전용이 된다. 그렇다면 컨테이너에서 이것저것 한 활동은 어디에다 기록될까? 바로 이미지 위에 컨테이너 레이어라는 곳에 기록된다.
하지만, 여기에는 치명적인 단점이 존재하는데 바로 컨테이너를 삭제하면 이런 데이터도 같이 날아가버리게 된다는 것이다. 이렇게 삭제하면 나중에 복구할 수 없다고 한다..
이런 문제점을 해결하기 위한 방법 중 하나가 바로 볼륨
을 이용하는 것이다.
$ docker run -d
--name wordpressdb
-e MYSQL_ROOT_PASSWORD=password
-e MYSQL_DATABASE=wordpress
-v /home/ubuntu/wordpress_db:/var/lib/mysql
mysql:5.7
호스트의 /home/ubuntu/wordpress_db
와 컨테이너에서의 /var/lib/mysql
가 서로 공유되도록 해준다. 참고로, 호스트에 그러한 폴더가 없어도 자동으로 생성해준다.
이제 한번 컨테이너를 삭제해보자. 컨테이너가 삭제되더라도 호스트에 있는 폴더는 잘 보존되는 것을 확인할 수 있다. 그렇다면 호스트와 컨테이너에 두 디렉토리에 이미 파일이 존재하는 상태에서 공유한다면 어떻게 될까? 🤔 결과만 말하자면 컨테이너 디렉토리가 호스트 디렉토리 내용으로 덮어씌워진다.
volumn_container 컨테이너 하나를 생성해보자. 호스트의 /home/ubuntu/wordpress_db와 컨테이너의 /home/testdir_2가 서로 공유된 형태임을 알 수 있다.
$ docker run -it --name volumn_container
-v /home/ubuntu/wordpress_db:/home/testdir_2 ubuntu:18.04
다음으로 volumes_from_container 컨테이너 하나를 더 생성해주자.
$ docker run -it --name volumes_from_container
--volumes-from volumn_container ubuntu:18.04
이번에는 --volumes-from
이라는 옵션이 사용되었다. 이는 호스트와 직접 공유가 아닌 volumn_container와 호스트가 공유하고 있는 폴더를 volumes_from_container가 다시 공유하겠다는 뜻이다.
이런식으로 사용하면 볼륨 컨테이너
기능을 하는 volumn_container 컨테이너 하나를 두고 여러개의 컨테이너와 공유하는 방식으로도 활용이 가능해진다. 그림으로 보면 다음과 같다.
마지막으로 세번째 방법이다. docker volume 명령어를 사용하는 방법인데, 도커 자체에서 제공하는 볼륨 기능을 활용하는 방식이다.
먼저 볼륨을 만든다.
$ docker volume create --name myvolume
$ docker volume ls
그런다음 컨테이너를 생성할 때 해당 볼륨과 연결시켜주면 된다.
$ docker run -it --name myvolume_1 -v myvolume:/root/ ubuntu:18.04
[볼륨의 이름]:[컨테이너 공유디렉토리] 형식으로 해서 컨테이너를 만들어 줄 수 있다. 볼륨 컨테이너 처럼 여러개의 컨테이너에 공유되어 사용될 수 있다. myvolume이 실제 어디저장되어있는지는 docker inspect --type volume myvolume
으로 알 수 있다. (굳이 알 필요는 없지만...)
사용되지 않고 방치된 볼륨을 한꺼번에 삭제하려면 $ docker volume prune
명령을 사용하면 된다.