mjeongriver
article thumbnail
Published 2023. 3. 31. 14:35
day96-docker volume TIL/Docker

1. 도커 볼륨이란?

일반적으로 docker container는 컨테이너 내부에 데이터를 관리하므로, 컨테이너가 파기되면 데이터가 모두 날아가게 됩니다.

  • ex) 파일 업로드를 하게되면 파일은 도커 컨테이너 안에 남습니다.

컨테이너가 삭제되더라도 데이터를 유지해야 할 필요가 있습니다.

볼륨은 컨테이너와 관련된 특별한 유형의 폴더 입니다.

일반적으로 볼륨은 모든 데이터 유형을 저장할 수 있습니다.

볼륨을 사용하면 컨테이너 간에 데이터를 공유할 수 있습니다.

 

볼륨은 도커HOST에 저장됩니다. (컨테이너 밖에 저장된다는 의미)

그래서 컨테이너가 삭제된 경우에도 데이터 볼륨은 남아서 여전히 제어가 가능하게 할 수 있습니다.

 

host에 볼륨이 직접 생성되는 경로는 /var/lib/docker/볼륨명/_data가 됩니다. (참고-윈도우에서는 경로를 직접 볼 수 없음)

 

2. 도커 볼륨 명령어

 

볼륨 속성들을 확인

docker volume docker volume ls

 

볼륨생성

docker volume create <볼륨명> docker volume create webserver-upload

 

볼륨확인

docker inspect <볼륨명> docker inspect webserver-upload

 

볼륨삭제(도커 볼륨을 사용하고 있는 컨테이너를 삭제해도 볼륨이 자동으로 삭제되지는 않습니다.)

docker volume rm <볼륨명> docker volume rm webserver-upload

 

사용하지 않는 볼륨 정리

docker volume prune

 

볼륨 연결하기

  • 볼륨을 연결하는 방식은 여러가지 방식이 있습니다.
  • docker file사용하기 vs 컨테이너 생성시 볼륨 연결하기

 

3. 도커 볼륨 연결하기 1

 

방식1 - docker파일로 적용하기

도커 파일에서 volume을 선언하는 방법입니다.

이 방식은 host에 볼륨이 생성될 때 이름이 난수로 생성됩니다.

 

컨테이너가 삭제되고 나면 난수로 생성된 볼륨은 어떤 역할을 하는지 알 수 없습니다.

계속해서 변화되는 app에 적용하기에 알맞지 않습니다.

 

시나리오

  • 기존 webserver는 컨테이너는 삭제해주세요.

 

  • 프로젝트의 application.properties파일 변경

#업로드경로
project.uploadpath=/upload

 

  • 도커 파일을 수정 합니다.
    • 이렇게 되면 컨테이너 안에 upload폴더가 생성되고, host에는 랜덤 난수로 볼륨이 생성됩니다

VOLUME ["/upload"]

 

  • 그레이들 재빌드

./gradlew build

 

  • 이미지 빌드

docker build -t testvolume:v1 .

 

  • 컨테이너 배포

docker run --name webserver -d -p 8181:8484 --net web-network testvolume:v1

 

  • 업로드 확인, 컨테이너 안에 upload폴더를 확인, 볼륨을 확인
  • 확인 후에는 다음 실습을 위해 도커파일은 원복, 이미지삭제, 컨테이너삭제, 볼륨삭제을 삭제합니다.

 

4. 도커 볼륨 연결하기 2

 

방식2 - 컨테이너 생성시에 볼륨 직접 연결하기

직접 볼륨을 생성하고 컨테이너 배포시 볼륨은 연결(마운트) 하는 방법입니다. 새로운 컨테이너가 생성될 때 volume을 참조해서 만들어지며 data가 share된다.

 

시나리오

 

  • 볼륨생성

docker volume create webserver-upload

 

  • 볼륨 확인하기

docker inspect webserver-upload

 

  • 컨테이너 배포시 볼륨 마운트

docker run -v <호스트 볼륨 디렉토리>:<컨테이너의 볼륨 디렉토리> (이미지)

name옵션, 백그라운드옵션, 포트포워드옵션, 네트워크 옵션, 볼륨 옵션이 붙은 실행명령
docker run --name webserver -d -p 8181:8484 --net web-network -v webserver-upload:/upload myweb:v1

 

  • 동일 컨테이너를 여러개 만들고 공유되는지 확인하기

`docker run --name webserver2 -d -p 8282:8484 --net web-network -v webserver-upload:/upload myweb:v1

docker run --name webserver3 -d -p 8383:8484 --net web-network -v webserver-upload:/upload myweb:v1`

 

  • 가동중인 컨테이너에 직접 들어가서 upload폴더 확인하기 (백그라운드 서버는 exec로 접근)

docker exec -it webserver bash

'TIL > Docker' 카테고리의 다른 글

day96-docker compose  (0) 2023.03.31
day96-docker hub 저장소(feat.registry)  (0) 2023.03.31
day96-docker 네트워크  (0) 2023.03.31
day96-dockerfile  (0) 2023.03.31
day96-docker  (0) 2023.03.31
profile

mjeongriver

@mjeongriver

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!

검색 태그