DockerDocker 기초강의 6개 중 4번째난이도 기초

볼륨과 네트워크 — 데이터 영속성과 컨테이너 통신

발행 읽는 시간 약 1 분

  • Docker
  • 볼륨
  • 네트워크
  • 데이터영속성
  • 컨테이너통신

강의 소개

Docker 볼륨으로 컨테이너 데이터를 영구 저장하고, 네트워크로 컨테이너 간 안전한 통신을 설정하는 방법을 배웁니다.

볼륨이 필요한 이유#

컨테이너는 삭제되면 내부 데이터도 사라집니다.

Bash
# ❌ 데이터가 컨테이너에 저장됨
docker run postgres
docker rm postgres  # 데이터 사라짐!

# ✅ 볼륨에 저장
docker run -v postgres_data:/var/lib/postgresql/data postgres
docker rm postgres  # 컨테이너 삭제
docker run -v postgres_data:/var/lib/postgresql/data postgres  # 데이터 유지됨!

볼륨 종류#

Diagram · Mermaid

Named Volume#

Bash
# 볼륨 생성
docker volume create my-data

# 볼륨 목록
docker volume ls

# 볼륨 상세
docker volume inspect my-data

# 볼륨 마운트
docker run -v my-data:/app/data my-app

# 볼륨 삭제 (컨테이너가 사용 중이 아닐 때)
docker volume rm my-data

# 사용하지 않는 볼륨 모두 삭제
docker volume prune

Bind Mount (개발 환경)#

호스트 폴더를 컨테이너에 연결합니다. 코드 변경이 즉시 반영됩니다.

Bash
# 현재 폴더를 컨테이너 /app에 마운트
docker run -v $(pwd):/app -v /app/node_modules node:20 npm run dev

# docker-compose.yml에서
volumes:
  - .:/app                  # 소스 마운트
  - /app/node_modules       # anonymous volume으로 덮어쓰기 방지

네트워크#

Diagram · Mermaid

같은 네트워크의 컨테이너는 서비스명으로 통신합니다.


네트워크 설정#

Bash
# 네트워크 생성
docker network create my-network

# 컨테이너를 네트워크에 연결
docker run --network my-network --name db postgres
docker run --network my-network --name app my-app

# app에서 db로 접속: host = "db"
# DATABASE_URL=postgresql://postgres:pass@db:5432/mydb

# 네트워크 확인
docker network ls
docker network inspect my-network

docker-compose.yml 네트워크#

YAML
services:
  app:
    build: .
    networks:
      - frontend
      - backend

  db:
    image: postgres:16
    networks:
      - backend  # app과만 통신, 외부 접근 불가

  nginx:
    image: nginx
    ports:
      - "80:80"
    networks:
      - frontend  # 외부 접근 허용

networks:
  frontend:
  backend:
    internal: true  # 외부 인터넷 차단

데이터 백업과 복원#

Bash
# PostgreSQL 데이터 백업
docker compose exec db pg_dump -U postgres mydb > backup.sql

# 복원
docker compose exec -T db psql -U postgres mydb < backup.sql

# 볼륨 전체 백업 (tar)
docker run --rm \
  -v postgres_data:/source \
  -v $(pwd):/backup \
  alpine tar czf /backup/postgres_backup.tar.gz -C /source .

# 복원
docker run --rm \
  -v postgres_data:/target \
  -v $(pwd):/backup \
  alpine tar xzf /backup/postgres_backup.tar.gz -C /target

정리#

개념설명
Named Volume이름으로 관리되는 Docker 볼륨
Bind Mount호스트 파일시스템 직접 연결
네트워크컨테이너 간 격리된 통신 공간
서비스 디스커버리같은 네트워크에서 이름으로 접속

다음 편에서는 Docker 실전 배포 — 레지스트리 푸시부터 프로덕션 배포까지를 배웁니다.

Follow · Ask · Work

이 글이 도움이 됐다면

짧은 작업 기록과 데모는 인스타그램에 올립니다. 만들고 싶은 것이 있다면 프로젝트 의뢰나 협업 제안도 편하게 보내 주세요.

글쓴이

파란여우

직접 만든 AI 앱·제품의 개발·배포를 공개하는 실전형 테크 크리에이터

파란여우 소개 Instagram @bluefox._.hi

이어서 보기

만들고 싶은 것이 있다면 프로젝트 의뢰로 알려 주세요.