개요
docker에서 외부에 저장하고 싶은 data를 어떻게 관리하는지 알아보겠습니다.
volume고 bind mount에 대하여 알아보겠습니다.
목차
volume의 목적
docker에서 volume 사용법
bind mount의 목적
bind mount의 사용법
volume과 bind mount의 차이점
volume driver의 역할
volume driver의 종류
volume의 목적
Docker 볼륨 (Volume)은 컨테이너화된 애플리케이션의 데이터를 저장하거나 공유하기 위한 목적으로 사용됩니다
docker에서 volume 사용법
생성
docker volume create my-volume
volume 확인
명령어로 확인
docker volume ls
실제 위치 확인
{Docker Root Dir}/volume 에 존재합니다.
container와 연결
아래 명령에서 my-volume은 volume 이름이고, /path/in/container는 컨테이너 내부에서 해당 volume이 mount 될 경로입니다.
docker run -d --name my-container -v my-volume:/path/in/container my-image
volume 정보 확인
docker volume inspect my-volume
volume 삭제
docker volume rm my-volume
Docker Compose에서 사용
docker-compose.yml
version: '3'
services:
my-service:
image: ubuntu
command: /bin/bash # 컨테이너가 실행할 명령어. 여기서는 /bin/bash를 실행합니다.
tty: true # TTY를 활성화하여 /bin/bash가 계속 실행되게 합니다.
volumes:
- my-volume:/test-volume #/path/in/container
volumes:
my-volume:
실행
docker-compose up -d
접속
docker exec -it ubuntu-service /bin/bash
volume 확인
test-volume이 존재합니다.
익명 volume
명시적으로 볼륨을 생성하지 않고, 컨테이너를 실행할 때 볼륨을 생성하도록 할 수도 있습니다. 이를 익명 볼륨이라고 합니다.
위와 같이 실행하면 Docker는 자동으로 볼륨을 생성하고 컨테이너에 연결합니다.
docker run -d --name my-container -v /path/in/container my-image
bind mount의 목적
bind mount를 사용하면 host system의 특정 경로를 직접 지정하여 mount 합니다. 이 경로에 있는 data는 container 내에서 직접 수정할 수 있습니다. 개발 특별한 설정이 필요한 경우에 유용합니다.
bind mount의 사용법
docker run -v /path/on/host:/path/in/container my-image
volume과 bind mount의 차이점
volume은 docker에게 외부 데이터의 공간에 대한 관리는 위임하는 것
bind mount 내가 직접 외부 데이터의 공간을 관리하는 것
volume driver의 역할
Volume Driver는 container 된 application과 storage solution 간의 interface를 제공합니다.
특히 volume driver를 사용하면 host의 local file system 이외의 다양한 storage backend를 사용하여 데이터를 저장할 수 있기 때문에 storage solution이 remote 원격을 지원한다면 container에서 remote storage를 마치 local storage처럼 사용가능하게 해 줍니다.
volume driver의 종류
volume driver 별 사용법은 driver와 호환되는 storage service의 설정에 크게 의존합니다. 아래는 몇 가지 일반적인 volume driver의 사용 예입니다.
Local (기본 drvier)
Docker의 기본 local volume driver는 특별한 설정 없이 사용할 수 있습니다.
docker volume create --name my_local_volume
docker run -v my_local_volume:/path/in/container my-image
NFS (Network File System)
NFS 볼륨 드라이버 플러그인을 설치한 후 사용할 수 있습니다.
docker volume create --driver=nfs --name my_nfs_volume -o share=server:/path
docker run -v my_nfs_volume:/path/in/container my-image
AWS EBS (Elastic Block Store)
AWS에서 실행되는 경우, AWS의 EBS 볼륨을 사용할 수 있습니다. AWS의 Docker Machine 드라이버나 ECS를 통해 설정할 수 있습니다.
docker volume create --driver=rexray/ebs --name my_ebs_volume --opt=size=5
docker run -v my_ebs_volume:/path/in/container my-image
Azure File Storage
Azure에서 Docker를 실행하는 경우 Azure File Storage를 볼륨으로 사용할 수 있습니다.\
docker volume create --driver=azurefile --name my_azure_volume -o share=myshare
docker run -v my_azure_volume:/path/in/container my-image
Ceph
Ceph 드라이버를 사용하여 Ceph 스토리지에 접근할 수 있습니다.
docker volume create --driver=ceph --name my_ceph_volume
docker run -v my_ceph_volume:/path/in/container my-image
Portworx
Portworx는 쿠버네티스와 잘 통합되며, 다음과 같이 볼륨을 생성할 수 있습니다.
docker volume create --driver pxd --name my_portworx_volume --opt size=5
docker run -v my_portworx_volume:/path/in/container my-image
이 명령어들은 일반적인 예시이며, 실제로 각 dirver와 storage solution에 따라 추가 설정이나 인증 정보가 필요할 수 있습니다.
해당 드라이버의 문서를 참고하면 좀 더 상세한 정보와 설정 방법을 알 수 있습니다
정리
volume은 container가 data를 유지하기 위한 기능입니다.
volume을 사용하기 위해서 storage solution에서 제공하는 volume dirver를 사용하면 됩니다.
bind mount는 local system에서 사용자가 직접 해당 위치를 container에 mount 하는 기능입니다.
Next Post
'Cloud > k8s-CKA' 카테고리의 다른 글
[CKA] 35. Security - TLS통신 이해를 위한 PKI 기본 지식 (0) | 2023.09.17 |
---|---|
[CKA] 34. volume 과 PV 그리고 PVC (0) | 2023.09.03 |
[CKA] 32. docker의 image layer관리 (storage driver) (0) | 2023.08.15 |
[CKA] 31. service - plugin (0) | 2023.07.27 |
[CKA] 30. CoreDNS (0) | 2023.07.25 |