여러 단계로 이미지 구축 시간 단축
4130 단어 kubernetesdevopsdocker
Docker는 이미지 크기를 작게 유지하기 위해 standard practices을 제공하며 여러 단계의 건설 요약도 포함합니다.
다단계 구축은 공작물, 바이너리 파일 또는 실행 가능한 파일을 구축하는 용례에 특히 유용하다.일반적으로 2진 파일을 구축하려면 GCC, Maven,build essentials 등 많은 의존 항목이 필요하지만, 실행 가능한 파일이 생기면 실행 가능한 파일을 실행할 필요가 없습니다.다단계 구축은 이미지 크기를 탐색하는 데 사용됩니다.개별 환경에서 실행 가능한 파일을 구축한 다음 실행 가능한 파일을 실행하는 데 필요한 실행 가능한 파일과 최소 의존 항목만 사용하여 최종 이미지를 구축할 수 있습니다.
예를 들어 여기에 바둑으로 쓴 simple application이 있다.그것이 하는 일은 바로 인쇄하는 것이다. "안녕하세요, 세상!!!"출력으로다단계 구축을 사용하지 않겠습니다.
Dockerfile
FROM golang
ADD . /app
WORKDIR /app
RUN go build # This will create a binary file named app
ENTRYPOINT /app/app
docker build -t goapp .
~/g/helloworld ❯❯❯ docker run -it --rm goapp
Hello World!!
~/g/helloworld ❯❯❯ docker images | grep goapp
goapp latest b4221e45dfa0 18 seconds ago 805MB
# Build executable stage
FROM golang
ADD . /app
WORKDIR /app
RUN go build
ENTRYPOINT /app/app
# Build final image
FROM alpine:latest
RUN apk --no-cache add ca-certificates
WORKDIR /root/
COPY --from=0 /app/app .
CMD ["./app"]
docker build -t goapp .
~/g/helloworld ❯❯❯ docker run -it --rm goapp
Hello World!!
~/g/helloworld ❯❯❯ docker images | grep goapp
goapp latest 100f92d756da 8 seconds ago 8.15MB
~/g/helloworld ❯❯❯
이미지 크기가 805MB에서 *8.15MB로 대폭 줄어드는 것을 볼 수 있습니다.이것은 주로 Golang 이미지에 많은 의존 항목이 있기 때문에 최종적으로 실행 가능한 파일은 심지어 이런 의존 항목을 실행할 필요가 없다.여기서 무슨 일이 일어났습니까?
우리는 두 단계로 나누어 이미지를 형상화한다.우선, Golang 기반 이미지를 사용해서 코드를 복사하고 실행 가능한 파일 프로그램을 구축하고 있습니다.이제 다음 단계에서는 새 Alpine 기본 이미지를 사용하고 이전에 구축한 바이너리 파일을 새 단계로 복사합니다.여기서 주의해야 할 중요한 점은 각 단계에서 구축된 이미지가 완전히 독립적이라는 것이다.
# Build executable stage
FROM golang
ADD . /app
WORKDIR /app
RUN go build
ENTRYPOINT /app/app
* Stage 1
# Build final image
FROM alpine:latest
RUN apk --no-cache add ca-certificates
WORKDIR /root/
COPY --from=0 /app/app .
CMD ["./app”]
행 COPY —from=0 /app/app
-> 에서는 이전 이미지에서 구축한 이미지 내부에서 데이터에 액세스할 수 있습니다.다단계 구축은 어떻게 작동합니까?
이 과정을 자세히 살펴보면 다단계 구축은 실제 Docker 구축과 큰 차이가 없다.유일한 주요 차이점은 여러 개의 독립된 이미지 (단계당 1개) 를 구축하고 작업/파일을 한 이미지에서 다른 이미지로 쉽게 복사할 수 있다는 것입니다.다단계 구축은 현재 제공되는 기능을 스크립트를 통해 미리 보관합니다.사람들은 구축 이미지를 만드는 데 익숙하다. 수동으로 공작물을 복사한 다음에 다른 의존 항목이 필요 없이 새 이미지로 복사한다.위의 예시에서 우리는 단계 0에 이미지를 구축한 다음에 단계 1에 다른 이미지를 구축했다. 우리는 낡은 이미지의 파일을 이 이미지로 복사했다. 이것은 복잡하지 않다.
참고: /app
을 한 용기에서 다른 용기로 복사하는 것이 아니라 한 이미지에서 다른 이미지로 복사하는 중입니다.
다양한 방식으로 배포를 가속화하고 비용을 절감할 수 있습니다.
Reference
이 문제에 관하여(여러 단계로 이미지 구축 시간 단축), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/appfleet/building-images-faster-and-better-with-multi-stage-builds-3b1l텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)