欧美一级特黄大片做受成人-亚洲成人一区二区电影-激情熟女一区二区三区-日韩专区欧美专区国产专区

如何在Dockerfile中使用COPY與ADD命令-創(chuàng)新互聯(lián)

如何在Dockerfile 中使用COPY與ADD命令?針對(duì)這個(gè)問(wèn)題,這篇文章詳細(xì)介紹了相對(duì)應(yīng)的分析和解答,希望可以幫助更多想解決這個(gè)問(wèn)題的小伙伴找到更簡(jiǎn)單易行的方法。

創(chuàng)新互聯(lián)公司主營(yíng)多倫網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司,主營(yíng)網(wǎng)站建設(shè)方案,成都App定制開(kāi)發(fā),多倫h5微信小程序搭建,多倫網(wǎng)站營(yíng)銷(xiāo)推廣歡迎多倫等地區(qū)企業(yè)咨詢(xún)

Build 上下文的概念

在使用 docker build 命令通過(guò) Dockerfile 創(chuàng)建鏡像時(shí),會(huì)產(chǎn)生一個(gè) build 上下文(context)。所謂的 build 上下文就是 docker build 命令的 PATH 或 URL 指定的路徑中的文件的集合。在鏡像 build 過(guò)程中可以引用上下文中的任何文件,比如我們要介紹的 COPY 和 ADD 命令,就可以引用上下文中的文件。

默認(rèn)情況下 docker build -t testx . 命令中的 . 表示 build 上下文為當(dāng)前目錄。當(dāng)然我們可以指定一個(gè)目錄作為上下文,比如下面的命令:

$ docker build -t testx /home/nick/hc

我們指定 /home/nick/hc 目錄為 build 上下文,默認(rèn)情況下 docker 會(huì)使用在上下文的根目錄下找到的 Dockerfile 文件。

COPY 和 ADD 命令不能拷貝上下文之外的本地文件

對(duì)于 COPY 和 ADD 命令來(lái)說(shuō),如果要把本地的文件拷貝到鏡像中,那么本地的文件必須是在上下文目錄中的文件。其實(shí)這一點(diǎn)很好解釋?zhuān)驗(yàn)樵趫?zhí)行 build 命令時(shí),docker 客戶(hù)端會(huì)把上下文中的所有文件發(fā)送給 docker daemon??紤] docker 客戶(hù)端和 docker daemon 不在同一臺(tái)機(jī)器上的情況,build 命令只能從上下文中獲取文件。如果我們?cè)?Dockerfile 的 COPY 和 ADD 命令中引用了上下文中沒(méi)有的文件,就會(huì)收到類(lèi)似下面的錯(cuò)誤:

如何在Dockerfile 中使用COPY與ADD命令

與 WORKDIR 協(xié)同工作

WORKDIR 命令為后續(xù)的 RUN、CMD、COPY、ADD 等命令配置工作目錄。在設(shè)置了 WORKDIR 命令后,接下來(lái)的 COPY 和 ADD 命令中的相對(duì)路徑就是相對(duì)于 WORKDIR 指定的路徑。比如我們?cè)?Dockerfile 中添加下面的命令:

WORKDIR /app
COPY checkredis.py .

然后構(gòu)建名稱(chēng)為 testx 的容器鏡像,并運(yùn)行一個(gè)容器查看文件路徑:

如何在Dockerfile 中使用COPY與ADD命令

checkredis.py 文件就是被復(fù)制到了 WORKDIR /app 目錄下。

COPY 命令的簡(jiǎn)單性

如果僅僅是把本地的文件拷貝到容器鏡像中,COPY 命令是最合適不過(guò)的。其命令的格式為:
COPY <src> <dest>

除了指定完整的文件名外,COPY 命令還支持 Go 風(fēng)格的通配符,比如:

COPY check* /testdir/           # 拷貝所有 check 開(kāi)頭的文件
COPY check?.log /testdir/       # ? 是單個(gè)字符的占位符,比如匹配文件 check1.log

對(duì)于目錄而言,COPY 和 ADD 命令具有相同的特點(diǎn):只復(fù)制目錄中的內(nèi)容而不包含目錄自身。比如我們?cè)?Dockerfile 中添加下面的命令:

WORKDIR /app
COPY nickdir .

其中 nickdir 目錄的結(jié)構(gòu)如下:

如何在Dockerfile 中使用COPY與ADD命令

重新構(gòu)建鏡像 testx,運(yùn)行一個(gè)容器并查看 /app 目錄下的內(nèi)容:

如何在Dockerfile 中使用COPY與ADD命令

這里只有 file1 和 file2,少了一層目錄 nickdir。如果想讓 file1 和 file2 還保存在 nickdir 目錄中,需要在目標(biāo)路徑中指定這個(gè)目錄的名稱(chēng),比如:

WORKDIR /app
COPY nickdir ./nickdir

COPY 命令區(qū)別于 ADD 命令的一個(gè)用法是在 multistage 場(chǎng)景下。關(guān)于 multistage 的介紹和用法請(qǐng)參考筆者的《Dockerfile 中的 multi-stage》一文。在 multistage 的用法中,可以使用 COPY 命令把前一階段構(gòu)建的產(chǎn)物拷貝到另一個(gè)鏡像中,比如:

FROM golang:1.7.3
WORKDIR /go/src/github.com/sparkdevo/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/sparkdevo/href-counter/app .
CMD ["./app"]

這段代碼引用自《Dockerfile 中的 multi-stage》一文,其中的 COPY 命令通過(guò)指定 --from=0 參數(shù),把前一階段構(gòu)建的產(chǎn)物拷貝到了當(dāng)前的鏡像中。

ADD 命令還可以干其它事情

ADD 命令的格式和 COPY 命令相同,也是:

ADD <src> <dest>

除了不能用在 multistage 的場(chǎng)景下,ADD 命令可以完成 COPY 命令的所有功能,并且還可以完成兩類(lèi)超酷的功能:

?解壓壓縮文件并把它們添加到鏡像中
?從 url 拷貝文件到鏡像中

當(dāng)然,這些功能也讓 ADD 命令用起來(lái)復(fù)雜一些,不如 COPY 命令那么直觀。

解壓壓縮文件并把它們添加到鏡像中

如果我們有一個(gè)壓縮文件包,并且需要把這個(gè)壓縮包中的文件添加到鏡像中。需不需要先解開(kāi)壓縮包然后執(zhí)行 COPY 命令呢?當(dāng)然不需要!我們可以通過(guò) ADD 命令一次搞定:

WORKDIR /app
ADD nickdir.tar.gz .

這應(yīng)該是 ADD 命令的最佳使用場(chǎng)景了!

從 url 拷貝文件到鏡像中

這是一個(gè)更加酷炫的用法!但是在docker 官方文檔的最佳實(shí)踐中卻強(qiáng)烈建議不要這么用??!docker 官方建議我們當(dāng)需要從遠(yuǎn)程復(fù)制文件時(shí),最好使用 curl 或 wget 命令來(lái)代替 ADD 命令。原因是,當(dāng)使用 ADD 命令時(shí),會(huì)創(chuàng)建更多的鏡像層,當(dāng)然鏡像的 size 也會(huì)更大(下面的兩段代碼來(lái)自 docker 官方文檔):

ADD http://example.com/big.tar.xz /usr/src/things/
RUN tar -xJf /usr/src/things/big.tar.xz -C /usr/src/things
RUN make -C /usr/src/things all

如果使用下面的命令,不僅鏡像的層數(shù)減少,而且鏡像中也不包含 big.tar.xz 文件:

RUN mkdir -p /usr/src/things \
    && curl -SL http://example.com/big.tar.xz \
    | tar -xJC /usr/src/things \
    && make -C /usr/src/things all

好吧,看起來(lái)只有在解壓壓縮文件并把它們添加到鏡像中時(shí)才需要 ADD 命令!

加速鏡像構(gòu)建的技巧

在使用 COPY 和 ADD 命令時(shí),我們可以通過(guò)一些技巧來(lái)加速鏡像的 build 過(guò)程。比如把那些最不容易發(fā)生變化的文件的拷貝操作放在較低的鏡像層中,這樣在重新 build 鏡像時(shí)就會(huì)使用前面 build 產(chǎn)生的緩存。比如筆者構(gòu)建鏡像時(shí)需要用到下面幾個(gè)文件:

如何在Dockerfile 中使用COPY與ADD命令

其中 myhc.py 文件不經(jīng)常變化,而 checkmongo.py、checkmysql.py 和 checkredis.py 這三個(gè)文件則經(jīng)常變化,那么我們可這樣來(lái)設(shè)計(jì) Dockerfile 文件:

WORKDIR /app
COPY myhc.py .
COPY check* ./

讓 COPY myhc.py . 單獨(dú)占據(jù)一個(gè)鏡像層,當(dāng) build 過(guò)一次后,每次因 checkmongo.py、checkmysql.py 和 checkredis.py 這三個(gè)文件變化而導(dǎo)致的重新 build 都不會(huì)重新 build COPY myhc.py . 鏡像層:

如何在Dockerfile 中使用COPY與ADD命令

如上圖所示,第二步和第三步都沒(méi)有重新 build 鏡像層,而是使用了之前的緩存,從第四步才開(kāi)始重新 build 了鏡像層。當(dāng)文件 size 比較大且文件的數(shù)量又比較多,尤其是需要執(zhí)行安裝等操作時(shí),這樣的設(shè)計(jì)對(duì)于 build 速度的提升還是很明顯的。所以我們應(yīng)該盡量選擇能夠使用緩存的 Dockerfile 寫(xiě)法。

關(guān)于如何在Dockerfile 中使用COPY與ADD命令問(wèn)題的解答就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,如果你還有很多疑惑沒(méi)有解開(kāi),可以關(guān)注創(chuàng)新互聯(lián)成都網(wǎng)站設(shè)計(jì)公司行業(yè)資訊頻道了解更多相關(guān)知識(shí)。

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性?xún)r(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專(zhuān)為企業(yè)上云打造定制,能夠滿足用戶(hù)豐富、多元化的應(yīng)用場(chǎng)景需求。

網(wǎng)頁(yè)名稱(chēng):如何在Dockerfile中使用COPY與ADD命令-創(chuàng)新互聯(lián)
文章分享:http://aaarwkj.com/article10/hopgo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站設(shè)計(jì)公司網(wǎng)站制作、靜態(tài)網(wǎng)站、搜索引擎優(yōu)化、微信公眾號(hào)網(wǎng)頁(yè)設(shè)計(jì)公司

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(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í)需注明來(lái)源: 創(chuàng)新互聯(lián)

綿陽(yáng)服務(wù)器托管
欧美日韩一区二区午夜福利| 亚洲黄色手机在线网站| 亚洲国产精品日韩专区av有中文| 国产91极品尤物白丝美女| 免费av男人天堂亚洲天堂| 亚洲精品影视一区二区| 色哟哟亚洲精品一区二区| 日韩av裸体在线播放| 国产成人激情自拍视频在线观看 | 免费97久久人妻一区精品| 深夜福利在线观看97| 精品人妻一区二区三区不卡| 密臀av一区二区三区| 欧美久久精品在线观看| 国产自拍成人精品视频| 国产精品一区二区高潮| 日韩精品精美视频在线观看| 亚洲成av在线免费不卡| 亚洲成人精品免费观看| 日本一区二区电影大全| 18禁在线免费观看网站| 蜜桃人妻av一区二区三区 | 亚洲精品国产精品乱码不| 99热精品成人免费观看| 亚洲午夜经典一区二区日韩| 丝袜美腿诱惑国产在线| 99热这里只有精品中文有码| 小骚货操死你视频在线观看| 国产成人公开免费视频| 天堂av免费资源在线观看| 亚洲乱码日韩电影网站| 国产91日韩欧美在线观看| 日日躁夜夜躁狠狠躁欧美| 久久精品国产亚洲av麻| 日本人妻风俗店中文字幕| 欧美日韩一区二区高清在线| 欧美黄色一区在线观看| 日韩av一区二区国产| 国产麻豆精品免费喷白浆视频网站| 亚洲永久免费在线观看| 久久午夜福利欧美视频|