Docker從17.05版本開始Docker在構建鏡像dockerfile時增加了新特性:多階段構建(multi-stage builds),將構建過程分為多個階段,每個階段都可以指定一個基礎鏡像
關於構建圖像,最具挑戰性的事情之一是保持圖像尺寸變小。Dockerfile中的每條指令都會在映像上添加一層,您需要記住在移至下一層之前清除不需要的任何工件。為了編寫一個真正有效的Dockerfile,傳統上,您需要使用shell技巧和其他邏輯來使各層盡可能的小,並確保每一層都具有上一層所需的工件。
實際上,通常只有一個Dockerfile用於開發(包含構建應用程序所需的一切),而精簡的Dockerfile用於生產時,它僅包含您的應用程序以及運行該應用程序所需的內容。這被稱為“構建者模式”。維護兩個Dockerfile是不理想的。
以前在dockerfile編寫時,為了減少RUN的多層使用,經常講編寫好的shell腳本拷貝到鏡像里面並引用造成buile失敗或者維護困難的情況,而多階構建可以將上層生成的文件等通過from在下層引用
dockerfile
FROM golang:1.7.3 #第一層默認起始編號為0 可以使用AS name 命名 WORKDIR /go/src/github.com/alexellis/href-counter/ RUN go get -d -v golang.org/x/net/html COPY app.go . RUN CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o app . FROM alpine:latest RUN apk --no-cache add ca-certificates WORKDIR /root/ COPY --from=0 /go/src/github.com/alexellis/href-counter/app . #--from=上層命名的name CMD ["./app"] $ docker build -t alexellis2/href-counter:latest .
第二FROM
條指令以alpine:latest
圖像為基礎開始新的構建階段。該COPY --from=0
行僅將先前階段中構建的工件復制到新階段。Go SDK和任何中間工件都被保留了下來,沒有保存在最終圖像中。
YUM升級docker(centos7)
查看已安裝的包
rmp -qa | grep docker
卸載
yum remove 包名
使用curl升級到最新版
# curl -fsSL https://get.docker.com/ | sh
yum源安裝
yum-config-manager \ --add-repo \ https://download.docker.com/linux/centos/docker-ce.repo
#查看可用版本
yum list docker-ce --showduplicates | sort -r
安裝重啟
參考官方文檔https://docs.docker.com/develop/develop-images/multistage-build/