티스토리 뷰
도커 컨테이너에 파일을 저장하게 되면, 컨테이너 레이어에 저장이 되어 컨테이너가 내려가게 되면 지워지는 임시 저장소이다.
Docker에서 컨테이너가 호스트 머신에 파일을 저장하기 위해서는 두가지 방법을 제공한다.
( Linux 에서 Docker를 구동하면, tmpfs mount 도 사용할 수 있다. )
아래 그림은 각 mount에 대해, 차이점을 설명하고 있다.
volumes
Volumes 은 도커 컨테이너에 의해 생성, 사용되는 호스트 파일 시스템에 저장이 된다.
따라서, 파일을 많이 생성하더라도 컨테이너 이미지의 사이즈가 커지지 않는다.
아래와 같이 볼륨을 생성해서 보면, 도커에 의해 관리되는 위치는 /var/lib/docker/volumes/ 이다.
( 도커가 아닌 프로세스에서는 이 파일시스템을 수정해서는 안된다. )
$ sudo docker volume create hello
hello
$ sudo docker volume create apiVol
apiVol
$ sudo docker volume ls
DRIVER VOLUME NAME
local apiVol
local hello
$ sudo docker volume inspect apiVol
[
{
"CreatedAt": "2020-08-04T14:22:11+09:00",
"Driver": "local",
"Labels": {},
"Mountpoint": "/var/lib/docker/volumes/apiVol/_data",
"Name": "apiVol",
"Options": {},
"Scope": "local"
}
]
볼륨을 생성하고, 컨테이너에 마운트를 하면 컨테이너는 볼륨에 작성을 하게 된다.
그리고 볼륨 하나는 여러 컨테이너에 동시에 마운트 될 수 있다.
특정 볼륨을 사용하는 실행 중인 컨테이너가 없더라도 볼륨은 도커에서 사용 가능하고, 자동으로 삭제되지 않는다.
( 볼륨 데이터는 컨테이너의 라이프사이클 밖에 존재한다 )
아래 명령으로 사용되지 않는 볼륨을 삭제할 수 있다.
$ docker volume prune
WARNING! This will remove all local volumes not used by at least one container.
Are you sure you want to continue? [y/N]
만약에 컨테이너가 임시 상태 데이터를 생성한다면, tmpfs mount 사용을 추천한다. 컨테이너의 writable layer에 데이터를 쓰지 않고 메모리에다가 쓰기 때문에 컨테이너의 퍼포먼스를 향상 시켜준다.
장점
- bind mounts에 비해, 백업과 마이그레이션이 쉽다.
- 도커 CLI 명령어나 API 로 볼륨을 관리할 수 있다.
- 윈도우와 리눅스 컨테이너에 모두 동작한다.
- 여러 컨테이너간에 더 안전하게 공유된다.
- 원격 호스트나 크라우드에 저장할 수 있게 해주고, 암호화를 할수 있고, 다른 기능을 추가할 수 있다.
Good Use cases
- 여러 컨테이너 간에 데이터를 공유할 때
- 도커 호스트가 주어진 폴더나 파일 구조를 보장하지 않을 때
- 컨테이너 데이터를 원격 호스트나 클라우드에 저장하고 싶을 때
- 백업, 복원을 하거나 다른 도커 호스트로 데이터를 마이그레이션 해야 할 때
Bind mounts
볼륨과 다르게 호스트 파일 시스템 어디에서나 데이터를 저장할 수 있고, 도커가 아닌 프로세스도 이 파일을 수정할 수 있다.
docker 사이트에 글을 읽어보면, Bind mounts 보다는 Volumes을 사용하기를 추천하고 있다.
특별히 Bind mounts 가 필요한 경우가 아니라면, 개념 정도만 알아두고 Volumes을 사용하도록 하자.
Good Use cases
- 호스트 머신의 설정 파일을 컨테이너에 공유 할 때
- 도커 호스트의 파일과 디렉터리 구조가 컨테이너가 요구하는 bind mounts 와 보장될 때
# docker run -v 호스트Dir:컨테이너Dir app
docker run -v /user/data:/data app
참조
'Backend' 카테고리의 다른 글
Slack Block Kit 사용하기( 메시지 UI 구현 ) (0) | 2023.03.10 |
---|---|
테라폼( Terraform ) 설치 및 버전 변경 (0) | 2022.09.29 |
- Total
- Today
- Yesterday
- SpringBoot
- Index
- Kibana
- apm
- Postman
- spring
- logstash
- Java
- gradle
- JPA
- Git
- mac
- intellij
- tomcat
- error
- maven
- elasticsearch
- AWS
- Container
- Linux
- spring boot
- install
- plugin
- JSON
- Spark
- Log
- Filter
- scala
- docker
- Size
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |