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 |