들어가며
도커(Docker)는 경량화된 컨테이너 기술로, 무상태(stateless) 아키텍처를 기반에 두고 있다. 컨테이너는 빠르게 생성,삭제가 가능하다는 장점이 있어서, 트래픽 급증에도 유연하게 대응할 수 있지만, 컨테이너 내부에 데이터를 저장할 경우, 삭제 시 함께 사라진다는 단점이 있어 이를 보완하기 위해 Docker에서는 스토리지(Storage) 개념과 볼륨(Volume) 기능을 함께 제공해줄 수 있다
본문
이번 포스팅에서는 도커 스토리지와 볼륨의 특징, 그리고 직접 실습했던 내용을 공유해보려고 한다
도커 스토리지

먼저 도커 스토리지에 대해서 이해하려면, 레이어와 상태 관리의 개념이 중요하다고 생각한다.
- 이미지(Image): 여러 읽기 전용 레이어(Read-only layer)가 쌓여 있는 형태
- 컨테이너(Container): 기존 이미지 위에 쓰기 가능한(Read-write) 레이어가 추가된 상태
위 설명처럼, 컨테이너가 삭제되면 마지막에 생성된 쓰기 레이어도 함께 사라지게 된다. 그래서 컨테이너 자체는 상태를 보존하지 않고 매번 클린 상태에서 실행되기때문에, 버전 업그레이드나 코드 배포 시 이미지 빌드만 갱신하면 빠르게 롤링 업데이트가 가능하다는 특징이 있다
전통적 가상 머신 방식 vs 컨테이너 방식
전통적인 가상머신/물리서버 방식인 Pet은 개별 서버를 소중히 관리하는데 비해서, Cattle 방식은 문제가 생기면 새 컨테이너를 띄우고 기존을 대체하는 구조를 가진다

아래 실습 cat indexfromcontainer.html 명령어로, 도커 내부의 파일을 호스트로 복사한후 cat명령어로 HTML내용을 확인할 수 있었다

도커 볼륨
영속성 (Persistence)
컨테이너 삭제나 재생성 시에도 데이터가 유지되는 기능을 영속성이라 한다. 데이터베이스는 한 번 생성한 데이터를 잃으면 안되기때문에 영속성을 확보하기 위해 도커 볼륨을 사용해줄 수도 있다
마운트란 ? (Mount)
외부 저장소(볼륨)를 컨테이너 내부 디렉토리와 연결하는 것을 의미하는데, 도커 볼륨 기능을 통해서 외부 공유 저장소에 저장하고, 컨테이너와 공유하기 위해서 공유 폴더를 만들어주는 작업을 볼륨을 마운트한다고 말한다
볼륨 생성 및 마운트 실습
1. 볼륨 생성
$ docker volume create mydata
2. 컨테이너 실행 시 마운트
$ docker run -d --name my-postgres \
-e POSTGRES_PASSWORD=password \
-v mydata:/var/lib/postgresql/data \
postgres:13
3. DB 생성 & 확인
$ docker exec -it my-postgres \
psql -U postgres -c "CREATE DATABASE mydb;"
$ docker exec -it my-postgres \
psql -U postgres -c "\list"
실습한 코드 전체



참고한 자료
'DevOps > Docker' 카테고리의 다른 글
| 도커로 레디스 띄워서 스프링 컨테이너랑 통신하기 (DevOps) (3) | 2025.07.29 |
|---|---|
| 도커 네트워크, 실습 (DevOps) (0) | 2025.05.26 |
| 클라우드 네이티브 애플리케이션 + LEAFY 실습 (DevOps) (0) | 2025.05.11 |
| 이미지 레지스트리와 빌드 (DevOps) (0) | 2025.05.11 |
| Docker 이미지와 컨테이너 (DevOps) (1) | 2025.05.11 |