{"id":11644,"date":"2026-01-03T18:31:19","date_gmt":"2026-01-03T10:31:19","guid":{"rendered":"https:\/\/www.taki.com.tw\/blog\/?p=11644"},"modified":"2026-01-14T23:53:06","modified_gmt":"2026-01-14T15:53:06","slug":"dockerfile-best-practices","status":"publish","type":"post","link":"https:\/\/www.taki.com.tw\/blog\/dockerfile-best-practices\/","title":{"rendered":"Docker Image \u8207 Dockerfile \u5be6\u6230\u6559\u5b78\uff08\u6700\u4f73\u5be6\u52d9\u8207\u6548\u80fd\u512a\u5316\uff09"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-post\" data-elementor-id=\"11644\" class=\"elementor elementor-11644\" data-elementor-post-type=\"post\">\n\t\t\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-787868a elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"787868a\" data-element_type=\"section\" data-e-type=\"section\" data-settings=\"{&quot;jet_parallax_layout_list&quot;:[]}\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-50 elementor-top-column elementor-element elementor-element-5adcb1c\" data-id=\"5adcb1c\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-61cf4ea elementor-toc--minimized-on-tablet elementor-widget elementor-widget-table-of-contents\" data-id=\"61cf4ea\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;headings_by_tags&quot;:[&quot;h2&quot;,&quot;h3&quot;],&quot;exclude_headings_by_selector&quot;:[],&quot;marker_view&quot;:&quot;bullets&quot;,&quot;no_headings_message&quot;:&quot;\\u5728\\u6b64\\u9801\\u9762\\u4e0a\\u627e\\u4e0d\\u5230\\u6a19\\u984c\\u3002&quot;,&quot;icon&quot;:{&quot;value&quot;:&quot;fas fa-circle&quot;,&quot;library&quot;:&quot;fa-solid&quot;},&quot;minimize_box&quot;:&quot;yes&quot;,&quot;minimized_on&quot;:&quot;tablet&quot;,&quot;hierarchical_view&quot;:&quot;yes&quot;,&quot;min_height&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;min_height_tablet&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;min_height_mobile&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]}}\" data-widget_type=\"table-of-contents.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<div class=\"elementor-toc__header\">\n\t\t\t\t\t\t<h4 class=\"elementor-toc__header-title\">\n\t\t\t\t\u76ee\u9304\t\t\t<\/h4>\n\t\t\t\t\t\t\t\t\t\t<div class=\"elementor-toc__toggle-button elementor-toc__toggle-button--expand\" role=\"button\" tabindex=\"0\" aria-controls=\"elementor-toc__61cf4ea\" aria-expanded=\"true\" aria-label=\"Open table of contents\"><i aria-hidden=\"true\" class=\"fas fa-chevron-down\"><\/i><\/div>\n\t\t\t\t<div class=\"elementor-toc__toggle-button elementor-toc__toggle-button--collapse\" role=\"button\" tabindex=\"0\" aria-controls=\"elementor-toc__61cf4ea\" aria-expanded=\"true\" aria-label=\"Close table of contents\"><i aria-hidden=\"true\" class=\"fas fa-chevron-up\"><\/i><\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<div id=\"elementor-toc__61cf4ea\" class=\"elementor-toc__body\">\n\t\t\t<div class=\"elementor-toc__spinner-container\">\n\t\t\t\t<i class=\"elementor-toc__spinner eicon-animation-spin eicon-loading\" aria-hidden=\"true\"><\/i>\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t<div class=\"elementor-column elementor-col-50 elementor-top-column elementor-element elementor-element-9bccc41\" data-id=\"9bccc41\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-f33c8d3 elementor-widget elementor-widget-image\" data-id=\"f33c8d3\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img fetchpriority=\"high\" decoding=\"async\" width=\"1536\" height=\"1024\" src=\"https:\/\/www.taki.com.tw\/blog\/wp-content\/uploads\/2026\/01\/dockerfile-best-practices.jpg\" class=\"attachment-full size-full wp-image-11647\" alt=\"\" srcset=\"https:\/\/www.taki.com.tw\/blog\/wp-content\/uploads\/2026\/01\/dockerfile-best-practices.jpg 1536w, https:\/\/www.taki.com.tw\/blog\/wp-content\/uploads\/2026\/01\/dockerfile-best-practices-300x200.jpg 300w, https:\/\/www.taki.com.tw\/blog\/wp-content\/uploads\/2026\/01\/dockerfile-best-practices-1024x683.jpg 1024w, https:\/\/www.taki.com.tw\/blog\/wp-content\/uploads\/2026\/01\/dockerfile-best-practices-768x512.jpg 768w\" sizes=\"(max-width: 1536px) 100vw, 1536px\" title=\"Dockerfile \u6700\u4f73\u5be6\u52d9\uff1aDocker Image \u5be6\u6230\u6559\u5b78\u8207\u6548\u80fd\u512a\u5316 - TAKI\u5b98\u65b9\u90e8\u843d\u683c\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-8f87d50 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"8f87d50\" data-element_type=\"section\" data-e-type=\"section\" data-settings=\"{&quot;jet_parallax_layout_list&quot;:[]}\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-931bee8\" data-id=\"931bee8\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<section class=\"elementor-section elementor-inner-section elementor-element elementor-element-45d053f elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"45d053f\" data-element_type=\"section\" data-e-type=\"section\" data-settings=\"{&quot;jet_parallax_layout_list&quot;:[]}\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-inner-column elementor-element elementor-element-294be65\" data-id=\"294be65\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<section class=\"elementor-section elementor-inner-section elementor-element elementor-element-e5ef4b1 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"e5ef4b1\" data-element_type=\"section\" data-e-type=\"section\" data-settings=\"{&quot;jet_parallax_layout_list&quot;:[]}\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-33 elementor-inner-column elementor-element elementor-element-0daf638\" data-id=\"0daf638\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-d3477c7 elementor-widget elementor-widget-image\" data-id=\"d3477c7\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t<figure class=\"wp-caption\">\n\t\t\t\t\t\t\t\t\t\t\t<a href=\"\/cloud-hosting\/\" target=\"_blank\">\n\t\t\t\t\t\t\t<img decoding=\"async\" width=\"500\" height=\"395\" src=\"https:\/\/www.taki.com.tw\/blog\/wp-content\/uploads\/2025\/02\/taki-cloud.webp\" class=\"attachment-full size-full wp-image-10218\" alt=\"\" srcset=\"https:\/\/www.taki.com.tw\/blog\/wp-content\/uploads\/2025\/02\/taki-cloud.webp 500w, https:\/\/www.taki.com.tw\/blog\/wp-content\/uploads\/2025\/02\/taki-cloud-300x237.webp 300w\" sizes=\"(max-width: 500px) 100vw, 500px\" title=\"TAKI Cloud \u96f2\u7aef\u4e3b\u6a5f \u53ea\u8981470\u5143\u8d77 - TAKI\u5b98\u65b9\u90e8\u843d\u683c\" \/>\t\t\t\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t\t\t\t<figcaption class=\"widget-image-caption wp-caption-text\">TAKI Cloud \u96f2\u7aef\u4e3b\u6a5f \u53ea\u8981470\u5143\u8d77<\/figcaption>\n\t\t\t\t\t\t\t\t\t\t<\/figure>\n\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t<div class=\"elementor-column elementor-col-33 elementor-inner-column elementor-element elementor-element-ec07ba6\" data-id=\"ec07ba6\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-4091a6f elementor-widget elementor-widget-image\" data-id=\"4091a6f\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t<figure class=\"wp-caption\">\n\t\t\t\t\t\t\t\t\t\t\t<a href=\"\/rent\/\">\n\t\t\t\t\t\t\t<img decoding=\"async\" width=\"500\" height=\"395\" src=\"https:\/\/www.taki.com.tw\/blog\/wp-content\/uploads\/2025\/02\/rent.webp\" class=\"attachment-full size-full wp-image-10220\" alt=\"\" srcset=\"https:\/\/www.taki.com.tw\/blog\/wp-content\/uploads\/2025\/02\/rent.webp 500w, https:\/\/www.taki.com.tw\/blog\/wp-content\/uploads\/2025\/02\/rent-300x237.webp 300w\" sizes=\"(max-width: 500px) 100vw, 500px\" title=\"TAKI Cloud \u5be6\u9ad4\u4e3b\u6a5f \u53ea\u89814,500\u8d77 - TAKI\u5b98\u65b9\u90e8\u843d\u683c\" \/>\t\t\t\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t\t\t\t<figcaption class=\"widget-image-caption wp-caption-text\">TAKI Cloud \u5be6\u9ad4\u4e3b\u6a5f \u53ea\u89814,500\u8d77<\/figcaption>\n\t\t\t\t\t\t\t\t\t\t<\/figure>\n\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t<div class=\"elementor-column elementor-col-33 elementor-inner-column elementor-element elementor-element-5f46bbe\" data-id=\"5f46bbe\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-701932d elementor-widget elementor-widget-image\" data-id=\"701932d\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t<figure class=\"wp-caption\">\n\t\t\t\t\t\t\t\t\t\t\t<a href=\"\/co-location\/\">\n\t\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"500\" height=\"395\" src=\"https:\/\/www.taki.com.tw\/blog\/wp-content\/uploads\/2025\/02\/co-location.webp\" class=\"attachment-full size-full wp-image-10219\" alt=\"\" srcset=\"https:\/\/www.taki.com.tw\/blog\/wp-content\/uploads\/2025\/02\/co-location.webp 500w, https:\/\/www.taki.com.tw\/blog\/wp-content\/uploads\/2025\/02\/co-location-300x237.webp 300w\" sizes=\"(max-width: 500px) 100vw, 500px\" title=\"TAKI Cloud \u4e3b\u6a5f\u4ee3\u7ba1 \u53ea\u89812,000\u5143\u8d77 - TAKI\u5b98\u65b9\u90e8\u843d\u683c\" \/>\t\t\t\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t\t\t\t<figcaption class=\"widget-image-caption wp-caption-text\">TAKI Cloud \u4e3b\u6a5f\u4ee3\u7ba1 \u53ea\u89812,000\u5143\u8d77<\/figcaption>\n\t\t\t\t\t\t\t\t\t\t<\/figure>\n\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-35a3061 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"35a3061\" data-element_type=\"section\" data-e-type=\"section\" data-settings=\"{&quot;jet_parallax_layout_list&quot;:[]}\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-ff439be\" data-id=\"ff439be\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-4e26aa0 elementor-widget elementor-widget-text-editor\" data-id=\"4e26aa0\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<blockquote><p data-start=\"209\" data-end=\"302\">\u672c\u6587\u6df1\u5165\u8aaa\u660e <strong data-start=\"257\" data-end=\"276\">Dockerfile \u6700\u4f73\u5be6\u52d9<\/strong>\uff0c\u5f9e Docker Image \u7684\u5206\u5c64\u539f\u7406\u3001\u5feb\u53d6\u7b56\u7565\u5230 Multi-stage builds \u7684\u5be6\u6230\u5beb\u6cd5\uff0c\u5b8c\u6574\u89e3\u6790\u5982\u4f55\u6253\u9020\u5c0f\u800c\u5feb\u3001\u5b89\u5168\u4e14\u53ef\u7dad\u904b\u7684\u5bb9\u5668\u6620\u50cf\u6a94\u3002\u5167\u5bb9\u6db5\u84cb\u6548\u80fd\u512a\u5316\u3001\u6620\u50cf\u6a94\u7626\u8eab\u3001\u5b89\u5168\u8a2d\u5b9a\u8207\u751f\u7522\u74b0\u5883\u5e38\u898b\u8e29\u96f7\uff0c\u9069\u5408 Docker \u65b0\u624b\u8207\u6b63\u5f0f\u74b0\u5883\u90e8\u7f72\u4f7f\u7528\u3002<\/p><\/blockquote><p data-start=\"209\" data-end=\"302\">\u5728 Docker \u7684\u4e16\u754c\u88e1\uff0c\u771f\u6b63\u5f71\u97ff\u300c\u90e8\u7f72\u901f\u5ea6\u3001\u6210\u672c\u3001\u7a69\u5b9a\u6027\u8207\u5b89\u5168\u6027\u300d\u7684\u6838\u5fc3\uff0c\u4e0d\u662f\u4f60\u7528\u4ec0\u9ebc\u5bb9\u5668\u5e73\u53f0\uff0c\u800c\u662f\u4f60\u600e\u9ebc\u505a <strong data-start=\"266\" data-end=\"282\">Docker Image<\/strong>\u3001\u600e\u9ebc\u5beb <strong data-start=\"287\" data-end=\"301\">Dockerfile<\/strong>\u3002<\/p><p data-start=\"304\" data-end=\"380\">\u540c\u4e00\u500b\u61c9\u7528\u7a0b\u5f0f\uff0c\u53ef\u80fd\u6709\u4eba\u6253\u51fa 1.2GB \u7684\u6620\u50cf\u6a94\uff0c\u555f\u52d5\u6162\u3001\u6383\u63cf\u6f0f\u6d1e\u6eff\u5929\u98db\uff1b\u4e5f\u53ef\u80fd\u6709\u4eba\u7528\u6700\u4f73\u5be6\u52d9\u505a\u5230 80MB\u3001\u555f\u52d5\u5feb\u3001\u5feb\u53d6\u547d\u4e2d\u7387\u9ad8\u3001\u4f9b\u61c9\u93c8\u98a8\u96aa\u4e5f\u66f4\u4f4e\u3002<\/p><p data-start=\"382\" data-end=\"481\">\u9019\u7bc7\u6703\u7528\u300c\u5be6\u6230\u5c0e\u5411\u300d\u65b9\u5f0f\uff0c\u5e36\u4f60\u5f9e\u57fa\u790e\u6982\u5ff5\u4e00\u8def\u5230\u4f01\u696d\u53ef\u7528\u7684\u6700\u4f73\u5be6\u52d9\uff1a\u5305\u542b\u5206\u5c64\u5feb\u53d6\u3001multi-stage builds\u3001\u6700\u5c0f\u5316\u6620\u50cf\u6a94\u3001\u975e root\u3001SBOM \/ \u7c3d\u7ae0\u3001\u4ee5\u53ca CI\/CD \u5e38\u898b\u8e29\u96f7\u4fee\u6cd5\u3002<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-b322e41 elementor-widget elementor-widget-heading\" data-id=\"b322e41\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Docker Image \u8207 Dockerfile\uff1a\u4f60\u8981\u5148\u638c\u63e1\u7684\u5e95\u5c64\u908f\u8f2f<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-0fc94c9 elementor-widget elementor-widget-text-editor\" data-id=\"0fc94c9\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Dockerfile \u662f\u7528\u4f86\u63cf\u8ff0\u300c\u5982\u4f55\u5efa\u7f6e\u6620\u50cf\u6a94\u300d\u7684\u898f\u683c\u6587\u4ef6\uff0c\u800c Docker Image \u5247\u662f\u4f9d\u64da Dockerfile \u6240\u7522\u751f\u3001\u53ef\u88ab\u90e8\u7f72\u8207\u57f7\u884c\u7684\u6210\u679c\u3002Docker Image \u63a1\u7528\u5206\u5c64\uff08Layer\uff09\u67b6\u69cb\uff0c\u6bcf\u4e00\u500b Dockerfile \u6307\u4ee4\u901a\u5e38\u90fd\u6703\u5f62\u6210\u4e00\u5c64\uff0c\u9019\u7a2e\u8a2d\u8a08\u76f4\u63a5\u5f71\u97ff\u5efa\u7f6e\u901f\u5ea6\u3001\u5feb\u53d6\u547d\u4e2d\u7387\u3001\u6620\u50cf\u6a94\u5927\u5c0f\u8207\u5f8c\u7e8c\u7dad\u904b\u6210\u672c\u3002\u7406\u89e3 Dockerfile \u5982\u4f55\u8f49\u63db\u70ba\u591a\u5c64 Image\uff0c\u662f\u5be6\u8e10 Dockerfile \u6700\u4f73\u5be6\u52d9\u3001\u9032\u884c\u6548\u80fd\u8207\u5b89\u5168\u512a\u5316\u7684\u95dc\u9375\u57fa\u790e\u3002<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-b72db2f elementor-widget elementor-widget-heading\" data-id=\"b72db2f\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h3 class=\"elementor-heading-title elementor-size-default\">Docker Image \u662f\u4ec0\u9ebc<\/h3>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-e601f8f elementor-widget elementor-widget-text-editor\" data-id=\"e601f8f\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Docker Image \u662f\u4e00\u500b<span style=\"color: #3366ff;\"><strong data-start=\"126\" data-end=\"152\">\u4e0d\u53ef\u8b8a\uff08Immutable\uff09\u7684\u61c9\u7528\u7a0b\u5f0f\u6620\u50cf\u6a94<\/strong><\/span>\uff0c\u5167\u542b\u4f5c\u696d\u7cfb\u7d71\u57fa\u5e95\u3001\u57f7\u884c\u74b0\u5883\u3001\u76f8\u4f9d\u5957\u4ef6\u8207\u61c9\u7528\u7a0b\u5f0f\u672c\u8eab\uff0c\u53ef\u88ab\u4e00\u81f4\u5730\u90e8\u7f72\u5230\u4efb\u4f55\u652f\u63f4 Docker \u7684\u74b0\u5883\u4e2d\u3002Docker Image \u63a1\u7528\u5206\u5c64\uff08Layer\uff09\u67b6\u69cb\uff0c\u6bcf\u4e00\u5c64\u90fd\u53ef\u88ab\u5feb\u53d6\u8207\u91cd\u7528\uff0c\u9019\u4f7f\u5f97\u6620\u50cf\u6a94\u7684\u5efa\u7f6e\u6548\u7387\u3001\u9ad4\u7a4d\u5927\u5c0f\u8207\u90e8\u7f72\u901f\u5ea6\uff0c\u76f4\u63a5\u53d7\u5230\u5efa\u7f6e\u65b9\u5f0f\u8207\u5206\u5c64\u8a2d\u8a08\u7684\u5f71\u97ff\u3002<\/p><p data-start=\"553\" data-end=\"592\">Docker Image\uff08\u6620\u50cf\u6a94\uff09\u53ef\u4ee5\u7406\u89e3\u6210<strong><span style=\"color: #3366ff;\">\u53ef\u651c\u5f0f\u7684\u61c9\u7528\u7a0b\u5f0f\u5305<\/span><\/strong>\uff0c\u88e1\u9762\u5305\u542b\uff1a<\/p><ul><li data-start=\"595\" data-end=\"626\">OS\/Runtime \u57fa\u5e95\uff08\u4f8b\u5982 Debian\/Alpine\uff09<\/li><li data-start=\"629\" data-end=\"638\">\u4f60\u7684\u61c9\u7528\u7a0b\u5f0f\u7a0b\u5f0f\u78bc<\/li><li data-start=\"641\" data-end=\"682\">\u4f9d\u8cf4\u5957\u4ef6\uff08node_modules\u3001pip wheels\u3001system libs\uff09<\/li><li data-start=\"685\" data-end=\"694\">\u555f\u52d5\u6307\u4ee4\u8207\u74b0\u5883\u8a2d\u5b9a<\/li><\/ul><p data-start=\"696\" data-end=\"777\">\u6620\u50cf\u6a94\u672c\u8cea\u662f\u7531\u5f88\u591a\u5c64\uff08layers\uff09\u7d44\u6210\uff0c\u6bcf\u4e00\u500b Dockerfile \u6307\u4ee4\uff08\u5982 <code data-start=\"737\" data-end=\"742\">RUN<\/code>\u3001<code data-start=\"743\" data-end=\"749\">COPY<\/code>\uff09\u901a\u5e38\u6703\u5f62\u6210\u4e00\u5c64\u3002\u9019\u500b\u300c\u5206\u5c64\u300d\u662f\u6548\u80fd\u8207\u6210\u672c\u7684\u95dc\u9375\uff0c\u56e0\u70ba\uff1a<\/p><ul><li data-start=\"780\" data-end=\"797\">\u5206\u5c64\u5feb\u53d6\u547d\u4e2d \u2192 build \u5f88\u5feb<\/li><li data-start=\"800\" data-end=\"824\">\u5c64\u6539\u8b8a \u2192 \u4e4b\u5f8c\u7684\u5c64\u90fd\u91cd\u5efa \u2192 build \u8b8a\u6162<\/li><li data-start=\"827\" data-end=\"863\">\u5c64\u8d8a\u591a\u3001\u8d8a\u80a5 \u2192 pull \u6162\u3001\u90e8\u7f72\u6162\u3001CDN\/Registry \u6210\u672c\u9ad8<\/li><\/ul>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-845fcb7 elementor-widget elementor-widget-heading\" data-id=\"845fcb7\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h3 class=\"elementor-heading-title elementor-size-default\">Dockerfile \u662f\u4ec0\u9ebc<\/h3>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-5f51e9a elementor-widget elementor-widget-text-editor\" data-id=\"5f51e9a\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Dockerfile \u662f\u4e00\u500b\u7528\u4f86\u5b9a\u7fa9 <span style=\"color: #3366ff;\"><strong data-start=\"122\" data-end=\"143\">Docker Image \u5efa\u7f6e\u6d41\u7a0b<\/strong><\/span> \u7684\u8a2d\u5b9a\u6a94\uff0c\u900f\u904e\u4e00\u7cfb\u5217\u5177\u5099\u9806\u5e8f\u6027\u7684\u6307\u4ee4\uff0c\u63cf\u8ff0\u57fa\u5e95\u6620\u50cf\u3001\u76f8\u4f9d\u5957\u4ef6\u3001\u7a0b\u5f0f\u78bc\u8907\u88fd\u65b9\u5f0f\u8207\u5bb9\u5668\u555f\u52d5\u884c\u70ba\u3002Docker \u6703\u4f9d\u7167 Dockerfile \u7684\u6307\u4ee4\u9010\u5c64\u5efa\u7acb\u6620\u50cf\u6a94\uff0c\u6bcf\u4e00\u5c64\u90fd\u53ef\u88ab\u5feb\u53d6\u8207\u91cd\u7528\uff0c\u56e0\u6b64 Dockerfile \u7684\u64b0\u5beb\u65b9\u5f0f\uff0c\u6703\u76f4\u63a5\u5f71\u97ff\u6620\u50cf\u6a94\u5927\u5c0f\u3001\u5efa\u7f6e\u6548\u7387\u3001\u5b89\u5168\u6027\u8207\u751f\u7522\u74b0\u5883\u7684\u53ef\u7dad\u904b\u6027\u3002<\/p><p data-start=\"186\" data-end=\"221\"><span style=\"color: #3366ff;\"><strong data-start=\"186\" data-end=\"221\">\u4e00\u4efd\u8a2d\u8a08\u826f\u597d\u7684 Dockerfile\uff0c\u5c07\u76f4\u63a5\u6c7a\u5b9a\u4e0b\u5217\u95dc\u9375\u6210\u679c\uff1a<\/strong><\/span><\/p><ul><li data-start=\"225\" data-end=\"254\">\u5efa\u7f6e\u6d41\u7a0b\u662f\u5426\u5177\u5099\u53ef\u91cd\u73fe\u6027\uff08Reproducibility\uff09<\/li><li data-start=\"257\" data-end=\"279\">\u6620\u50cf\u6a94\u9ad4\u7a4d\u662f\u5426\u6700\u5c0f\u5316\uff0c\u4e26\u5177\u5099\u826f\u597d\u7684\u5feb\u53d6\u547d\u4e2d\u7387<\/li><li data-start=\"282\" data-end=\"306\">\u6620\u50cf\u6a94\u662f\u5426\u7b26\u5408\u57fa\u672c\u5b89\u5168\u539f\u5247\uff0c\u964d\u4f4e\u4f9b\u61c9\u93c8\u8207\u6b0a\u9650\u98a8\u96aa<\/li><li data-start=\"309\" data-end=\"330\">\u90e8\u7f72\u81f3\u6b63\u5f0f\u74b0\u5883\u6642\uff0c\u662f\u5426\u5177\u5099\u7a69\u5b9a\u6027\u8207\u53ef\u7dad\u904b\u6027<\/li><\/ul><p data-start=\"142\" data-end=\"207\">\u5982\u679c Dockerfile \u8a2d\u8a08\u4e0d\u826f\uff0c\u5e38\u898b\u6703\u5c0e\u81f4\u4ee5\u4e0b\u554f\u984c\uff1a<\/p><ul data-start=\"209\" data-end=\"629\"><li data-start=\"209\" data-end=\"293\"><p data-start=\"211\" data-end=\"293\"><span style=\"color: #3366ff;\"><strong data-start=\"211\" data-end=\"224\">\u6620\u50cf\u6a94\u9ad4\u7a4d\u6301\u7e8c\u81a8\u8139<\/strong><\/span><br data-start=\"224\" data-end=\"227\" \/>\u7f3a\u4e4f\u6b63\u78ba\u7684\u5206\u5c64\u7b56\u7565\u6216 <code data-start=\"240\" data-end=\"255\">.dockerignore<\/code>\uff0c\u5bb9\u6613\u5c07\u4e0d\u5fc5\u8981\u7684\u6a94\u6848\u3001\u5feb\u53d6\u8207\u5efa\u7f6e\u7522\u7269\u6253\u5305\u9032\u6620\u50cf\u6a94\uff0c\u9020\u6210\u4e0b\u8f09\u6162\u3001\u90e8\u7f72\u6210\u672c\u589e\u52a0\u3002<\/p><\/li><li data-start=\"295\" data-end=\"377\"><p data-start=\"297\" data-end=\"377\"><span style=\"color: #3366ff;\"><strong data-start=\"297\" data-end=\"318\">\u5efa\u7f6e\u901f\u5ea6\u7de9\u6162\uff0cCI\/CD \u6548\u7387\u4f4e\u843d<\/strong><\/span><br data-start=\"318\" data-end=\"321\" \/>\u4e0d\u7576\u7684 <code data-start=\"327\" data-end=\"333\">COPY<\/code> \u9806\u5e8f\u6216\u672a\u5584\u7528\u5feb\u53d6\u6a5f\u5236\uff0c\u6703\u4f7f\u6bcf\u6b21\u7a0b\u5f0f\u78bc\u8b8a\u52d5\u90fd\u89f8\u767c\u5b8c\u6574\u91cd\u5efa\uff0c\u5c0e\u81f4 CI \u5efa\u7f6e\u6642\u9593\u986f\u8457\u589e\u52a0\u3002<\/p><\/li><li data-start=\"379\" data-end=\"447\"><p data-start=\"381\" data-end=\"447\"><span style=\"color: #3366ff;\"><strong data-start=\"381\" data-end=\"391\">\u5b89\u5168\u98a8\u96aa\u63d0\u9ad8<\/strong><\/span><br data-start=\"391\" data-end=\"394\" \/>\u6620\u50cf\u6a94\u4e2d\u53ef\u80fd\u5305\u542b\u591a\u9918\u7684\u7cfb\u7d71\u5de5\u5177\u3001\u958b\u767c\u5957\u4ef6\uff0c\u751a\u81f3\u4ee5 root \u6b0a\u9650\u57f7\u884c\u670d\u52d9\uff0c\u64f4\u5927\u653b\u64ca\u9762\u4e26\u589e\u52a0\u4f9b\u61c9\u93c8\u98a8\u96aa\u3002<\/p><\/li><li data-start=\"449\" data-end=\"541\"><p data-start=\"451\" data-end=\"541\"><span style=\"color: #3366ff;\"><strong data-start=\"451\" data-end=\"465\">\u6b63\u5f0f\u74b0\u5883\u884c\u70ba\u4e0d\u53ef\u9810\u671f<\/strong><\/span><br data-start=\"465\" data-end=\"468\" \/>\u672a\u56fa\u5b9a base image \u7248\u672c\u3001\u5efa\u7f6e\u6d41\u7a0b\u4e0d\u53ef\u91cd\u73fe\uff0c\u53ef\u80fd\u5c0e\u81f4\u540c\u4e00\u4efd Dockerfile \u5728\u4e0d\u540c\u6642\u9593\u6216\u74b0\u5883\u7522\u751f\u4e0d\u540c\u884c\u70ba\uff0c\u589e\u52a0\u9664\u932f\u8207\u7dad\u904b\u96e3\u5ea6\u3002<\/p><\/li><li data-start=\"543\" data-end=\"629\"><p data-start=\"545\" data-end=\"629\"><span style=\"color: #3366ff;\"><strong data-start=\"545\" data-end=\"560\">\u5f8c\u7e8c\u7dad\u904b\u8207\u64f4\u5c55\u6210\u672c\u4e0a\u5347<\/strong><\/span><br data-start=\"560\" data-end=\"563\" \/>Dockerfile \u82e5\u7f3a\u4e4f\u7d50\u69cb\u8207\u4e00\u81f4\u6027\uff0c\u7576\u5c08\u6848\u6210\u9577\u3001\u670d\u52d9\u62c6\u5206\u6216\u5c0e\u5165 Kubernetes \u6642\uff0c\u6703\u6210\u70ba\u6280\u8853\u50b5\uff0c\u62d6\u6162\u6574\u9ad4\u67b6\u69cb\u6f14\u9032\u3002<\/p><\/li><\/ul>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-1537795 elementor-widget elementor-widget-heading\" data-id=\"1537795\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">\u6975\u7c21\u5be6\u4f5c\u7bc4\u4f8b\uff1a\u5f9e Dockerfile \u5230\u53ef\u90e8\u7f72 Image<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-3d6abec elementor-widget elementor-widget-text-editor\" data-id=\"3d6abec\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p data-start=\"212\" data-end=\"302\">\u5728\u7406\u89e3 Docker Image \u8207 Dockerfile \u7684\u57fa\u672c\u6982\u5ff5\u5f8c\uff0c\u6700\u6709\u6548\u7684\u5b78\u7fd2\u65b9\u5f0f\uff0c\u662f\u900f\u904e\u4e00\u500b<span style=\"color: #3366ff;\"><strong data-start=\"263\" data-end=\"282\">\u7d50\u69cb\u55ae\u7d14\u3001\u4f46\u7b26\u5408\u5be6\u52d9\u6d41\u7a0b\u7684\u7bc4\u4f8b<\/strong><\/span>\uff0c\u5be6\u969b\u9ad4\u9a57\u6620\u50cf\u6a94\u5f9e\u5efa\u7f6e\u5230\u57f7\u884c\u7684\u5b8c\u6574\u904e\u7a0b\u3002<\/p><p data-start=\"304\" data-end=\"426\">\u4ee5\u4e0b\u793a\u7bc4\u4ee5 <span style=\"color: #3366ff;\"><strong data-start=\"310\" data-end=\"324\">Nginx \u975c\u614b\u7db2\u7ad9<\/strong><\/span> \u4f5c\u70ba\u7bc4\u4f8b\uff0c\u523b\u610f\u9078\u64c7\u6700\u5c0f\u53ef\u884c\u914d\u7f6e\uff08Minimal Viable Example\uff09\uff0c\u76ee\u7684\u662f\u8b93\u8b80\u8005\u5c08\u6ce8\u65bc Dockerfile \u7684\u89d2\u8272\u3001\u6620\u50cf\u6a94\u7684\u751f\u6210\u65b9\u5f0f\uff0c\u4ee5\u53ca\u5bb9\u5668\u555f\u52d5\u5f8c\u7684\u5be6\u969b\u884c\u70ba\uff0c\u800c\u975e\u88ab\u904e\u591a\u61c9\u7528\u7a0b\u5f0f\u7d30\u7bc0\u5e72\u64fe\u3002<\/p><p data-start=\"428\" data-end=\"509\">\u9019\u500b\u7bc4\u4f8b\u540c\u6642\u7b26\u5408\u6b63\u5f0f\u74b0\u5883\u4e2d\u5e38\u898b\u7684\u4f7f\u7528\u60c5\u5883\uff0c\u4f8b\u5982\u975c\u614b\u7db2\u7ad9\u3001\u53cd\u5411\u4ee3\u7406\u6216\u57fa\u790e\u670d\u52d9\u5165\u53e3\uff0c\u4e5f\u80fd\u4f5c\u70ba\u5f8c\u7e8c\u5c0e\u5165 Volume\u3001Docker Compose \u6216\u591a\u670d\u52d9\u67b6\u69cb\u7684\u57fa\u790e\u3002<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-3642b45 elementor-widget elementor-widget-heading\" data-id=\"3642b45\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h4 class=\"elementor-heading-title elementor-size-default\">Dockerfile\uff08\u6975\u7c21\uff09<\/h4>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-6762b07 elementor-widget elementor-widget-code-highlight\" data-id=\"6762b07\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"code-highlight.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"prismjs-okaidia copy-to-clipboard \">\n\t\t\t<pre data-line=\"\" class=\"highlight-height language-bash \">\n\t\t\t\t<code readonly=\"true\" class=\"language-bash\">\n\t\t\t\t\t<xmp>FROM nginx:alpine\r\nCOPY .\/site\/ \/usr\/share\/nginx\/html\/\r\nEXPOSE 80<\/xmp>\n\t\t\t\t<\/code>\n\t\t\t<\/pre>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-3b403a7 elementor-widget elementor-widget-heading\" data-id=\"3b403a7\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h4 class=\"elementor-heading-title elementor-size-default\">\u76f4\u63a5\u8dd1\u8d77\u4f86<\/h4>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-d292762 elementor-widget elementor-widget-code-highlight\" data-id=\"d292762\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"code-highlight.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"prismjs-okaidia copy-to-clipboard \">\n\t\t\t<pre data-line=\"\" class=\"highlight-height language-bash \">\n\t\t\t\t<code readonly=\"true\" class=\"language-bash\">\n\t\t\t\t\t<xmp>docker build -t demo-nginx .\r\ndocker run --rm -p 8080:80 demo-nginx\r\n<\/xmp>\n\t\t\t\t<\/code>\n\t\t\t<\/pre>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-2e78dc9 elementor-widget elementor-widget-text-editor\" data-id=\"2e78dc9\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p data-start=\"1252\" data-end=\"1313\">\u628a <code data-start=\"1254\" data-end=\"1263\">.\/site\/<\/code> \u653e\u4e00\u500b <code data-start=\"1268\" data-end=\"1280\">index.html<\/code>\uff0c\u958b <code data-start=\"1283\" data-end=\"1306\">http:\/\/localhost:8080<\/code> \u5c31\u770b\u5230\u7d50\u679c\u3002<\/p><p data-start=\"1315\" data-end=\"1374\">\u9019\u500b\u7bc4\u4f8b\u91cd\u9ede\u662f\uff1a<strong data-start=\"1323\" data-end=\"1367\"><span style=\"color: #3366ff;\">\u4f60\u5df2\u7d93\u5b8c\u6210 image build<\/span> \u2192 <span style=\"color: #3366ff;\">container run<\/span> \u2192 <span style=\"color: #3366ff;\">\u5c0d\u5916\u670d\u52d9<\/span><\/strong> \u7684\u5b8c\u6574\u9589\u74b0\u3002<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-a4fca1c elementor-widget elementor-widget-heading\" data-id=\"a4fca1c\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Dockerfile \u6700\u4f73\u5be6\u52d9\uff1a\u6548\u80fd\u512a\u5316\u7684\u6838\u5fc3\u662f \" \u5feb\u53d6\u7b56\u7565 \"<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-9e0a240 elementor-widget elementor-widget-text-editor\" data-id=\"9e0a240\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Docker \u6620\u50cf\u6a94\u7684\u5efa\u7f6e\u6548\u80fd\uff0c\u95dc\u9375\u4e26\u4e0d\u5728\u65bc\u786c\u9ad4\u8cc7\u6e90\uff0c\u800c\u5728\u65bc Dockerfile \u662f\u5426\u80fd\u6709\u6548\u5229\u7528\u5206\u5c64\u5feb\u53d6\u6a5f\u5236\u3002\u900f\u904e\u6b63\u78ba\u5b89\u6392\u6307\u4ee4\u9806\u5e8f\u3001\u7a69\u5b9a\u4f9d\u8cf4\u5c64\u8207\u907f\u514d\u4e0d\u5fc5\u8981\u7684\u5feb\u53d6\u5931\u6548\uff0c\u53ef\u5927\u5e45\u7e2e\u77ed\u5efa\u7f6e\u6642\u9593\u3001\u964d\u4f4e CI\/CD \u6210\u672c\uff0c\u4e26\u63d0\u5347\u6574\u9ad4\u90e8\u7f72\u6548\u7387\u3002<br \/>Dockerfile \u7684\u6548\u80fd\u512a\u5316\uff0c99% \u90fd\u5728\u89e3\u6c7a<strong><span style=\"color: #3366ff;\">\u5feb\u53d6\u547d\u4e2d\u7387<\/span><\/strong>\u8207<strong><span style=\"color: #3366ff;\">\u5c64\u7684\u7a69\u5b9a\u6027<\/span><\/strong>\u3002<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-8b84cb7 elementor-widget elementor-widget-heading\" data-id=\"8b84cb7\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h3 class=\"elementor-heading-title elementor-size-default\">\u539f\u5247 A\uff1a\u4f9d\u8cf4\u5148\u88dd\u3001\u7a0b\u5f0f\u5f8c\u62f7\u8c9d<\/h3>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-4995e3c elementor-widget elementor-widget-text-editor\" data-id=\"4995e3c\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>\u4ee5 Node.js \u70ba\u4f8b\uff0c\u932f\u8aa4\u5beb\u6cd5\u5982\u4e0b\uff08\u6bcf\u6b21\u6539\u4e00\u884c\u7a0b\u5f0f\u90fd\u8b93 npm reinstall\uff09\uff1a<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-cedd767 elementor-widget elementor-widget-code-highlight\" data-id=\"cedd767\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"code-highlight.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"prismjs-okaidia copy-to-clipboard \">\n\t\t\t<pre data-line=\"\" class=\"highlight-height language-bash \">\n\t\t\t\t<code readonly=\"true\" class=\"language-bash\">\n\t\t\t\t\t<xmp>COPY . .\r\nRUN npm ci<\/xmp>\n\t\t\t\t<\/code>\n\t\t\t<\/pre>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-3218106 elementor-widget elementor-widget-text-editor\" data-id=\"3218106\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>\u6b63\u78ba\u5beb\u6cd5\u662f\uff1a<span style=\"color: #3366ff;\"><strong data-start=\"1573\" data-end=\"1623\">\u5148 COPY lock \u6a94\u8207 package.json\uff0c\u518d\u5b89\u88dd\u4f9d\u8cf4\uff0c\u6700\u5f8c\u624d COPY \u7a0b\u5f0f\u78bc<\/strong><\/span>\uff1a<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-e2df746 elementor-widget elementor-widget-code-highlight\" data-id=\"e2df746\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"code-highlight.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"prismjs-okaidia copy-to-clipboard \">\n\t\t\t<pre data-line=\"\" class=\"highlight-height language-bash \">\n\t\t\t\t<code readonly=\"true\" class=\"language-bash\">\n\t\t\t\t\t<xmp>COPY package*.json .\/\r\nRUN npm ci --omit=dev\r\nCOPY . .<\/xmp>\n\t\t\t\t<\/code>\n\t\t\t<\/pre>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-a5d03a6 elementor-widget elementor-widget-text-editor\" data-id=\"a5d03a6\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>\u9019\u6a23\u4f60\u6539\u7a0b\u5f0f\u78bc\u6642\uff0cnpm layer \u4e0d\u6703\u91cd\u8dd1\uff0cCI build \u901f\u5ea6\u6703\u5dee\u975e\u5e38\u591a\u3002<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-6001770 elementor-widget elementor-widget-heading\" data-id=\"6001770\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h3 class=\"elementor-heading-title elementor-size-default\">\u539f\u5247 B\uff1a\u5c11\u7528\u6703\u7834\u58de\u5feb\u53d6\u7684\u64cd\u4f5c<\/h3>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-c46f8dd elementor-widget elementor-widget-text-editor\" data-id=\"c46f8dd\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p data-start=\"1760\" data-end=\"1772\">\u5e38\u898b\u7834\u58de\u5feb\u53d6\u7684\u6307\u4ee4\u5305\u62ec\uff1a<\/p><ul><li data-start=\"1775\" data-end=\"1790\"><code data-start=\"1775\" data-end=\"1785\">COPY . .<\/code> \u653e\u592a\u524d\u9762<\/li><li data-start=\"1793\" data-end=\"1827\"><code data-start=\"1793\" data-end=\"1813\">RUN apt-get update<\/code> \u6c92\u8207 install \u5408\u4f75<\/li><li data-start=\"1830\" data-end=\"1865\">\u5728\u540c\u4e00\u5c64\u505a\u300c\u6703\u6539\u52d5\u5927\u91cf\u6a94\u6848\u300d\u7684\u884c\u70ba\uff08\u4f8b\u5982 build \u7522\u7269\u3001\u6e2c\u8a66\u5831\u544a\uff09<\/li><\/ul>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-09e1623 elementor-widget elementor-widget-heading\" data-id=\"09e1623\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h3 class=\"elementor-heading-title elementor-size-default\">\u539f\u5247 C\uff1a\u4ee5\u300c\u53ef\u9810\u671f\u300d\u7684\u65b9\u5f0f\u7522\u751f\u8f38\u51fa<\/h3>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-7dfa973 elementor-widget elementor-widget-text-editor\" data-id=\"7dfa973\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p data-start=\"1890\" data-end=\"1906\">\u5efa\u8b70\u78ba\u4fdd build \u8f38\u51fa\u4e00\u81f4\uff1a<\/p><ul><li data-start=\"1909\" data-end=\"1974\">\u4f7f\u7528 lock \u6a94\uff08<code data-start=\"1919\" data-end=\"1938\">package-lock.json<\/code> \/ <code data-start=\"1941\" data-end=\"1957\">pnpm-lock.yaml<\/code> \/ <code data-start=\"1960\" data-end=\"1973\">poetry.lock<\/code>\uff09<\/li><li data-start=\"1977\" data-end=\"2009\">\u56fa\u5b9a base image tag \u6216 digest\uff08\u5f8c\u9762\u6703\u8b1b\uff09<\/li><li data-start=\"2012\" data-end=\"2032\">\u907f\u514d build \u904e\u7a0b\u4f9d\u8cf4\u5916\u90e8\u4e0d\u7a69\u5b9a\u8cc7\u6e90<\/li><\/ul>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-fa33b2e elementor-widget elementor-widget-heading\" data-id=\"fa33b2e\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Multi-stage builds\uff1a\u8b93\u6620\u50cf\u6a94\u8b8a\u5c0f\u7684\u6700\u5f37\u62db<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-29b8608 elementor-widget elementor-widget-text-editor\" data-id=\"29b8608\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Multi-stage builds \u662f\u4e00\u7a2e Dockerfile \u8a2d\u8a08\u6280\u5de7\uff0c\u900f\u904e\u5c07\u300c\u5efa\u7f6e\u968e\u6bb5\u300d\u8207\u300c\u57f7\u884c\u968e\u6bb5\u300d\u660e\u78ba\u5206\u96e2\uff0c\u53ea\u5728\u6700\u7d42\u6620\u50cf\u6a94\u4e2d\u4fdd\u7559\u5be6\u969b\u57f7\u884c\u6240\u9700\u7684\u6a94\u6848\u8207\u76f8\u4f9d\u74b0\u5883\u3002\u6b64\u4f5c\u6cd5\u80fd\u6709\u6548\u79fb\u9664\u7de8\u8b6f\u5de5\u5177\u8207\u591a\u9918\u4f9d\u8cf4\uff0c\u986f\u8457\u964d\u4f4e\u6620\u50cf\u6a94\u9ad4\u7a4d\uff0c\u540c\u6642\u6539\u5584\u90e8\u7f72\u6548\u7387\u4e26\u6e1b\u5c11\u6b63\u5f0f\u74b0\u5883\u7684\u5b89\u5168\u98a8\u96aa\u3002<\/p><p data-start=\"2076\" data-end=\"2102\">Multi-stage builds \u7684\u89c0\u5ff5\u5f88\u7c21\u55ae\uff1a<\/p><ul><li data-start=\"2105\" data-end=\"2127\">\u7b2c\u4e00\u968e\u6bb5\uff1a\u88dd\u7de8\u8b6f\u5de5\u5177\u3001\u5efa\u7f6e\u61c9\u7528\uff08\u5f88\u80a5\u6c92\u95dc\u4fc2\uff09<\/li><li data-start=\"2130\" data-end=\"2168\">\u7b2c\u4e8c\u968e\u6bb5\uff1a\u53ea\u62f7\u8c9d\u300c\u57f7\u884c\u6240\u9700\u7684\u7522\u7269\u300d\u5230\u4e7e\u6de8 runtime image\uff08\u5f88\u7626\uff09<\/li><\/ul>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-44744c7 elementor-widget elementor-widget-heading\" data-id=\"44744c7\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h3 class=\"elementor-heading-title elementor-size-default\">\u7bc4\u4f8b\uff1aNode.js\uff08build + runtime \u5206\u96e2\uff09<\/h3>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-aba4b38 elementor-widget elementor-widget-code-highlight\" data-id=\"aba4b38\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"code-highlight.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"prismjs-okaidia copy-to-clipboard \">\n\t\t\t<pre data-line=\"\" class=\"highlight-height language-bash \">\n\t\t\t\t<code readonly=\"true\" class=\"language-bash\">\n\t\t\t\t\t<xmp># 1) builder\r\nFROM node:20-bookworm AS builder\r\nWORKDIR \/app\r\nCOPY package*.json .\/\r\nRUN npm ci\r\nCOPY . .\r\nRUN npm run build\r\n\r\n# 2) runtime\r\nFROM node:20-bookworm-slim\r\nWORKDIR \/app\r\nENV NODE_ENV=production\r\nCOPY package*.json .\/\r\nRUN npm ci --omit=dev && npm cache clean --force\r\nCOPY --from=builder \/app\/dist .\/dist\r\nEXPOSE 3000\r\nCMD [\"node\", \"dist\/server.js\"]\r\n<\/xmp>\n\t\t\t\t<\/code>\n\t\t\t<\/pre>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-36ccc19 elementor-widget elementor-widget-text-editor\" data-id=\"36ccc19\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p data-start=\"2572\" data-end=\"2577\">\u4f60\u6703\u5f97\u5230\uff1a<\/p><ul><li data-start=\"2580\" data-end=\"2618\">runtime image \u6c92\u6709 build tools\uff08gcc\u3001make\uff09<\/li><li data-start=\"2621\" data-end=\"2640\">\u6c92\u6709 dev dependencies<\/li><li data-start=\"2643\" data-end=\"2663\">\u542f\u52a8\u66f4\u5feb\u3001\u653b\u64ca\u9762\u66f4\u5c0f\u3001\u6383\u63cf\u6f0f\u6d1e\u901a\u5e38\u4e5f\u66f4\u5c11<\/li><\/ul>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-978f00b elementor-widget elementor-widget-heading\" data-id=\"978f00b\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">\u6620\u50cf\u6a94 \" \u7626\u8eab \" \u5be6\u6230\uff1a\u5c0f\u4e00\u9ede\uff0c\u5c31\u662f\u5feb\u3001\u7a69\u3001\u7701<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-c46ff41 elementor-widget elementor-widget-text-editor\" data-id=\"c46ff41\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Docker \u6620\u50cf\u6a94\u7684\u9ad4\u7a4d\uff0c\u6703\u76f4\u63a5\u5f71\u97ff\u5efa\u7f6e\u6642\u9593\u3001\u90e8\u7f72\u901f\u5ea6\u3001\u8cc7\u6e90\u4f7f\u7528\u8207\u6574\u9ad4\u7dad\u904b\u6210\u672c\u3002\u900f\u904e\u7cbe\u7c21 base image\u3001\u79fb\u9664\u4e0d\u5fc5\u8981\u7684\u6a94\u6848\u8207\u76f8\u4f9d\u5957\u4ef6\uff0c\u4e26\u5584\u7528\u5206\u5c64\u8207\u5efa\u7f6e\u7b56\u7565\uff0c\u53ef\u6709\u6548\u964d\u4f4e\u6620\u50cf\u6a94\u5927\u5c0f\uff0c\u9032\u800c\u63d0\u5347\u90e8\u7f72\u6548\u7387\u3001\u7cfb\u7d71\u7a69\u5b9a\u6027\u8207\u6b63\u5f0f\u74b0\u5883\u7684\u53ef\u63a7\u6027\u3002<\/p><blockquote><p>\u6620\u50cf\u6a94\u7626\u8eab\u7684\u76ee\u7684\uff0c\u5728\u65bc\u6e1b\u5c11\u4e0d\u5fc5\u8981\u7684\u5167\u5bb9\u8207\u76f8\u4f9d\uff0c\u8b93 Docker Image \u5728\u5efa\u7f6e\u3001\u90e8\u7f72\u8207\u7dad\u904b\u5404\u968e\u6bb5\u90fd\u66f4\u9ad8\u6548\u4e14\u66f4\u7a69\u5b9a\u3002<\/p><\/blockquote>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-a680a33 elementor-widget elementor-widget-heading\" data-id=\"a680a33\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h3 class=\"elementor-heading-title elementor-size-default\">\u6280\u5de7 1\uff1a\u9078\u5c0d base image\uff08\u5225\u76f2\u76ee Alpine\uff09<\/h3>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-35ba2ad elementor-widget elementor-widget-text-editor\" data-id=\"35ba2ad\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p data-start=\"2734\" data-end=\"2760\">\u5f88\u591a\u4eba\u89ba\u5f97 Alpine \u4e00\u5b9a\u6700\u5c0f\uff0c\u4f46\u5be6\u52d9\u4e0a\u4e0d\u4e00\u5b9a\uff1a<\/p><ul><li data-start=\"2763\" data-end=\"2797\">\u6709\u4e9b\u5957\u4ef6\u5728 Alpine \u9700\u8981\u984d\u5916\u76f8\u4f9d\uff08musl vs glibc\uff09<\/li><li data-start=\"2800\" data-end=\"2844\">\u53ef\u80fd\u5c0e\u81f4\u76f8\u5bb9\u6027\u554f\u984c\uff08\u5c24\u5176\u662f\u67d0\u4e9b Node \/ Python native module\uff09<\/li><li data-start=\"2847\" data-end=\"2857\">Debug \u4e5f\u8f03\u9ebb\u7169<\/li><\/ul><p data-start=\"2859\" data-end=\"2864\">\u5efa\u8b70\u7b56\u7565\uff1a<\/p><ul><li data-start=\"2867\" data-end=\"2911\">\u9700\u8981\u7a69\u5b9a\u76f8\u5bb9\uff1a<code data-start=\"2874\" data-end=\"2896\">debian:bookworm-slim<\/code>\u3001<code data-start=\"2897\" data-end=\"2911\">ubuntu:24.04<\/code><\/li><li data-start=\"2914\" data-end=\"2932\">\u8ffd\u6c42\u6975\u5c0f\u4e14\u78ba\u5b9a\u76f8\u5bb9\uff1a<code data-start=\"2924\" data-end=\"2932\">alpine<\/code><\/li><li data-start=\"2935\" data-end=\"2965\">\u9ad8\u5ea6\u5b89\u5168 \/ \u6700\u5c0f\u5316\uff1adistroless\uff08\u4f46\u9664\u932f\u8981\u6709\u7b56\u7565\uff09<\/li><\/ul>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-9872c58 elementor-widget elementor-widget-heading\" data-id=\"9872c58\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h3 class=\"elementor-heading-title elementor-size-default\">\u6280\u5de7 2\uff1a\u5408\u4f75 apt \u6307\u4ee4\u4e26\u6e05 cache<\/h3>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-780ee66 elementor-widget elementor-widget-text-editor\" data-id=\"780ee66\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>\u932f\u8aa4\uff1a<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-0c1329c elementor-widget elementor-widget-code-highlight\" data-id=\"0c1329c\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"code-highlight.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"prismjs-okaidia copy-to-clipboard \">\n\t\t\t<pre data-line=\"\" class=\"highlight-height language-bash \">\n\t\t\t\t<code readonly=\"true\" class=\"language-bash\">\n\t\t\t\t\t<xmp>RUN apt-get update\r\nRUN apt-get install -y curl<\/xmp>\n\t\t\t\t<\/code>\n\t\t\t<\/pre>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-8c67039 elementor-widget elementor-widget-text-editor\" data-id=\"8c67039\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>\u6b63\u78ba\uff1a<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-f4641d0 elementor-widget elementor-widget-code-highlight\" data-id=\"f4641d0\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"code-highlight.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"prismjs-okaidia copy-to-clipboard \">\n\t\t\t<pre data-line=\"\" class=\"highlight-height language-bash \">\n\t\t\t\t<code readonly=\"true\" class=\"language-bash\">\n\t\t\t\t\t<xmp>RUN apt-get update \\\r\n && apt-get install -y --no-install-recommends curl \\\r\n && rm -rf \/var\/lib\/apt\/lists\/*<\/xmp>\n\t\t\t\t<\/code>\n\t\t\t<\/pre>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-b8009b3 elementor-widget elementor-widget-heading\" data-id=\"b8009b3\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h3 class=\"elementor-heading-title elementor-size-default\">\u6280\u5de7 3\uff1a\u907f\u514d\u628a\u4e0d\u5fc5\u8981\u7684\u6771\u897f COPY \u9032 image<\/h3>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-d62d8db elementor-widget elementor-widget-text-editor\" data-id=\"d62d8db\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p data-start=\"3226\" data-end=\"3254\">\u4e00\u5b9a\u8981\u7528 <code data-start=\"3231\" data-end=\"3246\">.dockerignore<\/code>\u3002\u6700\u5e38\u898b\u6f0f\u6389\u7684\uff1a<\/p><ul><li data-start=\"3257\" data-end=\"3264\"><code data-start=\"3257\" data-end=\"3264\">.git\/<\/code><\/li><li data-start=\"3267\" data-end=\"3282\"><code data-start=\"3267\" data-end=\"3282\">node_modules\/<\/code><\/li><li data-start=\"3285\" data-end=\"3292\"><code data-start=\"3285\" data-end=\"3292\">venv\/<\/code><\/li><li data-start=\"3295\" data-end=\"3316\"><code data-start=\"3295\" data-end=\"3302\">dist\/<\/code>\uff08\u5982\u679c\u662f build \u7522\u7269\uff09<\/li><li data-start=\"3319\" data-end=\"3326\"><code data-start=\"3319\" data-end=\"3326\">*.log<\/code><\/li><\/ul><p data-start=\"3328\" data-end=\"3331\">\u7bc4\u4f8b\uff1a<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-30835a0 elementor-widget elementor-widget-code-highlight\" data-id=\"30835a0\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"code-highlight.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"prismjs-okaidia copy-to-clipboard \">\n\t\t\t<pre data-line=\"\" class=\"highlight-height language-bash \">\n\t\t\t\t<code readonly=\"true\" class=\"language-bash\">\n\t\t\t\t\t<xmp>.git\r\nnode_modules\r\ndist\r\n*.log\r\n.DS_Store<\/xmp>\n\t\t\t\t<\/code>\n\t\t\t<\/pre>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-15a4f86 elementor-widget elementor-widget-heading\" data-id=\"15a4f86\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h3 class=\"elementor-heading-title elementor-size-default\">\u6620\u50cf\u6a94\u5927\u5c0f\u4ee5\u5916\u7684\u6548\u80fd\u8003\u91cf<\/h3>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-97f699f elementor-widget elementor-widget-text-editor\" data-id=\"97f699f\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p data-start=\"1004\" data-end=\"1107\">\u96d6\u7136\u6620\u50cf\u6a94\u9ad4\u7a4d\u662f\u6548\u80fd\u512a\u5316\u4e2d\u6700\u76f4\u89c0\u7684\u6307\u6a19\uff0c\u4f46\u5728\u5be6\u969b\u90e8\u7f72\u74b0\u5883\u4e2d\uff0c\u6548\u80fd\u5f71\u97ff\u4e26\u4e0d\u50c5\u9650\u65bc\u55ae\u4e00\u6578\u503c\u3002\u6620\u50cf\u6a94\u7684\u5206\u5c64\u7d50\u69cb\u3001\u5c64\u6578\u591a\u5be1\u8207\u57fa\u5e95\u6620\u50cf\u9078\u64c7\uff0c\u7686\u6703\u5f71\u97ff\u6620\u50cf\u6a94\u62c9\u53d6\u901f\u5ea6\u3001\u5bb9\u5668\u555f\u52d5\u6642\u9593\u4ee5\u53ca\u5e95\u5c64\u5132\u5b58\u8207\u7db2\u8def I\/O \u7684\u8ca0\u8f09\u884c\u70ba\u3002<\/p><p data-start=\"1109\" data-end=\"1222\">\u5728\u898f\u6a21\u5316\u90e8\u7f72\u6216\u81ea\u52d5\u64f4\u5c55\u60c5\u5883\u4e0b\uff0c\u6620\u50cf\u6a94\u7684\u62c9\u53d6\u8207\u89e3\u58d3\u6210\u672c\u5f80\u5f80\u6703\u88ab\u653e\u5927\uff0c\u9032\u800c\u5f71\u97ff\u670d\u52d9\u555f\u52d5\u5ef6\u9072\u8207\u6574\u9ad4\u53ef\u7528\u6027\u3002\u6b64\u5916\uff0c\u4e0d\u540c\u57fa\u5e95\u6620\u50cf\u5728\u7cfb\u7d71\u51fd\u5f0f\u5eab\u5be6\u4f5c\u4e0a\u7684\u5dee\u7570\uff0c\u4e5f\u53ef\u80fd\u5c0d\u61c9\u7528\u7a0b\u5f0f\u7684\u57f7\u884c\u6548\u80fd\u8207\u7a69\u5b9a\u6027\u7522\u751f\u5f71\u97ff\uff0c\u9019\u4e9b\u56e0\u7d20\u901a\u5e38\u53ea\u6709\u5728\u6b63\u5f0f\u74b0\u5883\u4e2d\u624d\u6703\u986f\u73fe\u3002<\/p><p data-start=\"1224\" data-end=\"1313\">\u56e0\u6b64\uff0c\u6620\u50cf\u6a94\u6548\u80fd\u512a\u5316\u61c9\u88ab\u8996\u70ba\u4e00\u9805\u6574\u9ad4\u5de5\u7a0b\u6c7a\u7b56\uff0c\u800c\u975e\u50c5\u8ffd\u6c42\u9ad4\u7a4d\u6700\u5c0f\u5316\u3002\u826f\u597d\u7684 Dockerfile \u8a2d\u8a08\uff0c\u80fd\u5728\u5efa\u7f6e\u6548\u7387\u3001\u57f7\u884c\u6548\u80fd\u8207\u7dad\u904b\u7a69\u5b9a\u6027\u4e4b\u9593\u53d6\u5f97\u5e73\u8861\uff0c\u70ba\u5f8c\u7e8c\u7684\u5e73\u53f0\u6574\u5408\u5960\u5b9a\u57fa\u790e\u3002<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-dbf83b1 elementor-widget elementor-widget-heading\" data-id=\"dbf83b1\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">\u5b89\u5168\u6700\u4f73\u5be6\u52d9\uff1a\u5f9e \" \u53ef\u8dd1 \" \u5230 \" \u53ef\u4e0a\u7dda \" \u7684\u5dee\u5225<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-f7694be elementor-widget elementor-widget-text-editor\" data-id=\"f7694be\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>\u5bb9\u5668\u5728\u958b\u767c\u74b0\u5883\u4e2d\u80fd\u6b63\u5e38\u57f7\u884c\uff0c\u4e26\u4e0d\u4ee3\u8868\u5176\u5df2\u5177\u5099\u6b63\u5f0f\u4e0a\u7dda\u7684\u5b89\u5168\u689d\u4ef6\u3002\u900f\u904e\u843d\u5be6\u6700\u5c0f\u6b0a\u9650\u539f\u5247\u3001\u56fa\u5b9a\u57fa\u5e95\u6620\u50cf\u7248\u672c\u3001\u79fb\u9664\u4e0d\u5fc5\u8981\u5143\u4ef6\u8207\u52a0\u5165\u5065\u5eb7\u6aa2\u67e5\u7b49\u5b89\u5168\u5be6\u52d9\uff0c\u624d\u80fd\u964d\u4f4e\u653b\u64ca\u9762\u8207\u71df\u904b\u98a8\u96aa\uff0c\u4f7f\u5bb9\u5668\u771f\u6b63\u7b26\u5408\u751f\u7522\u74b0\u5883\u7684\u5b89\u5168\u8207\u7a69\u5b9a\u8981\u6c42\u3002<\/p><blockquote><p>\u6b63\u5f0f\u4e0a\u7dda\u7684\u5bb9\u5668\uff0c\u5fc5\u9808\u5728\u5b89\u5168\u6027\u3001\u6b0a\u9650\u63a7\u7ba1\u8207\u53ef\u9810\u671f\u884c\u70ba\u4e0a\u5177\u5099\u660e\u78ba\u898f\u7bc4\uff0c\u800c\u4e0d\u50c5\u50c5\u662f\u80fd\u6210\u529f\u555f\u52d5\u8207\u57f7\u884c<\/p><\/blockquote>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-87146a6 elementor-widget elementor-widget-heading\" data-id=\"87146a6\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h3 class=\"elementor-heading-title elementor-size-default\">\u4e0d\u8981\u7528 root \u8dd1\u670d\u52d9<\/h3>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-f215633 elementor-widget elementor-widget-text-editor\" data-id=\"f215633\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p data-start=\"3435\" data-end=\"3471\">\u5728\u5bb9\u5668\u4e2d\u4ee5 root \u6b0a\u9650\u57f7\u884c\u670d\u52d9\uff0c\u6703\u5728\u767c\u751f\u6f0f\u6d1e\u6216\u5165\u4fb5\u6642\u653e\u5927\u5f71\u97ff\u7bc4\u570d\uff0c\u589e\u52a0\u7cfb\u7d71\u88ab\u6feb\u7528\u6216\u6a6b\u5411\u79fb\u52d5\u7684\u98a8\u96aa\u3002\u900f\u904e\u4ee5\u975e\u7279\u6b0a\u4f7f\u7528\u8005\u57f7\u884c\u61c9\u7528\u7a0b\u5f0f\uff0c\u53ef\u6709\u6548\u843d\u5be6\u6700\u5c0f\u6b0a\u9650\u539f\u5247\uff0c\u964d\u4f4e\u5b89\u5168\u4e8b\u4ef6\u5c0d\u6b63\u5f0f\u74b0\u5883\u9020\u6210\u7684\u885d\u64ca\uff0c\u4e26\u7b26\u5408\u591a\u6578\u751f\u7522\u74b0\u5883\u8207\u5408\u898f\u8981\u6c42\u3002<\/p><blockquote><p data-start=\"3435\" data-end=\"3471\">\u5728\u751f\u7522\u74b0\u5883\u4e2d\uff0c\u4ee5\u975e root \u4f7f\u7528\u8005\u57f7\u884c\u5bb9\u5668\u670d\u52d9\u662f\u964d\u4f4e\u98a8\u96aa\u8207\u843d\u5be6\u6700\u5c0f\u6b0a\u9650\u539f\u5247\u7684\u57fa\u672c\u5b89\u5168\u8981\u6c42\u3002<\/p><\/blockquote><p data-start=\"3435\" data-end=\"3471\">\u5f88\u591a\u9810\u8a2d image \u6703\u4ee5 root \u57f7\u884c\uff0c\u9019\u5728\u751f\u7522\u74b0\u5883\u662f\u9ad8\u98a8\u96aa\u3002\u505a\u6cd5\uff1a<\/p><ul><li data-start=\"3474\" data-end=\"3479\">\u5efa\u7acb\u4f7f\u7528\u8005<\/li><li data-start=\"3482\" data-end=\"3491\">\u5207\u63db\u5230\u975e root<\/li><\/ul>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-1ff6b5c elementor-widget elementor-widget-code-highlight\" data-id=\"1ff6b5c\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"code-highlight.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"prismjs-okaidia copy-to-clipboard \">\n\t\t\t<pre data-line=\"\" class=\"highlight-height language-bash \">\n\t\t\t\t<code readonly=\"true\" class=\"language-bash\">\n\t\t\t\t\t<xmp>RUN useradd -m appuser\r\nUSER appuser<\/xmp>\n\t\t\t\t<\/code>\n\t\t\t<\/pre>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-6cc9667 elementor-widget elementor-widget-text-editor\" data-id=\"6cc9667\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>\u82e5\u662f Alpine\uff1a<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-5c9322d elementor-widget elementor-widget-code-highlight\" data-id=\"5c9322d\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"code-highlight.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"prismjs-okaidia copy-to-clipboard \">\n\t\t\t<pre data-line=\"\" class=\"highlight-height language-bash \">\n\t\t\t\t<code readonly=\"true\" class=\"language-bash\">\n\t\t\t\t\t<xmp>RUN adduser -D appuser\r\nUSER appuser<\/xmp>\n\t\t\t\t<\/code>\n\t\t\t<\/pre>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-4f6d403 elementor-widget elementor-widget-heading\" data-id=\"4f6d403\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h3 class=\"elementor-heading-title elementor-size-default\">\u56fa\u5b9a base image\uff08\u907f\u514d\u4f9b\u61c9\u93c8\u98c4\u79fb\uff09<\/h3>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-bce7716 elementor-widget elementor-widget-text-editor\" data-id=\"bce7716\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>\u56fa\u5b9a base image \u7684\u7248\u672c\u6216\u96dc\u6e4a\u503c\uff08digest\uff09\uff0c\u53ef\u78ba\u4fdd Docker Image \u5728\u4e0d\u540c\u6642\u9593\u8207\u74b0\u5883\u4e2d\u5177\u5099\u4e00\u81f4\u7684\u5efa\u7f6e\u7d50\u679c\uff0c\u907f\u514d\u56e0\u4e0a\u6e38\u6620\u50cf\u66f4\u65b0\u800c\u7522\u751f\u4e0d\u53ef\u9810\u671f\u7684\u884c\u70ba\u5dee\u7570\u3002\u6b64\u4f5c\u6cd5\u6709\u52a9\u65bc\u63d0\u5347\u5efa\u7f6e\u53ef\u91cd\u73fe\u6027\uff0c\u964d\u4f4e\u4f9b\u61c9\u93c8\u98a8\u96aa\uff0c\u4e26\u4f7f\u554f\u984c\u8ffd\u8e64\u8207\u5b89\u5168\u7a3d\u6838\u66f4\u5177\u53ef\u63a7\u6027\u3002<\/p><blockquote><p>\u900f\u904e\u56fa\u5b9a base image \u7248\u672c\uff0c\u53ef\u907f\u514d\u4e0a\u6e38\u8b8a\u52d5\u9020\u6210\u6620\u50cf\u884c\u70ba\u6f02\u79fb\uff0c\u78ba\u4fdd\u5efa\u7f6e\u7d50\u679c\u7684\u7a69\u5b9a\u6027\u8207\u53ef\u91cd\u73fe\u6027\u3002<\/p><\/blockquote><p>\u5982\u679c\u4f60\u5beb\uff1a<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-df98d4b elementor-widget elementor-widget-code-highlight\" data-id=\"df98d4b\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"code-highlight.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"prismjs-okaidia copy-to-clipboard \">\n\t\t\t<pre data-line=\"\" class=\"highlight-height language-bash \">\n\t\t\t\t<code readonly=\"true\" class=\"language-bash\">\n\t\t\t\t\t<xmp>FROM node:20<\/xmp>\n\t\t\t\t<\/code>\n\t\t\t<\/pre>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-ebe5101 elementor-widget elementor-widget-text-editor\" data-id=\"ebe5101\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p data-start=\"3682\" data-end=\"3707\">\u5b83\u6703\u96a8\u6642\u9593\u8b8a\u52d5\uff0c\u53ef\u80fd\u67d0\u5929\u4e0a\u6e38\u66f4\u65b0\u9020\u6210\u4e0d\u53ef\u9810\u671f\u5dee\u7570\u3002<\/p><p data-start=\"3709\" data-end=\"3714\">\u8f03\u4f73\u505a\u6cd5\uff1a<\/p><ul><li data-start=\"3717\" data-end=\"3759\">\u56fa\u5b9a\u5230 minor \/ distro\uff1a<code data-start=\"3736\" data-end=\"3759\">node:20-bookworm-slim<\/code><\/li><li data-start=\"3762\" data-end=\"3783\">\u6216\u66f4\u56b4\u8b39\uff1a\u7528 digest\uff08\u53ef\u91cd\u73fe\u6027\u6700\u9ad8\uff09<\/li><\/ul>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-38a7d34 elementor-widget elementor-widget-heading\" data-id=\"38a7d34\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h3 class=\"elementor-heading-title elementor-size-default\">\u5065\u5eb7\u6aa2\u67e5\uff08Healthcheck\uff09<\/h3>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-b481126 elementor-widget elementor-widget-text-editor\" data-id=\"b481126\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>\u5065\u5eb7\u6aa2\u67e5\uff08Healthcheck\uff09\u7528\u65bc\u5224\u65b7\u5bb9\u5668\u5167\u7684\u670d\u52d9\u662f\u5426\u8655\u65bc\u53ef\u6b63\u5e38\u63d0\u4f9b\u529f\u80fd\u7684\u72c0\u614b\uff0c\u800c\u4e0d\u50c5\u50c5\u662f\u7a0b\u5e8f\u662f\u5426\u4ecd\u5728\u57f7\u884c\u3002\u900f\u904e\u5b9a\u671f\u6aa2\u6e2c\u6307\u5b9a\u7684\u7aef\u9ede\u6216\u6307\u4ee4\u56de\u61c9\uff0c\u7cfb\u7d71\u53ef\u5373\u6642\u8fa8\u8b58\u7570\u5e38\u5bb9\u5668\uff0c\u4e26\u914d\u5408\u91cd\u65b0\u555f\u52d5\u3001\u6d41\u91cf\u5207\u63db\u6216\u7de8\u6392\u6a5f\u5236\uff0c\u63d0\u5347\u6b63\u5f0f\u74b0\u5883\u7684\u7a69\u5b9a\u6027\u8207\u53ef\u7528\u6027\u3002<\/p><blockquote><p>Healthcheck \u900f\u904e\u6301\u7e8c\u6aa2\u6e2c\u670d\u52d9\u72c0\u614b\uff0c\u78ba\u4fdd\u5bb9\u5668\u5728\u6b63\u5f0f\u74b0\u5883\u4e2d\u80fd\u88ab\u6b63\u78ba\u5224\u5b9a\u70ba\u53ef\u7528\u6216\u7570\u5e38\u3002<\/p><\/blockquote><p>\u5bb9\u5668<span style=\"color: #3366ff;\"><strong>\u8d77\u5f97\u4f86<\/strong><\/span>\u4e0d\u4ee3\u8868\u670d\u52d9\u6b63\u5e38\u3002\u52a0\u4e0a\u5065\u5eb7\u6aa2\u67e5\u53ef\u6539\u5584\u81ea\u52d5\u91cd\u555f\u8207\u8ca0\u8f09\u5747\u8861\u5224\u65b7\uff1a<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-888c641 elementor-widget elementor-widget-code-highlight\" data-id=\"888c641\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"code-highlight.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"prismjs-okaidia copy-to-clipboard \">\n\t\t\t<pre data-line=\"\" class=\"highlight-height language-bash \">\n\t\t\t\t<code readonly=\"true\" class=\"language-bash\">\n\t\t\t\t\t<xmp>HEALTHCHECK --interval=30s --timeout=3s --retries=3 \\\r\n  CMD curl -fsS http:\/\/127.0.0.1:3000\/health || exit 1<\/xmp>\n\t\t\t\t<\/code>\n\t\t\t<\/pre>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-5929603 elementor-widget elementor-widget-heading\" data-id=\"5929603\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h3 class=\"elementor-heading-title elementor-size-default\">\u7955\u5bc6\u4e0d\u8981\u5beb\u9032 Dockerfile\uff08\u5c24\u5176\u4e0d\u8981 COPY .env\uff09<\/h3>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-9385239 elementor-widget elementor-widget-text-editor\" data-id=\"9385239\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p data-start=\"156\" data-end=\"349\">\u5728 Dockerfile \u4e2d\u76f4\u63a5\u5beb\u5165\u6216\u8907\u88fd\u6a5f\u5bc6\u8cc7\u8a0a\uff08\u4f8b\u5982 API Key\u3001Token\u3001\u5bc6\u78bc\u6216 <code data-start=\"203\" data-end=\"209\">.env<\/code> \u6a94\u6848\uff09\uff0c\u6703\u4f7f\u9019\u4e9b\u654f\u611f\u8cc7\u6599\u6c38\u4e45\u5d4c\u5165\u6620\u50cf\u6a94\u5c64\u4e2d\uff0c\u4e00\u65e6\u6620\u50cf\u6a94\u88ab\u63a8\u9001\u81f3 Registry\u3001\u5206\u4eab\u7d66\u4ed6\u4eba\u6216\u7528\u65bc\u591a\u500b\u74b0\u5883\uff0c\u6a5f\u5bc6\u5373\u53ef\u80fd\u906d\u5230\u672a\u6388\u6b0a\u5b58\u53d6\uff0c\u5f62\u6210\u56b4\u91cd\u7684\u8cc7\u5b89\u98a8\u96aa\u3002\u7531\u65bc Docker Image \u5177\u5099\u53ef\u91cd\u7528\u8207\u53ef\u6563\u4f48\u7684\u7279\u6027\uff0c\u4efb\u4f55\u5728\u5efa\u7f6e\u968e\u6bb5\u5beb\u5165\u7684\u7955\u5bc6\u8cc7\u8a0a\uff0c\u90fd\u96e3\u4ee5\u5728\u4e8b\u5f8c\u5b8c\u5168\u79fb\u9664\u6216\u8ffd\u8e64\u5f71\u97ff\u7bc4\u570d\u3002<\/p><p data-start=\"351\" data-end=\"473\">\u5728\u6b63\u5f0f\u74b0\u5883\u4e2d\uff0c\u6a5f\u5bc6\u8cc7\u8a0a\u61c9\u8207\u6620\u50cf\u6a94\u5efa\u7f6e\u6d41\u7a0b\u660e\u78ba\u5206\u96e2\uff0c\u6539\u4ee5\u57f7\u884c\u968e\u6bb5\u6ce8\u5165\u7684\u65b9\u5f0f\u63d0\u4f9b\uff0c\u4f8b\u5982\u900f\u904e\u74b0\u5883\u8b8a\u6578\u3001\u5bb9\u5668\u7de8\u6392\u5e73\u53f0\u7684 Secret \u6a5f\u5236\uff0c\u6216\u96c6\u4e2d\u5f0f\u7684\u7955\u5bc6\u7ba1\u7406\u670d\u52d9\u3002\u6b64\u4f5c\u6cd5\u4e0d\u50c5\u80fd\u964d\u4f4e\u4f9b\u61c9\u93c8\u5916\u6d29\u98a8\u96aa\uff0c\u4e5f\u6709\u52a9\u65bc\u5be6\u73fe\u4e0d\u540c\u74b0\u5883\u4e4b\u9593\u7684\u6b0a\u9650\u9694\u96e2\u3001\u6a5f\u5bc6\u8f2a\u66ff\u8207\u5408\u898f\u7ba1\u7406\u3002<\/p><blockquote><p data-start=\"351\" data-end=\"473\">\u70ba\u907f\u514d\u6a5f\u5bc6\u96a8\u6620\u50cf\u6a94\u6563\u4f48\u4e26\u5f62\u6210\u4f9b\u61c9\u93c8\u98a8\u96aa\uff0c\u654f\u611f\u8cc7\u8a0a\u4e0d\u61c9\u5beb\u5165 Dockerfile \u6216\u5efa\u7f6e\u7522\u7269\uff0c\u800c\u61c9\u65bc\u57f7\u884c\u968e\u6bb5\u4ee5\u5b89\u5168\u6a5f\u5236\u6ce8\u5165\u3002<\/p><\/blockquote><p data-start=\"4019\" data-end=\"4024\">\u6b63\u78ba\u65b9\u5f0f\uff1a<\/p><ul><li data-start=\"4027\" data-end=\"4043\">\u4ee5\u74b0\u5883\u8b8a\u6578\u6ce8\u5165\uff08runtime\uff09<\/li><li data-start=\"4046\" data-end=\"4092\">\u6216\u4f7f\u7528 secret manager\uff08K8s secret\u3001Vault\u3001CI secret\uff09<\/li><li data-start=\"4095\" data-end=\"4136\">build \u968e\u6bb5\u9700\u8981 token\uff1a\u4f7f\u7528 BuildKit secret\uff08\u5f8c\u9762\u6703\u63d0\uff09<\/li><\/ul>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-ec775ac elementor-widget elementor-widget-heading\" data-id=\"ec775ac\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h3 class=\"elementor-heading-title elementor-size-default\">\u6620\u50cf\u6a94\u6383\u63cf\u8207 SBOM\uff1a\u5b89\u5168\u4e0d\u61c9\u662f\u6700\u5f8c\u4e00\u9053\u95dc\u5361<\/h3>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-2d8bf7c elementor-widget elementor-widget-text-editor\" data-id=\"2d8bf7c\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p data-start=\"620\" data-end=\"724\">\u5728\u5bb9\u5668\u5316\u74b0\u5883\u4e2d\uff0c\u6620\u50cf\u6a94\u7684\u5b89\u5168\u6027\u4e26\u975e\u50c5\u53d6\u6c7a\u65bc\u57f7\u884c\u968e\u6bb5\u7684\u9632\u8b77\u63aa\u65bd\uff0c\u800c\u662f\u5f9e\u5efa\u7f6e\u968e\u6bb5\u5373\u958b\u59cb\u7d2f\u7a4d\u3002\u6620\u50cf\u6a94\u4e2d\u6240\u5305\u542b\u7684\u5957\u4ef6\u3001\u7cfb\u7d71\u51fd\u5f0f\u5eab\u8207\u76f8\u4f9d\u7248\u672c\uff0c\u5c07\u76f4\u63a5\u5f71\u97ff\u5f8c\u7e8c\u7684\u6f0f\u6d1e\u98a8\u96aa\u8207\u4fee\u88dc\u6210\u672c\uff0c\u56e0\u6b64\u5b89\u5168\u9a57\u8b49\u4e0d\u61c9\u88ab\u5ef6\u5f8c\u81f3\u90e8\u7f72\u4e4b\u5f8c\u624d\u9032\u884c\u3002<\/p><p data-start=\"726\" data-end=\"850\">\u900f\u904e\u5728\u5efa\u7f6e\u6d41\u7a0b\u4e2d\u5f15\u5165\u6620\u50cf\u6a94\u6383\u63cf\u8207\u8edf\u9ad4\u7269\u6599\u6e05\u55ae\uff08SBOM\uff09\u7684\u6982\u5ff5\uff0c\u53ef\u4f7f\u6620\u50cf\u6a94\u7684\u7d44\u6210\u5167\u5bb9\u5177\u5099\u53ef\u8996\u6027\u8207\u53ef\u8ffd\u6eaf\u6027\u3002\u5be6\u52d9\u4e0a\uff0c\u6620\u50cf\u6a94\u8d8a\u7cbe\u7c21\u3001\u5206\u5c64\u8d8a\u6e05\u695a\uff0c\u6383\u63cf\u7d50\u679c\u901a\u5e38\u4e5f\u8d8a\u55ae\u7d14\uff0c\u9019\u6b63\u662f Multi-stage builds \u8207\u6620\u50cf\u6a94\u7626\u8eab\u7b56\u7565\u5728\u5b89\u5168\u5c64\u9762\u4e0a\u7684\u5ef6\u4f38\u50f9\u503c\u3002<\/p><p data-start=\"852\" data-end=\"950\">\u5c07\u6620\u50cf\u6a94\u6383\u63cf\u8996\u70ba CI \u6d41\u7a0b\u4e2d\u7684\u4e00\u74b0\uff0c\u800c\u975e\u4e8b\u5f8c\u6aa2\u67e5\uff0c\u6709\u52a9\u65bc\u5728\u65e9\u671f\u5373\u767c\u73fe\u9ad8\u98a8\u96aa\u76f8\u4f9d\u5957\u4ef6\uff0c\u907f\u514d\u554f\u984c\u6620\u50cf\u6a94\u9032\u5165\u6b63\u5f0f\u74b0\u5883\u3002\u9019\u6a23\u7684\u505a\u6cd5\u4e0d\u50c5\u80fd\u964d\u4f4e\u4f9b\u61c9\u93c8\u98a8\u96aa\uff0c\u4e5f\u80fd\u8b93\u5b89\u5168\u8981\u6c42\u81ea\u7136\u878d\u5165\u5de5\u7a0b\u6d41\u7a0b\uff0c\u800c\u975e\u6210\u70ba\u984d\u5916\u8ca0\u64d4\u3002<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-6b278d4 elementor-widget elementor-widget-heading\" data-id=\"6b278d4\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">BuildKit \u8207\u9032\u968e\u5feb\u53d6\uff1a\u8b93 CI \u5efa\u7f6e\u6642\u9593\u5927\u5e45\u4e0b\u964d<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-c5fbcae elementor-widget elementor-widget-text-editor\" data-id=\"c5fbcae\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p data-start=\"145\" data-end=\"324\">\u5728\u6301\u7e8c\u6574\u5408\uff08CI\uff09\u6d41\u7a0b\u4e2d\uff0cDocker \u6620\u50cf\u6a94\u7684\u5efa\u7f6e\u901f\u5ea6\u5f80\u5f80\u6210\u70ba\u5f71\u97ff\u4ea4\u4ed8\u6548\u7387\u8207\u6210\u672c\u7684\u91cd\u8981\u56e0\u7d20\u3002\u50b3\u7d71\u5efa\u7f6e\u65b9\u5f0f\u82e5\u7121\u6cd5\u6709\u6548\u91cd\u7528\u5feb\u53d6\uff0c\u6bcf\u6b21\u5efa\u7f6e\u90fd\u9700\u91cd\u65b0\u4e0b\u8f09\u76f8\u4f9d\u5957\u4ef6\u8207\u91cd\u8dd1\u91cd\u8907\u6b65\u9a5f\uff0c\u5bb9\u6613\u5c0e\u81f4 CI \u57f7\u884c\u6642\u9593\u96a8\u5c08\u6848\u6210\u9577\u800c\u986f\u8457\u62c9\u9577\u3002BuildKit \u662f Docker \u63d0\u4f9b\u7684\u73fe\u4ee3\u5316\u5efa\u7f6e\u5f15\u64ce\uff0c\u900f\u904e\u66f4\u7d30\u7dfb\u7684\u5feb\u53d6\u7ba1\u7406\u6a5f\u5236\u8207\u5efa\u7f6e\u968e\u6bb5\u63a7\u5236\uff0c\u80fd\u6709\u6548\u63d0\u5347\u5feb\u53d6\u547d\u4e2d\u7387\u4e26\u6e1b\u5c11\u4e0d\u5fc5\u8981\u7684\u91cd\u5efa\u884c\u70ba\u3002<\/p><p data-start=\"326\" data-end=\"469\">\u900f\u904e\u642d\u914d\u9032\u968e\u5feb\u53d6\u7b56\u7565\uff0c\u4f8b\u5982\u5c07\u5957\u4ef6\u4e0b\u8f09\u7d50\u679c\u8207\u7de8\u8b6f\u7522\u7269\u7368\u7acb\u5feb\u53d6\uff0cBuildKit \u80fd\u5728\u591a\u6b21\u5efa\u7f6e\u3001\u4e0d\u540c\u5206\u652f\u6216\u591a\u500b CI \u7bc0\u9ede\u4e4b\u9593\u91cd\u7528\u65e2\u6709\u6210\u679c\uff0c\u4f7f\u5efa\u7f6e\u6d41\u7a0b\u66f4\u5177\u53ef\u9810\u671f\u6027\u3002\u9019\u4e0d\u50c5\u80fd\u5927\u5e45\u7e2e\u77ed CI \u57f7\u884c\u6642\u9593\uff0c\u4e5f\u6709\u52a9\u65bc\u964d\u4f4e\u57fa\u790e\u8a2d\u65bd\u8cc7\u6e90\u6d88\u8017\uff0c\u63d0\u5347\u6574\u9ad4\u4ea4\u4ed8\u6548\u7387\uff0c\u7279\u5225\u9069\u7528\u65bc\u898f\u6a21\u5316\u5c08\u6848\u8207\u9ad8\u983b\u7387\u90e8\u7f72\u7684\u751f\u7522\u74b0\u5883\u3002<\/p><p data-start=\"94\" data-end=\"226\">\u5728\u5be6\u52d9\u4e0a\uff0cBuildKit \u7684\u50f9\u503c\u4e26\u4e0d\u50c5\u6b62\u65bc\u52a0\u5feb\u55ae\u6b21\u5efa\u7f6e\u901f\u5ea6\uff0c\u800c\u5728\u65bc\u8b93\u5efa\u7f6e\u6d41\u7a0b\u5177\u5099\u300c\u53ef\u9810\u671f\u7684\u5feb\u53d6\u884c\u70ba\u300d\u3002\u7576\u76f8\u4f9d\u5957\u4ef6\u3001\u7de8\u8b6f\u6b65\u9a5f\u8207\u61c9\u7528\u7a0b\u5f0f\u5167\u5bb9\u88ab\u6e05\u695a\u5206\u96e2\u4e26\u6b63\u78ba\u5feb\u53d6\u5f8c\uff0c\u5373\u4f7f\u5c08\u6848\u898f\u6a21\u64f4\u5927\u6216\u5efa\u7f6e\u983b\u7387\u63d0\u9ad8\uff0cCI \u6d41\u7a0b\u4ecd\u80fd\u7dad\u6301\u7a69\u5b9a\u4e14\u7dda\u6027\u7684\u57f7\u884c\u6642\u9593\uff0c\u907f\u514d\u56e0\u91cd\u8907\u5efa\u7f6e\u800c\u9020\u6210\u8cc7\u6e90\u6d6a\u8cbb\u3002<\/p><blockquote><p data-start=\"228\" data-end=\"342\">\u56e0\u6b64\uff0c\u5728\u8a2d\u8a08 Dockerfile \u8207 CI \u6d41\u7a0b\u6642\uff0c\u61c9\u5c07 BuildKit \u8996\u70ba\u5efa\u7f6e\u67b6\u69cb\u7684\u4e00\u90e8\u5206\uff0c\u800c\u975e\u55ae\u7d14\u7684\u6548\u80fd\u512a\u5316\u5de5\u5177\u3002\u9019\u6a23\u7684\u8a2d\u8a08\u601d\u7dad\uff0c\u80fd\u4f7f\u6620\u50cf\u6a94\u5efa\u7f6e\u6d41\u7a0b\u66f4\u5bb9\u6613\u64f4\u5c55\u3001\u7dad\u8b77\u8207\u6a19\u6e96\u5316\uff0c\u7279\u5225\u9069\u5408\u7528\u65bc\u591a\u670d\u52d9\u3001\u591a\u74b0\u5883\u8207\u9577\u671f\u7dad\u904b\u7684\u5c08\u6848\u3002<br \/>BuildKit \u7684\u6838\u5fc3\u50f9\u503c\u5728\u65bc\u63d0\u4f9b\u7a69\u5b9a\u4e14\u53ef\u91cd\u7528\u7684\u5feb\u53d6\u6a5f\u5236\uff0c\u4f7f\u6620\u50cf\u6a94\u5efa\u7f6e\u6d41\u7a0b\u5728\u5c08\u6848\u6210\u9577\u8207\u90e8\u7f72\u983b\u7387\u63d0\u9ad8\u7684\u60c5\u6cc1\u4e0b\uff0c\u4ecd\u80fd\u4fdd\u6301\u4e00\u81f4\u7684\u6548\u80fd\u8868\u73fe\u3002<\/p><\/blockquote><p data-start=\"4179\" data-end=\"4203\">\u82e5\u4f60\u5728 CI \u4e0a build \u5f88\u6162\uff0c\u901a\u5e38\u539f\u56e0\u662f\uff1a<\/p><ul><li data-start=\"4206\" data-end=\"4222\">\u4f9d\u8cf4\u5c64 cache \u6c92\u88ab\u6709\u6548\u4fdd\u5b58<\/li><li data-start=\"4225\" data-end=\"4251\">build \u6bcf\u6b21\u90fd\u5f9e\u982d\u4e0b\u8f09 dependencies<\/li><\/ul>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-dd1d2b6 elementor-widget elementor-widget-heading\" data-id=\"dd1d2b6\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h3 class=\"elementor-heading-title elementor-size-default\">Dockerfile \u5728 CI\/CD Pipeline \u4e2d\u7684\u89d2\u8272<\/h3>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-9a385cc elementor-widget elementor-widget-text-editor\" data-id=\"9a385cc\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p data-start=\"196\" data-end=\"314\">\u5728\u6210\u719f\u7684 CI\/CD \u6d41\u7a0b\u4e2d\uff0cDockerfile \u4e0d\u61c9\u88ab\u8996\u70ba\u55ae\u7d14\u7531 CI \u8173\u672c\u9a45\u52d5\u7684\u5efa\u7f6e\u6307\u4ee4\u96c6\u5408\uff0c\u800c\u662f\u4e00\u4efd\u660e\u78ba\u5b9a\u7fa9\u300c\u5982\u4f55\u7522\u751f\u53ef\u90e8\u7f72\u6620\u50cf\u6a94\u300d\u7684\u5de5\u7a0b\u898f\u683c\u3002CI \u7cfb\u7d71\u7684\u8cac\u4efb\uff0c\u61c9\u9650\u65bc\u89f8\u767c\u5efa\u7f6e\u3001\u57f7\u884c\u6e2c\u8a66\u8207\u63a8\u9001\u7522\u7269\uff0c\u800c\u975e\u5728\u6d41\u7a0b\u4e2d\u91cd\u8907\u5be6\u4f5c\u5efa\u7f6e\u908f\u8f2f\u3002<\/p><p data-start=\"316\" data-end=\"460\">\u7576 Dockerfile \u7684\u5206\u5c64\u8a2d\u8a08\u8207\u5feb\u53d6\u7b56\u7565\u6e05\u695a\u4e14\u7a69\u5b9a\u6642\uff0cCI\/CD \u6d41\u7a0b\u4fbf\u80fd\u81ea\u7136\u53d7\u76ca\u65bc\u5feb\u53d6\u91cd\u7528\u8207\u53ef\u91cd\u73fe\u5efa\u7f6e\u7684\u7279\u6027\uff0c\u4f7f\u76f8\u540c\u7684\u6620\u50cf\u6a94\u80fd\u5728\u4e0d\u540c\u74b0\u5883\u9593\u88ab\u4e00\u81f4\u5730\u5efa\u7f6e\u3001\u9a57\u8b49\u8207\u63a8\u5ee3\u3002\u53cd\u4e4b\uff0c\u82e5 Dockerfile \u8a2d\u8a08\u4e0d\u7576\uff0c\u5373\u4f7f CI \u5de5\u5177\u672c\u8eab\u518d\u5148\u9032\uff0c\u4e5f\u96e3\u4ee5\u907f\u514d\u5efa\u7f6e\u6642\u9593\u5931\u63a7\u6216\u74b0\u5883\u884c\u70ba\u4e0d\u4e00\u81f4\u7684\u554f\u984c\u3002<\/p><p data-start=\"462\" data-end=\"554\">\u56e0\u6b64\uff0c\u5728\u8a2d\u8a08 CI\/CD \u67b6\u69cb\u6642\uff0c\u61c9\u5c07 Dockerfile \u8996\u70ba\u5efa\u7f6e\u6d41\u7a0b\u7684\u6838\u5fc3\u5951\u7d04\uff0c\u800c\u975e\u9644\u5c6c\u7522\u7269\u3002\u9019\u6a23\u7684\u5b9a\u4f4d\uff0c\u80fd\u8b93\u6574\u500b\u4ea4\u4ed8\u6d41\u7a0b\u96a8\u5c08\u6848\u898f\u6a21\u6210\u9577\u800c\u7dad\u6301\u53ef\u9810\u671f\u6027\uff0c\u4e26\u964d\u4f4e\u5f8c\u7e8c\u7dad\u904b\u8207\u9664\u932f\u6210\u672c\u3002<\/p><ul><li data-start=\"856\" data-end=\"880\"><p data-start=\"858\" data-end=\"880\">Dockerfile \u2260 CI script<\/p><\/li><li data-start=\"881\" data-end=\"907\"><p data-start=\"883\" data-end=\"907\">CI\/CD \u53ea\u8ca0\u8cac\u300c\u547c\u53eb Dockerfile\u300d<\/p><\/li><li data-start=\"908\" data-end=\"996\"><p data-start=\"910\" data-end=\"924\">Dockerfile \u6c7a\u5b9a\uff1a<\/p><ul data-start=\"927\" data-end=\"996\"><li data-start=\"927\" data-end=\"944\"><p data-start=\"929\" data-end=\"944\">cache \u80fd\u4e0d\u80fd reuse<\/p><\/li><li data-start=\"947\" data-end=\"971\"><p data-start=\"949\" data-end=\"971\">build \u662f\u5426 deterministic<\/p><\/li><li data-start=\"974\" data-end=\"996\"><p data-start=\"976\" data-end=\"996\">image \u662f\u5426\u80fd\u88ab promotion<\/p><\/li><\/ul><\/li><\/ul><blockquote><p>\u5728\u5be6\u52d9\u7684 CI\/CD \u6d41\u7a0b\u4e2d\uff0cDockerfile \u61c9\u88ab\u8996\u70ba\u5efa\u7f6e\u898f\u683c\uff0c\u800c\u975e\u7531 CI \u8173\u672c\u81ea\u884c\u62fc\u88dd build \u908f\u8f2f\u3002\u7576 Dockerfile \u8a2d\u8a08\u826f\u597d\uff0cCI \u7cfb\u7d71\u53ea\u9700\u8ca0\u8cac\u89f8\u767c\u5efa\u7f6e\u8207\u63a8\u9001\uff0c\u6620\u50cf\u6a94\u4fbf\u53ef\u5728\u4e0d\u540c\u74b0\u5883\u9593\u88ab\u4e00\u81f4\u5730\u91cd\u7528\u8207\u63a8\u5ee3\u3002<\/p><\/blockquote>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-c10ef30 elementor-widget elementor-widget-heading\" data-id=\"c10ef30\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h4 class=\"elementor-heading-title elementor-size-default\">BuildKit cache mount\uff08\u4ee5 apt \/ npm \u70ba\u4f8b\uff09<\/h4>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-f8ebc4f elementor-widget elementor-widget-code-highlight\" data-id=\"f8ebc4f\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"code-highlight.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"prismjs-okaidia copy-to-clipboard \">\n\t\t\t<pre data-line=\"\" class=\"highlight-height language-bash \">\n\t\t\t\t<code readonly=\"true\" class=\"language-bash\">\n\t\t\t\t\t<xmp># syntax=docker\/dockerfile:1.7\r\n\r\nRUN --mount=type=cache,target=\/var\/cache\/apt \\\r\n    apt-get update && apt-get install -y --no-install-recommends curl\r\n<\/xmp>\n\t\t\t\t<\/code>\n\t\t\t<\/pre>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-ce95466 elementor-widget elementor-widget-text-editor\" data-id=\"ce95466\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>npm \u4e5f\u53ef\u4ee5\uff1a<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-df80ccb elementor-widget elementor-widget-code-highlight\" data-id=\"df80ccb\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"code-highlight.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"prismjs-okaidia copy-to-clipboard \">\n\t\t\t<pre data-line=\"\" class=\"highlight-height language-bash \">\n\t\t\t\t<code readonly=\"true\" class=\"language-bash\">\n\t\t\t\t\t<xmp>RUN --mount=type=cache,target=\/root\/.npm \\\r\n    npm ci\r\n<\/xmp>\n\t\t\t\t<\/code>\n\t\t\t<\/pre>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-33e0070 elementor-widget elementor-widget-text-editor\" data-id=\"33e0070\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>\u9019\u6703\u986f\u8457\u6539\u5584 CI build\uff0c\u5c24\u5176\u662f\u4f60\u6709\u591a\u5206\u652f\u3001\u591a\u6b21\u90e8\u7f72\u7684\u60c5\u5883\u3002<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-a5dcf32 elementor-widget elementor-widget-heading\" data-id=\"a5dcf32\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">\u5e38\u898b\u8e29\u96f7\u8207\u6392\u932f\u6e05\u55ae\uff08\u6700\u5be6\u7528\uff09<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-8e949ce elementor-widget elementor-widget-text-editor\" data-id=\"8e949ce\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p data-start=\"127\" data-end=\"291\">\u5728\u5be6\u969b\u5c0e\u5165 Docker \u8207\u5bb9\u5668\u5316\u6d41\u7a0b\u6642\uff0c\u8a31\u591a\u554f\u984c\u4e26\u975e\u6e90\u81ea\u5de5\u5177\u672c\u8eab\uff0c\u800c\u662f\u4f86\u81ea Dockerfile \u8a2d\u8a08\u3001\u5efa\u7f6e\u6d41\u7a0b\u6216\u57f7\u884c\u74b0\u5883\u5047\u8a2d\u4e0d\u4e00\u81f4\u6240\u7d2f\u7a4d\u7684\u7d30\u5fae\u932f\u8aa4\u3002\u9019\u4e9b\u554f\u984c\u5f80\u5f80\u5728\u5c08\u6848\u521d\u671f\u4e0d\u6613\u5bdf\u89ba\uff0c\u4f46\u96a8\u8457\u6620\u50cf\u6a94\u6578\u91cf\u589e\u52a0\u3001CI\/CD \u983b\u7387\u63d0\u9ad8\u6216\u6b63\u5f0f\u74b0\u5883\u4e0a\u7dda\u5f8c\uff0c\u4fbf\u6703\u9010\u6f38\u653e\u5927\u5176\u5f71\u97ff\uff0c\u5c0e\u81f4\u5efa\u7f6e\u6642\u9593\u904e\u9577\u3001\u6620\u50cf\u6a94\u9ad4\u7a4d\u5931\u63a7\u3001\u90e8\u7f72\u4e0d\u7a69\u5b9a\uff0c\u751a\u81f3\u589e\u52a0\u5b89\u5168\u98a8\u96aa\u3002<\/p><p>\u672c\u7bc0\u6574\u7406\u5be6\u52d9\u4e2d\u6700\u5e38\u9047\u5230\u7684 Docker Image \u8207 Dockerfile \u8e29\u96f7\u60c5\u5883\uff0c\u4e26\u5c0d\u61c9\u63d0\u4f9b\u6392\u67e5\u65b9\u5411\u8207\u4fee\u6b63\u601d\u8def\uff0c\u76ee\u7684\u5728\u65bc\u5354\u52a9\u8b80\u8005\u5feb\u901f\u8fa8\u8b58\u554f\u984c\u6839\u6e90\uff0c\u907f\u514d\u53cd\u8986\u5617\u8a66\u8207\u975e\u5fc5\u8981\u7684\u91cd\u69cb\u6210\u672c\u3002\u900f\u904e\u7cfb\u7d71\u5316\u5730\u7406\u89e3\u9019\u4e9b\u5e38\u898b\u932f\u8aa4\uff0c\u80fd\u6709\u6548\u63d0\u5347\u5bb9\u5668\u5316\u6d41\u7a0b\u7684\u53ef\u9810\u671f\u6027\uff0c\u4e26\u8b93 Docker \u5728\u6b63\u5f0f\u74b0\u5883\u4e2d\u767c\u63ee\u5176\u61c9\u6709\u7684\u7a69\u5b9a\u6027\u8207\u6548\u7387\u3002<\/p><blockquote><p data-start=\"293\" data-end=\"445\">\u5bb9\u5668\u5316\u6d41\u7a0b\u4e2d\u7684\u6548\u80fd\u8207\u7a69\u5b9a\u6027\u554f\u984c\uff0c\u591a\u534a\u4f86\u81ea Dockerfile \u8207\u5efa\u7f6e\u6d41\u7a0b\u7684\u7d30\u7bc0\u8a2d\u8a08\u3002\u672c\u7bc0\u805a\u7126\u65bc\u5be6\u52d9\u4e0a\u6700\u5e38\u898b\u7684\u8e29\u96f7\u60c5\u5883\uff0c\u5354\u52a9\u8b80\u8005\u5feb\u901f\u5b9a\u4f4d\u554f\u984c\u4e26\u5efa\u7acb\u6b63\u78ba\u7684\u6392\u932f\u601d\u7dad\uff0c\u4ee5\u964d\u4f4e\u7dad\u904b\u6210\u672c\u4e26\u63d0\u5347\u90e8\u7f72\u53ef\u9760\u5ea6\u3002<\/p><\/blockquote><h3 data-start=\"4606\" data-end=\"4622\">\u554f\u984c 1\uff1a\u6620\u50cf\u6a94\u8d8a\u4f86\u8d8a\u5927<\/h3><p data-start=\"4623\" data-end=\"4626\">\u6aa2\u67e5\uff1a<\/p><ul><li data-start=\"4629\" data-end=\"4648\">\u6709\u6c92\u6709 <code data-start=\"4633\" data-end=\"4648\">.dockerignore<\/code><\/li><li data-start=\"4651\" data-end=\"4677\">\u6709\u6c92\u6709\u628a build \u7522\u7269\u3001\u6e2c\u8a66\u8cc7\u6599 COPY \u9032\u53bb<\/li><li data-start=\"4680\" data-end=\"4706\">\u6709\u6c92\u6709\u6e05 apt cache \/ npm cache<\/li><li data-start=\"4709\" data-end=\"4725\">\u662f\u5426\u7f3a\u5c11 multi-stage<\/li><\/ul><h3 data-start=\"4727\" data-end=\"4753\">\u554f\u984c 2\uff1aCI build \u6bcf\u6b21\u90fd\u91cd\u65b0\u8dd1\u4f9d\u8cf4<\/h3><p data-start=\"4754\" data-end=\"4757\">\u6aa2\u67e5\uff1a<\/p><ul><li data-start=\"4760\" data-end=\"4800\">Dockerfile \u7684 <code data-start=\"4773\" data-end=\"4779\">COPY<\/code> \u9806\u5e8f\u662f\u5426\u6b63\u78ba\uff08\u5148 lock \u6a94\u5f8c\u7a0b\u5f0f\u78bc\uff09<\/li><li data-start=\"4803\" data-end=\"4823\">\u6709\u6c92\u6709\u555f\u7528 BuildKit cache<\/li><li data-start=\"4826\" data-end=\"4851\">registry \u662f\u5426\u652f\u63f4 layer cache<\/li><\/ul><h3 data-start=\"4853\" data-end=\"4874\">\u554f\u984c 3\uff1a\u5bb9\u5668\u5728\u4f60\u6a5f\u5668\u8dd1\uff0c\u90e8\u7f72\u5c31\u639b<\/h3><p data-start=\"4875\" data-end=\"4878\">\u6aa2\u67e5\uff1a<\/p><ul><li data-start=\"4881\" data-end=\"4903\">\u4f60\u662f\u4e0d\u662f\u7528\u4e86\u300c\u4f9d\u8cf4\u672c\u6a5f\u6a94\u6848\u300d\u6216\u300c\u786c\u7de8\u78bc\u8def\u5f91\u300d<\/li><li data-start=\"4906\" data-end=\"4956\">\u662f\u5426\u7f3a\u5c11\u5fc5\u8981\u7684 system lib\uff08\u5c24\u5176 Python \/ Node native module\uff09<\/li><li data-start=\"4959\" data-end=\"4997\">base image distro \u5dee\u7570\uff08alpine vs debian\uff09<\/li><\/ul>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-b897197 elementor-widget elementor-widget-heading\" data-id=\"b897197\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Docker Image \u8207 Kubernetes \u74b0\u5883\u7684\u95dc\u806f<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-400867a elementor-widget elementor-widget-text-editor\" data-id=\"400867a\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p data-start=\"1382\" data-end=\"1476\">\u5728 Kubernetes \u74b0\u5883\u4e2d\uff0c\u6620\u50cf\u6a94\u7684\u54c1\u8cea\u5f80\u5f80\u76f4\u63a5\u5f71\u97ff\u5e73\u53f0\u5c64\u7684\u884c\u70ba\u8868\u73fe\u3002\u7121\u8ad6\u662f Pod \u555f\u52d5\u901f\u5ea6\u3001\u6efe\u52d5\u66f4\u65b0\u7684\u5e73\u9806\u6027\uff0c\u6216\u662f\u7bc0\u9ede\u8cc7\u6e90\u7684\u4f7f\u7528\u6548\u7387\uff0c\u6700\u7d42\u90fd\u8207\u6620\u50cf\u6a94\u7684\u5efa\u7f6e\u65b9\u5f0f\u8207\u5167\u5bb9\u7d50\u69cb\u5bc6\u5207\u76f8\u95dc\u3002<\/p><p data-start=\"1478\" data-end=\"1565\">Kubernetes \u4e26\u4e0d\u6703\u81ea\u52d5\u4fee\u6b63\u8a2d\u8a08\u4e0d\u826f\u7684\u6620\u50cf\u6a94\u3002\u76f8\u53cd\u5730\uff0c\u7576\u6620\u50cf\u6a94\u9ad4\u7a4d\u904e\u5927\u3001\u76f8\u4f9d\u95dc\u4fc2\u8907\u96dc\u6216\u5efa\u7f6e\u7d50\u679c\u4e0d\u53ef\u9810\u671f\u6642\uff0c\u9019\u4e9b\u554f\u984c\u6703\u5728\u8abf\u5ea6\u8207\u64f4\u5c55\u904e\u7a0b\u4e2d\u88ab\u653e\u5927\uff0c\u589e\u52a0\u7cfb\u7d71\u904b\u4f5c\u7684\u4e0d\u78ba\u5b9a\u6027\u3002<\/p><p data-start=\"1567\" data-end=\"1683\">\u56e0\u6b64\uff0cDockerfile \u8207 Docker Image \u61c9\u88ab\u8996\u70ba Kubernetes \u6210\u529f\u904b\u4f5c\u7684\u524d\u7f6e\u689d\u4ef6\u4e4b\u4e00\u3002\u552f\u6709\u5728\u6620\u50cf\u6a94\u5c64\u7d1a\u5efa\u7acb\u7a69\u5b9a\u3001\u53ef\u91cd\u73fe\u4e14\u53ef\u7dad\u904b\u7684\u57fa\u790e\uff0c\u5bb9\u5668\u7de8\u6392\u5e73\u53f0\u7684\u512a\u52e2\u624d\u80fd\u88ab\u5145\u5206\u767c\u63ee\uff0c\u4e26\u652f\u6490\u66f4\u5927\u898f\u6a21\u7684\u670d\u52d9\u90e8\u7f72\u8207\u7cfb\u7d71\u6f14\u9032\u3002<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-7d05df4 elementor-widget elementor-widget-heading\" data-id=\"7d05df4\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">\u7d50\u8ad6\uff1a\u4f60\u8981\u628a Dockerfile \u7576\u6210\u300c\u53ef\u7dad\u904b\u7684\u7522\u54c1\u898f\u683c\u300d<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-d6e9eaa elementor-widget elementor-widget-text-editor\" data-id=\"d6e9eaa\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p data-start=\"154\" data-end=\"302\">\u5728\u5bb9\u5668\u5316\u67b6\u69cb\u4e2d\uff0cDockerfile \u5f80\u5f80\u88ab\u8996\u70ba\u55ae\u7d14\u7684\u5efa\u7f6e\u5de5\u5177\uff0c\u7528\u4f86\u5c07\u61c9\u7528\u7a0b\u5f0f\u5305\u88dd\u6210\u53ef\u57f7\u884c\u7684 Docker Image\u3002\u7136\u800c\uff0c\u96a8\u8457\u7cfb\u7d71\u898f\u6a21\u64f4\u5927\u3001\u90e8\u7f72\u983b\u7387\u63d0\u9ad8\uff0c\u4ee5\u53ca\u6b63\u5f0f\u74b0\u5883\u5c0d\u7a69\u5b9a\u6027\u8207\u5b89\u5168\u6027\u7684\u8981\u6c42\u63d0\u5347\uff0cDockerfile \u7684\u89d2\u8272\u5df2\u4e0d\u518d\u53ea\u662f\u300c\u8b93\u670d\u52d9\u8dd1\u8d77\u4f86\u300d\uff0c\u800c\u662f\u9010\u6f38\u6210\u70ba\u4e00\u4efd\u5177\u5099\u5de5\u7a0b\u7d04\u675f\u529b\u7684\u4ea4\u4ed8\u898f\u683c\u3002<\/p><p data-start=\"304\" data-end=\"457\">\u4e00\u4efd\u8a2d\u8a08\u826f\u597d\u7684 Dockerfile\uff0c\u5be6\u969b\u4e0a\u5b9a\u7fa9\u4e86\u61c9\u7528\u7a0b\u5f0f\u5728\u4e0d\u540c\u74b0\u5883\u4e2d\u7684\u884c\u70ba\u908a\u754c\uff0c\u5305\u62ec\u76f8\u4f9d\u5957\u4ef6\u7684\u4f86\u6e90\u3001\u5efa\u7f6e\u6d41\u7a0b\u7684\u53ef\u91cd\u73fe\u6027\u3001\u6620\u50cf\u6a94\u7684\u7d44\u6210\u7d50\u69cb\uff0c\u4ee5\u53ca\u670d\u52d9\u5728\u5bb9\u5668\u4e2d\u7684\u57f7\u884c\u65b9\u5f0f\u3002\u9019\u4e9b\u8a2d\u8a08\u6c7a\u7b56\uff0c\u5c07\u76f4\u63a5\u5f71\u97ff\u6620\u50cf\u6a94\u7684\u9ad4\u7a4d\u3001\u5efa\u7f6e\u6548\u7387\u3001\u90e8\u7f72\u7a69\u5b9a\u6027\u8207\u5f8c\u7e8c\u7dad\u904b\u6210\u672c\uff0c\u4e5f\u6703\u5728 CI\/CD\u3001\u81ea\u52d5\u5316\u6e2c\u8a66\u8207\u5b89\u5168\u7a3d\u6838\u6d41\u7a0b\u4e2d\u88ab\u4e0d\u65b7\u653e\u5927\u5176\u5f71\u97ff\u3002<\/p><p data-start=\"459\" data-end=\"613\">\u76f8\u53cd\u5730\uff0c\u82e5 Dockerfile \u7f3a\u4e4f\u7d50\u69cb\u8207\u4e00\u81f4\u6027\uff0c\u6216\u50c5\u70ba\u77ed\u671f\u9700\u6c42\u800c\u5feb\u901f\u5806\u758a\uff0c\u521d\u671f\u6216\u8a31\u80fd\u5feb\u901f\u5b8c\u6210\u90e8\u7f72\uff0c\u4f46\u96a8\u8457\u5c08\u6848\u6f14\u9032\uff0c\u5f80\u5f80\u6703\u8f49\u5316\u70ba\u6280\u8853\u50b5\uff0c\u5c0e\u81f4\u5efa\u7f6e\u6642\u9593\u5931\u63a7\u3001\u74b0\u5883\u884c\u70ba\u4e0d\u53ef\u9810\u671f\uff0c\u751a\u81f3\u5728\u767c\u751f\u554f\u984c\u6642\u96e3\u4ee5\u8ffd\u6eaf\u539f\u56e0\u3002\u9019\u985e\u98a8\u96aa\u4e26\u975e\u4f86\u81ea Docker \u672c\u8eab\uff0c\u800c\u662f\u4f86\u81ea\u672a\u5c07 Dockerfile \u8996\u70ba\u6b63\u5f0f\u5de5\u7a0b\u7522\u7269\u6240\u884d\u751f\u7684\u7d50\u679c\u3002<\/p><p data-start=\"615\" data-end=\"803\">\u56e0\u6b64\uff0c\u5728\u6b63\u5f0f\u74b0\u5883\u4e2d\uff0cDockerfile \u61c9\u88ab\u8996\u70ba\u8207\u7a0b\u5f0f\u78bc\u540c\u7b49\u91cd\u8981\u7684\u898f\u683c\u6587\u4ef6\uff0c\u9700\u8981\u88ab\u8a2d\u8a08\u3001\u5be9\u8996\u8207\u6301\u7e8c\u7dad\u8b77\u3002\u900f\u904e\u843d\u5be6 Dockerfile \u6700\u4f73\u5be6\u52d9\uff0c\u5305\u62ec\u5408\u7406\u7684\u5206\u5c64\u7b56\u7565\u3001Multi-stage builds\u3001\u6620\u50cf\u6a94\u7cbe\u7c21\u3001\u5b89\u5168\u539f\u5247\u8207\u5efa\u7f6e\u6d41\u7a0b\u6a19\u6e96\u5316\uff0cDocker Image \u624d\u80fd\u6210\u70ba\u4e00\u500b\u53ef\u9577\u671f\u7dad\u904b\u3001\u53ef\u5be9\u8a08\u3001\u53ef\u8907\u88fd\u7684\u4ea4\u4ed8\u55ae\u4f4d\uff0c\u652f\u6490\u5f8c\u7e8c\u7684\u5bb9\u5668\u7de8\u6392\u3001\u591a\u670d\u52d9\u67b6\u69cb\u8207\u66f4\u9ad8\u5c64\u6b21\u7684\u57fa\u790e\u8a2d\u65bd\u6f14\u9032\u3002<\/p><p data-start=\"805\" data-end=\"875\">\u7576 Dockerfile \u88ab\u6b63\u78ba\u5b9a\u4f4d\u70ba<strong><span style=\"color: #3366ff;\">\u53ef\u7dad\u904b\u7684\u7522\u54c1\u898f\u683c<\/span><\/strong>\uff0c\u5bb9\u5668\u5316\u4e0d\u518d\u53ea\u662f\u90e8\u7f72\u6280\u8853\uff0c\u800c\u6703\u6210\u70ba\u4e00\u5957\u7a69\u5b9a\u3001\u53ef\u9810\u671f\u4e14\u80fd\u96a8\u696d\u52d9\u6210\u9577\u800c\u64f4\u5c55\u7684\u5de5\u7a0b\u57fa\u790e\u3002<br \/><br \/><\/p><p data-start=\"5042\" data-end=\"5123\">\u5982\u679c\u4f60\u53ea\u628a Dockerfile \u7576\u300c\u6253\u5305\u5de5\u5177\u300d\uff0c\u90a3\u4f60\u53ea\u662f\u5728\u505a\u80fd\u8dd1\u7684\u5bb9\u5668\uff1b<br \/>\u4f46\u5982\u679c\u4f60\u628a Dockerfile \u7576\u300c\u53ef\u7dad\u904b\u3001\u53ef\u5be9\u8a08\u3001\u53ef\u8907\u88fd\u7684\u4ea4\u4ed8\u898f\u683c\u300d\uff0c\u4f60\u5c31\u6703\u5f97\u5230\uff1a<\/p><ul><li data-start=\"5126\" data-end=\"5154\">\u66f4\u5feb\u7684\u5efa\u7f6e\u8207\u90e8\u7f72\uff08\u5feb\u53d6\u547d\u4e2d + multi-stage\uff09<\/li><li data-start=\"5157\" data-end=\"5173\">\u66f4\u5c0f\u7684\u6620\u50cf\u6a94\uff08\u7701\u6210\u672c\u3001\u52a0\u901f\u767c\u4f48\uff09<\/li><li data-start=\"5176\" data-end=\"5202\">\u66f4\u4f4e\u7684\u5b89\u5168\u98a8\u96aa\uff08\u975e root\u3001\u56fa\u5b9a\u7248\u672c\u3001\u6e1b\u5c11\u653b\u64ca\u9762\uff09<\/li><li data-start=\"5205\" data-end=\"5236\">\u66f4\u7a69\u5b9a\u7684\u751f\u7522\u7dad\u904b\uff08healthcheck\u3001\u53ef\u91cd\u73fe build\uff09<\/li><\/ul>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-a786db8 elementor-widget elementor-widget-heading\" data-id=\"a786db8\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Q&amp;A \u5e38\u898b\u554f\u984c | Docker \u5e38\u898b\u91cd\u9ede<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-f26b192 elementor-widget elementor-widget-accordion\" data-id=\"f26b192\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"accordion.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-accordion\">\n\t\t\t\t\t\t\t<div class=\"elementor-accordion-item\">\n\t\t\t\t\t<div id=\"elementor-tab-title-2541\" class=\"elementor-tab-title\" data-tab=\"1\" role=\"button\" aria-controls=\"elementor-tab-content-2541\" aria-expanded=\"false\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-accordion-icon elementor-accordion-icon-left\" aria-hidden=\"true\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-accordion-icon-closed\"><i class=\"fas fa-caret-square-down\"><\/i><\/span>\n\t\t\t\t\t\t\t\t<span class=\"elementor-accordion-icon-opened\"><i class=\"fas fa-caret-square-up\"><\/i><\/span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t\t\t\t<a class=\"elementor-accordion-title\" tabindex=\"0\">Docker Image \u8207 Dockerfile \u6709\u4ec0\u9ebc\u5dee\u5225\uff1f<\/a>\n\t\t\t\t\t<\/div>\n\t\t\t\t\t<div id=\"elementor-tab-content-2541\" class=\"elementor-tab-content elementor-clearfix\" data-tab=\"1\" role=\"region\" aria-labelledby=\"elementor-tab-title-2541\"><p>Dockerfile \u662f\u7528\u4f86\u5b9a\u7fa9\u6620\u50cf\u6a94\u5efa\u7f6e\u6d41\u7a0b\u7684\u898f\u683c\u6587\u4ef6\uff0c\u63cf\u8ff0\u57fa\u5e95\u6620\u50cf\u3001\u76f8\u4f9d\u5957\u4ef6\u3001\u6a94\u6848\u8907\u88fd\u65b9\u5f0f\u8207\u555f\u52d5\u884c\u70ba\uff1bDocker Image \u5247\u662f\u4f9d\u64da Dockerfile \u5efa\u7acb\u7684\u6700\u7d42\u6210\u679c\uff0c\u53ef\u88ab\u90e8\u7f72\u4e26\u5be6\u969b\u57f7\u884c\u65bc\u5bb9\u5668\u74b0\u5883\u4e2d\u3002Dockerfile \u6c7a\u5b9a Image \u7684\u7d50\u69cb\u8207\u5167\u5bb9\uff0c\u800c Image \u5247\u662f\u53ef\u4ea4\u4ed8\u8207\u53ef\u90e8\u7f72\u7684\u55ae\u4f4d\u3002<\/p><\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t\t\t<div class=\"elementor-accordion-item\">\n\t\t\t\t\t<div id=\"elementor-tab-title-2542\" class=\"elementor-tab-title\" data-tab=\"2\" role=\"button\" aria-controls=\"elementor-tab-content-2542\" aria-expanded=\"false\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-accordion-icon elementor-accordion-icon-left\" aria-hidden=\"true\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-accordion-icon-closed\"><i class=\"fas fa-caret-square-down\"><\/i><\/span>\n\t\t\t\t\t\t\t\t<span class=\"elementor-accordion-icon-opened\"><i class=\"fas fa-caret-square-up\"><\/i><\/span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t\t\t\t<a class=\"elementor-accordion-title\" tabindex=\"0\">\u4ec0\u9ebc\u662f Dockerfile \u6700\u4f73\u5be6\u52d9\uff1f<\/a>\n\t\t\t\t\t<\/div>\n\t\t\t\t\t<div id=\"elementor-tab-content-2542\" class=\"elementor-tab-content elementor-clearfix\" data-tab=\"2\" role=\"region\" aria-labelledby=\"elementor-tab-title-2542\"><p>Dockerfile \u6700\u4f73\u5be6\u52d9\u6307\u7684\u662f\u4e00\u5957\u80fd\u517c\u9867\u5efa\u7f6e\u6548\u7387\u3001\u6620\u50cf\u6a94\u9ad4\u7a4d\u3001\u5b89\u5168\u6027\u8207\u53ef\u7dad\u904b\u6027\u7684\u64b0\u5beb\u539f\u5247\uff0c\u5305\u542b\u6b63\u78ba\u7684\u5206\u5c64\u9806\u5e8f\u3001\u63d0\u9ad8\u5feb\u53d6\u547d\u4e2d\u7387\u3001\u4f7f\u7528 Multi-stage builds\u3001\u7cbe\u7c21\u6620\u50cf\u6a94\u5167\u5bb9\u3001\u907f\u514d\u4ee5 root \u6b0a\u9650\u57f7\u884c\u670d\u52d9\uff0c\u4ee5\u53ca\u56fa\u5b9a base image \u7248\u672c\u4ee5\u78ba\u4fdd\u5efa\u7f6e\u53ef\u91cd\u73fe\u6027\u3002<\/p><\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t\t\t<div class=\"elementor-accordion-item\">\n\t\t\t\t\t<div id=\"elementor-tab-title-2543\" class=\"elementor-tab-title\" data-tab=\"3\" role=\"button\" aria-controls=\"elementor-tab-content-2543\" aria-expanded=\"false\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-accordion-icon elementor-accordion-icon-left\" aria-hidden=\"true\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-accordion-icon-closed\"><i class=\"fas fa-caret-square-down\"><\/i><\/span>\n\t\t\t\t\t\t\t\t<span class=\"elementor-accordion-icon-opened\"><i class=\"fas fa-caret-square-up\"><\/i><\/span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t\t\t\t<a class=\"elementor-accordion-title\" tabindex=\"0\">\u70ba\u4ec0\u9ebc Multi-stage builds \u5c0d\u6b63\u5f0f\u74b0\u5883\u7279\u5225\u91cd\u8981\uff1f<\/a>\n\t\t\t\t\t<\/div>\n\t\t\t\t\t<div id=\"elementor-tab-content-2543\" class=\"elementor-tab-content elementor-clearfix\" data-tab=\"3\" role=\"region\" aria-labelledby=\"elementor-tab-title-2543\"><p>Multi-stage builds \u80fd\u5c07\u5efa\u7f6e\u968e\u6bb5\u8207\u57f7\u884c\u968e\u6bb5\u660e\u78ba\u5206\u96e2\uff0c\u53ea\u5c07\u5be6\u969b\u57f7\u884c\u6240\u9700\u7684\u7522\u7269\u7d0d\u5165\u6700\u7d42\u6620\u50cf\u6a94\uff0c\u907f\u514d\u5c07\u7de8\u8b6f\u5de5\u5177\u8207\u958b\u767c\u76f8\u4f9d\u4e00\u4f75\u6253\u5305\u3002\u9019\u4e0d\u50c5\u80fd\u5927\u5e45\u7e2e\u5c0f\u6620\u50cf\u6a94\u9ad4\u7a4d\uff0c\u4e5f\u80fd\u964d\u4f4e\u653b\u64ca\u9762\uff0c\u5c0d\u6b63\u5f0f\u74b0\u5883\u7684\u6548\u80fd\u8207\u5b89\u5168\u6027\u90fd\u6709\u5be6\u8cea\u5e6b\u52a9\u3002<\/p><\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t\t\t<div class=\"elementor-accordion-item\">\n\t\t\t\t\t<div id=\"elementor-tab-title-2544\" class=\"elementor-tab-title\" data-tab=\"4\" role=\"button\" aria-controls=\"elementor-tab-content-2544\" aria-expanded=\"false\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-accordion-icon elementor-accordion-icon-left\" aria-hidden=\"true\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-accordion-icon-closed\"><i class=\"fas fa-caret-square-down\"><\/i><\/span>\n\t\t\t\t\t\t\t\t<span class=\"elementor-accordion-icon-opened\"><i class=\"fas fa-caret-square-up\"><\/i><\/span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t\t\t\t<a class=\"elementor-accordion-title\" tabindex=\"0\">\u70ba\u4ec0\u9ebc Docker \u6620\u50cf\u6a94\u6703\u96a8\u6642\u9593\u8d8a\u4f86\u8d8a\u5927\uff1f<\/a>\n\t\t\t\t\t<\/div>\n\t\t\t\t\t<div id=\"elementor-tab-content-2544\" class=\"elementor-tab-content elementor-clearfix\" data-tab=\"4\" role=\"region\" aria-labelledby=\"elementor-tab-title-2544\"><p>\u6620\u50cf\u6a94\u9ad4\u7a4d\u5931\u63a7\uff0c\u901a\u5e38\u4f86\u81ea Dockerfile \u5206\u5c64\u8a2d\u8a08\u4e0d\u7576\uff0c\u4f8b\u5982\u7f3a\u5c11 <code data-start=\"781\" data-end=\"796\">.dockerignore<\/code>\u3001\u672a\u6e05\u9664\u5957\u4ef6\u5feb\u53d6\u3001\u5c07\u5efa\u7f6e\u7522\u7269\u6216\u4e0d\u5fc5\u8981\u7684\u6a94\u6848\u4e00\u4f75 COPY \u9032\u6620\u50cf\u6a94\uff0c\u6216\u672a\u4f7f\u7528 Multi-stage builds\u3002\u9019\u985e\u554f\u984c\u5728\u5c08\u6848\u521d\u671f\u4e0d\u6613\u5bdf\u89ba\uff0c\u4f46\u6703\u96a8\u8457\u8fed\u4ee3\u9010\u6f38\u7d2f\u7a4d\u6210\u7dad\u904b\u8ca0\u64d4\u3002<\/p><\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t\t\t<div class=\"elementor-accordion-item\">\n\t\t\t\t\t<div id=\"elementor-tab-title-2545\" class=\"elementor-tab-title\" data-tab=\"5\" role=\"button\" aria-controls=\"elementor-tab-content-2545\" aria-expanded=\"false\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-accordion-icon elementor-accordion-icon-left\" aria-hidden=\"true\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-accordion-icon-closed\"><i class=\"fas fa-caret-square-down\"><\/i><\/span>\n\t\t\t\t\t\t\t\t<span class=\"elementor-accordion-icon-opened\"><i class=\"fas fa-caret-square-up\"><\/i><\/span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t\t\t\t<a class=\"elementor-accordion-title\" tabindex=\"0\">\u70ba\u4ec0\u9ebc\u4e0d\u5efa\u8b70\u5728\u751f\u7522\u74b0\u5883\u4ee5 root \u57f7\u884c\u5bb9\u5668\u670d\u52d9\uff1f<\/a>\n\t\t\t\t\t<\/div>\n\t\t\t\t\t<div id=\"elementor-tab-content-2545\" class=\"elementor-tab-content elementor-clearfix\" data-tab=\"5\" role=\"region\" aria-labelledby=\"elementor-tab-title-2545\"><p>\u4ee5 root \u6b0a\u9650\u57f7\u884c\u5bb9\u5668\uff0c\u6703\u5728\u767c\u751f\u6f0f\u6d1e\u6216\u5165\u4fb5\u6642\u653e\u5927\u5f71\u97ff\u7bc4\u570d\u3002\u900f\u904e\u4f7f\u7528\u975e\u7279\u6b0a\u4f7f\u7528\u8005\u57f7\u884c\u670d\u52d9\uff0c\u53ef\u6709\u6548\u843d\u5be6\u6700\u5c0f\u6b0a\u9650\u539f\u5247\uff0c\u964d\u4f4e\u6a6b\u5411\u79fb\u52d5\u8207\u7cfb\u7d71\u88ab\u6feb\u7528\u7684\u98a8\u96aa\uff0c\u9019\u5df2\u662f\u591a\u6578\u6b63\u5f0f\u74b0\u5883\u8207\u8cc7\u5b89\u898f\u7bc4\u7684\u57fa\u672c\u8981\u6c42\u3002<\/p><\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t\t\t<div class=\"elementor-accordion-item\">\n\t\t\t\t\t<div id=\"elementor-tab-title-2546\" class=\"elementor-tab-title\" data-tab=\"6\" role=\"button\" aria-controls=\"elementor-tab-content-2546\" aria-expanded=\"false\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-accordion-icon elementor-accordion-icon-left\" aria-hidden=\"true\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-accordion-icon-closed\"><i class=\"fas fa-caret-square-down\"><\/i><\/span>\n\t\t\t\t\t\t\t\t<span class=\"elementor-accordion-icon-opened\"><i class=\"fas fa-caret-square-up\"><\/i><\/span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t\t\t\t<a class=\"elementor-accordion-title\" tabindex=\"0\">\u70ba\u4ec0\u9ebc\u4e0d\u61c9\u8a72\u5728 Dockerfile \u4e2d\u5beb\u5165\u6a5f\u5bc6\u8cc7\u8a0a\uff1f<\/a>\n\t\t\t\t\t<\/div>\n\t\t\t\t\t<div id=\"elementor-tab-content-2546\" class=\"elementor-tab-content elementor-clearfix\" data-tab=\"6\" role=\"region\" aria-labelledby=\"elementor-tab-title-2546\"><p>\u4efb\u4f55\u5728 Dockerfile \u5efa\u7f6e\u968e\u6bb5\u5beb\u5165\u7684\u6a5f\u5bc6\u8cc7\u8a0a\uff0c\u90fd\u6703\u88ab\u6c38\u4e45\u4fdd\u5b58\u5728\u6620\u50cf\u6a94\u5c64\u4e2d\uff0c\u4e26\u96a8\u6620\u50cf\u6a94\u6563\u4f48\u81f3 Registry \u6216\u5176\u4ed6\u74b0\u5883\uff0c\u5f62\u6210\u56b4\u91cd\u7684\u4f9b\u61c9\u93c8\u98a8\u96aa\u3002\u6b63\u5f0f\u74b0\u5883\u4e2d\uff0c\u6a5f\u5bc6\u8cc7\u8a0a\u61c9\u8207\u6620\u50cf\u6a94\u5206\u96e2\uff0c\u6539\u7531\u57f7\u884c\u968e\u6bb5\u4ee5\u5b89\u5168\u6a5f\u5236\u6ce8\u5165\u3002<\/p><\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t\t\t<div class=\"elementor-accordion-item\">\n\t\t\t\t\t<div id=\"elementor-tab-title-2547\" class=\"elementor-tab-title\" data-tab=\"7\" role=\"button\" aria-controls=\"elementor-tab-content-2547\" aria-expanded=\"false\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-accordion-icon elementor-accordion-icon-left\" aria-hidden=\"true\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-accordion-icon-closed\"><i class=\"fas fa-caret-square-down\"><\/i><\/span>\n\t\t\t\t\t\t\t\t<span class=\"elementor-accordion-icon-opened\"><i class=\"fas fa-caret-square-up\"><\/i><\/span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t\t\t\t<a class=\"elementor-accordion-title\" tabindex=\"0\">Dockerfile \u7684\u5beb\u6cd5\u771f\u7684\u6703\u5f71\u97ff CI\/CD \u6548\u7387\u55ce\uff1f<\/a>\n\t\t\t\t\t<\/div>\n\t\t\t\t\t<div id=\"elementor-tab-content-2547\" class=\"elementor-tab-content elementor-clearfix\" data-tab=\"7\" role=\"region\" aria-labelledby=\"elementor-tab-title-2547\"><p>\u6703\uff0c\u800c\u4e14\u5f71\u97ff\u975e\u5e38\u76f4\u63a5\u3002\u4e0d\u826f\u7684 Dockerfile \u8a2d\u8a08\u6703\u5c0e\u81f4\u5feb\u53d6\u5931\u6548\uff0c\u4f7f\u6bcf\u6b21\u5efa\u7f6e\u90fd\u91cd\u65b0\u4e0b\u8f09\u76f8\u4f9d\u5957\u4ef6\u8207\u91cd\u8dd1\u6b65\u9a5f\uff0c\u986f\u8457\u62c9\u9577 CI \u57f7\u884c\u6642\u9593\u3002\u76f8\u53cd\u5730\uff0c\u826f\u597d\u7684\u5206\u5c64\u8207\u5feb\u53d6\u7b56\u7565\uff0c\u80fd\u8b93\u5efa\u7f6e\u6642\u9593\u5728\u5c08\u6848\u6210\u9577\u5f8c\u4ecd\u7dad\u6301\u53ef\u9810\u671f\u7684\u8868\u73fe\u3002<\/p><\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-35b7314 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"35b7314\" data-element_type=\"section\" data-e-type=\"section\" data-settings=\"{&quot;jet_parallax_layout_list&quot;:[],&quot;background_background&quot;:&quot;gradient&quot;}\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-8313613\" data-id=\"8313613\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-7432d78 elementor-widget elementor-widget-heading\" data-id=\"7432d78\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">\u5ef6\u4f38\u95b1\u8b80<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-5f37f15 elementor-widget elementor-widget-text-editor\" data-id=\"5f37f15\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<ol><li><a title=\"Docker \u662f\u4ec0\u9ebc\uff1f\u5b8c\u6574\u89e3\u6790\u5bb9\u5668\u5316\u6838\u5fc3\u6982\u5ff5\u3001\u5be6\u52d9\u64cd\u4f5c\u8207\u5e38\u898b\u554f\u984c\uff08\u65b0\u624b\u5230\u5be6\u6230\uff09\" href=\"https:\/\/www.taki.com.tw\/blog\/what-is-docker\/\" target=\"_blank\" rel=\"noopener\"><strong>Docker \u662f\u4ec0\u9ebc\uff1f\u5b8c\u6574\u89e3\u6790\u5bb9\u5668\u5316\u6838\u5fc3\u6982\u5ff5\u3001\u5be6\u52d9\u64cd\u4f5c\u8207\u5e38\u898b\u554f\u984c\uff08\u65b0\u624b\u5230\u5be6\u6230\uff09<\/strong><\/a><\/li><li><a title=\"Docker Image \u8207 Dockerfile \u5be6\u6230\u6559\u5b78\uff08\u6700\u4f73\u5be6\u52d9\u8207\u6548\u80fd\u512a\u5316\uff09\" href=\"https:\/\/www.taki.com.tw\/blog\/dockerfile-best-practices\/\" target=\"_blank\" rel=\"noopener\"><strong>Docker Image \u8207 Dockerfile \u5be6\u6230\u6559\u5b78\uff08\u6700\u4f73\u5be6\u52d9\u8207\u6548\u80fd\u512a\u5316\uff09<\/strong><\/a><\/li><li><a title=\"Docker Compose \u662f\u4ec0\u9ebc\uff1f\u591a\u5bb9\u5668\u61c9\u7528\u5b8c\u6574\u90e8\u7f72\u6307\u5357\uff08\u5f9e\u958b\u767c\u5230\u6b63\u5f0f\u74b0\u5883\uff09\" href=\"\/blog\/docker-compose\/\" target=\"_blank\" rel=\"noopener\"><strong>Docker Compose \u662f\u4ec0\u9ebc\uff1f\u591a\u5bb9\u5668\u61c9\u7528\u5b8c\u6574\u90e8\u7f72\u6307\u5357<\/strong><\/a><\/li><li><a title=\"Docker Volume \u8207\u8cc7\u6599\u6301\u4e45\u5316\u5b8c\u6574\u89e3\u6790\" href=\"https:\/\/www.taki.com.tw\/blog\/docker-volume-data-persistence\/\" target=\"_blank\" rel=\"noopener\"><strong>Docker Volume \u8207\u8cc7\u6599\u6301\u4e45\u5316\u5b8c\u6574\u89e3\u6790\uff08\u6b63\u5f0f\u74b0\u5883\u5fc5\u8b80\uff09<\/strong><\/a><\/li><li><strong>Docker Network \u67b6\u69cb\u8aaa\u660e\uff1a\u5bb9\u5668\u5982\u4f55\u5b89\u5168\u4e92\u901a\uff1f<\/strong><\/li><li><strong>Docker \u6b63\u5f0f\u90e8\u7f72\u600e\u9ebc\u9078\u4e3b\u6a5f\uff1f\u6548\u80fd\u3001\u7a69\u5b9a\u6027\u8207\u64f4\u5145\u6027\u5206\u6790<\/strong><\/li><li><strong>Docker \u9032\u968e\u5be6\u52d9\uff1a\u5b89\u5168\u6027\uff08Security\uff09\u8207\u6620\u50cf\u6a94\u6700\u4f73\u5316\u5b8c\u6574\u6307\u5357<\/strong><\/li><\/ol>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-f11138c elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"f11138c\" data-element_type=\"section\" data-e-type=\"section\" data-settings=\"{&quot;jet_parallax_layout_list&quot;:[]}\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-d2ef057\" data-id=\"d2ef057\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<section class=\"elementor-section elementor-inner-section elementor-element elementor-element-786a3ea elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"786a3ea\" data-element_type=\"section\" data-e-type=\"section\" data-settings=\"{&quot;jet_parallax_layout_list&quot;:[]}\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-inner-column elementor-element elementor-element-e813d10\" data-id=\"e813d10\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<section class=\"elementor-section elementor-inner-section elementor-element elementor-element-05ff232 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"05ff232\" data-element_type=\"section\" data-e-type=\"section\" data-settings=\"{&quot;jet_parallax_layout_list&quot;:[]}\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-33 elementor-inner-column elementor-element elementor-element-533b0d7\" data-id=\"533b0d7\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-8da4e1b elementor-widget elementor-widget-image\" data-id=\"8da4e1b\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t<figure class=\"wp-caption\">\n\t\t\t\t\t\t\t\t\t\t\t<a href=\"\/cloud-hosting\/\" target=\"_blank\">\n\t\t\t\t\t\t\t<img decoding=\"async\" width=\"500\" height=\"395\" src=\"https:\/\/www.taki.com.tw\/blog\/wp-content\/uploads\/2025\/02\/taki-cloud.webp\" class=\"attachment-full size-full wp-image-10218\" alt=\"\" srcset=\"https:\/\/www.taki.com.tw\/blog\/wp-content\/uploads\/2025\/02\/taki-cloud.webp 500w, https:\/\/www.taki.com.tw\/blog\/wp-content\/uploads\/2025\/02\/taki-cloud-300x237.webp 300w\" sizes=\"(max-width: 500px) 100vw, 500px\" title=\"TAKI Cloud \u96f2\u7aef\u4e3b\u6a5f \u53ea\u8981470\u5143\u8d77 - TAKI\u5b98\u65b9\u90e8\u843d\u683c\" \/>\t\t\t\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t\t\t\t<figcaption class=\"widget-image-caption wp-caption-text\">TAKI Cloud \u96f2\u7aef\u4e3b\u6a5f \u53ea\u8981470\u5143\u8d77<\/figcaption>\n\t\t\t\t\t\t\t\t\t\t<\/figure>\n\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t<div class=\"elementor-column elementor-col-33 elementor-inner-column elementor-element elementor-element-71d35b5\" data-id=\"71d35b5\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-e058203 elementor-widget elementor-widget-image\" data-id=\"e058203\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t<figure class=\"wp-caption\">\n\t\t\t\t\t\t\t\t\t\t\t<a href=\"\/rent\/\">\n\t\t\t\t\t\t\t<img decoding=\"async\" width=\"500\" height=\"395\" src=\"https:\/\/www.taki.com.tw\/blog\/wp-content\/uploads\/2025\/02\/rent.webp\" class=\"attachment-full size-full wp-image-10220\" alt=\"\" srcset=\"https:\/\/www.taki.com.tw\/blog\/wp-content\/uploads\/2025\/02\/rent.webp 500w, https:\/\/www.taki.com.tw\/blog\/wp-content\/uploads\/2025\/02\/rent-300x237.webp 300w\" sizes=\"(max-width: 500px) 100vw, 500px\" title=\"TAKI Cloud \u5be6\u9ad4\u4e3b\u6a5f \u53ea\u89814,500\u8d77 - TAKI\u5b98\u65b9\u90e8\u843d\u683c\" \/>\t\t\t\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t\t\t\t<figcaption class=\"widget-image-caption wp-caption-text\">TAKI Cloud \u5be6\u9ad4\u4e3b\u6a5f \u53ea\u89814,500\u8d77<\/figcaption>\n\t\t\t\t\t\t\t\t\t\t<\/figure>\n\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t<div class=\"elementor-column elementor-col-33 elementor-inner-column elementor-element elementor-element-31faed4\" data-id=\"31faed4\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-737aab4 elementor-widget elementor-widget-image\" data-id=\"737aab4\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t<figure class=\"wp-caption\">\n\t\t\t\t\t\t\t\t\t\t\t<a href=\"\/co-location\/\">\n\t\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"500\" height=\"395\" src=\"https:\/\/www.taki.com.tw\/blog\/wp-content\/uploads\/2025\/02\/co-location.webp\" class=\"attachment-full size-full wp-image-10219\" alt=\"\" srcset=\"https:\/\/www.taki.com.tw\/blog\/wp-content\/uploads\/2025\/02\/co-location.webp 500w, https:\/\/www.taki.com.tw\/blog\/wp-content\/uploads\/2025\/02\/co-location-300x237.webp 300w\" sizes=\"(max-width: 500px) 100vw, 500px\" title=\"TAKI Cloud \u4e3b\u6a5f\u4ee3\u7ba1 \u53ea\u89812,000\u5143\u8d77 - TAKI\u5b98\u65b9\u90e8\u843d\u683c\" \/>\t\t\t\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t\t\t\t<figcaption class=\"widget-image-caption wp-caption-text\">TAKI Cloud \u4e3b\u6a5f\u4ee3\u7ba1 \u53ea\u89812,000\u5143\u8d77<\/figcaption>\n\t\t\t\t\t\t\t\t\t\t<\/figure>\n\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>\u672c\u6587\u6df1\u5165\u8aaa\u660e Dockerfile \u6700\u4f73\u5be6\u52d9\uff0c\u5f9e Docker Image \u7684\u5206\u5c64\u539f\u7406\u3001\u5feb\u53d6\u7b56\u7565\u5230 Multi-stage builds \u7684\u5be6\u6230\u5beb\u6cd5\uff0c\u5b8c\u6574\u89e3\u6790\u5982\u4f55\u6253\u9020\u5c0f\u800c\u5feb\u3001\u5b89\u5168\u4e14\u53ef\u7dad\u904b\u7684\u5bb9\u5668\u6620\u50cf\u6a94\u3002\u5167\u5bb9\u6db5\u84cb\u6548\u80fd\u512a\u5316\u3001\u6620\u50cf\u6a94\u7626\u8eab\u3001\u5b89\u5168\u8a2d\u5b9a\u8207\u751f\u7522\u74b0\u5883\u5e38\u898b\u8e29\u96f7\uff0c\u9069\u5408 Docker \u65b0\u624b\u8207\u6b63\u5f0f\u74b0\u5883\u90e8\u7f72\u4f7f\u7528\u3002<\/p>\n","protected":false},"author":1,"featured_media":11647,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[666,8,136],"tags":[858,862,854,856,863,859,860,861,857,855,853],"class_list":["post-11644","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-gpu-","category-linux-teaching","category-cloud-industry-insights","tag-docker-build-cache","tag-docker-ci-cd","tag-docker-image","tag-docker-multi-stage-builds","tag-docker-production-best-practices","tag-docker-","tag-dockerfile-"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO Pro 4.9.7.2 - aioseo.com -->\n\t<meta name=\"description\" content=\"Dockerfile \u6700\u4f73\u5be6\u52d9 - Docker Image \u8207 Dockerfile \u6559\u5b78\uff0c\u5b78\u6703\u5982\u4f55\u6253\u9020\u5c0f\u800c\u5feb\u3001\u5b89\u5168\u4e14\u53ef\u7dad\u904b\u7684\u5bb9\u5668\u6620\u50cf\u6a94\u3002\u6df1\u5165\u89e3\u6790 Docker Image \u8207 Dockerfile \u5be6\u6230\u5beb\u6cd5\uff0c\u6db5\u84cb\u5feb\u53d6\u7b56\u7565\u3001Multi-stage builds\u3001\u6620\u50cf\u6a94\u7626\u8eab\u3001\u5b89\u5168\u6700\u4f73\u5be6\u52d9\u8207\u6548\u80fd\u512a\u5316\uff0c\u5f9e\u65b0\u624b\u5230\u751f\u7522\u74b0\u5883\u4e00\u6b21\u638c\u63e1\u3002\" \/>\n\t<meta name=\"robots\" content=\"max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n\t<meta name=\"author\" content=\"taki\"\/>\n\t<meta name=\"google-site-verification\" content=\"8K-Sil63RNlPY1E749JtbXj8Rou8vnCWHeHTdtyJ_2Q\" \/>\n\t<meta name=\"msvalidate.01\" content=\"74adb0216a2f42369e2943e1cab8edb3\" \/>\n\t<meta name=\"p:domain_verify\" content=\"c9d1aeb1b1035eb8d731e15369c17822\" \/>\n\t<meta name=\"yandex-verification\" content=\"4af55a984b3cc760\" \/>\n\t<meta name=\"baidu-site-verification\" content=\"51a1b3ddc71efd3df7432bcdd26a1bc3\" \/>\n\t<link rel=\"canonical\" href=\"https:\/\/www.taki.com.tw\/blog\/dockerfile-best-practices\/\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO Pro (AIOSEO) 4.9.7.2\" \/>\n\n\t\t<!-- Google Tag Manager -->\n<script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':\nnew Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],\nj=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=\n'https:\/\/www.googletagmanager.com\/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);\n})(window,document,'script','dataLayer','GTM-5NSR87J');<\/script>\n<!-- End Google Tag Manager -->\n\t\t<meta property=\"og:locale\" content=\"zh_TW\" \/>\n\t\t<meta property=\"og:site_name\" content=\"TAKI\u5b98\u65b9\u90e8\u843d\u683c - \u63d0\u4f9bWordPress\u3001SEO\u6280\u8853\u8207\u5404\u9805 IT \u8cc7\u8a0a\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"Dockerfile \u6700\u4f73\u5be6\u52d9 \uff1aDocker Image \u5be6\u6230\u6559\u5b78\u8207\u6548\u80fd\u512a\u5316- TAKI\u5b98\u65b9\u90e8\u843d\u683c\" \/>\n\t\t<meta property=\"og:description\" content=\"Dockerfile \u6700\u4f73\u5be6\u52d9 - Docker Image \u8207 Dockerfile \u6559\u5b78\uff0c\u5b78\u6703\u5982\u4f55\u6253\u9020\u5c0f\u800c\u5feb\u3001\u5b89\u5168\u4e14\u53ef\u7dad\u904b\u7684\u5bb9\u5668\u6620\u50cf\u6a94\u3002\u6df1\u5165\u89e3\u6790 Docker Image \u8207 Dockerfile \u5be6\u6230\u5beb\u6cd5\uff0c\u6db5\u84cb\u5feb\u53d6\u7b56\u7565\u3001Multi-stage builds\u3001\u6620\u50cf\u6a94\u7626\u8eab\u3001\u5b89\u5168\u6700\u4f73\u5be6\u52d9\u8207\u6548\u80fd\u512a\u5316\uff0c\u5f9e\u65b0\u624b\u5230\u751f\u7522\u74b0\u5883\u4e00\u6b21\u638c\u63e1\u3002\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/www.taki.com.tw\/blog\/dockerfile-best-practices\/\" \/>\n\t\t<meta property=\"fb:app_id\" content=\"1626424417676294\" \/>\n\t\t<meta property=\"fb:admins\" content=\"1022378541145336\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/www.taki.com.tw\/blog\/wp-content\/uploads\/2026\/01\/dockerfile-best-practices.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/www.taki.com.tw\/blog\/wp-content\/uploads\/2026\/01\/dockerfile-best-practices.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"1536\" \/>\n\t\t<meta property=\"og:image:height\" content=\"1024\" \/>\n\t\t<meta property=\"article:section\" content=\"Docker\" \/>\n\t\t<meta property=\"article:tag\" content=\"dockerfile\" \/>\n\t\t<meta property=\"article:tag\" content=\"docker image\" \/>\n\t\t<meta property=\"article:tag\" content=\"docker best practices\" \/>\n\t\t<meta property=\"article:tag\" content=\"dockerfile \u6700\u4f73\u5be6\u52d9\" \/>\n\t\t<meta property=\"article:tag\" content=\"multi-stage builds\" \/>\n\t\t<meta property=\"article:tag\" content=\"docker image \u512a\u5316\" \/>\n\t\t<meta property=\"article:tag\" content=\"docker build cache\" \/>\n\t\t<meta property=\"article:tag\" content=\"docker security\" \/>\n\t\t<meta property=\"article:tag\" content=\"container optimization\" \/>\n\t\t<meta property=\"article:tag\" content=\"ci\/cd\" \/>\n\t\t<meta property=\"article:tag\" content=\"ai \u6559\u5b78 \/ gpu \u4e3b\u6a5f\" \/>\n\t\t<meta property=\"article:tag\" content=\"linux\u6559\u5b78\u8207\u4f7f\u7528\" \/>\n\t\t<meta property=\"article:tag\" content=\"\u96f2\u7aef\u7522\u696d\u89c0\u5bdf\" \/>\n\t\t<meta property=\"article:tag\" content=\"docker ci\/cd\" \/>\n\t\t<meta property=\"article:tag\" content=\"docker multi-stage builds\" \/>\n\t\t<meta property=\"article:tag\" content=\"docker production best practices\" \/>\n\t\t<meta property=\"article:tag\" content=\"docker \u5b89\u5168\u6700\u4f73\u5be6\u52d9\" \/>\n\t\t<meta property=\"article:tag\" content=\"docker \u5bb9\u5668\u6548\u80fd\u512a\u5316\" \/>\n\t\t<meta property=\"article:tag\" content=\"docker \u65b0\u624b\u6559\u5b78\" \/>\n\t\t<meta property=\"article:tag\" content=\"docker \u6620\u50cf\u6a94\u512a\u5316\" \/>\n\t\t<meta property=\"article:tag\" content=\"dockerfile \u6559\u5b78\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2026-01-03T10:31:19+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2026-01-14T15:53:06+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/taki.hosting\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/taki.hosting\" \/>\n\t\t<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n\t\t<meta name=\"twitter:site\" content=\"@taki_cloud_aa\" \/>\n\t\t<meta name=\"twitter:title\" content=\"Dockerfile \u6700\u4f73\u5be6\u52d9 \uff1aDocker Image \u5be6\u6230\u6559\u5b78\u8207\u6548\u80fd\u512a\u5316- TAKI\u5b98\u65b9\u90e8\u843d\u683c\" \/>\n\t\t<meta name=\"twitter:description\" content=\"Dockerfile \u6700\u4f73\u5be6\u52d9 - Docker Image \u8207 Dockerfile \u6559\u5b78\uff0c\u5b78\u6703\u5982\u4f55\u6253\u9020\u5c0f\u800c\u5feb\u3001\u5b89\u5168\u4e14\u53ef\u7dad\u904b\u7684\u5bb9\u5668\u6620\u50cf\u6a94\u3002\u6df1\u5165\u89e3\u6790 Docker Image \u8207 Dockerfile \u5be6\u6230\u5beb\u6cd5\uff0c\u6db5\u84cb\u5feb\u53d6\u7b56\u7565\u3001Multi-stage builds\u3001\u6620\u50cf\u6a94\u7626\u8eab\u3001\u5b89\u5168\u6700\u4f73\u5be6\u52d9\u8207\u6548\u80fd\u512a\u5316\uff0c\u5f9e\u65b0\u624b\u5230\u751f\u7522\u74b0\u5883\u4e00\u6b21\u638c\u63e1\u3002\" \/>\n\t\t<meta name=\"twitter:creator\" content=\"@taki_cloud_aa\" \/>\n\t\t<meta name=\"twitter:image\" content=\"https:\/\/www.taki.com.tw\/blog\/wp-content\/uploads\/2026\/01\/dockerfile-best-practices.jpg\" \/>\n\t\t<script type=\"application\/ld+json\" class=\"aioseo-schema\">\n\t\t\t{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"BlogPosting\",\"@id\":\"https:\\\/\\\/www.taki.com.tw\\\/blog\\\/dockerfile-best-practices\\\/#blogposting\",\"name\":\"Dockerfile \\u6700\\u4f73\\u5be6\\u52d9 \\uff1aDocker Image \\u5be6\\u6230\\u6559\\u5b78\\u8207\\u6548\\u80fd\\u512a\\u5316- TAKI\\u5b98\\u65b9\\u90e8\\u843d\\u683c\",\"headline\":\"Docker Image \\u8207 Dockerfile \\u5be6\\u6230\\u6559\\u5b78\\uff08\\u6700\\u4f73\\u5be6\\u52d9\\u8207\\u6548\\u80fd\\u512a\\u5316\\uff09\",\"author\":{\"@id\":\"https:\\\/\\\/www.taki.com.tw\\\/blog\\\/author\\\/taki\\\/#author\"},\"publisher\":{\"@id\":\"https:\\\/\\\/www.taki.com.tw\\\/blog\\\/#organization\"},\"image\":{\"@type\":\"ImageObject\",\"url\":\"https:\\\/\\\/www.taki.com.tw\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/01\\\/dockerfile-best-practices.jpg\",\"width\":1536,\"height\":1024,\"caption\":\"Dockerfile \\u6700\\u4f73\\u5be6\\u52d9\\uff1aDocker Image \\u5be6\\u6230\\u6559\\u5b78\\u8207\\u6548\\u80fd\\u512a\\u5316\"},\"datePublished\":\"2026-01-03T18:31:19+08:00\",\"dateModified\":\"2026-01-14T23:53:06+08:00\",\"inLanguage\":\"zh-TW\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.taki.com.tw\\\/blog\\\/dockerfile-best-practices\\\/#webpage\"},\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.taki.com.tw\\\/blog\\\/dockerfile-best-practices\\\/#webpage\"},\"articleSection\":\"AI \\u6559\\u5b78 \\\/ GPU \\u4e3b\\u6a5f, Linux\\u6559\\u5b78\\u8207\\u4f7f\\u7528, \\u96f2\\u7aef\\u7522\\u696d\\u89c0\\u5bdf, Docker build cache, Docker CI\\\/CD, Docker Image, Docker Multi-stage builds, Docker Production Best Practices, Docker \\u5b89\\u5168\\u6700\\u4f73\\u5be6\\u52d9, Docker \\u5bb9\\u5668\\u6548\\u80fd\\u512a\\u5316, Docker \\u65b0\\u624b\\u6559\\u5b78, Docker \\u6620\\u50cf\\u6a94\\u512a\\u5316, Dockerfile \\u6559\\u5b78, Dockerfile \\u6700\\u4f73\\u5be6\\u52d9\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.taki.com.tw\\\/blog\\\/dockerfile-best-practices\\\/#breadcrumblist\",\"itemListElement\":[{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.taki.com.tw\\\/blog#listItem\",\"position\":1,\"name\":\"\\u4e3b\\u9801\",\"item\":\"https:\\\/\\\/www.taki.com.tw\\\/blog\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.taki.com.tw\\\/blog\\\/category\\\/linux-teaching\\\/#listItem\",\"name\":\"Linux\\u6559\\u5b78\\u8207\\u4f7f\\u7528\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.taki.com.tw\\\/blog\\\/category\\\/linux-teaching\\\/#listItem\",\"position\":2,\"name\":\"Linux\\u6559\\u5b78\\u8207\\u4f7f\\u7528\",\"item\":\"https:\\\/\\\/www.taki.com.tw\\\/blog\\\/category\\\/linux-teaching\\\/\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.taki.com.tw\\\/blog\\\/dockerfile-best-practices\\\/#listItem\",\"name\":\"Docker Image \\u8207 Dockerfile \\u5be6\\u6230\\u6559\\u5b78\\uff08\\u6700\\u4f73\\u5be6\\u52d9\\u8207\\u6548\\u80fd\\u512a\\u5316\\uff09\"},\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.taki.com.tw\\\/blog#listItem\",\"name\":\"\\u4e3b\\u9801\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.taki.com.tw\\\/blog\\\/dockerfile-best-practices\\\/#listItem\",\"position\":3,\"name\":\"Docker Image \\u8207 Dockerfile \\u5be6\\u6230\\u6559\\u5b78\\uff08\\u6700\\u4f73\\u5be6\\u52d9\\u8207\\u6548\\u80fd\\u512a\\u5316\\uff09\",\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.taki.com.tw\\\/blog\\\/category\\\/linux-teaching\\\/#listItem\",\"name\":\"Linux\\u6559\\u5b78\\u8207\\u4f7f\\u7528\"}}]},{\"@type\":\"FAQPage\",\"mainEntity\":[{\"@type\":\"Question\",\"name\":\"Docker Image \\u8207 Dockerfile \\u6709\\u4ec0\\u9ebc\\u5dee\\u5225\\uff1f\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"Dockerfile \\u662f\\u7528\\u4f86\\u5b9a\\u7fa9\\u6620\\u50cf\\u6a94\\u5efa\\u7f6e\\u6d41\\u7a0b\\u7684\\u898f\\u683c\\u6587\\u4ef6\\uff0c\\u800c Docker Image \\u5247\\u662f\\u4f9d\\u64da Dockerfile \\u5efa\\u7acb\\u3001\\u53ef\\u5be6\\u969b\\u90e8\\u7f72\\u8207\\u57f7\\u884c\\u7684\\u5bb9\\u5668\\u6620\\u50cf\\u6a94\\u3002Dockerfile \\u6c7a\\u5b9a\\u6620\\u50cf\\u6a94\\u7684\\u7d50\\u69cb\\u8207\\u5167\\u5bb9\\u3002\"}},{\"@type\":\"Question\",\"name\":\"\\u4ec0\\u9ebc\\u662f Dockerfile \\u6700\\u4f73\\u5be6\\u52d9\\uff1f\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"Dockerfile \\u6700\\u4f73\\u5be6\\u52d9\\u5305\\u542b\\u6b63\\u78ba\\u7684\\u5206\\u5c64\\u9806\\u5e8f\\u3001\\u63d0\\u9ad8\\u5feb\\u53d6\\u547d\\u4e2d\\u7387\\u3001\\u4f7f\\u7528 Multi-stage builds\\u3001\\u7cbe\\u7c21\\u6620\\u50cf\\u6a94\\u5167\\u5bb9\\u3001\\u907f\\u514d\\u4ee5 root \\u6b0a\\u9650\\u57f7\\u884c\\u670d\\u52d9\\uff0c\\u4ee5\\u53ca\\u56fa\\u5b9a base image \\u7248\\u672c\\u4ee5\\u78ba\\u4fdd\\u5efa\\u7f6e\\u53ef\\u91cd\\u73fe\\u6027\\u3002\"}},{\"@type\":\"Question\",\"name\":\"\\u70ba\\u4ec0\\u9ebc\\u8981\\u4f7f\\u7528 Multi-stage builds\\uff1f\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"Multi-stage builds \\u80fd\\u5206\\u96e2\\u5efa\\u7f6e\\u8207\\u57f7\\u884c\\u968e\\u6bb5\\uff0c\\u53ea\\u4fdd\\u7559\\u5fc5\\u8981\\u7684\\u57f7\\u884c\\u7522\\u7269\\u65bc\\u6700\\u7d42\\u6620\\u50cf\\u6a94\\uff0c\\u80fd\\u6709\\u6548\\u7e2e\\u5c0f\\u6620\\u50cf\\u6a94\\u9ad4\\u7a4d\\u4e26\\u964d\\u4f4e\\u6b63\\u5f0f\\u74b0\\u5883\\u7684\\u5b89\\u5168\\u98a8\\u96aa\\u3002\"}},{\"@type\":\"Question\",\"name\":\"Docker \\u6620\\u50cf\\u6a94\\u8d8a\\u4f86\\u8d8a\\u5927\\u901a\\u5e38\\u662f\\u4ec0\\u9ebc\\u539f\\u56e0\\uff1f\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"\\u5e38\\u898b\\u539f\\u56e0\\u5305\\u542b\\u7f3a\\u5c11 .dockerignore\\u3001\\u672a\\u6e05\\u9664\\u5957\\u4ef6\\u5feb\\u53d6\\u3001\\u5c07\\u4e0d\\u5fc5\\u8981\\u7684\\u6a94\\u6848\\u6216\\u5efa\\u7f6e\\u7522\\u7269 COPY \\u9032\\u6620\\u50cf\\u6a94\\uff0c\\u4ee5\\u53ca\\u672a\\u4f7f\\u7528 Multi-stage builds\\u3002\"}},{\"@type\":\"Question\",\"name\":\"Docker \\u5bb9\\u5668\\u5728\\u751f\\u7522\\u74b0\\u5883\\u4e00\\u5b9a\\u8981\\u7528\\u975e root \\u57f7\\u884c\\u55ce\\uff1f\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"\\u5728\\u751f\\u7522\\u74b0\\u5883\\u4e2d\\uff0c\\u5efa\\u8b70\\u4ee5\\u975e root \\u4f7f\\u7528\\u8005\\u57f7\\u884c\\u5bb9\\u5668\\u670d\\u52d9\\uff0c\\u4ee5\\u964d\\u4f4e\\u6b0a\\u9650\\u6feb\\u7528\\u8207\\u7cfb\\u7d71\\u88ab\\u5165\\u4fb5\\u6642\\u7684\\u5f71\\u97ff\\u7bc4\\u570d\\uff0c\\u7b26\\u5408\\u6700\\u5c0f\\u6b0a\\u9650\\u539f\\u5247\\u3002\"}}]},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.taki.com.tw\\\/blog\\\/#organization\",\"name\":\"TAKI Cloud\",\"description\":\"\\u6211\\u5011\\u65bc2010\\u5e74\\u5c07\\u4e00\\u7fa4\\u5c0d\\u65bc\\u7db2\\u8def\\u79d1\\u6280\\u3001\\u4e3b\\u6a5f\\u4ee3\\u7ba1\\u3001AI \\\/ GPU \\u9ad8\\u6548\\u5be6\\u9ad4\\u4e3b\\u6a5f\\u670d\\u52d9\\u8207\\u96f2\\u7aef\\u670d\\u52d9\\u6709\\u8457\\u8da8\\u8fd1\\u72c2\\u71b1\\u7684\\u72c2\\u5f92\\uff0c\\u5728\\u5f7c\\u6b64\\u7406\\u5ff5\\u8207 \\u201c\\u6e4a\\u201d \\u5473\\u76f8\\u540c\\u7684\\u4fe1\\u5ff5\\u4e0b\\u805a\\u5728\\u4e00\\u8d77\\u767c\\u63ee\\u6240\\u9577\\u3002\\u5c0d\\u65bc\\u79d1\\u6280\\u6280\\u8853\\u4e0d\\u65b7\\u7684\\u8ffd\\u6c42\\u7cbe\\u9032\\u3001\\u4e0d\\u65b7\\u7684\\u8207\\u81ea\\u6211\\u7684\\u6311\\u6230\\uff0c\\u85c9\\u6b64\\u4f86\\u6eff\\u8db3\\u9ad4\\u9a57\\u8005\\u7684\\u591a\\u5143\\u9700\\u6c42\\uff0c\\u4e26\\u70ba\\u9ad4\\u9a57\\u8005\\u5275\\u9020\\u51fa\\u6700\\u5927\\u50f9\\u503c\\u3002\",\"url\":\"https:\\\/\\\/www.taki.com.tw\\\/blog\\\/\",\"email\":\"customer@taki.tw\",\"telephone\":\"+886277307879\",\"foundingDate\":\"2010-07-01\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https:\\\/\\\/www.taki.com.tw\\\/blog\\\/wp-content\\\/uploads\\\/2022\\\/06\\\/taki.png\",\"@id\":\"https:\\\/\\\/www.taki.com.tw\\\/blog\\\/dockerfile-best-practices\\\/#organizationLogo\",\"width\":100,\"height\":100},\"image\":{\"@id\":\"https:\\\/\\\/www.taki.com.tw\\\/blog\\\/dockerfile-best-practices\\\/#organizationLogo\"},\"sameAs\":[\"https:\\\/\\\/www.facebook.com\\\/taki.hosting\",\"https:\\\/\\\/twitter.com\\\/taki_cloud_aa\",\"https:\\\/\\\/www.pinterest.com\\\/takicloud\",\"https:\\\/\\\/www.linkedin.com\\\/company\\\/81819168\\\/\",\"https:\\\/\\\/takihosting-blog.tumblr.com\\\/\"]},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.taki.com.tw\\\/blog\\\/author\\\/taki\\\/#author\",\"url\":\"https:\\\/\\\/www.taki.com.tw\\\/blog\\\/author\\\/taki\\\/\",\"name\":\"taki\",\"image\":{\"@type\":\"ImageObject\",\"url\":\"https:\\\/\\\/www.taki.com.tw\\\/blog\\\/wp-content\\\/litespeed\\\/avatar\\\/e34b1347a32dc2eacac8b44cae3696e2.jpg?ver=1780733726\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.taki.com.tw\\\/blog\\\/dockerfile-best-practices\\\/#webpage\",\"url\":\"https:\\\/\\\/www.taki.com.tw\\\/blog\\\/dockerfile-best-practices\\\/\",\"name\":\"Dockerfile \\u6700\\u4f73\\u5be6\\u52d9 \\uff1aDocker Image \\u5be6\\u6230\\u6559\\u5b78\\u8207\\u6548\\u80fd\\u512a\\u5316- TAKI\\u5b98\\u65b9\\u90e8\\u843d\\u683c\",\"description\":\"Dockerfile \\u6700\\u4f73\\u5be6\\u52d9 - Docker Image \\u8207 Dockerfile \\u6559\\u5b78\\uff0c\\u5b78\\u6703\\u5982\\u4f55\\u6253\\u9020\\u5c0f\\u800c\\u5feb\\u3001\\u5b89\\u5168\\u4e14\\u53ef\\u7dad\\u904b\\u7684\\u5bb9\\u5668\\u6620\\u50cf\\u6a94\\u3002\\u6df1\\u5165\\u89e3\\u6790 Docker Image \\u8207 Dockerfile \\u5be6\\u6230\\u5beb\\u6cd5\\uff0c\\u6db5\\u84cb\\u5feb\\u53d6\\u7b56\\u7565\\u3001Multi-stage builds\\u3001\\u6620\\u50cf\\u6a94\\u7626\\u8eab\\u3001\\u5b89\\u5168\\u6700\\u4f73\\u5be6\\u52d9\\u8207\\u6548\\u80fd\\u512a\\u5316\\uff0c\\u5f9e\\u65b0\\u624b\\u5230\\u751f\\u7522\\u74b0\\u5883\\u4e00\\u6b21\\u638c\\u63e1\\u3002\",\"inLanguage\":\"zh-TW\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.taki.com.tw\\\/blog\\\/#website\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.taki.com.tw\\\/blog\\\/dockerfile-best-practices\\\/#breadcrumblist\"},\"author\":{\"@id\":\"https:\\\/\\\/www.taki.com.tw\\\/blog\\\/author\\\/taki\\\/#author\"},\"creator\":{\"@id\":\"https:\\\/\\\/www.taki.com.tw\\\/blog\\\/author\\\/taki\\\/#author\"},\"image\":{\"@type\":\"ImageObject\",\"url\":\"https:\\\/\\\/www.taki.com.tw\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/01\\\/dockerfile-best-practices.jpg\",\"@id\":\"https:\\\/\\\/www.taki.com.tw\\\/blog\\\/dockerfile-best-practices\\\/#mainImage\",\"width\":1536,\"height\":1024,\"caption\":\"Dockerfile \\u6700\\u4f73\\u5be6\\u52d9\\uff1aDocker Image \\u5be6\\u6230\\u6559\\u5b78\\u8207\\u6548\\u80fd\\u512a\\u5316\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.taki.com.tw\\\/blog\\\/dockerfile-best-practices\\\/#mainImage\"},\"datePublished\":\"2026-01-03T18:31:19+08:00\",\"dateModified\":\"2026-01-14T23:53:06+08:00\"},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.taki.com.tw\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/www.taki.com.tw\\\/blog\\\/\",\"name\":\"TAKI Cloud\",\"description\":\"\\u63d0\\u4f9bWordPress\\u3001SEO\\u6280\\u8853\\u8207\\u5404\\u9805 IT \\u8cc7\\u8a0a\",\"inLanguage\":\"zh-TW\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.taki.com.tw\\\/blog\\\/#organization\"}}]}\n\t\t<\/script>\n\t\t<script type=\"text\/javascript\">\n\t\t\t(function(c,l,a,r,i,t,y){\n\t\t\tc[a]=c[a]||function(){(c[a].q=c[a].q||[]).push(arguments)};t=l.createElement(r);t.async=1;\n\t\t\tt.src=\"https:\/\/www.clarity.ms\/tag\/\"+i+\"?ref=aioseo\";y=l.getElementsByTagName(r)[0];y.parentNode.insertBefore(t,y);\n\t\t})(window, document, \"clarity\", \"script\", \"bspscake2j\");\n\t\t<\/script>\n\t\t<!-- All in One SEO Pro -->\r\n\t\t<title>Dockerfile \u6700\u4f73\u5be6\u52d9 \uff1aDocker Image \u5be6\u6230\u6559\u5b78\u8207\u6548\u80fd\u512a\u5316- TAKI\u5b98\u65b9\u90e8\u843d\u683c<\/title>\n\n","aioseo_head_json":{"title":"Dockerfile \u6700\u4f73\u5be6\u52d9 \uff1aDocker Image \u5be6\u6230\u6559\u5b78\u8207\u6548\u80fd\u512a\u5316- TAKI\u5b98\u65b9\u90e8\u843d\u683c","description":"Dockerfile \u6700\u4f73\u5be6\u52d9 - Docker Image \u8207 Dockerfile \u6559\u5b78\uff0c\u5b78\u6703\u5982\u4f55\u6253\u9020\u5c0f\u800c\u5feb\u3001\u5b89\u5168\u4e14\u53ef\u7dad\u904b\u7684\u5bb9\u5668\u6620\u50cf\u6a94\u3002\u6df1\u5165\u89e3\u6790 Docker Image \u8207 Dockerfile \u5be6\u6230\u5beb\u6cd5\uff0c\u6db5\u84cb\u5feb\u53d6\u7b56\u7565\u3001Multi-stage builds\u3001\u6620\u50cf\u6a94\u7626\u8eab\u3001\u5b89\u5168\u6700\u4f73\u5be6\u52d9\u8207\u6548\u80fd\u512a\u5316\uff0c\u5f9e\u65b0\u624b\u5230\u751f\u7522\u74b0\u5883\u4e00\u6b21\u638c\u63e1\u3002","canonical_url":"https:\/\/www.taki.com.tw\/blog\/dockerfile-best-practices\/","robots":"max-snippet:-1, max-image-preview:large, max-video-preview:-1","keywords":"","webmasterTools":{"google-site-verification":"8K-Sil63RNlPY1E749JtbXj8Rou8vnCWHeHTdtyJ_2Q","msvalidate.01":"74adb0216a2f42369e2943e1cab8edb3","p:domain_verify":"c9d1aeb1b1035eb8d731e15369c17822","yandex-verification":"4af55a984b3cc760","baidu-site-verification":"51a1b3ddc71efd3df7432bcdd26a1bc3","miscellaneous":"&lt;!-- Google Tag Manager --&gt;\n&lt;script&gt;(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':\nnew Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],\nj=d.createElement(s),dl=l!='dataLayer'?'&amp;l='+l:'';j.async=true;j.src=\n'https:\/\/www.googletagmanager.com\/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);\n})(window,document,'script','dataLayer','GTM-5NSR87J');&lt;\/script&gt;\n&lt;!-- End Google Tag Manager --&gt;"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"BlogPosting","@id":"https:\/\/www.taki.com.tw\/blog\/dockerfile-best-practices\/#blogposting","name":"Dockerfile \u6700\u4f73\u5be6\u52d9 \uff1aDocker Image \u5be6\u6230\u6559\u5b78\u8207\u6548\u80fd\u512a\u5316- TAKI\u5b98\u65b9\u90e8\u843d\u683c","headline":"Docker Image \u8207 Dockerfile \u5be6\u6230\u6559\u5b78\uff08\u6700\u4f73\u5be6\u52d9\u8207\u6548\u80fd\u512a\u5316\uff09","author":{"@id":"https:\/\/www.taki.com.tw\/blog\/author\/taki\/#author"},"publisher":{"@id":"https:\/\/www.taki.com.tw\/blog\/#organization"},"image":{"@type":"ImageObject","url":"https:\/\/www.taki.com.tw\/blog\/wp-content\/uploads\/2026\/01\/dockerfile-best-practices.jpg","width":1536,"height":1024,"caption":"Dockerfile \u6700\u4f73\u5be6\u52d9\uff1aDocker Image \u5be6\u6230\u6559\u5b78\u8207\u6548\u80fd\u512a\u5316"},"datePublished":"2026-01-03T18:31:19+08:00","dateModified":"2026-01-14T23:53:06+08:00","inLanguage":"zh-TW","mainEntityOfPage":{"@id":"https:\/\/www.taki.com.tw\/blog\/dockerfile-best-practices\/#webpage"},"isPartOf":{"@id":"https:\/\/www.taki.com.tw\/blog\/dockerfile-best-practices\/#webpage"},"articleSection":"AI \u6559\u5b78 \/ GPU \u4e3b\u6a5f, Linux\u6559\u5b78\u8207\u4f7f\u7528, \u96f2\u7aef\u7522\u696d\u89c0\u5bdf, Docker build cache, Docker CI\/CD, Docker Image, Docker Multi-stage builds, Docker Production Best Practices, Docker \u5b89\u5168\u6700\u4f73\u5be6\u52d9, Docker \u5bb9\u5668\u6548\u80fd\u512a\u5316, Docker \u65b0\u624b\u6559\u5b78, Docker \u6620\u50cf\u6a94\u512a\u5316, Dockerfile \u6559\u5b78, Dockerfile \u6700\u4f73\u5be6\u52d9"},{"@type":"BreadcrumbList","@id":"https:\/\/www.taki.com.tw\/blog\/dockerfile-best-practices\/#breadcrumblist","itemListElement":[{"@type":"ListItem","@id":"https:\/\/www.taki.com.tw\/blog#listItem","position":1,"name":"\u4e3b\u9801","item":"https:\/\/www.taki.com.tw\/blog","nextItem":{"@type":"ListItem","@id":"https:\/\/www.taki.com.tw\/blog\/category\/linux-teaching\/#listItem","name":"Linux\u6559\u5b78\u8207\u4f7f\u7528"}},{"@type":"ListItem","@id":"https:\/\/www.taki.com.tw\/blog\/category\/linux-teaching\/#listItem","position":2,"name":"Linux\u6559\u5b78\u8207\u4f7f\u7528","item":"https:\/\/www.taki.com.tw\/blog\/category\/linux-teaching\/","nextItem":{"@type":"ListItem","@id":"https:\/\/www.taki.com.tw\/blog\/dockerfile-best-practices\/#listItem","name":"Docker Image \u8207 Dockerfile \u5be6\u6230\u6559\u5b78\uff08\u6700\u4f73\u5be6\u52d9\u8207\u6548\u80fd\u512a\u5316\uff09"},"previousItem":{"@type":"ListItem","@id":"https:\/\/www.taki.com.tw\/blog#listItem","name":"\u4e3b\u9801"}},{"@type":"ListItem","@id":"https:\/\/www.taki.com.tw\/blog\/dockerfile-best-practices\/#listItem","position":3,"name":"Docker Image \u8207 Dockerfile \u5be6\u6230\u6559\u5b78\uff08\u6700\u4f73\u5be6\u52d9\u8207\u6548\u80fd\u512a\u5316\uff09","previousItem":{"@type":"ListItem","@id":"https:\/\/www.taki.com.tw\/blog\/category\/linux-teaching\/#listItem","name":"Linux\u6559\u5b78\u8207\u4f7f\u7528"}}]},{"@type":"FAQPage","mainEntity":[{"@type":"Question","name":"Docker Image \u8207 Dockerfile \u6709\u4ec0\u9ebc\u5dee\u5225\uff1f","acceptedAnswer":{"@type":"Answer","text":"Dockerfile \u662f\u7528\u4f86\u5b9a\u7fa9\u6620\u50cf\u6a94\u5efa\u7f6e\u6d41\u7a0b\u7684\u898f\u683c\u6587\u4ef6\uff0c\u800c Docker Image \u5247\u662f\u4f9d\u64da Dockerfile \u5efa\u7acb\u3001\u53ef\u5be6\u969b\u90e8\u7f72\u8207\u57f7\u884c\u7684\u5bb9\u5668\u6620\u50cf\u6a94\u3002Dockerfile \u6c7a\u5b9a\u6620\u50cf\u6a94\u7684\u7d50\u69cb\u8207\u5167\u5bb9\u3002"}},{"@type":"Question","name":"\u4ec0\u9ebc\u662f Dockerfile \u6700\u4f73\u5be6\u52d9\uff1f","acceptedAnswer":{"@type":"Answer","text":"Dockerfile \u6700\u4f73\u5be6\u52d9\u5305\u542b\u6b63\u78ba\u7684\u5206\u5c64\u9806\u5e8f\u3001\u63d0\u9ad8\u5feb\u53d6\u547d\u4e2d\u7387\u3001\u4f7f\u7528 Multi-stage builds\u3001\u7cbe\u7c21\u6620\u50cf\u6a94\u5167\u5bb9\u3001\u907f\u514d\u4ee5 root \u6b0a\u9650\u57f7\u884c\u670d\u52d9\uff0c\u4ee5\u53ca\u56fa\u5b9a base image \u7248\u672c\u4ee5\u78ba\u4fdd\u5efa\u7f6e\u53ef\u91cd\u73fe\u6027\u3002"}},{"@type":"Question","name":"\u70ba\u4ec0\u9ebc\u8981\u4f7f\u7528 Multi-stage builds\uff1f","acceptedAnswer":{"@type":"Answer","text":"Multi-stage builds \u80fd\u5206\u96e2\u5efa\u7f6e\u8207\u57f7\u884c\u968e\u6bb5\uff0c\u53ea\u4fdd\u7559\u5fc5\u8981\u7684\u57f7\u884c\u7522\u7269\u65bc\u6700\u7d42\u6620\u50cf\u6a94\uff0c\u80fd\u6709\u6548\u7e2e\u5c0f\u6620\u50cf\u6a94\u9ad4\u7a4d\u4e26\u964d\u4f4e\u6b63\u5f0f\u74b0\u5883\u7684\u5b89\u5168\u98a8\u96aa\u3002"}},{"@type":"Question","name":"Docker \u6620\u50cf\u6a94\u8d8a\u4f86\u8d8a\u5927\u901a\u5e38\u662f\u4ec0\u9ebc\u539f\u56e0\uff1f","acceptedAnswer":{"@type":"Answer","text":"\u5e38\u898b\u539f\u56e0\u5305\u542b\u7f3a\u5c11 .dockerignore\u3001\u672a\u6e05\u9664\u5957\u4ef6\u5feb\u53d6\u3001\u5c07\u4e0d\u5fc5\u8981\u7684\u6a94\u6848\u6216\u5efa\u7f6e\u7522\u7269 COPY \u9032\u6620\u50cf\u6a94\uff0c\u4ee5\u53ca\u672a\u4f7f\u7528 Multi-stage builds\u3002"}},{"@type":"Question","name":"Docker \u5bb9\u5668\u5728\u751f\u7522\u74b0\u5883\u4e00\u5b9a\u8981\u7528\u975e root \u57f7\u884c\u55ce\uff1f","acceptedAnswer":{"@type":"Answer","text":"\u5728\u751f\u7522\u74b0\u5883\u4e2d\uff0c\u5efa\u8b70\u4ee5\u975e root \u4f7f\u7528\u8005\u57f7\u884c\u5bb9\u5668\u670d\u52d9\uff0c\u4ee5\u964d\u4f4e\u6b0a\u9650\u6feb\u7528\u8207\u7cfb\u7d71\u88ab\u5165\u4fb5\u6642\u7684\u5f71\u97ff\u7bc4\u570d\uff0c\u7b26\u5408\u6700\u5c0f\u6b0a\u9650\u539f\u5247\u3002"}}]},{"@type":"Organization","@id":"https:\/\/www.taki.com.tw\/blog\/#organization","name":"TAKI Cloud","description":"\u6211\u5011\u65bc2010\u5e74\u5c07\u4e00\u7fa4\u5c0d\u65bc\u7db2\u8def\u79d1\u6280\u3001\u4e3b\u6a5f\u4ee3\u7ba1\u3001AI \/ GPU \u9ad8\u6548\u5be6\u9ad4\u4e3b\u6a5f\u670d\u52d9\u8207\u96f2\u7aef\u670d\u52d9\u6709\u8457\u8da8\u8fd1\u72c2\u71b1\u7684\u72c2\u5f92\uff0c\u5728\u5f7c\u6b64\u7406\u5ff5\u8207 \u201c\u6e4a\u201d \u5473\u76f8\u540c\u7684\u4fe1\u5ff5\u4e0b\u805a\u5728\u4e00\u8d77\u767c\u63ee\u6240\u9577\u3002\u5c0d\u65bc\u79d1\u6280\u6280\u8853\u4e0d\u65b7\u7684\u8ffd\u6c42\u7cbe\u9032\u3001\u4e0d\u65b7\u7684\u8207\u81ea\u6211\u7684\u6311\u6230\uff0c\u85c9\u6b64\u4f86\u6eff\u8db3\u9ad4\u9a57\u8005\u7684\u591a\u5143\u9700\u6c42\uff0c\u4e26\u70ba\u9ad4\u9a57\u8005\u5275\u9020\u51fa\u6700\u5927\u50f9\u503c\u3002","url":"https:\/\/www.taki.com.tw\/blog\/","email":"customer@taki.tw","telephone":"+886277307879","foundingDate":"2010-07-01","logo":{"@type":"ImageObject","url":"https:\/\/www.taki.com.tw\/blog\/wp-content\/uploads\/2022\/06\/taki.png","@id":"https:\/\/www.taki.com.tw\/blog\/dockerfile-best-practices\/#organizationLogo","width":100,"height":100},"image":{"@id":"https:\/\/www.taki.com.tw\/blog\/dockerfile-best-practices\/#organizationLogo"},"sameAs":["https:\/\/www.facebook.com\/taki.hosting","https:\/\/twitter.com\/taki_cloud_aa","https:\/\/www.pinterest.com\/takicloud","https:\/\/www.linkedin.com\/company\/81819168\/","https:\/\/takihosting-blog.tumblr.com\/"]},{"@type":"Person","@id":"https:\/\/www.taki.com.tw\/blog\/author\/taki\/#author","url":"https:\/\/www.taki.com.tw\/blog\/author\/taki\/","name":"taki","image":{"@type":"ImageObject","url":"https:\/\/www.taki.com.tw\/blog\/wp-content\/litespeed\/avatar\/e34b1347a32dc2eacac8b44cae3696e2.jpg?ver=1780733726"}},{"@type":"WebPage","@id":"https:\/\/www.taki.com.tw\/blog\/dockerfile-best-practices\/#webpage","url":"https:\/\/www.taki.com.tw\/blog\/dockerfile-best-practices\/","name":"Dockerfile \u6700\u4f73\u5be6\u52d9 \uff1aDocker Image \u5be6\u6230\u6559\u5b78\u8207\u6548\u80fd\u512a\u5316- TAKI\u5b98\u65b9\u90e8\u843d\u683c","description":"Dockerfile \u6700\u4f73\u5be6\u52d9 - Docker Image \u8207 Dockerfile \u6559\u5b78\uff0c\u5b78\u6703\u5982\u4f55\u6253\u9020\u5c0f\u800c\u5feb\u3001\u5b89\u5168\u4e14\u53ef\u7dad\u904b\u7684\u5bb9\u5668\u6620\u50cf\u6a94\u3002\u6df1\u5165\u89e3\u6790 Docker Image \u8207 Dockerfile \u5be6\u6230\u5beb\u6cd5\uff0c\u6db5\u84cb\u5feb\u53d6\u7b56\u7565\u3001Multi-stage builds\u3001\u6620\u50cf\u6a94\u7626\u8eab\u3001\u5b89\u5168\u6700\u4f73\u5be6\u52d9\u8207\u6548\u80fd\u512a\u5316\uff0c\u5f9e\u65b0\u624b\u5230\u751f\u7522\u74b0\u5883\u4e00\u6b21\u638c\u63e1\u3002","inLanguage":"zh-TW","isPartOf":{"@id":"https:\/\/www.taki.com.tw\/blog\/#website"},"breadcrumb":{"@id":"https:\/\/www.taki.com.tw\/blog\/dockerfile-best-practices\/#breadcrumblist"},"author":{"@id":"https:\/\/www.taki.com.tw\/blog\/author\/taki\/#author"},"creator":{"@id":"https:\/\/www.taki.com.tw\/blog\/author\/taki\/#author"},"image":{"@type":"ImageObject","url":"https:\/\/www.taki.com.tw\/blog\/wp-content\/uploads\/2026\/01\/dockerfile-best-practices.jpg","@id":"https:\/\/www.taki.com.tw\/blog\/dockerfile-best-practices\/#mainImage","width":1536,"height":1024,"caption":"Dockerfile \u6700\u4f73\u5be6\u52d9\uff1aDocker Image \u5be6\u6230\u6559\u5b78\u8207\u6548\u80fd\u512a\u5316"},"primaryImageOfPage":{"@id":"https:\/\/www.taki.com.tw\/blog\/dockerfile-best-practices\/#mainImage"},"datePublished":"2026-01-03T18:31:19+08:00","dateModified":"2026-01-14T23:53:06+08:00"},{"@type":"WebSite","@id":"https:\/\/www.taki.com.tw\/blog\/#website","url":"https:\/\/www.taki.com.tw\/blog\/","name":"TAKI Cloud","description":"\u63d0\u4f9bWordPress\u3001SEO\u6280\u8853\u8207\u5404\u9805 IT \u8cc7\u8a0a","inLanguage":"zh-TW","publisher":{"@id":"https:\/\/www.taki.com.tw\/blog\/#organization"}}]},"og:locale":"zh_TW","og:site_name":"TAKI\u5b98\u65b9\u90e8\u843d\u683c - \u63d0\u4f9bWordPress\u3001SEO\u6280\u8853\u8207\u5404\u9805 IT \u8cc7\u8a0a","og:type":"article","og:title":"Dockerfile \u6700\u4f73\u5be6\u52d9 \uff1aDocker Image \u5be6\u6230\u6559\u5b78\u8207\u6548\u80fd\u512a\u5316- TAKI\u5b98\u65b9\u90e8\u843d\u683c","og:description":"Dockerfile \u6700\u4f73\u5be6\u52d9 - Docker Image \u8207 Dockerfile \u6559\u5b78\uff0c\u5b78\u6703\u5982\u4f55\u6253\u9020\u5c0f\u800c\u5feb\u3001\u5b89\u5168\u4e14\u53ef\u7dad\u904b\u7684\u5bb9\u5668\u6620\u50cf\u6a94\u3002\u6df1\u5165\u89e3\u6790 Docker Image \u8207 Dockerfile \u5be6\u6230\u5beb\u6cd5\uff0c\u6db5\u84cb\u5feb\u53d6\u7b56\u7565\u3001Multi-stage builds\u3001\u6620\u50cf\u6a94\u7626\u8eab\u3001\u5b89\u5168\u6700\u4f73\u5be6\u52d9\u8207\u6548\u80fd\u512a\u5316\uff0c\u5f9e\u65b0\u624b\u5230\u751f\u7522\u74b0\u5883\u4e00\u6b21\u638c\u63e1\u3002","og:url":"https:\/\/www.taki.com.tw\/blog\/dockerfile-best-practices\/","fb:app_id":"1626424417676294","fb:admins":"1022378541145336","og:image":"https:\/\/www.taki.com.tw\/blog\/wp-content\/uploads\/2026\/01\/dockerfile-best-practices.jpg","og:image:secure_url":"https:\/\/www.taki.com.tw\/blog\/wp-content\/uploads\/2026\/01\/dockerfile-best-practices.jpg","og:image:width":1536,"og:image:height":1024,"article:section":"Docker","article:tag":{"0":"dockerfile","1":"docker image","2":"docker best practices","3":"dockerfile \u6700\u4f73\u5be6\u52d9","4":"multi-stage builds","5":"docker image \u512a\u5316","6":"docker build cache","7":"docker security","8":"container optimization","9":"ci\/cd","10":"ai \u6559\u5b78 \/ gpu \u4e3b\u6a5f","11":"linux\u6559\u5b78\u8207\u4f7f\u7528","12":"\u96f2\u7aef\u7522\u696d\u89c0\u5bdf","14":"docker ci\/cd","16":"docker multi-stage builds","17":"docker production best practices","18":"docker \u5b89\u5168\u6700\u4f73\u5be6\u52d9","19":"docker \u5bb9\u5668\u6548\u80fd\u512a\u5316","20":"docker \u65b0\u624b\u6559\u5b78","21":"docker \u6620\u50cf\u6a94\u512a\u5316","22":"dockerfile \u6559\u5b78"},"article:published_time":"2026-01-03T10:31:19+00:00","article:modified_time":"2026-01-14T15:53:06+00:00","article:publisher":"https:\/\/www.facebook.com\/taki.hosting","article:author":"https:\/\/www.facebook.com\/taki.hosting","twitter:card":"summary_large_image","twitter:site":"@taki_cloud_aa","twitter:title":"Dockerfile \u6700\u4f73\u5be6\u52d9 \uff1aDocker Image \u5be6\u6230\u6559\u5b78\u8207\u6548\u80fd\u512a\u5316- TAKI\u5b98\u65b9\u90e8\u843d\u683c","twitter:description":"Dockerfile \u6700\u4f73\u5be6\u52d9 - Docker Image \u8207 Dockerfile \u6559\u5b78\uff0c\u5b78\u6703\u5982\u4f55\u6253\u9020\u5c0f\u800c\u5feb\u3001\u5b89\u5168\u4e14\u53ef\u7dad\u904b\u7684\u5bb9\u5668\u6620\u50cf\u6a94\u3002\u6df1\u5165\u89e3\u6790 Docker Image \u8207 Dockerfile \u5be6\u6230\u5beb\u6cd5\uff0c\u6db5\u84cb\u5feb\u53d6\u7b56\u7565\u3001Multi-stage builds\u3001\u6620\u50cf\u6a94\u7626\u8eab\u3001\u5b89\u5168\u6700\u4f73\u5be6\u52d9\u8207\u6548\u80fd\u512a\u5316\uff0c\u5f9e\u65b0\u624b\u5230\u751f\u7522\u74b0\u5883\u4e00\u6b21\u638c\u63e1\u3002","twitter:creator":"@taki_cloud_aa","twitter:image":"https:\/\/www.taki.com.tw\/blog\/wp-content\/uploads\/2026\/01\/dockerfile-best-practices.jpg"},"aioseo_meta_data":{"post_id":"11644","title":"Dockerfile \u6700\u4f73\u5be6\u52d9 \uff1aDocker Image \u5be6\u6230\u6559\u5b78\u8207\u6548\u80fd\u512a\u5316#separator_sa #site_title","description":"Dockerfile \u6700\u4f73\u5be6\u52d9 #separator_sa Docker Image \u8207 Dockerfile \u6559\u5b78\uff0c\u5b78\u6703\u5982\u4f55\u6253\u9020\u5c0f\u800c\u5feb\u3001\u5b89\u5168\u4e14\u53ef\u7dad\u904b\u7684\u5bb9\u5668\u6620\u50cf\u6a94\u3002\u6df1\u5165\u89e3\u6790 Docker Image \u8207 Dockerfile \u5be6\u6230\u5beb\u6cd5\uff0c\u6db5\u84cb\u5feb\u53d6\u7b56\u7565\u3001Multi-stage builds\u3001\u6620\u50cf\u6a94\u7626\u8eab\u3001\u5b89\u5168\u6700\u4f73\u5be6\u52d9\u8207\u6548\u80fd\u512a\u5316\uff0c\u5f9e\u65b0\u624b\u5230\u751f\u7522\u74b0\u5883\u4e00\u6b21\u638c\u63e1\u3002","keywords":null,"keyphrases":{"focus":{"keyphrase":"Dockerfile \u6700\u4f73\u5be6\u52d9","score":68,"analysis":{"keyphraseInTitle":{"score":9,"maxScore":9,"error":0},"keyphraseInDescription":{"score":9,"maxScore":9,"error":0},"keyphraseLength":{"score":9,"maxScore":9,"error":0,"length":1},"keyphraseInURL":{"score":1,"maxScore":5,"error":1},"keyphraseInIntroduction":{"score":3,"maxScore":9,"error":1},"keyphraseInSubHeadings":{"score":3,"maxScore":9,"error":1},"keyphraseInImageAlt":{"score":3,"maxScore":9,"error":1},"keywordDensity":{"type":"best","score":9,"maxScore":9,"error":0}}},"additional":[{"keyphrase":"Docker Image","score":67,"analysis":{"keyphraseInDescription":{"score":9,"maxScore":9,"error":0},"keyphraseLength":{"score":9,"maxScore":9,"error":0,"length":2},"keyphraseInIntroduction":{"score":9,"maxScore":9,"error":0},"keyphraseInImageAlt":{"score":3,"maxScore":9,"error":1},"keywordDensity":{"type":"high","score":0,"maxScore":9,"error":1}}},{"keyphrase":"Dockerfile \u6559\u5b78","score":40,"analysis":{"keyphraseInDescription":{"score":3,"maxScore":9,"error":1},"keyphraseLength":{"score":9,"maxScore":9,"error":0,"length":1},"keyphraseInIntroduction":{"score":3,"maxScore":9,"error":1},"keyphraseInImageAlt":{"score":3,"maxScore":9,"error":1},"keywordDensity":{"score":0,"type":"low","maxScore":9,"error":1}}},{"keyphrase":"Docker Multi-stage builds","score":40,"analysis":{"keyphraseInDescription":{"score":3,"maxScore":9,"error":1},"keyphraseLength":{"score":9,"maxScore":9,"error":0,"length":3},"keyphraseInIntroduction":{"score":3,"maxScore":9,"error":1},"keyphraseInImageAlt":{"score":3,"maxScore":9,"error":1},"keywordDensity":{"score":0,"type":"low","maxScore":9,"error":1}}},{"keyphrase":"Docker \u6620\u50cf\u6a94\u512a\u5316","score":40,"analysis":{"keyphraseInDescription":{"score":3,"maxScore":9,"error":1},"keyphraseLength":{"score":9,"maxScore":9,"error":0,"length":1},"keyphraseInIntroduction":{"score":3,"maxScore":9,"error":1},"keyphraseInImageAlt":{"score":3,"maxScore":9,"error":1},"keywordDensity":{"score":0,"type":"low","maxScore":9,"error":1}}},{"keyphrase":"Docker build cache","score":40,"analysis":{"keyphraseInDescription":{"score":3,"maxScore":9,"error":1},"keyphraseLength":{"score":9,"maxScore":9,"error":0,"length":3},"keyphraseInIntroduction":{"score":3,"maxScore":9,"error":1},"keyphraseInImageAlt":{"score":3,"maxScore":9,"error":1},"keywordDensity":{"score":0,"type":"low","maxScore":9,"error":1}}},{"keyphrase":"Docker \u5b89\u5168\u6700\u4f73\u5be6\u52d9","score":40,"analysis":{"keyphraseInDescription":{"score":3,"maxScore":9,"error":1},"keyphraseLength":{"score":9,"maxScore":9,"error":0,"length":1},"keyphraseInIntroduction":{"score":3,"maxScore":9,"error":1},"keyphraseInImageAlt":{"score":3,"maxScore":9,"error":1},"keywordDensity":{"score":0,"type":"low","maxScore":9,"error":1}}},{"keyphrase":"Docker \u5bb9\u5668\u6548\u80fd\u512a\u5316","score":40,"analysis":{"keyphraseInDescription":{"score":3,"maxScore":9,"error":1},"keyphraseLength":{"score":9,"maxScore":9,"error":0,"length":1},"keyphraseInIntroduction":{"score":3,"maxScore":9,"error":1},"keyphraseInImageAlt":{"score":3,"maxScore":9,"error":1},"keywordDensity":{"score":0,"type":"low","maxScore":9,"error":1}}},{"keyphrase":"Docker \u65b0\u624b\u6559\u5b78","score":40,"analysis":{"keyphraseInDescription":{"score":3,"maxScore":9,"error":1},"keyphraseLength":{"score":9,"maxScore":9,"error":0,"length":1},"keyphraseInIntroduction":{"score":3,"maxScore":9,"error":1},"keyphraseInImageAlt":{"score":3,"maxScore":9,"error":1},"keywordDensity":{"score":0,"type":"low","maxScore":9,"error":1}}},{"keyphrase":"Docker CI\/CD","score":40,"analysis":{"keyphraseInDescription":{"score":3,"maxScore":9,"error":1},"keyphraseLength":{"score":9,"maxScore":9,"error":0,"length":2},"keyphraseInIntroduction":{"score":3,"maxScore":9,"error":1},"keyphraseInImageAlt":{"score":3,"maxScore":9,"error":1},"keywordDensity":{"score":0,"type":"low","maxScore":9,"error":1}}},{"keyphrase":"Docker Production Best Practices","score":40,"analysis":{"keyphraseInDescription":{"score":3,"maxScore":9,"error":1},"keyphraseLength":{"score":9,"maxScore":9,"error":0,"length":4},"keyphraseInIntroduction":{"score":3,"maxScore":9,"error":1},"keyphraseInImageAlt":{"score":3,"maxScore":9,"error":1},"keywordDensity":{"score":0,"type":"low","maxScore":9,"error":1}}}]},"primary_term":null,"canonical_url":null,"og_title":"Dockerfile \u6700\u4f73\u5be6\u52d9 \uff1aDocker Image \u5be6\u6230\u6559\u5b78\u8207\u6548\u80fd\u512a\u5316- TAKI\u5b98\u65b9\u90e8\u843d\u683c","og_description":"Dockerfile \u6700\u4f73\u5be6\u52d9 #separator_sa Docker Image \u8207 Dockerfile \u6559\u5b78\uff0c\u5b78\u6703\u5982\u4f55\u6253\u9020\u5c0f\u800c\u5feb\u3001\u5b89\u5168\u4e14\u53ef\u7dad\u904b\u7684\u5bb9\u5668\u6620\u50cf\u6a94\u3002\u6df1\u5165\u89e3\u6790 Docker Image \u8207 Dockerfile \u5be6\u6230\u5beb\u6cd5\uff0c\u6db5\u84cb\u5feb\u53d6\u7b56\u7565\u3001Multi-stage builds\u3001\u6620\u50cf\u6a94\u7626\u8eab\u3001\u5b89\u5168\u6700\u4f73\u5be6\u52d9\u8207\u6548\u80fd\u512a\u5316\uff0c\u5f9e\u65b0\u624b\u5230\u751f\u7522\u74b0\u5883\u4e00\u6b21\u638c\u63e1\u3002","og_object_type":"default","og_image_type":"custom_image","og_image_url":"https:\/\/www.taki.com.tw\/blog\/wp-content\/uploads\/2026\/01\/dockerfile-best-practices.jpg","og_image_width":"1536","og_image_height":"1024","og_image_custom_url":"https:\/\/www.taki.com.tw\/blog\/wp-content\/uploads\/2026\/01\/dockerfile-best-practices.jpg","og_image_custom_fields":null,"og_video":"","og_custom_url":null,"og_article_section":"Docker","og_article_tags":[{"label":"Dockerfile","value":"Dockerfile"},{"label":"Docker Image","value":"Docker Image"},{"label":"Docker Best Practices","value":"Docker Best Practices"},{"label":"Dockerfile \u6700\u4f73\u5be6\u52d9","value":"Dockerfile \u6700\u4f73\u5be6\u52d9"},{"label":"Multi-stage builds","value":"Multi-stage builds"},{"label":"Docker Image \u512a\u5316","value":"Docker Image \u512a\u5316"},{"label":"Docker Build Cache","value":"Docker Build Cache"},{"label":"Docker Security","value":"Docker Security"},{"label":"Container Optimization","value":"Container Optimization"},{"label":"CI\/CD","value":"CI\/CD"}],"twitter_use_og":true,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[{"id":"#aioseo-custom-mjyblv2r","custom":true,"graphName":"FAQPage","schema":"{ \"@type\": \"FAQPage\", \"mainEntity\": [ { \"@type\": \"Question\", \"name\": \"Docker Image \u8207 Dockerfile \u6709\u4ec0\u9ebc\u5dee\u5225\uff1f\", \"acceptedAnswer\": { \"@type\": \"Answer\", \"text\": \"Dockerfile \u662f\u7528\u4f86\u5b9a\u7fa9\u6620\u50cf\u6a94\u5efa\u7f6e\u6d41\u7a0b\u7684\u898f\u683c\u6587\u4ef6\uff0c\u800c Docker Image \u5247\u662f\u4f9d\u64da Dockerfile \u5efa\u7acb\u3001\u53ef\u5be6\u969b\u90e8\u7f72\u8207\u57f7\u884c\u7684\u5bb9\u5668\u6620\u50cf\u6a94\u3002Dockerfile \u6c7a\u5b9a\u6620\u50cf\u6a94\u7684\u7d50\u69cb\u8207\u5167\u5bb9\u3002\" } }, { \"@type\": \"Question\", \"name\": \"\u4ec0\u9ebc\u662f Dockerfile \u6700\u4f73\u5be6\u52d9\uff1f\", \"acceptedAnswer\": { \"@type\": \"Answer\", \"text\": \"Dockerfile \u6700\u4f73\u5be6\u52d9\u5305\u542b\u6b63\u78ba\u7684\u5206\u5c64\u9806\u5e8f\u3001\u63d0\u9ad8\u5feb\u53d6\u547d\u4e2d\u7387\u3001\u4f7f\u7528 Multi-stage builds\u3001\u7cbe\u7c21\u6620\u50cf\u6a94\u5167\u5bb9\u3001\u907f\u514d\u4ee5 root \u6b0a\u9650\u57f7\u884c\u670d\u52d9\uff0c\u4ee5\u53ca\u56fa\u5b9a base image \u7248\u672c\u4ee5\u78ba\u4fdd\u5efa\u7f6e\u53ef\u91cd\u73fe\u6027\u3002\" } }, { \"@type\": \"Question\", \"name\": \"\u70ba\u4ec0\u9ebc\u8981\u4f7f\u7528 Multi-stage builds\uff1f\", \"acceptedAnswer\": { \"@type\": \"Answer\", \"text\": \"Multi-stage builds \u80fd\u5206\u96e2\u5efa\u7f6e\u8207\u57f7\u884c\u968e\u6bb5\uff0c\u53ea\u4fdd\u7559\u5fc5\u8981\u7684\u57f7\u884c\u7522\u7269\u65bc\u6700\u7d42\u6620\u50cf\u6a94\uff0c\u80fd\u6709\u6548\u7e2e\u5c0f\u6620\u50cf\u6a94\u9ad4\u7a4d\u4e26\u964d\u4f4e\u6b63\u5f0f\u74b0\u5883\u7684\u5b89\u5168\u98a8\u96aa\u3002\" } }, { \"@type\": \"Question\", \"name\": \"Docker \u6620\u50cf\u6a94\u8d8a\u4f86\u8d8a\u5927\u901a\u5e38\u662f\u4ec0\u9ebc\u539f\u56e0\uff1f\", \"acceptedAnswer\": { \"@type\": \"Answer\", \"text\": \"\u5e38\u898b\u539f\u56e0\u5305\u542b\u7f3a\u5c11 .dockerignore\u3001\u672a\u6e05\u9664\u5957\u4ef6\u5feb\u53d6\u3001\u5c07\u4e0d\u5fc5\u8981\u7684\u6a94\u6848\u6216\u5efa\u7f6e\u7522\u7269 COPY \u9032\u6620\u50cf\u6a94\uff0c\u4ee5\u53ca\u672a\u4f7f\u7528 Multi-stage builds\u3002\" } }, { \"@type\": \"Question\", \"name\": \"Docker \u5bb9\u5668\u5728\u751f\u7522\u74b0\u5883\u4e00\u5b9a\u8981\u7528\u975e root \u57f7\u884c\u55ce\uff1f\", \"acceptedAnswer\": { \"@type\": \"Answer\", \"text\": \"\u5728\u751f\u7522\u74b0\u5883\u4e2d\uff0c\u5efa\u8b70\u4ee5\u975e root \u4f7f\u7528\u8005\u57f7\u884c\u5bb9\u5668\u670d\u52d9\uff0c\u4ee5\u964d\u4f4e\u6b0a\u9650\u6feb\u7528\u8207\u7cfb\u7d71\u88ab\u5165\u4fb5\u6642\u7684\u5f71\u97ff\u7bc4\u570d\uff0c\u7b26\u5408\u6700\u5c0f\u6b0a\u9650\u539f\u5247\u3002\" } } ] }"}],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"BlogPosting","isEnabled":true},"graphs":[]},"schema_type":"default","schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":"-1","robots_max_videopreview":"-1","robots_max_imagepreview":"large","priority":null,"frequency":"default","local_seo":null,"seo_analyzer_scan_date":"2026-01-14 16:28:16","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":"0","open_ai":null,"ai":{"faqs":[],"keyPoints":[],"titles":[],"descriptions":[],"socialPosts":{"email":[],"linkedin":[],"twitter":[],"facebook":[],"instagram":[]}},"created":"2026-01-03 08:45:43","updated":"2026-01-14 16:28:16"},"aioseo_breadcrumb":"<div class=\"aioseo-breadcrumbs\"><span class=\"aioseo-breadcrumb\">\n\t<a href=\"https:\/\/www.taki.com.tw\/blog\" title=\"\u4e3b\u9801\">\u4e3b\u9801<\/a>\n<\/span><span class=\"aioseo-breadcrumb-separator\">\u00bb<\/span><span class=\"aioseo-breadcrumb\">\n\t<a href=\"https:\/\/www.taki.com.tw\/blog\/category\/linux-teaching\/\" title=\"Linux\u6559\u5b78\u8207\u4f7f\u7528\">Linux\u6559\u5b78\u8207\u4f7f\u7528<\/a>\n<\/span><span class=\"aioseo-breadcrumb-separator\">\u00bb<\/span><span class=\"aioseo-breadcrumb\">\n\tDocker Image \u8207 Dockerfile \u5be6\u6230\u6559\u5b78\uff08\u6700\u4f73\u5be6\u52d9\u8207\u6548\u80fd\u512a\u5316\uff09\n<\/span><\/div>","aioseo_breadcrumb_json":[{"label":"\u4e3b\u9801","link":"https:\/\/www.taki.com.tw\/blog"},{"label":"Linux\u6559\u5b78\u8207\u4f7f\u7528","link":"https:\/\/www.taki.com.tw\/blog\/category\/linux-teaching\/"},{"label":"Docker Image \u8207 Dockerfile \u5be6\u6230\u6559\u5b78\uff08\u6700\u4f73\u5be6\u52d9\u8207\u6548\u80fd\u512a\u5316\uff09","link":"https:\/\/www.taki.com.tw\/blog\/dockerfile-best-practices\/"}],"_links":{"self":[{"href":"https:\/\/www.taki.com.tw\/blog\/wp-json\/wp\/v2\/posts\/11644","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.taki.com.tw\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.taki.com.tw\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.taki.com.tw\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.taki.com.tw\/blog\/wp-json\/wp\/v2\/comments?post=11644"}],"version-history":[{"count":0,"href":"https:\/\/www.taki.com.tw\/blog\/wp-json\/wp\/v2\/posts\/11644\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.taki.com.tw\/blog\/wp-json\/wp\/v2\/media\/11647"}],"wp:attachment":[{"href":"https:\/\/www.taki.com.tw\/blog\/wp-json\/wp\/v2\/media?parent=11644"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.taki.com.tw\/blog\/wp-json\/wp\/v2\/categories?post=11644"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.taki.com.tw\/blog\/wp-json\/wp\/v2\/tags?post=11644"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}