CodeGym /행동 /Docker SELF /볼륨 마운트

볼륨 마운트

Docker SELF
레벨 12 , 레슨 2
사용 가능

8.1 가상 디스크 소개

볼륨(Volumes)을 마운트하는 것은 Docker의 가장 유용한 기능 중 하나야. 이를 통해 컨테이너는 호스트 머신의 데이터와 쉽게 작업할 수 있어. 이 기능은 데이터 관리를 유연하고 편리하게 만들어줘: 정보를 오래 저장할 수 있고, 컨테이너 간에 공유하거나 문제가 생겼을 때 백업 및 복구를 간단히 할 수 있어.

볼륨(Volumes)은 Docker에서 데이터를 컨테이너와 독립적으로 저장하는 방법이야. 컨테이너가 삭제되더라도 볼륨에 저장된 정보는 안전하게 유지돼. 볼륨을 컨테이너에 연결(마운트)할 수 있어서 데이터를 별도로 저장하고, 컨테이너를 몇 번 생성하거나 삭제하더라도 데이터를 재사용할 수 있어.

주요 볼륨 유형

  1. 익명 볼륨(Anonymous Volumes)
    • 컨테이너에 대해 명시적으로 볼륨을 지정하지 않으면 Docker가 자동으로 생성해.
    • 데이터를 임시로 저장하는 데 사용돼.
  2. 이름 있는 볼륨(Named Volumes)
    • Docker가 생성하고 관리해.
    • 여러 컨테이너에 연결할 수 있고, 삭제되거나 중지된 후에도 유지돼.
  3. 바인드 마운트(Bind Mounts)
    • 호스트 머신의 디렉토리를 컨테이너의 디렉토리와 연결해.
    • 호스트 시스템의 데이터에 접근할 때 이상적이며, 개발 중에 유용해.

docker run 명령어로 볼륨을 마운트하는 기본 문법


-v <host_path>:<container_path>

전체 문법:


docker run -v <host_path>:<container_path> [OPTIONS] IMAGE [COMMAND] [ARG...]

볼륨 마운트를 위한 주요 매개변수

1. -v 또는 --volume 파라미터

이름 있는 볼륨 또는 바인드 마운트를 생성하는 데 사용돼.

예제:

터미널

docker run -d -v /host/data:/container/data nginx

2. --mount 파라미터

볼륨을 더 유연하고 세부적으로 마운트할 수 있는 방법을 제공하며 추가 매개변수를 지원해.

예제:

터미널

docker run -d --mount type=bind,source=/host/data,target=/container/data nginx

8.2 볼륨 생성 및 사용

1. 명명된 볼륨

명명된 볼륨은 Docker에 의해 생성 및 관리돼. 이는 컨테이너를 다시 시작하거나 삭제하더라도 데이터를 유지해야 할 때 장기 데이터 저장에 적합해.

명명된 볼륨 생성:

Terminal

docker volume create my_volume

볼륨을 마운트한 컨테이너 실행:

이 예시에서 볼륨 my_volume은 컨테이너 my_container/data 디렉토리에 마운트돼. /data에 기록된 모든 데이터는 볼륨에 저장되며, 컨테이너를 삭제한 후에도 접근 가능해.

Terminal

docker run -d -v my_volume:/data --name my_container nginx

2. 익명 볼륨

익명 볼륨은 Docker가 자동으로 생성하며 특정 컨테이너와 연결돼. 컨테이너 삭제 후 데이터를 유지할 필요가 없는 임시 데이터를 저장하는 데 유용해.

익명 볼륨을 사용한 컨테이너 실행:

이 예시에서 Docker는 자동으로 익명 볼륨을 생성하고 컨테이너 내부의 /data 디렉토리에 마운트할 거야.

Terminal

docker run -d -v /data --name my_container nginx

3. 바인드 마운트

바인드 마운트는 호스트 시스템의 디렉토리를 컨테이너에 마운트할 수 있게 해. 이는 컨테이너와 호스트 시스템 간 데이터를 공유할 때 편리해. 또한, 개발 과정에서 소스 코드를 호스트 시스템에 저장해야 할 때 자주 사용돼.

바인드 마운트를 사용한 컨테이너 실행:

이 예시에서 호스트 머신의 /host/data 디렉토리가 컨테이너 my_container 내부의 /container/data 디렉토리에 마운트돼.

Terminal

docker run -d -v /host/data:/container/data --name my_container nginx

8.3 볼륨 사용 예제

1. 데이터베이스 데이터 저장

볼륨을 데이터베이스에 사용하면, 컨테이너를 재시작하거나 업데이트해도 데이터를 보존할 수 있어. 이건 프로덕션 환경에서 안정성을 유지하는 데 아주 중요해.

예제:

이 예제에서 PostgreSQL 데이터는 db_data 볼륨에 저장돼, 그래서 컨테이너를 재시작하거나 삭제해도 데이터는 안전해.

Terminal

docker volume create db_data
docker run -d -v db_data:/var/lib/postgresql/data --name postgres_container postgres

2. 컨테이너 간 데이터 공유

가끔 몇 개의 컨테이너가 데이터를 공유해야 할 때가 있어. 볼륨을 사용하면 쉽게 해결할 수 있지.

예제:

볼륨을 생성하고 두 개의 컨테이너를 실행시켜서 이 볼륨을 사용할 수 있게 해보자. 두 컨테이너 모두 shared_data 볼륨의 데이터에 접근할 수 있어, 그래서 데이터를 공유할 수 있지.

Terminal

docker volume create shared_data
docker run -d -v shared_data:/data --name container1 nginx
docker run -d -v shared_data:/data --name container2 nginx

3. 개발 및 테스트

애플리케이션을 개발할 때, 컨테이너와 호스트 머신 간에 소스 코드를 공유하기 위해 바인드 마운트를 사용하는 게 편리해. 이렇게 하면 개발자들은 호스트에서 코드를 수정하고, 컨테이너는 바로 업데이트된 코드를 사용할 수 있어.

예제:

이 예제에서 호스트 머신의 /path/to/source 디렉토리가 컨테이너 dev_container 안의 /app 디렉토리에 마운트돼. 이렇게 하면 컨테이너가 호스트 시스템에서 최신 소스 코드를 바로 사용할 수 있어.

Terminal

docker run -d -v /path/to/source:/app --name dev_container node
<

8.4 볼륨 관리

Docker는 쉽게 볼륨을 생성하고, 삭제하고, 정보 조회할 수 있는 편리한 명령어들을 제공해.

1. 모든 볼륨 보기

이 명령어는 호스트 머신에서 사용할 수 있는 모든 볼륨 목록을 보여줘.

Terminal

docker volume ls

2. 볼륨 정보 보기

이 명령어를 사용하면 my_volume 볼륨에 대한 자세한 정보를 얻을 수 있어: 호스트 파일 시스템에서의 위치와 이 볼륨을 사용하는 컨테이너에 대한 정보 등.

Terminal

docker volume inspect my_volume

3. 볼륨 삭제

이 명령어는 my_volume 볼륨을 삭제해. 삭제 전에 볼륨이 어떤 컨테이너에서도 사용되고 있지 않은지 확인해야 해, 아니면 명령어가 실행되지 않을 거야.

Terminal

docker volume rm my_volume

8.5 볼륨 백업

데이터를 안전하게 보호하려면 볼륨의 백업을 생성하고 필요할 때 복원할 수 있는 기능이 중요해.

1. 볼륨 백업

이 예제에서는 my_volume 볼륨의 내용을 my_volume_backup.tar.gz 파일에 아카이브 하고, 이 파일은 호스트 머신의 /backup 디렉토리에 저장돼.

Terminal

docker run --rm -v my_volume:/volume -v /backup:/backup busybox tar czf /backup/my_volume_backup.tar.gz /volume

2. 볼륨 복원

이 예제는 my_volume_backup.tar.gz 파일에 저장된 백업에서 볼륨 my_volume 의 내용을 복원해.

Terminal

docker run --rm -v my_volume:/volume -v /backup:/backup busybox tar xzf /backup/my_volume_backup.tar.gz -C /volume
코멘트
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION