中文字幕日韩精品一区二区免费_精品一区二区三区国产精品无卡在_国精品无码专区一区二区三区_国产αv三级中文在线

云計(jì)算核心技術(shù)Docker教程:Docker多階段構(gòu)建

多階段構(gòu)建是一項(xiàng)新功能,需要守護(hù)程序和客戶端上使用Docker 17.05或更高版本。多級(jí)構(gòu)建對(duì)于在優(yōu)化Dockerfile的同時(shí)使其易于閱讀和維護(hù)的任何人都非常有用。

10余年的海北州網(wǎng)站建設(shè)經(jīng)驗(yàn),針對(duì)設(shè)計(jì)、前端、開發(fā)、售后、文案、推廣等六對(duì)一服務(wù),響應(yīng)快,48小時(shí)及時(shí)工作處理。網(wǎng)絡(luò)營(yíng)銷推廣的優(yōu)勢(shì)是能夠根據(jù)用戶設(shè)備顯示端的尺寸不同,自動(dòng)調(diào)整海北州建站的顯示方式,使網(wǎng)站能夠適用不同顯示終端,在瀏覽器中調(diào)整網(wǎng)站的寬度,無論在任何一種瀏覽器上瀏覽網(wǎng)站,都能展現(xiàn)優(yōu)雅布局與設(shè)計(jì),從而大程度地提升瀏覽體驗(yàn)。創(chuàng)新互聯(lián)建站從事“海北州網(wǎng)站設(shè)計(jì)”,“海北州網(wǎng)站推廣”以來,每個(gè)客戶項(xiàng)目都認(rèn)真落實(shí)執(zhí)行。

在進(jìn)行多階段構(gòu)建之前

關(guān)于構(gòu)建鏡像,最具挑戰(zhàn)性的事情之一是保持鏡像尺寸變小。Dockerfile中的每條指令都會(huì)在映像上添加一層,您需要記住在移至下一層之前清除不需要的任何工件。為了編寫一個(gè)真正有效的Dockerfile,傳統(tǒng)上,您需要使用Shell技巧和其他邏輯來使各層盡可能小,并確保每一層都具有上一層所需的工件,而沒有其他任何東西。

實(shí)際上,通常只有一個(gè)Dockerfile用于開發(fā)(包含構(gòu)建應(yīng)用程序所需的一切),而精簡(jiǎn)的Dockerfile用于生產(chǎn)時(shí),僅包含您的應(yīng)用程序以及運(yùn)行該應(yīng)用程序所需的內(nèi)容。這被稱為“構(gòu)建器模式”。維護(hù)兩個(gè)Dockerfile是不理想的。

這是一個(gè)Dockerfile.build和Dockerfile的例子,它遵循上面的模式:

Dockerfile.build:

FROM golang:1.7.3

WORKDIR /go/src/github.com/alexellis/href-counter/

COPY app.go .

RUN go get -d -v golang.org/x/net/html \\

&& CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o app .

請(qǐng)注意,此示例還RUN使用Bash&&運(yùn)算符將兩個(gè)命令人工壓縮在一起,以避免在鏡像中創(chuàng)建額外的圖層。這是容易失敗的并且難以維護(hù)。

Dockerfile:

FROM alpine:latest

RUN apk --no-cache add ca-certificates

WORKDIR /root/

COPY app .

CMD [./app]

build.sh:

#!/bin/sh

echo Building alexellis2/href-counter:build

docker build --build-arg https_proxy=$https_proxy --build-arg http_proxy=$http_proxy \\

-t alexellis2/href-counter:build . -f Dockerfile.build

docker container create --name extract alexellis2/href-counter:build

docker container cp extract:/go/src/github.com/alexellis/href-counter/app ./app

docker container rm -f extract

echo Building alexellis2/href-counter:latest

docker build --no-cache -t alexellis2/href-counter:latest .

rm ./app

運(yùn)行build.sh腳本時(shí),它需要構(gòu)建第一個(gè)鏡像,從中創(chuàng)建一個(gè)容器以復(fù)制工件,然后構(gòu)建第二個(gè)鏡像。這兩個(gè)映像都占用了系統(tǒng)空間,并且app 本地磁盤上也仍然有工件。

多階段構(gòu)建極大地簡(jiǎn)化了這種情況!

使用多階段構(gòu)建

通過多階段構(gòu)建,您可以FROM在Dockerfile中使用多個(gè)語(yǔ)句。每個(gè)FROM指令可以使用不同的基礎(chǔ),并且每個(gè)指令都

開始構(gòu)建的新階段。您可以有選擇地將工件從一個(gè)階段復(fù)制到另一個(gè)階段,從而在最終圖像中留下不需要的所有內(nèi)

容。為了展示它是如何工作的,讓我們改編上一部分中的Dockerfile以使用多階段構(gòu)建。

Dockerfile:

FROM golang:1.7.3

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 .

CMD [./app]

您只需要單個(gè)Dockerfile。您也不需要單獨(dú)的構(gòu)建腳本。只需運(yùn)行docker build:

$ docker build -t alexellis2/href-counter:latest .

最終結(jié)果是與之前的鏡像大小相同,并大大降低了復(fù)雜性。您無需創(chuàng)建任何中間映像,也不需要將任何工件提取到本地系統(tǒng)。

新聞標(biāo)題:云計(jì)算核心技術(shù)Docker教程:Docker多階段構(gòu)建
網(wǎng)頁(yè)URL:http://www.rwnh.cn/article4/cpgpoe.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站設(shè)計(jì)微信公眾號(hào)、響應(yīng)式網(wǎng)站網(wǎng)站設(shè)計(jì)公司、網(wǎng)站制作軟件開發(fā)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

網(wǎng)站托管運(yùn)營(yíng)
柞水县| 元谋县| 丹江口市| 龙游县| 阿克陶县| 克拉玛依市| 卢龙县| 唐山市| 文安县| 丹寨县| 漯河市| 湛江市| 青岛市| 揭阳市| 黄平县| 竹溪县| 兴化市| 渝中区| 中卫市| 宜章县| 石嘴山市| 监利县| 维西| 昆明市| 新兴县| 武川县| 乐清市| 扶沟县| 顺平县| 察雅县| 麻江县| 迁安市| 牙克石市| 和平区| 军事| 云安县| 墨脱县| 泾阳县| 揭阳市| 元江| 昆山市|