[Docker] Docker Volume_TIL

Docker Volume의 필요성

- Docker Container가 실행되었다가 중단되면 데이터들은 어떻게 될까? -> 모두 유실됨

- 특정 소프트웨어가 Docker Container를 통해 일회성으로 동작하는 것이 아니라 계속해서 동작해야 한다면 데이터가 영구적으로 보관되어야함 (ex. 데이터베이스가 Docker Container안에서 동작 시)

- 이를 보장하는 기능이 Docker volumes -> Data Persistence

- Docker Container내의 가상 파일 시스템과 호스트 시스템의 파일 시스템을 맵핑

  • 예) 호스트 파일 시스템의 /home/user/logs를 Docker Container의 /var/lib/airflow/logs로 맵핑
  • 이 경우 Docker Container가 중단되더라도 모든 Airflow logs는 기독이 남게 됨

 

Docker Volume의 정의

- 호스트 파일 시스템 폴더를 Docker Container 파일 시스템의 폴더로 마운트하는 것

  • 해당 폴더를 변경 시 호스트와 Docker Container 모두 반영됨 (읽기 전용으로 셋팅할 수 있음)

- 파일 시스템에서 마운트란?

  • 원래 마운트란 디스크와 같은 물리적인 장치를 파일 시스템의 특정 위치(폴더)에 연결해주는 것을 말함

 

Docker Volume 타입

1. Host Volumes: docker run -v를 실행할 때 페어로 지정

  • :앞이 호스트 파일 시스템 패스이고 뒤가 컨테이너 파일 시스템 패스
docekr run -v /home/user/logs:/var/airflow/logs

2. Anonymous Volumes: docker run -v를 시행할 때 컨테이너 패스만 지정

  • 이 방식이 Dockerfile에서 사용되는 방식으로 호스트쪽에 액세스되지는 않지만 재시작해도 유지됨
  • docker엔진이 랜덤하게 지정된 패스를 마운트된 폴더로 만들어줌(잘 사용하지 않은 방식)
docker run -v /var/lib/mysql/data

3. Named Vloumes: docker run -v를 실행할 때 이름과 컨테이너 패스를 지정

  • 가장 선호되는 방식으로, 이 방식이 하나의 Volume을 다수의 컨테이너에서 공유하는 것도 가능하게 해줌
docker run -v name:/var/lib/mysql/data

 

이미지 생성 시 Docker Volume 사용법

1. Dockerfile : VOLUME 명령을 통해 지정 할 수 있지만 anonymous vloume만 지정 가능

2. docker-compose : Host Volume이나 Named Vloume을 사용하는 것이 일반적

  • docker-compose란 여러 container를 사용할 수 있도록 기술된 yml파일

 

더보기

팁 : Docker 환경 클린업 - 커맨드 라인

● Docker Desktop에서 모든 삭제하는 것이 가장 직관적

    ○ Image를 삭제하려면 먼저 실행 중인 Container가 없어야함

    ○ 따라서 맞는 순서는 먼저 Container를 중단하고 다음으로 Image를 삭제

● 컨테이너 삭제

    ○ 원래는 docker container ls를 하고 Container ID를 개별적으로 docker container rm 뒤에 추가해야함

    ○ 하지만 한번에 이를 실행하는 것이 더 좋음 $ docker container rm -f $(docker container ls -aq)

    ○ $(docker container ls -aq) = docker container의 모든 컨테이너 ID를 가져옴

● 이미지 삭제

    ○ 원래는 docker image ls를 하고 Image ID를 개별적으로 docker image rm 뒤에 추가해야함

    ○ 하지만 한번에 이를 실행하는 것이 더 좋음 $ docker image rm -f $(docker image ls -q)

● 정말 다 삭제되었는지 확인

    ○ docker ps

    ○ docker images

 

 

'Programmers TIL' 카테고리의 다른 글

[K8s] Kubernetes(K8s)_TIL  (1) 2023.06.16
[Docker] Docker Compose_TIL  (1) 2023.06.15
[Docker] Docker 명령 정리_TIL  (0) 2023.06.14
[Docker] Docker 개발 프로세스_TIL  (3) 2023.06.12
[Docker] Docker와 K8s_TIL  (1) 2023.06.12