[Docker] Dockerfile 와일드카드(Wildcard) 사용법 요약

SMONGS·2025년 4월 24일

Docker

목록 보기
7/7
post-thumbnail

개요

Dockerfile에서 와일드카드는 파일 경로나 패턴을 지정할 때 유용하게 사용됩니다. 와일드카드 문자(*, ? 등)를 통해 여러 파일이나 디렉토리를 간편하게 지정할 수 있습니다.

와일드카드 지원 명령어

COPY 명령어에서의 와일드카드

  • 기본 사용법: COPY 명령어의 소스 경로에 와일드카드 사용 가능
  • 예시: COPY *.txt /app/ - 모든 .txt 파일을 /app/ 디렉토리로 복사
  • 문법: COPY [--from=<name|stage>] <src> ... <dest>

COPY의 --exclude 플래그 (실험적 기능)

  • 기능: 특정 패턴의 파일을 제외하고 복사
  • 문법: COPY [--exclude=<path> ...] <src> ... <dest>
  • 주의: Docker의 실험적 기능으로, docker/dockerfile:1.7-labs 버전에서만 사용 가능

ADD 명령어에서의 와일드카드

  • 기본 사용법: ADD 명령어에서도 와일드카드 패턴 지원
  • 예시: ADD config*.json /app/configs/

와일드카드 사용 시 주의사항

플랫폼별 차이점

  • Windows 호환성 이슈: Windows 환경에서는 와일드카드 사용 시 문제가 발생할 수 있음
  • 경로 표기법: 플랫폼에 따라 경로 구분자(\ 또는 /)가 달라질 수 있음

디렉토리 와일드카드 제한

  • 디렉토리 이름 와일드카드: 일부 경우 디렉토리 이름에 와일드카드를 사용할 때 제한이 있을 수 있음
  • 예시 오류: COPY dir*/file.txt /app/ 형태가 항상 예상대로 동작하지 않을 수 있음

CMD와 ENTRYPOINT에서의 와일드카드

  • 일반적인 제한: CMD 및 ENTRYPOINT에서 와일드카드는 일반 쉘 확장 기능을 사용하지 않기 때문에 제한됨
  • 해결책: 쉘 형식 사용 시 와일드카드 확장 가능
    • 실행 형식(제한): CMD ["java", "-jar", "app-*.jar"] (와일드카드 확장 안됨)
    • 쉘 형식(가능): CMD java -jar app-*.jar (쉘에 의해 와일드카드 확장됨)

모범 사례

  1. 명시적 경로 사용: 가능하면 와일드카드보다 명시적인 파일 경로 사용
  2. 와일드카드 범위 제한: 너무 광범위한 와일드카드(*) 사용 자제
  3. 테스트: 와일드카드 사용 시 다양한 환경에서 테스트하여 호환성 확인
  4. 디버깅: 와일드카드 관련 문제 발생 시 docker build --progress=plain 옵션으로 자세한 빌드 로그 확인

결론

Dockerfile에서 와일드카드는 주로 COPY, ADD 명령어의 소스 경로 지정에 유용하게 사용되지만, 플랫폼별 차이와 구문 제한이 있습니다. 특히 CMD와 ENTRYPOINT에서는 와일드카드 사용에 주의가 필요합니다. 안정적인 Dockerfile 작성을 위해 와일드카드는 신중하게 제한적으로 사용하는 것이 좋습니다.


참고: https://docs.docker.com/reference/dockerfile/

profile
반갑습니당~😄

0개의 댓글