금일은 Docker 의 Volume 에 대해 알아보겠습니다.
실습 내용은 이미지로 첨부하겠습니다.
docker 는 개별적인 가상화 환경이며 모든 데이터는 컨테이너 내부에 존재합니다.
때문에 컨테이너가 삭제되면 작업했던 모든 데이터도 삭제됩니다.
docker volumen 은 기본적으로 /var/lib/docker/volumes/(Docker Desktop) 디렉토리에 저장되며
컨테이너 내부의 데이터를 외부로 연결 시켜 주는 기능입니다.
컨테이너 생성시 volume 에 연결하는 명령어는 다음과 같습니다.
docker volume create my-volume
docker volume ls
docker volume rm <볼륨 이름>
docker volume inspect my-volume
docker run -v <볼륨 이름>:<컨테이너 내부 디렉토리 경로> --name <컨테이너 이름><이미지 이름>
Docker volume 실습
docker inspect <컨테이너 아이디>
docker volume prune
명령어를 통해 컨테이너와 연결되어있지 않는 볼륨들을 삭제해주어 host pc 의 공간을 확보해 주겠습니다.
다음 명령어를 통해 아래와 같이 Mount 정보에 임이의 이름으로 Volume 이 애플리케이션 컨테이너와 연결되어있는것을 알 수 있다.

docker run --rm -it --network my-network -v my-volume:/app/test ubuntu:16.04 bash
cd app/test
echo "hi there. " >> hello.txt
위의 명령어를 통해 파일을 생성 후 my-volume 에 지정된 mountpoint 에는 host pc 에서 접근할 수 없다.(windows 기준)
--rm 명령어는 컨테이너의 중지시 삭제하는 명령어이다.
해당 명령어를 입력한 뒤에 컨테이너를 중지하고 첫번째 명령어를 통해 자시 접근하면 hello.txt 가 여전히 남아있는 것을 확인 가능하다.
docker run --rm -it --network my-network --volume ./docker_volume_test:/app/test ubuntu:16.04 bash
다음 명령어를 통해 해당 컨테이너를 실행하면 host pc 에 hello.txt 가 존재하는것을 볼 수 있다. 또한 host pc 에서 작업한 내용도 컨테이너에 저장되어 있는 것을 확인 가능하다.
docker run -d -p 13306:3306 --network my-network \
-v <Volume Name>:/var/lib/mysql
-e MARIADB_ALLOW_EMPTY_ROOT_PASSWORD=true \
-e MARIADB_DATABASE=mydb \
--name my-mariadb edowon0623/my-mariadb:1.0
다음 명령어에서 -v 없이 실행하게 되면 매번 새로운 볼륨이 생성되어 연결되기 때문에 -v 을 지정하여 해당 경로를 다음과 같이 지정해주면 된다.
workbench 실습은 명령어 실행 후 접속해 준뒤 sql 문을 활용하여 해당 데이터 베이스에서 테이블을 만들고 다시 컨테이너에 명령어를 이용하여 접속하면 workbench 에서 생성했던 table들을 볼 수 있다.
아래는 테이블을 생성하는 명령어이다.(참고)
use mydb;
create table users(id int, name varchar(10), join_date date);
insert into users values (1, 'user1', now());