이슈
해결 방법
방법 1. docker volume 사용하기
전제
$ docker volume create todo-db
$ docker run -dp 3000:3000 -v todo-db:/etc/todos getting-started
$ docker ps |grep 3000
a1a988b9ff77 getting-started "docker-entrypoint.s…" 11 minutes ago Up 11 minutes 0.0.0.0:3000->3000/tcp amazing_lederberg
$ docker run -dp 3000:3000 -v todo-db:/etc/todos getting-started
$ docker volume inspect todo-db
[
{
"CreatedAt": "2021-08-12T17:15:17+09:00",
"Driver": "local",
"Labels": {},
"Mountpoint": "/var/lib/docker/volumes/todo-db/_data",
"Name": "todo-db",
"Options": {},
"Scope": "local"
}
]
$ sudo ls /var/lib/docker/volumes/todo-db/_data
todo.db
방법 2. binding mount 사용하기
위의 방법은 데이터 베이스에 데이터를 유지하기 위해서 볼륨을 하나 만들어서 사용한것으로 데이터가 저장되는 위치에 대해서는 docker가 정해놓은것으로 신경쓸 필요가 없었다.
이슈
만약 host의 정확한 mount지점을 제어해야 한다면 어떻게 해야 할까?
해결
binding mount 사용
예)
$ docker run -dp 3000:3000 \
-w /app -v "$(pwd):/app" \
node:12-alpine \
sh -c "yarn install && yarn run dev"
참고
binding mount 및 docker volume create 방법은 Docker 엔진과 함께 제공되는 volume 사용 형태이다.
만약 SFTP, Cept, NetApp, S3등을 지원하기 위해서는 추가 볼륨 드라이버를 사용할 수 있다.
docker volume create VS binding mount 비교
- host disk 위치
docker volume create : Docker에서 선택
binding mount : 사용자가 직접 선택- mount 사용 예)
docker volume create : myvolume(volume name):/user/local/data (container path)
binding mount: /path/to/data(host path):/user/local/data(container path)- 컨테이너 내용을 새로운 볼륨에 채움
docker volume create : yes
binding mount: no- 볼륨 드라이버 지원
docker volume create : yes
binding mount: no