도커 이미지로 컨테이너를 생성하면 이미지는 읽기 전용이 된다.
그렇다면 컨테이너에서 이것저것 한 활동은 어디에다 기록될까?
바로 이미지 위에 컨테이너 레이어라는 곳에 기록된다.
하지만, 여기에는 치명적인 단점이 존재하는데 바로 컨테이너를 삭제하면 이런 데이터도 같이 날아가버리게 된다는 것이다.
이렇게 삭제하면 나중에 복구할 수 없다고 한다.
이런 문제점을 해결하기 위한 방법 중 하나가 바로 볼륨
을 이용하는 것이다.
$ 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 volumn 명령어를 사용하는 방법인데, 도커 자체에서 제공하는 볼륨 기능을 활용하는 방식이다.
먼저 볼륨을 만든다.
$ docker volumn create --name myvolume
$ docker volumn ls
그런 다음 컨테이너를 생성할 때 해당 볼륨과 연결시켜주면 된다.
$ docker run -it --name myvolume_1 -v myvolume:/root/ ubuntu:18.04
[볼륨의 이름]:[컨테이너 공유 디렉터리] 형식으로 해서 컨테이너를 만들어 줄 수 있다.
볼륨 컨테이너 처럼 여러개의 컨테이너에 공유되어 사용될 수 있다. myvolume이 실제 어디저장되어있는지 docker inspect --type volumn myvolume
으로 알 수 있다.
사용되지 않고 방치된 볼륨을 한꺼번에 삭제하려면 docker volume prune
명령어를 사용하면 된다.