베이스 이미지
베이스 이미지 (Base images)
베이스 이미지는 Dockerfile의 FROM 명령으로 지정하는, 빌드의 시작점이 되는 이미지예요.
출처: 문서
본문
FROM debian
대부분의 경우 여러분이 직접 베이스 이미지를 만들 필요는 없어요. Docker Hub에는 빌드의 베이스 이미지로 쓰기 좋은 방대한 Docker 이미지 라이브러리가 있어요. Docker Official Images는 명확한 문서, 모범 사례, 정기적 업데이트를 갖추고 있어요. Docker가 검증한 신뢰할 만한 퍼블리싱 파트너가 만든 Docker Verified Publisher 이미지도 있어요.
베이스 이미지 만들기 (Create a base image)
가장 간단한 베이스 이미지는 scratch 예요:
FROM scratch
scratch는 애플리케이션이 필요로 하는 것만 딱 담은 최소 이미지를 만드는 데 주로 쓰여요. 자세한 내용은 Create a minimal base image using scratch 문서를 참고해요.
자체 베이스 이미지를 만드는 과정은 패키징하려는 리눅스 배포판에 따라 달라져요. tar를 이용한 전체 이미지 생성 방법은 Create a full image using tar 문서를 참고해요.
scratch로 최소 베이스 이미지 만들기 (Create a minimal base image using scratch)
scratch 이미지가 첫 번째 파일시스템 레이어가 되도록 해요.
# syntax=docker/dockerfile:1
FROM scratch
ADD hello /
CMD ["/hello"]
빌드해요:
$ docker build --tag hello .
실행해요:
$ docker run --rm hello
정적 바이너리(예: Go로 컴파일된 hello)는 런타임 의존성이 없기 때문에 scratch 위에서 그대로 동작해요. 반면 대부분의 컴퓨터 프로그램은 런타임 환경에 특정 프로그램이나 리소스가 존재해야 해요. 예를 들어:
- 프로그래밍 언어 런타임
- 동적으로 링크된 C 라이브러리
- CA 인증서
작고 단순한 프로그램이 아니고서는 이런 의존성을 전부 포함하는 것은 어려울 수 있어요. 한편 이미지 크기와 공격 표면(attack surface)을 줄이기 위해 필요한 것만 이미지에 담는 것도 중요해요.