[docker] docker 볼륨 - 호스트 볼륨, tmpfs (2)
카테고리: docker
태그: docker
🎯Docker에서 데이터 관리
Docker에서는 컨테이너가 호스트의 파일 시스템에 파일을 저장하는 두 가지 마운트 유형과 호스트의 메모리에 파일을 저장하는 한 가지 마운트 유형을 제공합니다.
도커 볼륨 (볼륨)- >Dokcer에서 관리하는 호스트 파일 시스템의 일부에 데이터 저장 (Linux의 경우/var/lib/docker/volumes/)호스트 볼륨 (바인드 마운트)- 호스트 시스템의 아무 곳에나 저장tmpfs- 호스트 시스템의 메모리에만 저장, 호스트 시스템의 파일 시스템에는 저장하지 않음
1. 호스트 볼륨
- 바인드 마운트를 사용하면 호스트 시스템의 파일 또는 디렉토리가 컨테이너에 마운트됩니다. 파일 또는 디렉토리는 호스트 시스템의 절대 경로로 참조됩니다.
- 앞선 포스트에서 알아본 볼륨의 경우 호스트 시스템의 Docker 저장소 디렉터리 내에 새 디렉터리가 생성되고 Docker가 해당 디렉터리의 콘텐츠를 관리하는 것과는 차이가 있습니다.
- 파일 또는 디렉터리가 Docker 호스트에 미리 존재할 필요는 없습니다. 아직 존재하지 않는 경우 요청 시 자동으로 생성됩니다. (
-v옵션으로 생성한 경우)
1.1 생성
도커 볼륨과 마찬가지로 컨테이너와 함께 호스트 볼륨을 생성하려면 -v 또는 --mount 플래그를 사용합니다.
-v또는--volume: 콜론 문자(:)로 구분된 세 개의 필드로 구성됩니다. 필드는 올바른 순서로 되어 있어야 합니다.- 호스트 볼륨의 경우 첫 번째 필드는 호스트 시스템의 파일 또는 디렉토리의 경로입니다.
- 두 번째 필드는 파일 또는 디렉터리가 컨테이너에 마운트된 경로입니다.
- 세 번째 필드는 쉼표로 구분된 옵션 목록입니다. (optional)
--mount <key>=<value>: 쉼표로 구분된 여러 키-값 쌍으로 구성됩니다. 키 순서는 중요하지 않습니다.type유형에는bind,volume,tmpfs값이 올 수 있습니다. 호스트 볼륨의 경우bind유형을 가집니다.src또는source옵션으로 호스트에 있는 파일 또는 디렉터리 경로를 지정합니다.dst또는target옵션으로 파일 또는 디렉터리가 컨테이너에 마운트된 경로를 지정합니다. (destination도 가능)readonly옵션이 있는 경우 호스트 볼륨은 컨테이너에 읽기 전용으로 마운트됩니다.
# --mount
docker run -d \
-it \
--name devtest \
--mount type=bind,source="$(pwd)"/target,target=/app \
nginx:latest
# -v
docker run -d \
-it \
--name devtest \
-v "$(pwd)"/target:/app \
nginx:latest
1.2 -v와 --mount 차이점
-v(–volume)
Docker 호스트에 아직 존재하지 않는 파일 또는 디렉터리를 바인드 마운트하기 위해 -v 또는 --volume을 사용하는 경우 항상 디렉터리를 자동으로 생성합니다.
--mount
Docker 호스트에 아직 존재하지 않는 파일 또는 디렉터리를 바인드 마운트하기 위해 --mount을 사용하는 경우 Docker는 디렉터리를 자동으로 생성하지 않고 오류를 생성합니다.
1.3 검사
docker inspect [container_name] 명령을 통해 바인드 마운트가 올바르게 생성되었는지 확인할 수 있습니다.
"Mounts": [
{
"Type": "bind",
"Source": "/tmp/source/target",
"Destination": "/app",
"Mode": "",
"RW": true,
"Propagation": "rprivate"
}
],
이것은 마운트가 bind 유형이고 올바른 소스와 대상을 보여주며 마운트가 읽기-쓰기 가능함을 확인할 수 있습니다.
1.4 컨테이너의 비어있지 않은 디렉터리에 마운트
- 컨테이너의 비어있지 않은 디렉터리에 호스트 시스템의 디렉터리를 바인드 마운트하면 컨테이너의 디렉터리의 기존 내용이 호스트 시스템의 디렉터리 내용으로 덮어쓰여집니다.
- 다음의 예제는 컨테이너의 /usr 디렉터리를 호스트 시스템의 /tmp 디렉터리의 내용으로 덮어씁니다.
# --mount
docker run -d \
-it \
--name broken-container \
--mount type=bind,source=/tmp,target=/usr \
nginx:latest
# -v
docker run -d \
-it \
--name broken-container \
-v /tmp:/usr \
nginx:latest
1.5 읽기 전용 호스트 볼륨
디렉터리를 읽기 전용 바인드 마운트로 사용하려면 다음의 예제를 따릅니다.
# --mount
docker run -d \
-it \
--name devtest \
--mount type=bind,source="$(pwd)"/target,target=/app,readonly \
nginx:latest
# -v
docker run -d \
-it \
--name devtest \
-v "$(pwd)"/target:/app:ro \
nginx:latest
2. tmpfs 마운트
- Linux에서 Docker를 실행하는 경우
tmpfs라는 세 번째 마운트 옵션을 사용할 수 있습니다.tmpfs마운트로 컨테이너를 생성하면 컨테이너는 쓰기 가능한 레이어 외부(호스트 메모리)에 파일을 생성할 수 있습니다. - 호스트 볼륨이나 도커 볼륨과는 달리
tmpfs마운트는 일시적으로 호스트 메모리에서만 데이터가 지속됩니다. 컨테이너가 중지되면tmpfs마운트가 제거됨과 동시에 거기에 기록된 파일도 삭제됩니다. - 이는 호스트 또는 컨테이너 쓰기 가능 계층에 유지하지 않으려는 중요한 파일을 임시로 저장하는 데 유용합니다.
2.1 tmpfs 마운트의 한계
- 호스트 볼륨 및 도커 볼륨과 달리
tmpfs는 컨테이너 간에 마운트를 공유할 수 없습니다. - 이 기능은 Linux에서 Docker를 실행하는 경우에만 사용할 수 있습니다.
2.2 생성
컨테이너와 함께 tmpfs 볼륨을 생성하려면 --tmpfs 또는 --mount 플래그를 사용합니다.
--tmpfs:tmpfs에서 구성 가능한 옵션을 지정하지 않고 마운트합니다.--mount <key>=<value>: 쉼표로 구분된 여러 키-값 쌍으로 구성됩니다.type옵션에는tmpfs을 사용합니다.dst또는target으로 컨테이너에 마운트될 경로를 지정합니다. (destination도 가능)tmpfs-size,tmpfs-mode옵션을 사용할 수 있습니다.
# --mount
docker run -d \
-it \
--name tmptest \
--mount type=tmpfs,destination=/app \
nginx:latest
# --tmpfs
docker run -d \
-it \
--name tmptest \
--tmpfs /app \
nginx:latest
2.2.1 tmpfs 옵션
tmpfs 마운트는 두 가지의 구성 옵션을 허용하며 두 가지 옵션은 반드시 필요하진 않습니다. 옵션을 지정해야 하는 경우 --tmpfs 플래그 대신 --mount 플래그를 사용 해야합니다.
tmpfs-size: tmpfs 마운트 크기(바이트)입니다. 기본적으로 제한이 없습니다.tmpfs-mode: tmpfs 파일 모드는 8진수로 표현합니다. 예를 들어, 700 또는 0770 으로 쓸 수 있습니다. 기본 값은 1777 입니다.- 소유자와 소유그룹 외에 다른 사용자가 컨테이너 내에 읽거나 쓸 수 없도록 하려면 다음의 예제를 따릅니다.
docker run -d \
-it \
--name tmptest \
--mount type=tmpfs,destination=/app,tmpfs-mode=1770 \
nginx:latest
2.3 --tmpfs와 --mount의 차이점
tmpfs플래그를 사용하면 구성 가능한 옵션을 지정할 수 없습니다.tmpfs플래그는 swarm 서비스와 함께 사용할 수 없습니다.
📌출처
👍 개인 공부 기록용 블로그입니다. 오류나 조언이 있으시면 언제든지 댓글 혹은 메일로 남겨주시면 감사하겠습니다! 😄
댓글남기기