일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- 인공지능
- airflow
- 웹개발
- 예제프로젝트
- ADP
- docker
- 파이썬
- 플라스크
- 도커 컴포즈
- 프로그래밍
- 개발자
- c++
- 장고
- 장고 튜토리얼
- 에어플로우 기초강의
- 기초강의
- mlops
- C언어
- Python
- flask
- 파이썬강의
- 개발언어
- 개발자취업
- 장고 기초 강의
- cpp
- c
- 파이썬 장고
- Django
- 쇼핑몰예제
- 도커
- Today
- Total
TITEDIOS 편한 코딩
[Docker]#16 Volume - 볼륨과 마운트, 데이터 보존 방법 본문
TL;DR
도커에서 데이터 볼륨(Volumes)과 마운트(Mounts)는 컨테이너와 호스트 간의 데이터를 공유하고 영속성(Persistence)을 제공하는 중요한 개념입니다. 볼륨은 도커가 관리하는 디렉토리에 데이터를 저장하며, 마운트는 호스트의 파일 시스템을 컨테이너에 연결합니다. 두 방법 모두 데이터를 유지하고 여러 컨테이너 간에 공유할 수 있도록 합니다.
목차
- 도커에서 데이터 관리의 중요성
- 도커 볼륨(Volumes)이란?
- 도커 볼륨의 종류
- 도커 마운트(Mounts)란?
- 볼륨과 마운트의 차이점
- 볼륨 및 마운트의 활용 예제
결론
1. 도커에서 데이터 관리의 중요성
도커 컨테이너는 메모리 공간에서 동작합니다. 메모리 공간에서 격리된 애플리케이션 공간을 생성하고 작업을 수행합니다. 따라서, 도커 컨테이너는 일반적으로 일시적인(Stateless) 특성을 가지고 있어, 컨테이너가 종료되면 그 안의 데이터도 함께 사라집니다. 그러나 애플리케이션의 영속적인 데이터 저장이 필요할 때, 컨테이너 외부에 데이터를 저장해야 합니다. 이를 위해 도커는 볼륨과 마운트 기능을 제공합니다. 이 기능을 통해 컨테이너 간에 데이터를 공유하거나, 컨테이너가 종료되어도 데이터를 유지할 수 있습니다.
2. 도커 볼륨(Volumes)이란?
도커 볼륨은 컨테이너의 데이터를 호스트 파일 시스템 외부에 저장할 수 있는 메커니즘입니다. 예를 들어, 시스템 로그를 저장할 필요가 있을 것입니다. 컨테이너 내부에서 일어나는 일을 로그로 쌓고 이를 외부에 영속적으로 저장해야 합니다. 볼륨은 도커가 관리하는 디렉토리에 위치하며, 기본적으로 /var/lib/docker/volumes/ 경로에 저장됩니다. 볼륨은 컨테이너 수명과 관계없이 데이터를 지속적으로 유지할 수 있어, 컨테이너를 중지하거나 삭제해도 데이터가 유지됩니다.
볼륨 사용 예:
docker volume create my-volume
# my-volume과 컨테이너 내부 /app/data경로와 연결
# volume 사용
docker run -d \
--name my-container \
-v my-volume:/app/data
nginx:latest
# mount 사용
docker run -d \
--name devtest \
--mount source=my-volume,target=/app/data \
nginx:latest
위 예제에서 my-volume이라는 볼륨이 생성되고, 이 볼륨이 컨테이너 내 /app/data 경로에 마운트됩니다. 앞으로의 예제는 volume 옵션을 사용하겠습니다.
3. 도커 볼륨의 종류
- 익명 볼륨(Anonymous Volumes): 이름이 지정되지 않은 볼륨으로, 컨테이너가 생성될 때 자동으로 만들어지며, 컨테이너가 삭제될 때 함께 삭제됩니다.
- 이름 있는 볼륨(Named Volumes): 명시적으로 이름이 지정된 볼륨으로, 컨테이너가 삭제되더라도 볼륨은 유지됩니다.
익명 볼륨 예제:
docker run -d -v /data nginx
여기서는 /data가 익명 볼륨으로 생성됩니다.
이름 있는 볼륨 예제:
docker run -d --name my-container -v my-named-volume:/data nginx
여기서는 my-named-volume이라는 이름이 있는 볼륨이 생성됩니다.
4. 도커 마운트(Mounts)란?
도커 마운트는 호스트 파일 시스템의 특정 디렉토리 또는 파일을 컨테이너 내의 특정 경로에 연결하는 방법입니다. 마운트는 크게 세 가지 유형으로 나뉩니다: 볼륨 마운트, 바인드 마운트(Bind Mount), 템프FS 마운트(tmpfs Mount)입니다.
- 볼륨(Volumes): 도커가 관리하는 저장소로, 컨테이너 간에 공유하기 쉽고, 컨테이너가 삭제되더라도 데이터를 유지할 수 있습니다. 볼륨은 도커 CLI를 통해 쉽게 관리할 수 있습니다.
- 바인드 마운트(Bind Mounts): 호스트 파일 시스템의 특정 경로를 컨테이너에 연결합니다. 호스트 시스템의 파일 구조에 강하게 의존합니다.
- 템프FS 마운트(tmpfs Mounts): 휘발성 데이터 저장을 위해 사용하며, 컨테이너가 중지되면 데이터가 삭제됩니다.
마운트 사용 예:
docker run -d --name my-container -v /host/data:/container/data nginx
바인드 마운트 예제:
docker run -d --name my-container -v /host/data:/container/data nginx
템프FS 마운트 예제:
docker run -d --name my-container --tmpfs /app nginx
여기서는 호스트의 /host/data 디렉토리를 컨테이너의 /container/data 디렉토리에 마운트합니다.
5. 볼륨과 마운트의 차이점
Volumes
Learn how to create, manage, and use volumes instead of bind mounts for persisting data generated and used by Docker.
docs.docker.com
도커의 볼륨과 마운트는 사실 큰 차이는 없습니다. 다만, 마운트는 직접적으로 볼륨을 컨테이너에 연결하는 방법을 의미하는 것이고 볼륨은 생성된 저장공간 그 자체를 의미합니다.
6. 볼륨 및 마운트의 활용 예제
데이터베이스 컨테이너와 볼륨:
docker run -d --name mysql-container -v mysql-data:/var/lib/mysql mysql
MySQL 데이터베이스 데이터를 mysql-data 볼륨에 저장하여, 컨테이너를 재시작해도 데이터가 유지됩니다.
개발 환경에서 바인드 마운트 활용:
docker run -d --name dev-container -v $(pwd):/app node
현재 작업 디렉토리를 컨테이너의 /app 경로에 마운트하여, 호스트 파일을 수정하면 컨테이너에서도 바로 반영됩니다.
결론
도커의 데이터 볼륨과 마운트 기능은 컨테이너의 단점인 비영속성을 극복하고, 데이터를 안전하게 보관하고 공유할 수 있는 강력한 도구입니다. 볼륨은 도커가 자체 관리하여 편리하게 사용할 수 있으며, 마운트는 더 유연하게 호스트의 파일 시스템을 활용할 수 있습니다. 도커 컨테이너에서 작업한 결과를 저장할 필요가 있을 때 적절하게 활용한다면 여러분의 서비스가 좀 더 잘 동작함은 물론 더욱 발전할 수 있을 것입니다.
도움이 되셨다면 공감 부탁드리겠습니다. 여러분의 공감이 정말 큰 힘이 됩니다.
감사합니다!
'Docker' 카테고리의 다른 글
[Docker]#18 Docker 데이터 백업 - Volume 의 활용 방법 및 가이드 (0) | 2024.08.30 |
---|---|
[Docker]#17 Volume - 데이터 유지 및 공유 가이드 (4) | 2024.08.29 |
[Docker]#15 Docker network - 도커 네트워크 기초 강의 (1) | 2024.08.27 |
[Docker]#14 Dockerfile - 이미지 빌드 및 최적화 방법 (0) | 2024.08.26 |
[Docker]#13 Dockerfile 작성법 - 나만의 도커 이미지 만들기 (0) | 2024.08.23 |