documentation没有详细说明这个è¯é¢˜ã€‚它说:
 Â最å°åŒ–图层数
   Â在Docker 17.05之å‰ï¼Œç”šè‡³æ›´å¤šï¼Œä¹‹å‰   Docker 1.10,最大é™åº¦åœ°å‡å°‘ä½ çš„å±‚æ•°   图片。以下改进å‡è½»äº†è¿™ç§éœ€æ±‚:
   Â在Docker 1.10åŠæ›´é«˜ç‰ˆæœ¬ä¸ï¼Œä»…创建RUN,COPYå’ŒADD指令   层。其他指令创建临时ä¸é—´å›¾åƒï¼Œå’Œ   ä¸å†ç›´æŽ¥å¢žåŠ 构建的大å°ã€‚
   ÂDocker 17.05åŠæ›´é«˜ç‰ˆæœ¬å¢žåŠ äº†å¯¹å¤šé˜¶æ®µæž„å»ºçš„æ”¯æŒ Â Â å…许您仅将所需的工件å¤åˆ¶åˆ°æœ€ç»ˆå›¾åƒä¸ã€‚   这å…许您在工具ä¸åŒ…å«å·¥å…·å’Œè°ƒè¯•ä¿¡æ¯   ä¸é—´æž„建阶段而ä¸å¢žåŠ æœ€ç»ˆçš„å¤§å° Â Â å›¾åƒã€‚
看起æ¥æœ€æ–°çš„Dockerç‰ˆæœ¬æ— æ³•è§£å†³å¤„ç†å¤šä¸ªå±‚的问题。他们å®æ„¿åŠªåŠ›å‡å°‘最终图åƒä¸çš„æ•°é‡ã€‚最é‡è¦çš„是,文档并没有告诉为什么很多层都ä¸å¥½ã€‚
我知é“42层的AUFS limit。对于广泛使用的图åƒï¼Œä¿æŒè¾ƒå°çš„层数是有æ„ä¹‰çš„ï¼Œå› ä¸ºå®ƒæœ‰åŠ©äºŽæž„å»ºåœ¨å…¶ä¸Šçš„å…¶ä»–å›¾åƒç¬¦åˆé™åˆ¶ã€‚但是,还有其他å˜å‚¨é©±åŠ¨ç¨‹åºå’Œå›¾åƒç”¨äºŽå…¶ä»–目的。
将图åƒä¿æŒåœ¨ä¸€ä¸ªæ˜Žæ˜¾çš„åŽŸå› ä¹Ÿå¾ˆå¥½ - 它们会å 用ç£ç›˜ç©ºé—´å’Œç½‘络带宽。但是,我ä¸è®¤ä¸ºchaining RUN statementså¹¶å› æ¤å°†å¤šå±‚压缩为一层有助于一般。如果ä¸åŒçš„RUN更新文件系统的ä¸åŒéƒ¨åˆ†ï¼Œåˆ™ä¸€å±‚和多层的大å°åº”该大致相åŒã€‚
å¦ä¸€æ–¹é¢ï¼Œè®¸å¤šå±‚å…许更快地使用缓å˜å’Œé‡å»ºå›¾åƒã€‚它们也是并行的。
我在一个拥有ç§æœ‰Docker注册表的å°å›¢é˜Ÿä¸å·¥ä½œã€‚我们永远ä¸ä¼šæ»¡è¶³42层é™åˆ¶ï¼Œä¸»è¦å…³æ³¨æ€§èƒ½å’Œå¼€å‘速度。
å¦‚æžœæ˜¯è¿™æ ·ï¼Œæˆ‘åº”è¯¥æœ€å°åŒ–泊åžçª—层的数é‡å—?
ç”案 0 :(得分:20)
 Â我在一个拥有ç§æœ‰Docker注册表的å°å›¢é˜Ÿä¸å·¥ä½œã€‚我们永远ä¸ä¼šæ»¡è¶³42层é™åˆ¶ï¼Œä¸»è¦å…³æ³¨æ€§èƒ½å’Œå¼€å‘速度。
å¦‚æžœæ˜¯è¿™æ ·ï¼Œæˆ‘åº”è¯¥æœ€å°åŒ–泊åžçª—层的数é‡å—?
åœ¨ä½ çš„æƒ…å†µä¸‹ï¼Œæ²¡æœ‰ã€‚
需è¦æœ€å°åŒ–的是构建时间,这æ„味ç€ï¼š
è¯è™½å¦‚æ¤ï¼Œthe documentation you mentionæ¥è‡ªdocker/docker.github.io
,æ£å¥½æ˜¯PR 4992å’ŒPR 4854,æ¥è‡ªdocker build LABEL
section。
所以这一部分是在关于LABEL
的类似评论之åŽå‘生的,åªæ˜¯å¼ºè°ƒäº†åˆ›å»ºå›¾å±‚的命令
åŒæ ·ï¼Œåœ¨æ‚¨çš„情况下,这ä¸é‡è¦ã€‚
ç”案 1 :(得分:16)
我åªæƒ³çœ‹çœ‹2个图åƒçš„区别是什么,一个是用多个RUN构建的,å¦ä¸€ä¸ªæ˜¯ç”¨ä¸€ä¸ªRUN连接命令构建的。
在第一ç§æƒ…况下,图åƒæ£åœ¨è¿›è¡Œç®€å•çš„æ“ä½œï¼ˆåˆ›å»ºå’Œåˆ é™¤æ–‡ä»¶ï¼‰ã€‚
"å•èº«ï¼†ï¼ƒ34;的内容图层图片:
FROM busybox
RUN echo This is the 1 > 1 \
&& rm -f 1 \
&& echo This is the 2 > 2 \
&& rm -f 2 \
# ... for about 70 commands
多层图片的内容:
FROM busybox
RUN echo This is the 1 > 1
RUN rm -f 1
RUN echo This is the 2 > 2
RUN rm -f 2
# ... for about 70 layers
构建时间éžå¸¸ä¸åŒï¼ˆå€æ•°ï¼š0m34,973s,å•æ•°ï¼š0m0,568s)。容器å¯åŠ¨æ—¶é—´ä¹Ÿä¸åŒä½†ä¸å¤ªæ˜Žæ˜¾ï¼ˆå¤šä¸ªï¼š0m0,435s,å•æ•°ï¼š0m0,378s)。我在图åƒä¸Šè¿è¡Œçš„时间ä¸åŒï¼Œä½†æ—¶é—´å¹¶æ²¡æœ‰é‚£ä¹ˆå¤§çš„改å˜ã€‚
关于空间,我已ç»è€ƒè™‘了多层情况下最å情况的目的,æ£å¦‚é¢„æœŸçš„é‚£æ ·ï¼Œå¤šå±‚å›¾åƒæ¯”å•å±‚更大。
在å¦ä¸€ä¸ªæµ‹è¯•ä¸ï¼Œæˆ‘连接了仅å‘图åƒæ·»åŠ 内容的图层。构建时间与å‰ä¸€ç§æƒ…况相比没有å˜åŒ–,但è¿è¡Œæ—¶æƒ…况显示略有ä¸åŒï¼šå¤šå±‚图åƒçš„å¯åŠ¨é€Ÿåº¦æ¯”å•å±‚图åƒå¿«ã€‚关于空间,相åŒçš„结果。
我ä¸è®¤ä¸ºè¿™è¯æ˜Žäº†ä»€ä¹ˆï¼Œä½†æˆ‘很ä¹æ„è¿™æ ·åšï¼šP
ç”案 2 :(得分:7)
å‡å°‘层数本身就ä¸æ˜¯ä¸€ä¸ªç›®æ ‡ã€‚相å,您需è¦å…³æ³¨çš„是缩çŸæž„建时间并å‡å°‘图åƒå°ºå¯¸ã€‚
通过ä¿ç•™Dockerfileé¡¶éƒ¨æˆ–åŸºæœ¬æ˜ åƒä¸å¾ˆå°‘更改的公共图层,å¯ä»¥å‡å°‘构建时间。这å…许在以åŽçš„构建ä¸ç¼“å˜å’Œé‡ç”¨è¯¥å±‚。这ä¸æ˜¯å…³äºŽå‡å°‘层数,而是关于更好地排åºå›¾å±‚。
缩å°æ˜ åƒå¤§å°æœ‰åŠ©äºŽå‡å°‘注册表æœåŠ¡å™¨ä¸Šçš„ç£ç›˜ä½¿ç”¨é‡ï¼Œè¿™ä¼šåœ¨ä¸ºCI系统上的æ¯ä¸ªæž„建å˜å‚¨æ˜ åƒæ—¶çœ‹åˆ°ç£ç›˜å¤§é‡å‘½ä¸ã€‚它还å‡å°‘äº†ä¼ è¾“å›¾åƒçš„ç½‘ç»œæ—¶é—´ã€‚å¦‚æžœæ‚¨æœ‰ä¸€ä¸ªä¸‹è½½å¤§åž‹ä¸´æ—¶æ–‡ä»¶çš„å›¾å±‚å¹¶å°†å…¶åˆ é™¤åˆ°å¦ä¸€ä¸ªå›¾å±‚ä¸ï¼Œåˆ™ä¼šå¯¼è‡´è¯¥æ–‡ä»¶ä¿ç•™åœ¨ç¬¬ä¸€å±‚,通过网络å‘é€å¹¶å˜å‚¨åœ¨ç£ç›˜ä¸Šï¼Œå³ä½¿å®ƒåœ¨å†…部ä¸å¯è§ä½ 的容器。更改文件的æƒé™è¿˜ä¼šå¯¼è‡´æ–‡ä»¶è¢«å¤åˆ¶åˆ°å…·æœ‰æ–°æƒé™çš„当å‰å±‚,从而使该文件的ç£ç›˜ç©ºé—´å’Œç½‘ç»œå¸¦å®½åŠ å€ã€‚
在上述场景ä¸å‡å°‘图åƒå¤§å°çš„æ ‡å‡†è§£å†³æ–¹æ¡ˆæ˜¯é“¾æŽ¥RUN
命令,以便临时文件永远ä¸ä¼šå˜å‚¨åˆ°å›¾åƒå±‚。这具有å‡å°‘图åƒå±‚数的副作用。
还有最åŽä¸€ä¸ªé—®é¢˜ï¼Œå³è¿‡åº¦ç¼“å˜ã€‚这在Debian图åƒä¸çš„apt-get update
å’Œapt-get install ...
命令ä¸å¾ˆå¸¸è§ã€‚如果ä¸å°†è¿™äº›å‘½ä»¤é“¾æŽ¥åœ¨ä¸€èµ·ï¼Œåˆ™apt-get install
命令的更新将é‡ç”¨å‰ä¸€å±‚apt-get update
命令ä¸å¯èƒ½è¿‡æ—¶çš„缓å˜ï¼Œå¹¶ä¸”åœ¨å‡ ä¸ªæœˆåŽæ— æ³•æ‰¾åˆ°æ‰€éœ€çš„åŒ…æ—¶å°†å¤±è´¥ã€‚å› æ¤ï¼Œæ‚¨åº”该链接这些命令,å³ä½¿å®ƒä¼šå¢žåŠ æž„å»ºæ—¶é—´ï¼Œå› ä¸ºå¦ä¸€ä¸ªé€‰é¡¹æ˜¯å°†æ¥ä¼šå‡ºçŽ°æž„建失败。
å› æ¤ï¼Œå‡å°‘ä½ æƒ³è¦çš„层的副作用更多,ä¸ä¸€å®šæ˜¯ä¸ºäº†å‡å°‘层数而å‡å°‘层数。