728x90
반응형
Docker Volume?
Docker Container가 실행되었다가 중단된다면, 그 안에 있는 데이터들은 일반적으로 유실된다. 하지만 Container에서 DB같은 프로그램이 동작하는거라면, 그 데이터가 유실되면 안될 것이다.
그 데이터를 보장하는 기능이 Docker Volume이라고 할 수 있다. Docker Volume은 Docker Container의 가상 파일 시스템과 호스트 시스템(OS)의 파일 시스템을 맵핑해 기록을 남기는 방식으로 데이터를 저장한다.
위와 같은 방식으로 Container의 특정 폴더 경로를 OS 시스템의 포더 경로와 마운트해 해당 폴더를 공유하는 것이다.
Docker Volume 타입
- Host Volumes: docker run -v를 실행할 때 페어로 지정
- docker run -v /home/minding/logs:/var/lib/airflow/logs
- Anonymous Volumes: docker run -v를 실행할 때 컨테이너 패스만 지정
- docker run -v /var/lib/mysql/data
- Dockerfile에서 사용되는 방식으로, 호스트 시스템에 저장되지는 않지만 재시작해도 유지됨
- Named Volumes: docker run -v를 실행할 때 이름과 컨테이너 패스를 지정
- docker run -v name:/var/lib/mysql/data
- 이 방식이 하나의 Volume을 다수의 컨테이너에서 공유하는 것도 가능하게 해줌
- docker compose에서도 사용되는 방식
이미지 생성시 Docker Volume 사용법
- Dockerfile
- VOLUME 명령을 통해 anonymous volume만 지정 가능
- docker compose
- Host volume이나 Named Volume을 사용하는 것이 일반적
Docker-compose.yaml 파일 예시(Airflow)
Docker를 통해 airflow를 설치했을 경우 docker-compose.yaml 파일에는 아래와 같이 volume이 지정되어 있다.
...
volumes:
- ${AIRFLOW_PROJ_DIR:-.}/airflow/dags:/opt/airflow/dags
- ${AIRFLOW_PROJ_DIR:-.}/logs:/opt/airflow/logs
- ${AIRFLOW_PROJ_DIR:-.}/config:/opt/airflow/config
- ${AIRFLOW_PROJ_DIR:-.}/airflow/plugins:/opt/airflow/plugins
- ${AIRFLOW_PROJ_DIR:-.}/airflow/files:/opt/airflow/files
...
나의 경우 minding 폴더 아래에 airflow 폴더가 위치해 있기 때문에, 'minding/airflow/dags'가 airflow의 '/opt/airflow/dags'와 마운트되어 있는 것이다.
Docker Volume 명령어
- docker volume ls: docker volume 리스트 출력
- docker volume rm: 특정 volume 삭제
- docker volume prune: 사용되지 않는 모든 volume 삭제
- docker volume inspect: 특정 volume의 상세정보 출력
728x90
'Minding's Programming > Knowledge' 카테고리의 다른 글
[Kafka/Python] Kafka 설치 방법(Conduktor) (1) | 2024.12.05 |
---|---|
[Python/Unittest] Unittest (0) | 2024.12.02 |
[CI/CD] CI, CD 개념 및 Github Actions (1) | 2024.11.14 |
[BI/시각화] Superset (1) | 2024.10.31 |
[Snowflake] Snowflake 알아보기 (설치 방법) (0) | 2024.10.31 |