docker-compose의 volumes 구문을 이해하려면 다음 세 가지 핵심 개념을 알아야 합니다.
1. 볼륨(Volume)
도커 볼륨은 컨테이너가 생성, 실행, 삭제될 때 컨테이너의 수명 주기와 독립적으로 데이터를 저장하고 관리하는 데 사용되는 메커니즘입니다. 이는 컨테이너가 사라져도 데이터는 보존되게 하여 영속성을 확보합니다.
볼륨을 사용하는 방법은 크게 세 가지입니다.
- 익명 볼륨(Anonymous Volumes): docker run -v /data와 같이 이름 없이 사용하며, 컨테이너가 제거될 때 함께 삭제되는 경우가 많습니다.
 - 네임드 볼륨(Named Volumes): docker volume create my-volume처럼 이름을 부여하여 관리하며, 컨테이너가 삭제되어도 데이터가 안전하게 보존됩니다.
 - 바인드 마운트(Bind Mounts): 호스트 머신의 특정 경로를 컨테이너의 특정 경로에 연결합니다. 사용자가 직접 경로를 지정하므로 가장 많이 사용되는 방식입니다. docker-compose.yml 파일에 ${CI_PROJECT_DIR:-../../}:/app 구문이 바로 이 바인드 마운트 방식입니다.
 
2. 셸 확장(Shell Expansion)
$VARIABLE, ${VARIABLE}, ${VARIABLE:-default}와 같은 구문은 운영체제 셸(Shell)에서 환경 변수를 다루는 문법입니다. Docker Compose는 이 문법을 지원하여 동적인 설정을 가능하게 합니다.
- $VARIABLE: VARIABLE이라는 환경 변수의 값을 가져옵니다.
 - ${VARIABLE:-default}: VARIABLE이라는 환경 변수가 정의되지 않았거나 비어 있는 경우, default라는 값을 대신 사용합니다. 질문에 나온 :-가 바로 이 역할을 합니다. 이는 CI/CD 환경처럼 변수가 설정된 곳에서는 해당 값을 사용하고, 로컬 개발 환경처럼 변수가 없는 곳에서는 기본값을 사용하도록 유연성을 제공합니다.
 
3. 리눅스 권한(Linux Permissions)
리눅스 및 유닉스 기반 시스템에서는 파일과 디렉터리에 대한 접근을 제어하기 위해 권한 시스템을 사용합니다. 이는 다음과 같이 세 가지 주체와 세 가지 권한으로 나뉩니다.
- 주체:
- 소유자(User): 파일 또는 디렉터리를 생성한 사람.
 - 그룹(Group): 소유자와 같은 그룹에 속한 사람들.
 - 기타(Others): 소유자나 그룹에 속하지 않은 모든 사용자.
 
 - 권한:
- 읽기(r): 파일의 내용을 읽거나 디렉터리의 파일 목록을 볼 수 있는 권한.
 - 쓰기(w): 파일의 내용을 수정하거나 디렉터리에 파일을 생성, 삭제할 수 있는 권한.
 - 실행(x): 파일을 실행하거나 디렉터리에 접근할 수 있는 권한.
 
 
chmod 777, chmod 755와 같은 숫자는 이 권한들을 8진법으로 표현한 것입니다.
- 첫 번째 자리(소유자): 4(읽기) + 2(쓰기) + 1(실행)의 합.
 - 두 번째 자리(그룹): 동일
 - 세 번째 자리(기타): 동일
 
따라서 755는 (4+2+1)(4+0+1)(4+0+1)로 소유자에게는 읽기/쓰기/실행 권한을, 그룹과 기타 사용자에게는 읽기/실행 권한만 부여하는 것을 의미합니다. Docker 컨테이너가 호스트의 특정 디렉터리에 접근할 때 권한 문제가 발생하는 것은 컨테이너의 실행 사용자가 호스트 디렉터리의 소유자, 그룹, 또는 기타 사용자의 권한을 제대로 부여받지 못했기 때문입니다.
Questions
1. UID와 GID는 왜 동일한가?
UID와 GID에 대한 이해
UID(User ID)와 GID(Group ID)는 리눅스 시스템에서 사용자와 그룹을 식별하는 고유한 번호입니다. 사용자 이름(예: user1, root)은 사람이 읽기 쉽게 만들어진 별명이며, 시스템은 실제로 이 번호를 사용해 권한을 관리합니다.
- root 사용자의 UID는 항상 0입니다.
- root는 시스템의 모든 권한을 가진 최고 관리자 계정입니다. 그래서 UID 0은 특별한 의미를 가집니다.
 
 - 일반 사용자의 UID는 보통 1000부터 시작합니다.
- 최신 리눅스 배포판에서는 관례적으로 첫 번째로 생성되는 일반 사용자에게 UID 1000을 부여합니다.
 
 - UID와 GID가 같은 이유:
- 일반적으로 사용자가 생성되면 동일한 이름의 그룹이 함께 생성됩니다. 예를 들어, user1을 만들면 user1 그룹(GID 1000)도 함께 만들어지고, user1 사용자가 이 그룹의 유일한 멤버가 됩니다. 이렇게 하면 각 사용자가 자신의 파일을 독립적으로 관리할 수 있어 편리합니다.
 
 
'클라우드 & DevOps > DevOps ∕ Docker' 카테고리의 다른 글
| [Docker] GitLab CI/CD: Docker 볼륨 권한 문제를 해결하기 (0) | 2025.10.15 | 
|---|---|
| [Docker] gitlab-runner 기동 시, 권한 문제 해결하기 (0) | 2025.09.11 | 
| [Docker] 오프라인 환경에서 gitlab runner 기동 시, docker offline 설정하기 (0) | 2025.09.10 | 
| [Docker] gitlab docker 구동 시, domain 대신 ip와 port 사용하기 (0) | 2025.09.10 | 
| [Docker] 컨테이너에서 호스트 PC 서비스 접근하기: host.docker.internal (0) | 2025.09.01 | 





최근댓글