Ubuntu Docker 이미지 저장소를 위한 AI 에이전트 지침서
이 파일은 본 저장소에서 작업하는 AI 에이전트(Claude Code, GitHub Copilot, Cursor 등)를 위한 특화된 가이드를 제공합니다. CLAUDE.md를 보완하는 워크플로우별 지침과 자동화 가이드라인을 담고 있습니다.
-
멀티 아키텍처 호환성 유지
- 변경사항이 지원되는 모든 플랫폼을 손상시키지 않는지 테스트: amd64, arm/v7, arm64/v8, ppc64le, riscv64, s390x
- 조건부 패키지 설치 사용:
$(if [ "${TARGETARCH}" = "..." ]; then echo "package"; fi) - ARG 변수가 올바르게 사용되는지 확인: TARGETARCH, TARGETPLATFORM, BUILDARCH 등
-
레이어 최적화 유지
- 관련된 RUN 명령을 결합하여 레이어 수 줄이기
- 동일 레이어에서 apt 캐시 정리:
apt-get clean && rm -rf /var/lib/apt/lists/* - 변경 빈도가 낮은 것부터 높은 순서로 명령 배치
-
기존 패턴 준수
- 다른 Dockerfile과 동일한 저작권 헤더 사용
- 일관된 ARG 변수 명명 유지 (HWPORT_*)
- 모든 이미지에서 LABEL 구조 일관성 유지
-
스크립트 명명 규칙
__(이중 언더스코어)로 시작하는 스크립트는 내부 유틸리티- 실행 권한 유지:
chmod +x - POSIX 호환성이 필요하면
#!/bin/sh, bash 전용 기능이 필요하면#!/bin/bash사용
-
오류 처리
- 안전한 스크립트 실행을 위해
set -eo pipefail사용 - 의미 있는 오류 메시지 제공
- 종료 시 임시 파일 정리
- 안전한 스크립트 실행을 위해
-
일관된 컨테이너 명명
- 기본 컨테이너 이름:
mzdev-test - 셸 스크립트를 통한 오버라이드 허용
- 기본 컨테이너 이름:
-
포트 매핑 표준
- SSH: 2222:22
- XRDP: 3389:3389
- Shellinabox: 4200:4200
- HTTP: 80:80 (웹 서버)
- HTTPS: 443:443 (웹 서버)
-
Privileged 모드 고려사항
- 기본 이미지는 완전한 개발 기능을 위해 일반적으로
privileged: true필요 - 가능한 경우 privileged 모드 대신 특정 capability 사용
- privileged 모드가 필요한 이유 문서화
- 기본 이미지는 완전한 개발 기능을 위해 일반적으로
__buildx.sh 실행 전:
- Dockerfile 문법 검증
- 플랫폼별 패키지 가용성 확인
- 단일 아키텍처로 먼저 로컬 테스트:
docker buildx build --platform linux/amd64 -t test . - Buildx 구성 확인:
docker buildx ls명령으로multiarch빌더 확인
# 표준 워크플로우
cd <이미지-디렉토리>
./buildx.sh # 모든 아키텍처 빌드 및 푸시# 로컬 테스트 워크플로우
cd <이미지-디렉토리>
./up.sh # 컨테이너 시작
docker ps # 실행 중 확인
docker logs <container> # 오류 확인
# 기능 테스트
./down.sh # 컨테이너 중지새로운 Ubuntu 버전 지원 추가 시:
-
최신 버전에서 복사
cp -r 24.04 26.04 cd 26.04 -
파일 업데이트
- Dockerfile:
FROM ubuntu:24.04를FROM ubuntu:26.04로 변경 - Dockerfile:
HWPORT_IMAGE_TAGARG 업데이트 __buildx.sh: 새 버전과 일치하도록 태그 업데이트docker-compose.yml: 이미지 태그 업데이트- 새 Ubuntu 버전의 패키지 가용성 테스트
- Dockerfile:
-
아키텍처 지원 확인
- 모든 아키텍처에서 모든 패키지를 사용할 수 있는지 확인
- 멀티 아키텍처 빌드 전 최소 하나의 아키텍처에서 빌드 테스트
버전 폐기 시:
- 디렉토리를
deprecated/로 이동 - 지원 버전 목록에서 제거하도록 README.md 업데이트
- 레거시 사용자를 위한 참조용으로 Dockerfile 보관
주요 목적: GUI가 포함된 완전한 개발 환경
반드시 포함해야 할 것:
- 완전한 빌드 툴체인 (gcc, clang, cmake 등)
- XFCE4 데스크톱 환경
- 원격 접속을 위한 XRDP
- SSH 서버
- 한국어 지원 (폰트, ibus-hangul)
- 일반적인 개발 도구
진입점: /entrypoint.sh → 서비스 시작 → CMD 실행
주요 목적: Apache + PHP 웹 서버
반드시 포함해야 할 것:
- 일반 모듈이 포함된 Apache2 (ssl, rewrite, proxy 등)
- 일반 확장이 포함된 PHP-FPM
- ModSecurity
- SSL 인증서 지원
- 적절한 Apache 설정 파일
진입점: Apache foreground 모드 직접 실행
최소화 접근 방식 준수:
- 특정 목적에 필요한 패키지만 포함
- 이미지 크기는 작을수록 좋음
- 목적에 대한 명확한 문서화
모든 기본 이미지에:
- 최신 버전의 Dockerfile 편집 (예: 24.04)
- 적절한 RUN 명령에 패키지 추가
- 로컬에서 빌드 테스트
- 호환 가능하면 다른 버전으로 백포트
- 중요한 경우 README.md 기능 목록 업데이트
특정 이미지에:
- 해당 Dockerfile만 편집
- 커밋 메시지에 패키지가 필요한 이유 문서화
- 주요 기능인 경우 README.md 업데이트
Ubuntu가 보안 업데이트를 릴리스할 때:
- 이미지 재빌드 (기본 FROM ubuntu:XX.XX는 최신을 가져옴)
- 변경사항으로 인한 문제 테스트
- 중요한 변경사항이 있으면 HWPORT_VERSION 업데이트
- 새 빌드 푸시
중요 파일 - 변경사항이 컨테이너 시작에 영향:
- 로컬 컨테이너에서 변경사항 철저히 테스트
- 새 로직으로 모든 서비스 검사가 작동하는지 확인
- 환경 변수가 올바르게 처리되는지 확인
- 새 환경 변수가 추가되면 CLAUDE.md 업데이트
Dockerfile에서 조건부 설치 사용:
RUN apt-get install -y \
common-package \
$(if [ "${TARGETARCH}" = "amd64" ]; then echo "amd64-only-package"; fi) \
$(if [ "${TARGETARCH}" = "amd64" -o "${TARGETARCH}" = "arm64" ]; then echo "amd64-arm64-package"; fi) \
$(if [ "${TARGETARCH}" != "riscv64" ]; then echo "all-except-riscv64"; fi)- riscv64: 일부 패키지 사용 불가 (mesa-drm-shim)
- amd64 전용: NVIDIA CUDA, Android Studio
- amd64/arm64: 무거운 GUI 앱 (Firefox, LibreOffice, KiCad)
- arm/v7: 메모리 제약, 가벼운 패키지 선호
- 패키지를 찾을 수 없음: 모든 대상 아키텍처에서 사용 가능한지 확인
- 타임아웃: 일부 아키텍처(riscv64)는 에뮬레이트되어 느림
- 공간 부족: Buildx 캐시 정리:
docker buildx prune
- 로그 확인:
docker logs <container-name> - entrypoint.sh가 실행 가능한지 확인
- entrypoint.sh의 문법 오류 확인
- 필요한 서비스가 설치되었는지 확인
- 환경 변수가 올바르게 설정되었는지 확인
- 서비스가 설치되었는지 확인:
docker exec <container> which <service> - 서비스 설정 파일 확인
- entrypoint.sh 서비스 시작 로직 검토
명확하고 설명적인 커밋 메시지 사용:
24.04에 amd64용 CUDA 지원 추가
- nvidia-cuda-toolkit 설치
- NVIDIA 런타임 라이브러리 추가
- 문서 업데이트
- 로컬에서 빌드 테스트
- 커밋에 민감한 정보가 없는지 확인
- 필요시 문서 업데이트
- 스크립트가 실행 가능한지 확인
자동화 고려사항:
- PR 시 빌드 테스트
- Trivy 또는 Clair를 이용한 보안 스캔
- Ubuntu 기본 이미지 업데이트 시 자동 빌드
- 멀티 아키텍처 빌드 상태 알림
추가 고려사항:
- 서비스 상태를 위한 Dockerfile의 HEALTHCHECK
- 주요 서비스(SSH, XRDP) 자동 테스트
- 버전 확인 스크립트
- 푸시 전 테스트: 레지스트리에 푸시하기 전에 항상 로컬에서 빌드 테스트
- 변경사항 문서화: 기능 변경 시 관련 .md 파일 업데이트
- 일관성 유지: 새로운 추가 사항에 기존 패턴 준수
- 보안 우선: 비밀 정보 커밋 금지, 안전한 기본값 사용
- 빌드 최적화: 빌드 캐시 효과적 사용, 레이어 순서 적절히 배치
- 모든 아키텍처 지원: 타당한 이유 없이 멀티 아키텍처 지원을 손상시키지 말 것
- "패키지 업데이트" 요청 시, 모든 버전에 적용할지 최신 버전에만 적용할지 고려
- 기능 추가 시, 웹 서버 변형도 유사한 업데이트가 필요한지 확인
- 새 파일 생성보다 기존 파일 편집 선호
- 새 빌드 스크립트 생성 전 scripts/ 디렉토리 확인
- 프로젝트 아키텍처 이해를 위해 CLAUDE.md 참조
- 사용자 대상 기능 및 문서를 위해 README.md 참조
- Docker Buildx 문서: https://docs.docker.com/buildx/
- Ubuntu 기본 이미지: https://hub.docker.com/_/ubuntu
- 멀티 아키텍처 모범 사례: https://www.docker.com/blog/multi-arch-build-and-images-the-simple-way/
AI 에이전트 참고: 이 파일은 워크플로우 및 자동화 가이드를 담고 있습니다. 아키텍처 이해를 위해서는 CLAUDE.md를, 사용자 대상 문서를 위해서는 README.md를 참조하세요.