# 빌드 단계
FROM mcr.microsoft.com/dotnet/sdk:6.0 AS build
WORKDIR /app
# 프로젝트 파일 복사 및 복원
COPY *.csproj ./
RUN dotnet restore
# 소스 코드 복사 및 빌드
COPY . ./
RUN dotnet publish -c Release -o out
# 런타임 단계
FROM mcr.microsoft.com/dotnet/aspnet:6.0 AS runtime
WORKDIR /app
COPY --from=build /app/out ./
ENTRYPOINT ["dotnet", "YourApp.dll"]
도커 이미지를 컨테이너화하여 실행하게되면 컨테이너 내부 파일들은 아주 쉽게 노출되게 됩니다. 그래서 파이썬 앱의 경우 이런 문제에 특히 취약하여 배포 라인에서 소스코드 난독화를 하기도 합니다.
따라서 소스코드 노출을 최소화하기 위해 빌드 단계와 런타임 단계는 분리하는 것이 좋아 보입니다.
2. 이미지 용량
sdk에는 호스팅에 불필요한 요소들이 포함되어 있기 때문에, 호스팅만을 위한 런타임만 포함하면 이미지 크기를 줄일 수 있습니다.
dockerfile은 한번만 잘 작성해두면 변경할 일이 많지 않으니 크게 번거로우실 것 같진 않고, docker의 경우 이미지 빌드 과정이 다 레이어로 캐싱되기 때문에, 염려하시는 것 만큼 번거롭진 않을 듯 합니다.