婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > 詳解Dockerfile 中的 COPY 與 ADD 命令

詳解Dockerfile 中的 COPY 與 ADD 命令

熱門標簽:大連400電話如何申請 新余高德地圖標注怎么修改 撫順地圖標注 高德地圖標注好做嗎 達亞電銷機器人官網 外呼系統坐席費計入會計哪個科目 電銷機器人價值 如何分析地圖標注 電銷機器人怎么接線路

Dockerfile 中提供了兩個非常相似的命令 COPY 和 ADD,本文嘗試解釋這兩個命令的基本功能,以及其異同點,然后總結其各自適合的應用場景。

Build 上下文的概念

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

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

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

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

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

對于 COPY 和 ADD 命令來說,如果要把本地的文件拷貝到鏡像中,那么本地的文件必須是在上下文目錄中的文件。其實這一點很好解釋,因為在執行 build 命令時,docker 客戶端會把上下文中的所有文件發送給 docker daemon。考慮 docker 客戶端和 docker daemon 不在同一臺機器上的情況,build 命令只能從上下文中獲取文件。如果我們在 Dockerfile 的 COPY 和 ADD 命令中引用了上下文中沒有的文件,就會收到類似下面的錯誤:

與 WORKDIR 協同工作

WORKDIR 命令為后續的 RUN、CMD、COPY、ADD 等命令配置工作目錄。在設置了 WORKDIR 命令后,接下來的 COPY 和 ADD 命令中的相對路徑就是相對于 WORKDIR 指定的路徑。比如我們在 Dockerfile 中添加下面的命令:

WORKDIR /app
COPY checkredis.py .

然后構建名稱為 testx 的容器鏡像,并運行一個容器查看文件路徑:

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

COPY 命令的簡單性

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

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

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

對于目錄而言,COPY 和 ADD 命令具有相同的特點:只復制目錄中的內容而不包含目錄自身。比如我們在 Dockerfile 中添加下面的命令:

WORKDIR /app
COPY nickdir .

其中 nickdir 目錄的結構如下:

重新構建鏡像 testx,運行一個容器并查看 /app 目錄下的內容:

這里只有 file1 和 file2,少了一層目錄 nickdir。如果想讓 file1 和 file2 還保存在 nickdir 目錄中,需要在目標路徑中指定這個目錄的名稱,比如:

WORKDIR /app
COPY nickdir ./nickdir

COPY 命令區別于 ADD 命令的一個用法是在 multistage 場景下。關于 multistage 的介紹和用法請參考筆者的《Dockerfile 中的 multi-stage》一文。在 multistage 的用法中,可以使用 COPY 命令把前一階段構建的產物拷貝到另一個鏡像中,比如:

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 命令通過指定 --from=0 參數,把前一階段構建的產物拷貝到了當前的鏡像中。

ADD 命令還可以干其它事情

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

ADD <src> <dest>

除了不能用在 multistage 的場景下,ADD 命令可以完成 COPY 命令的所有功能,并且還可以完成兩類超酷的功能:

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

當然,這些功能也讓 ADD 命令用起來復雜一些,不如 COPY 命令那么直觀。

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

如果我們有一個壓縮文件包,并且需要把這個壓縮包中的文件添加到鏡像中。需不需要先解開壓縮包然后執行 COPY 命令呢?當然不需要!我們可以通過 ADD 命令一次搞定:

WORKDIR /app
ADD nickdir.tar.gz .

這應該是 ADD 命令的最佳使用場景了!

從 url 拷貝文件到鏡像中

這是一個更加酷炫的用法!但是在docker 官方文檔的最佳實踐中卻強烈建議不要這么用!!docker 官方建議我們當需要從遠程復制文件時,最好使用 curl 或 wget 命令來代替 ADD 命令。原因是,當使用 ADD 命令時,會創建更多的鏡像層,當然鏡像的 size 也會更大(下面的兩段代碼來自 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

如果使用下面的命令,不僅鏡像的層數減少,而且鏡像中也不包含 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

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

加速鏡像構建的技巧

在使用 COPY 和 ADD 命令時,我們可以通過一些技巧來加速鏡像的 build 過程。比如把那些最不容易發生變化的文件的拷貝操作放在較低的鏡像層中,這樣在重新 build 鏡像時就會使用前面 build 產生的緩存。比如筆者構建鏡像時需要用到下面幾個文件:

其中 myhc.py 文件不經常變化,而 checkmongo.py、checkmysql.py 和 checkredis.py 這三個文件則經常變化,那么我們可這樣來設計 Dockerfile 文件:

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

讓 COPY myhc.py . 單獨占據一個鏡像層,當 build 過一次后,每次因 checkmongo.py、checkmysql.py 和 checkredis.py 這三個文件變化而導致的重新 build 都不會重新 build COPY myhc.py . 鏡像層:

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

總結

當第一次看到 COPY 和 ADD 命令時不免讓人感到疑惑。但分析之后大家會發現 COPY 命令是為最基本的用法設計的,概念清晰,操作簡單。而 ADD 命令基本上是 COPY 命令的超集(除了 multistage 場景),可以實現一些方便、酷炫的拷貝操作。ADD 命令在增加了功能的同時也增加了使用它的復雜度,比如從 url 拷貝壓縮文件時弊大于利。希望本文能夠解去大家對 Dockerfile 中 COPY 和 ADD 命令的疑惑。

參考:

Docker COPY: Dockerfile best practices

Best practices for writing Dockerfiles

Dockerfile COPY

Dockerfile ADD

以上所述是小編給大家介紹的Dockerfile 中的 COPY 與 ADD 命令,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對腳本之家網站的支持!

標簽:衡水 黃石 楊凌 遼源 南通 新鄉 海東 湖南

巨人網絡通訊聲明:本文標題《詳解Dockerfile 中的 COPY 與 ADD 命令》,本文關鍵詞  詳解,Dockerfile,中的,COPY,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《詳解Dockerfile 中的 COPY 與 ADD 命令》相關的同類信息!
  • 本頁收集關于詳解Dockerfile 中的 COPY 與 ADD 命令的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    国产日产欧产精品推荐色| 国产精品传媒在线| 专区另类欧美日韩| 精品视频123区在线观看| 国产在线视频一区二区三区| 成人午夜电影小说| 日本欧美肥老太交大片| 美女网站视频久久| 国产精品自拍毛片| 91在线观看成人| 91麻豆精品国产无毒不卡在线观看 | 91视频.com| 欧美日韩1234| 精品国产伦一区二区三区观看体验| 久久精品日韩一区二区三区| 国产精品亲子乱子伦xxxx裸| 手机精品视频在线观看| 国产成人午夜99999| 欧美性三三影院| 久久精品在线免费观看| 亚洲高清久久久| 国产毛片精品视频| 国产精华液一区二区三区| 欧美色大人视频| 国产亚洲欧美一级| 中国av一区二区三区| 综合婷婷亚洲小说| 免费在线观看成人| 成人高清视频免费观看| 日韩一区二区在线看片| 日韩毛片精品高清免费| 91蝌蚪porny| 成人精品免费看| 91偷拍与自偷拍精品| 欧美日韩综合一区| 91精品国产手机| 国产不卡视频在线播放| 成人禁用看黄a在线| 成人中文字幕电影| 日日欢夜夜爽一区| 韩国av一区二区三区| 欧美日韩久久一区二区| 亚洲手机成人高清视频| 国产毛片精品国产一区二区三区| 91精品国产入口在线| 亚洲综合色噜噜狠狠| 成人app网站| 久久久91精品国产一区二区精品 | 国产99精品在线观看| 国产精品亚洲午夜一区二区三区 | 极品少妇xxxx偷拍精品少妇| 精品亚洲免费视频| 粉嫩13p一区二区三区| eeuss鲁片一区二区三区在线观看| 色94色欧美sute亚洲线路一ni| 欧美精品123区| xfplay精品久久| 自拍av一区二区三区| 免费高清不卡av| 97aⅴ精品视频一二三区| 欧美精品一卡两卡| 91丨porny丨中文| 狠狠狠色丁香婷婷综合激情| 成人av资源在线观看| 老司机一区二区| 国产福利不卡视频| 久久久综合九色合综国产精品| 久久国产剧场电影| 精品国产青草久久久久福利| 久久99精品国产.久久久久久| 欧美成人精品福利| 经典三级视频一区| 国产欧美一区二区精品性| 成人涩涩免费视频| 综合分类小说区另类春色亚洲小说欧美| 色综合亚洲欧洲| 夜夜嗨av一区二区三区| 欧美三级韩国三级日本三斤| 久久99精品久久久久久国产越南| 亚洲午夜久久久久| 久久99精品国产麻豆不卡| 欧美日韩综合一区| 亚洲自拍偷拍麻豆| fc2成人免费人成在线观看播放 | 婷婷中文字幕综合| 亚洲一区在线观看免费| 欧美日韩一区不卡| 日韩vs国产vs欧美| 日本一区二区电影| 欧美专区亚洲专区| 久久精品999| 国产精品第13页| 在线播放日韩导航| 粉嫩av一区二区三区粉嫩| 亚洲在线成人精品| 精品久久久影院| 91色综合久久久久婷婷| 麻豆一区二区三| 国产精品人人做人人爽人人添| 欧美日韩在线三级| 久久国产剧场电影| 亚洲一线二线三线视频| 欧美一区二区视频在线观看2020 | 麻豆91在线播放| 国产精品国产精品国产专区不蜜 | 午夜精品免费在线观看| caoporen国产精品视频| 婷婷综合另类小说色区| 国产精品免费网站在线观看| 欧美在线视频全部完| 国产乱子轮精品视频| 中文字幕色av一区二区三区| 日韩精品久久久久久| 欧美一区二区视频观看视频| 久久99精品国产麻豆不卡| 精品粉嫩aⅴ一区二区三区四区| 轻轻草成人在线| 精品国产髙清在线看国产毛片| 久88久久88久久久| 国产精品福利电影一区二区三区四区| 国产婷婷色一区二区三区四区 | 欧美一区二区三区日韩视频| 亚洲精品中文字幕乱码三区| 久久久三级国产网站| 欧美午夜精品理论片a级按摩| av不卡在线播放| 国产69精品久久久久777| 精品一区二区在线视频| 日韩国产精品大片| 一区二区成人在线| 精品一区二区三区蜜桃| 日韩精品一区二区三区三区免费| 国产成人av影院| 亚洲一区二区三区爽爽爽爽爽 | 精品一区二区三区在线播放 | 丁香另类激情小说| 欧美国产精品专区| 91激情在线视频| 日韩国产一区二| 国产精品欧美经典| 欧美特级限制片免费在线观看| 亚洲高清在线视频| 久久青草国产手机看片福利盒子| 精品久久久久久综合日本欧美| 成人三级伦理片| 一卡二卡欧美日韩| 日韩视频免费观看高清完整版| 激情五月播播久久久精品| 色婷婷激情综合| 国产福利精品一区二区| 国产成人鲁色资源国产91色综| 国产精品一二二区| kk眼镜猥琐国模调教系列一区二区| 免费在线观看视频一区| 久久亚洲二区三区| 中文字幕一区二区三区在线播放| 亚洲国产日韩a在线播放| 欧美国产1区2区| 中文字幕一区二区三区不卡 | 久久国产精品一区二区| 日本aⅴ精品一区二区三区| 麻豆精品视频在线观看| 奇米精品一区二区三区四区| 欧美a一区二区| 日本女优在线视频一区二区| 免费观看久久久4p| 免费成人小视频| 久久精品国产**网站演员| 从欧美一区二区三区| 92国产精品观看| 欧美视频完全免费看| 欧美日韩一区二区三区高清| 精品久久国产老人久久综合| 91啪亚洲精品| 秋霞电影网一区二区| 亚洲一二三区视频在线观看| 久久色视频免费观看| 久久综合色8888| 国产午夜精品在线观看| 欧美在线观看视频一区二区| 91色.com| 精品国产3级a| 中文字幕欧美国产| 亚洲综合成人在线| 国产精品一区久久久久| 丁香六月综合激情| 99视频精品在线| 7777精品伊人久久久大香线蕉超级流畅 | www.欧美亚洲| 日韩欧美二区三区| 91一区二区三区在线观看| 中文字幕日韩一区二区| 国产欧美日韩视频一区二区| 欧美成人video| 国模大尺度一区二区三区| 成人免费av网站| 欧美妇女性影城| 综合自拍亚洲综合图不卡区| 久久国产精品色| 亚洲国产一区二区视频|