Dockerfile 다단 계 미 러 구축

2851 단어 Docker
미 러 구축 에 있어 서 가장 도 전적인 일 중 하 나 는 미 러 의 부 피 를 작고 정교 하 게 유지 하 는 것 이다.Dockerfile 의 모든 명령 은 미 러 에 한 층 씩 추가 되 며, 다음 층 으로 이동 하기 전에 필요 하지 않 은 구조물 을 제거 하 는 것 을 기억 해 야 합 니 다.매우 효율 적 인 Dockerfile 을 만 들 려 면 셸 기술 과 다른 방식 으로 가능 한 한 층 수 를 줄 이 고 모든 층 이 이전 층 에 필요 한 구조물 을 가지 고 있 는 지 확인 해 야 합 니 다. 다른 것 은 필요 하지 않 습 니 다.
       Docker 는 경 량 화 되 어 있 습 니 다. 우리 가 미 러 를 만 들 때 미 러 를 가 벼 운 양 으로 사용 하여 미 러 의 부 피 를 줄 여야 합 니 다.예 를 들 어 간단 한 golang 서 비 스 는 최소 미 러 를 어떻게 구축 합 니까?
package main

import (
    "fmt"
    "net/http"
    "strings"
)

func getNameLen(name string) int {
    return len(name)
}

func sayHello(w http.ResponseWriter, r *http.Request) {
    message := r.URL.Path
    message = strings.TrimPrefix(message, "/")
    message = "Hello " + message + " : " + fmt.Sprintf("%d", getNameLen(message))
    w.Write([]byte(message))
}

func main() {
    http.HandleFunc("/", sayHello)
    if err := http.ListenAndServe(":8088", nil); err != nil {
        panic(err)
    }
}

초보 자 들 은 일반적으로 이렇게 구축한다.
FROM  golang:latest
MAINTAINER  TigerwolfC@***.com.cn
WORKDIR  /go/src
COPY  .  .
RUN  go  build  –o  myapp
EXPOSE 8088
CMD  [“./myapp”]

이러한 구축 은 가능 하지만 golang 의 기본 미 러 가 비교적 크기 때문에 제 작 된 미 러 의 부피 도 크다 (700 M +). 우 리 는 golang 의 크로스 플랫폼 성 을 알 고 있 습 니 다. 컴 파일 된 실행 가능 한 파일 은 해당 하 는 시스템 에서 만 실행 할 수 있 습 니 다. 그러면 우 리 는 이 컴 파일 된 실행 가능 한 파일 을 더 작은 미 러 에 넣 어야 합 니 다.이렇게 얻 은 최종 미 러 는 매우 가볍다.
다단 계 구축:
다단 계 빌 드 에서 Dockerfile 에서 여러 번 사용 해 야 합 니 다.  FROM  성명번번 이  FROM  명령 은 서로 다른 기초 미 러 를 사용 할 수 있 으 며, 매번  FROM  명령 은 모두 새로운 단계 의 구축 을 시작 할 것 이다.구성 요 소 를 한 단계 에서 다른 단계 로 복사 할 수 있 습 니 다. 최종 미 러 에 서 는 필요 하지 않 은 모든 내용 을 남기 지 않 습 니 다.이것 이 어떻게 작 동 하 는 지 보 여주 기 위해 서, 이전 절 에 있 는 Dockerfile 을 여러 단계 로 조정 합 니 다.
#    
FROM  golang:latest  as builder
MAINTAINER  TigerwolfC@***.com.cn
WORKDIR  /go/src
COPY  .  .
RUN   go  build  -o  myapp


#      
FROM  alpine:latest
WORKDIR  /root
COPY  --from=builder /go/src/myapp  .
EXPOSE 8088
CMD  [“./myapp”]

쉽게 말 하면 이 dockerfile 은 두 부분 을 포함 하고 있 습 니 다. 컴 파일 미 러 와 결과 물 실행 미 러, 컴 파일 미 러 는 위 에서 보 여 준 dockerfile 처럼 컴 파일 된 결과 물 을 생 성 합 니 다. 결과 물 실행 미 러 는 COPY - from 문 구 를 통 해 컴 파일 된 결과 물 을 이 미 러 내부 로 복사 하고 마지막 으로 이 결과 물 을 실행 하면 됩 니 다.여기 서 말씀 드 리자 면 결과 물 운행 미 러 는 저 는 알파 인 을 기본 미 러 로 사 용 했 습 니 다. 알파 인 은 빈 미 러 로 다른 미 러 를 구축 하 는 데 만 사용 할 수 있 습 니 다. 부피 가 매우 작고 작은 운행 나 쁜 경 지 를 제공 하기 때문에 우리 의 결과 물 운행 미 러 크기 를 최대한 줄 일 수 있 습 니 다 (busybox, scratch 등 작은 부피 미 러 를 사용 할 수 있 습 니 다).
이 Dockerfile 구축 은 none 의 중간 미 러 와 최종 미 러 를 생 성 합 니 다. 최종 미 러 는 alpine 미 러 를 기반 으로 크기 가 몇 십 M 정도 이 고 중간 미 러 는 docker 를 통 해 생 성 될 수 있 습 니 다.  system  prune 회수.
괜 찮 은 블 로 그 를 추천 합 니 다.https://www.iamle.com/
잘못 이 있 으 면 지적 하고 서로 공부 하 며 함께 발전 하 기 를 바 랍 니 다.

좋은 웹페이지 즐겨찾기