나는 도커를 배우면서 가장 헷갈렸던 것이 도커의 volume이다. 다른건 다 배포도 잘 되고 dockerfile도 작성이 잘 되는데, docker volume는 눈에 잘 보이지가 않아서 그런가... 이해가 잘 안됐다. 오늘 도커를 득도하면서 배운점을 조금 정리하고 자야겠다.
도커를 공부하면 dockerfile로 이미지를 구성하고 docker-compose로 이미지를 상호 연결 및 부가적인 요소를 추가하는 것을 알 수 있을 것 이다. 도커 volume도 도커 이미지를 run 할 때 정의를 해주는 것이 처음 배울때 hello world(?) 정도로 생각한다.
도커 volume은 mysql, mongodb, 각 종 log 등 다양한 환경을 위하여 존재한다.
도커이미지를 실행시키는 방법은 yml파일로 가능하지만, 이번에는 명령어로 할 것 이다.
이번 예제에서는 mysql 이미지를 활용해서 volume에 대한 개념을 살짝 짚어보자


위에 캡처한 사진을 보면 Volumes이라는 것이 보일 것 이다. 이 저장소를 외부 저장소에 mount시켜야 이 컨테이너를 지우고 다시 생성해도 생성한 데이터베이스 및 테이블 등 데이터가 유지될 것 이다. 만약 사용자가 명시하지 않고 도커를 실행해도 volume이 생성이 되기는 한다. 하지만 사용자가 쉽게 암기하기도 어렵고 보기도 힘들어서 명시적으로 volume를 선언해주어야한다.

사진에서 위에 3개는 volume을 지정하지 않고 mysql이미지를 실행시켰을 때 생성된 volume이다.
마지막 mysql이라는 volume은 직접 명시를 하고 생성한 volume이다. 그럼 이제 volume을 명시적으로 생성하고 이어주는 명령어를 살펴보자.

이 환경은 ubuntu 20.04LTS버전이다.
volume을 /home/mysql로 만들어주었고 밑의 사진은 mysql volume이 추가된 것을 볼 수 있다.

쿠버네티스 공부할 때도 헷갈렸는데, 이번에 이해가 좀 됐다.
이러니까 진짜 데이터안날라가고 안전하게 도커 사용할 수 있겠다. 좀 더 효율적으로 도커를 사용할 수 있을 것 같다.
사용한 명령어
docker container run --name (사용자가 지정할 이름) -e MYSQL_ALLOW_EMPTY_PASS=Ture -v host_volume_path:image_volume_path (사용할 이미지)
MYSQL_ALLOW_EMPTY_PASS 이건 편의상 비번안치고 테스트하려고 넣은 옵션이고 원래는 이거 잘 안씀.
docker image inspect 이미지이름
docker image ls
docker volume ls