문제 요약:
다른 디렉토리의 두 Docker Compose 설정에서 동일한 postgres_data, static_volume, media_volume를 사용하고 있다.
오류 메시지:
DB 데이터 간섭 가능성
postgres_data는 PostgreSQL 데이터가 저장되는 볼륨이다. 동일한 이름의 볼륨을 사용하면, 1차 개발과 2차 개발 모두 같은 데이터베이스 데이터를 참조하게 될 가능성이 있다.
정적 파일(static_volume) 및 미디어 파일(media_volume)
동일한 이름의 볼륨을 사용하면 1차와 2차 개발에서 업로드된 미디어 파일이나 정적 파일이 공유된다.
1차 개발 코드와 2차 개발 코드의 독립성을 높이기 위해 다른 volumes를 사용하도록 코드를 수정하습니다.
volumes:
postgres_data_v2:
static_volume_v2:
media_volume_v2:
기존의 1차 개발 코드의 volumes와 구분하기 위해 각 volumes의 뒤에 _v2를 붙여 독립적인 volumes를 생성하게 한다.
문제 요약: 두 개발 코드에서 동일한 포트(80, 443)와 동일한 이름의 컨테이너(nginx, web, db, certbot)를 사용.
오류 메시지:
Docker의 볼륨(volumes)은 컨테이너 외부에서 데이터를 영구적으로 저장하기 위한 Docker의 저장소 입니다. 볼륨은 Docker가 관리하는 특정 위치에 저장되며, 컨테이너와 호스트 간 데이터 공유를 지원합니다.
/var/lib/docker/volumes/
프로젝트에서 정의한 볼륨들이 고유한 이름을 가진 디렉토리로 저장됩니다.
docker-compose.prod.yml에서 정의된 볼륨은 다음과 같습니다.
volumes:
postgres_data_v2:
static_volume_v2:
media_volume_v2:
이들 볼륨은 각각의 Docker 컨테이너와 연결되며, 컨테이너가 삭제되어도 이 데이터는 유지됩니다.
볼륨이 실제로 저장된 경로를 확인하려면, 다음 명령을 사용하여 볼륨 경로를 찾을 수 있습니다.
docker volume inspect <볼륨이름>
예시 코드입니다.
docker volume inspect poko_ver2_postgres_data_v2
출력 예시
[
{
"CreatedAt": "2025-01-01T09:00:00Z",
"Driver": "local",
"Labels": null,
"Mountpoint": "/var/lib/docker/volumes/poko_ver2_postgres_data_v2/_data",
"Name": "poko_ver2_postgres_data_v2",
"Options": null,
"Scope": "local"
}
]
이때 Mountpoint가 실제 볼륨 데이터가 저장된 디렉토리를 의미합니다.
/var/lib/docker/volumes/poko_ver2_postgres_data_v2/_data
docker volume create
프로젝트 디렉토리와 Compose 파일 이름의 역할
COMPOSE_PROJECT_NAME을 기반으로 볼륨 이름을 생성합니다.COMPOSE_PROJECT_NAME을 지정하지 않으면, 기본적으로 Compose 파일이 위치한 디렉토리 이름이 프로젝트 이름으로 사용됩니다.~/github/Hello_Poko/docker-compose.yml → 프로젝트 이름: hello_poko~/poko_ver2/docker-compose.prod.yml → 프로젝트 이름: poko_ver2프로젝트 이름을 기준으로 자동으로 독립적 생성hello_poko_postgres_data는 1차 개발 프로젝트에 속한 볼륨.poko_ver2_postgres_data는 2차 개발 프로젝트에 속한 볼륨.