[docker] docker volume 이미지
docker 를 이용해서 컨테이너를 올리다 보니 컨테이너에 올라갔지만 컨테이너 속에서만 생기게 되는
파일이나 데이터들은 사라지기 마련이다 (컨테이너가 내려갔을때에)
하지만 컨테이너가 내려갔다고 올린 파일들이 모두 사라지거나 데이터를 다 날릴 수는 없다.
이에 volume을 설정하여 이 컨테이너를 run할때 설정하는데 이것에 대해 오늘은 공부를 해보았다.
초창기 멋도 모르고(지금도 모르지만..ㅎㅎ) 사람들이 사용하는 docker file을 긁어다가 잘 돌아가니까
그대로 두고 컨테이너에 올렸다가 내렸다가를 반복하기를 몇일...
docker file을 공부하다보니.. 옵션에 내가 volume을 쓰고 있었다...
설정만 해놓은것인가 할 수는 있겠지만 컨테이너가 오르락 내리락 하면서 볼륨이 계속 생기고 있었고
이 볼륨들은 컨테이너가 내려가거나 컨테이너가 rm되어도 그대로 남아있었다.....
이에.. .결국 ... 48개가 넘는 볼륨이 만들어져있는 대참사를 목격하고 말았다..ㅎㅎ
보면 docker images들이 모두 해시값으로 만들어져있는데 이게 전부 임의로 만들어졌다는 증거 이다...
이에 이제 volume을 설정해서 올릴때마다 같은 데이터를 가지고 올라갈 수 있도록 설정한다.
이 임의로 만들어진 volume 파일들은 /var/lib/docker/volume 아래에 폴더들로 생겨져 있다.
기존에는 다음과 같이 서버를 올렸다.
docker run --name [containername] -d -p 80:80 --link mongo id/repository:tag
하지만 위와같이 올리게 되면 컨테이너를 올리는 족족 파일들은 컨테이너 속에 매칭이 되지 않는 등
아무것도 없는 환경에서 올라가게 된다.
이에 수정한 버전은 다음과 같다.
$ docker volume create file
-> 이렇게 하면 /var/lib/docker/volume 안에 file폴더가 생기게 된다.
이런뒤에 docker를 띄울때 볼륨을 맞춰주는데 다음과 같다
$ docker run --name [containername] -d -p 80:80 --link mongo -v file:/home/temp/file id/repository:tag
이렇게 명령어에 volume을 설정했더니 내렸다가 컨테이너 지우고 같은명령어로 다시 컨테이너를 띄울시에도
파일이 동일하게 나타나는 것을 확인했다.
volume 원리는 폴더들을 mount 시켜서 hosts의 폴더를 함께 바라보는 것이다.
이에 새로운 컨테이너가 뜨더라도 hosts의 폴더를 함께 바라보기 때문에 컨테이너가 지워지더라 해도
hosts의 폴더는 살아있기 때문에 문제 없이 파일을 공유할 수 있다.