도커 볼륨은 휘발성인 컨테이너에서 데이터를 유지하고 싶을때 사용하는 기능이다.
volume
이라고 통틀어서 표현하지만 3가지 방식이 있다.
bind mount
volume
tmpfs mount
바인드 마운트는 호스트의 디렉토리를 직접 공유하는 기능이다.
처음 연결할때는 호스트 -> 컨테이너의 방향이지만, 일단 공유가 되면 컨테이너에서 변경된 사항은 호스트에도 적용이 된다.
docker를 통해 볼륨을 생성하여 사용한다. (docker volume create)
실제 생성된 볼륨은 /var/lib/docker/volumes
내부에 볼륨 이름의 경로를 생성하여 저장된다.
또한, 여러 컨테이너에 동시에 마운트할 수 있다.
파일 시스템이 아닌 호스트 메모리에만 저장이 되며 컨테이너가 중지되면 파일이 유지되지 않는다.
리눅스에서 도커를 실행하는 경우에만 사용할 수 있다.
두 유형 각각의 사용법을 알아보자
### docker-compose.yml
services:
backend:
build:
context: ./djangobase2
dockerfile: Dockerfile
image: mechauk418/backend:latest
ports:
- "8000:8000"
volumes:
- "/home/ubuntu/logs:/app/logs"
command: gunicorn config.wsgi:application --bind 0.0.0.0:8000
바인드 마운트의 경우 volumes
에서 [호스트의 경로]:[컨테이너의 절대 경로]
로 마운트를 걸어준다.
이때, 반드시 컨테이너의 경로는 절대경로를 사용해야 한다. (상대 경로를 사용 시 invalid mount path: mount path must be absolute 에러 발생)
다음은 볼륨의 사용법을 알아보자
우선 docker volume create [볼륨 이름]
으로 볼륨을 만들어준다.
여기선
services:
backend:
build:
context: ./djangobase2
dockerfile: Dockerfile
image: mechauk418/backend:latest
ports:
- "8000:8000"
volumes:
- "[볼륨 이름]:/app/logs"
- "[볼륨 이름2]:/app/logs"
command: gunicorn config.wsgi:application --bind 0.0.0.0:8000
volumes:
[볼륨 이름]:
external: true # 기존에 생성한 볼륨을 사용한다.
[볼륨 이름2]: # 새 볼륨을 생성한다.
log를 구현하면서 volume에 대해 공부해보았다.