728x90

- 목적: macOS에서 Docker 데스크탑 없이 Colima로 컨테이너/쿠버네티스(k3s) 환경을 안정적으로 운영하고, 데이터(볼륨)를 안전하고 관리하기 쉬운 호스트 디렉토리 구조에 보관
- 핵심 아이디어: Colima VM(리마/Lima 기반)에 호스트 디렉토리 마운트를 미리 지정하면, Docker
bind mount나 Compose 볼륨을 통해 컨테이너가 호스트 파일을 읽고 쓸 수 있음. (Colima의--mount/mounts옵션 활용)
사전 준비
- macOS (권장: Ventura/Monterey 이상; virtiofs 사용 시 macOS 13+ 권장)
- Homebrew 설치
- 기본 도구:(Colima docs 및 명령어 참조).
brew install colima docker docker-compose kubectl
Colima 시작 (권장 설정 — Kubernetes 포함, 호스트 디렉토리 마운트)
- 권장: macOS 13+이면
vzVM 타입 +virtiofs마운트가 성능/호환성에서 우수합니다.
# 예시: CPU 4, 메모리 8GiB, 디스크 100GiB, k8s 활성화, host dir 마운트
mkdir -p ~/colima/{volumes,projects,backups,configs,logs}
colima start \
--cpus 4 --memory 8 --disk 100 \
--kubernetes \
--vm-type vz --mount-type virtiofs \
--mount ~/colima/volumes:w \
--mount ~/colima/projects:w \
--mount ~/colima/configs:w
- 설명:
--mount <hostpath>:w로 Colima VM 내부에 마운트해주면, 이후 Docker Compose의- ./somepath:/container/path같은 바인드 마운트가 동작합니다. (mount type은sshfs,9p,virtiofs중 선택 가능)
디렉토리/볼륨 구조 설계(권장)
- 목적: 데이터 유형별로 경로를 분리 → 백업·권한·보안 정책 적용 용이.
~/colima/
├─ projects/ # 소스 코드 / 애플리케이션별 디렉토리
│ ├─ app1/
│ └─ app2/
├─ volumes/ # 컨테이너에 바인드/볼륨으로 연결되는 실제 데이터
│ ├─ postgres/ # postgres 데이터 디렉토리
│ ├─ redis/
│ ├─ registry/ # 로컬 레지스트리 데이터
│ └─ uploads/ # 사용자 업로드 등
├─ backups/ # DB dump, tarball 등 백업 저장소
├─ configs/ # Traefik/nginx/compose 파일 등 설정 원본
└─ logs/ # 호스트수집용(선택)
- 설계 원칙
- 앱별 데이터는
~/colima/volumes/<앱명>형태로 분리. - 백업(주기 덤프)은
~/colima/backups로 모아 백업 도구(aws cli, rclone 등)로 외부 저장소 전송. - 설정은 Git으로 관리(암호는 제외).
- 앱별 데이터는
Docker 볼륨 vs Bind-mount (Colima 환경에서의 권장)
- 🔸 Bind-mount: 개발/테스트에서 편리(호스트 파일 바로 반영). Colima에서는 해당 호스트 경로가 Colima VM에 마운트 되어 있어야 정상 동작합니다. (
colima start --mount ~/colima/volumes:w)
300x250
- 🔸 Named volumes: Docker가 VM 내부에 관리하는 볼륨으로, 경로가
/var/lib/docker/volumes/...(또는 containerd의 경우 해당 위치)로 저장됩니다 — 호스트(macOS)에서 직접 접근하려면 VM 내부 접근(ssh)이나docker run --rm -v백업 방식 사용 필요. 호스트에서 직접 파일 관리/백업을 쉽게 하려면 bind-mount으로 호스트 경로를 연결하는 편이 운영에 수월합니다.
예제: Docker Compose (Postgres + App) — 호스트 바인드 마운트 방식
version: "3.8"
services:
db:
image: postgres:15
restart: always
environment:
POSTGRES_USER: app
POSTGRES_PASSWORD: secret
POSTGRES_DB: appdb
volumes:
- type: bind
source: ~/colima/volumes/postgres
target: /var/lib/postgresql/data
healthcheck:
test: ["CMD-SHELL", "pg_isready -U app"]
interval: 30s
timeout: 5s
app:
image: myorg/app:latest
depends_on:
db:
condition: service_healthy
ports:
- "8080:8080"
volumes:
- type: bind
source: ~/colima/projects/app
target: /app
- 주의:
~/colima/volumes/postgres는 Colima 시작 시--mount로 마운트되어 있어야 접근·퍼미션 문제가 없습니다. (마운트가 없으면 컨테이너가 VM 내부의 빈 디렉토리를 사용하게 되어 호스트와 데이터가 분리될 수 있음)
Kubernetes (Colima의 k3s)에서 로컬 스토리지 사용
- Colima는 내부적으로 k3s를 사용해 로컬 쿠버네티스를 제공합니다. (버전은 Colima/k3s 설정에 따름) 기본적으로
local-path같은 로컬 프로비저너가 활성화되어 있을 가능성이 큽니다. (확인:kubectl get storageclass)
간단한 hostPath PV 예시 (테스트/개발용)
주의: hostPath는 로컬 노드 파일시스템을 직접 쓰므로 프로덕션용 아님. Colima의 k3s 노드 내부 경로(예: /var/lib/colima-volumes/... 또는 Colima VM에 마운트한 경로)를 지정해야 합니다.
apiVersion: v1
kind: PersistentVolume
metadata:
name: local-pv-postgres
spec:
capacity:
storage: 10Gi
accessModes:
- ReadWriteOnce
persistentVolumeReclaimPolicy: Retain
hostPath:
path: /var/colima-data/postgres # <-- Colima VM 내부 경로 (또는 /host/path if mounted)
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: postgres-pvc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 10Gi
- 권장 워크플로: 호스트(맥) 경로 → Colima 마운트 → k8s hostPath로 사용
예:~/colima/volumes/postgres를 Colima에 마운트하면 VM 내부에서/hosthome/youruser/colima/volumes/postgres같은 경로로 보이고, 이를 PV의 hostPath로 지정하여 쿠버네티스에서 사용합니다.
권장: 로컬 스토리지 프로비저너 사용
- 개발 편의상
local-path-provisioner같은 동적 프로비저너를 사용하면 PVC 생성 시 자동으로 노드의 디렉토리를 만들어주므로 편리합니다. k3s에는 이미 유사 기능이 포함되어 있을 수 있습니다. (확인:kubectl get storageclass)
권한(UID/GID) 문제 해결 팁
- macOS ↔ VM ↔ 컨테이너 경계에서 파일 소유권(UID/GID)이 달라져 권한문제가 발생합니다.
- 해결책
- 컨테이너에서 사용하는 프로세스의 UID를 호스트 디렉토리의 소유자와 맞춤(예:
chown -R 1000:1000 ~/colima/volumes/postgres) - 또는, 컨테이너 시작 시
PUID/PGID환경변수 주입(이미지에서 지원 시) - 혹은 Dockerfile에서 non-root 사용자 생성 후 사용 권장. 관련 문제와 해결은 커뮤니티 문서 참조.
- 컨테이너에서 사용하는 프로세스의 UID를 호스트 디렉토리의 소유자와 맞춤(예:
백업·복구(실전)
- DB dump 스케줄(예: cron on host or cron in backup container)
# 예시: postgres dump (호스트에서 실행) PGPASSWORD=secret pg_dump -U app -h localhost -p 5432 appdb | gzip > ~/colima/backups/appdb_$(date +%F).sql.gz aws s3 cp ~/colima/backups/appdb_$(date +%F).sql.gz s3://BUCKET/path/ - 볼륨 전체 백업
# 임시 컨테이너로 바인드된 볼륨을 tar로 백업 docker run --rm -v ~/colima/volumes/postgres:/data -v ~/colima/backups:/backup alpine \ sh -c "cd /data && tar czf /backup/postgres_$(date +%F).tgz ." - 주기적 복원 테스트(분기별) 권장.
모니터링 / 로깅 / 보안 포인트
- 모니터링: Prometheus + node_exporter(macOS용 또는 Colima VM 내부 exporter) + Grafana.
- 로그: 컨테이너 로그는 ELK/Fluentd/Vector → 외부 SIEM으로 전송 권장.
- 보안
- 민감정보는 Vault/Docker Secrets 사용(환경변수 직접 노출 금지).
- 이미지 스캔: Trivy 등으로 CI에서 스캔 후 배포.
- SSH는 키 기반만 허용, macOS 방화벽/PF로 외부 포트 최소화.
운영 체크리스트 (간단)
- 데일리:
colima status,docker ps,kubectl get pods -A확인 - 주간: 백업 성공 확인, 디스크 사용량 검사 (
colima info/colima status및 VM 내부df -h) - 월간: 이미지 취약점 스캔 결과 검토, TLS/인증서 만료 점검
자주 발생하는 문제와 해결
- 마운트 경로가 반영되지 않음 → Colima 시작 시
--mount로 해당 경로를 명시했는지 확인. (또는colima stop && colima start --mount ...) - 권한 문제(perm denied) → 호스트 디렉토리 소유자(UID/GID) 조정 또는 컨테이너의 사용자 맞춤.
- Docker 소켓 경로 문제 →
colima status로 소켓 위치 확인 및 심볼릭 링크 필요시 생성.
참고(핵심 문서)
- Colima 공식 문서 (설치/flags/마운트 관련)
- Docker 볼륨·바인드 문서(운영 원칙)
- Kubernetes PersistentVolume 개념 문서
- Lima/마운트 동작(Colima 내부 VM의 파일시스템 마운트 참고)
728x90
그리드형(광고전용)
댓글