Dockerfile 다단 계 미 러 구축
2851 단어 Docker
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/
잘못 이 있 으 면 지적 하고 서로 공부 하 며 함께 발전 하 기 를 바 랍 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
첫 번째 Docker for Mac참고 , 나는 옆에 있는 Mac에 Docker를 설치하고 컨테이너를 세워 보고 싶다. Docker Hub를 처음 사용할 때는 계정을 만들어야 합니다. Docker.dmg을 실행하면 Docker가 설치됩니다. Dock...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.