{"id":2634,"date":"2020-12-21T10:38:13","date_gmt":"2020-12-21T02:38:13","guid":{"rendered":"http:\/\/blog.ywdevops.cn\/?p=2634"},"modified":"2026-09-15T18:24:19","modified_gmt":"2026-09-15T10:24:19","slug":"dockerfile","status":"publish","type":"post","link":"https:\/\/blog.ywdevops.cn\/index.php\/2020\/12\/21\/dockerfile\/","title":{"rendered":"Dockerfile\u6587\u4ef6"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">\u955c\u50cf\u7684\u5b9a\u5236\u5b9e\u9645\u4e0a\u5c31\u662f\u5b9a\u5236\u6bcf\u4e00\u5c42\u6240 \u6dfb\u52a0\u7684\u914d\u7f6e\u3001\u6587\u4ef6\u3002\u5982\u679c\u6211\u4eec\u53ef\u4ee5\u628a\u6bcf\u4e00\u5c42\u4fee\u6539\u3001\u5b89\u88c5\u3001\u6784\u5efa\u3001\u64cd\u4f5c\u7684\u547d\u4ee4\u90fd\u5199\u5165\u4e00\u4e2a\u811a \u672c\uff0c\u7528\u8fd9\u4e2a\u811a\u672c\u6765\u6784\u5efa\u3001\u5b9a\u5236\u955c\u50cf\uff0c\u90a3\u4e48\u4e4b\u524d\u63d0\u53ca\u7684\u65e0\u6cd5\u91cd\u590d\u7684\u95ee\u9898\u3001\u955c\u50cf\u6784\u5efa\u900f\u660e\u6027\u7684\u95ee \u9898\u3001\u4f53\u79ef\u7684\u95ee\u9898\u5c31\u90fd\u4f1a\u89e3\u51b3\u3002\u8fd9\u4e2a\u811a\u672c\u5c31\u662f Dockerfile\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Dockerfile \u662f\u4e00\u4e2a\u6587\u672c\u6587\u4ef6\uff0c\u5176\u5185\u5305\u542b\u4e86\u4e00\u6761\u6761\u7684\u6307\u4ee4(Instruction)\uff0c\u6bcf\u4e00\u6761\u6307\u4ee4\u6784\u5efa\u4e00\u5c42\uff0c \u56e0\u6b64\u6bcf\u4e00\u6761\u6307\u4ee4\u7684\u5185\u5bb9\uff0c\u5c31\u662f\u63cf\u8ff0\u8be5\u5c42\u5e94\u5f53\u5982\u4f55\u6784\u5efa\u3002  <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u6784\u5efa\u955c\u50cf\u5206\u4e3a\u4e24\u79cd\u65b9\u5f0f\uff1a\u5355\u9636\u6bb5\u6784\u5efa\u548c\u591a\u9636\u6bb5\u6784\u5efa<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u5355\u9636\u6bb5\uff1aDockerfile\u4e2d\u5b9a\u4e49\u4e00\u4e2aFROM<\/li>\n\n\n\n<li>\u591a\u9636\u6bb5\uff1aDockerfile\u4e2d\u5b9a\u4e49\u591a\u4e2aFROM<\/li>\n<\/ul>\n\n\n\n<p class=\"has-text-align-center wp-block-paragraph\"><strong><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-purple-color\">\u5355\u9636\u6bb5\u6784\u5efa<\/mark><\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u4f8b\u5982\uff1a \u4ee5\u5b9a\u5236 nginx \u955c\u50cf\u4e3a\u4f8b\uff0c\u8fd9\u6b21\u6211\u4eec\u4f7f\u7528 Dockerfile \u6765\u5b9a\u5236\uff0c\u5982\u4e0b\uff1a<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"> \u5728\u4e00\u4e2a\u7a7a\u767d\u76ee\u5f55\u4e2d\uff0c\u5efa\u7acb\u4e00\u4e2a\u6587\u672c\u6587\u4ef6\uff0c\u5e76\u547d\u540d\u4e3a<strong> Dockerfile<\/strong> \uff1a<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Dockerfile\u6587\u4ef6\u7684\u5185\u5bb9\u5982\u4e0b\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>FROM nginx\nRUN echo '&lt;h1&gt;Hello, Docker!&lt;\/h1&gt;' &gt; \/usr\/share\/nginx\/html\/index.html<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u8fd9\u4e2a Dockerfile \u5f88\u7b80\u5355\uff0c\u4e00\u5171\u5c31\u4e24\u884c\u3002\u6d89\u53ca\u5230\u4e86\u4e24\u6761\u6307\u4ee4\uff0c FROM \u548c RUN \u3002 <\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-purple-color\">1\u3001FROM \u6307\u5b9a\u57fa\u7840\u955c\u50cf<\/mark><\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u6240\u8c13\u5b9a\u5236\u955c\u50cf\uff0c\u90a3\u4e00\u5b9a\u662f\u4ee5\u4e00\u4e2a\u955c\u50cf\u4e3a\u57fa\u7840\uff0c\u5728\u5176\u4e0a\u8fdb\u884c\u5b9a\u5236\u3002\u5c31\u50cf\u6211\u4eec\u4e4b\u524d\u8fd0\u884c\u4e86\u4e00\u4e2a nginx \u955c\u50cf\u7684\u5bb9\u5668\uff0c\u518d\u8fdb\u884c\u4fee\u6539\u4e00\u6837\uff0c\u57fa\u7840\u955c\u50cf\u662f\u5fc5\u987b\u6307\u5b9a\u7684\u3002\u800c FROM \u5c31\u662f\u6307\u5b9a\u57fa\u7840\u955c\u50cf\uff0c\u56e0\u6b64\u4e00\u4e2a Dockerfile \u4e2d FROM \u662f\u5fc5\u5907\u7684\u6307\u4ee4\uff0c\u5e76\u4e14\u5fc5\u987b\u662f\u7b2c\u4e00\u6761\u6307\u4ee4\u3002 <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u5728 Docker Store \u4e0a\u6709\u975e\u5e38\u591a\u7684\u9ad8\u8d28\u91cf\u7684\u5b98\u65b9\u955c\u50cf\uff0c\u6709\u53ef\u4ee5\u76f4\u63a5\u62ff\u6765\u4f7f\u7528\u7684\u670d\u52a1\u7c7b\u7684\u955c\u50cf\uff0c\u5982 nginx \u3001 redis \u3001 mongo \u3001 mysql \u3001 httpd \u3001 php \u3001 tomcat \u7b49\uff1b\u4e5f\u6709\u4e00\u4e9b\u65b9\u4fbf\u5f00\u53d1\u3001\u6784 \u5efa\u3001\u8fd0\u884c\u5404\u79cd\u8bed\u8a00\u5e94\u7528\u7684\u955c\u50cf\uff0c\u5982 node \u3001 openjdk \u3001 python \u3001 ruby \u3001 golang \u7b49\u3002\u53ef\u4ee5\u5728\u5176\u4e2d\u5bfb\u627e\u4e00\u4e2a\u6700\u7b26\u5408\u6211\u4eec\u6700\u7ec8\u76ee\u6807\u7684\u955c\u50cf\u4e3a\u57fa\u7840\u955c\u50cf\u8fdb\u884c\u5b9a\u5236\u3002 <\/p>\n\n\n\n<p class=\"wp-block-paragraph\"> \u9664\u4e86\u9009\u62e9\u73b0\u6709\u955c\u50cf\u4e3a\u57fa\u7840\u955c\u50cf\u5916\uff0cDocker \u8fd8\u5b58\u5728\u4e00\u4e2a\u7279\u6b8a\u7684\u955c\u50cf\uff0c\u540d\u4e3a scratch \u8fd9\u4e2a\u955c\u50cf\u662f\u865a\u62df\u7684\u6982\u5ff5\uff0c\u5e76\u4e0d\u5b9e\u9645\u5b58\u5728\uff0c\u5b83\u8868\u793a\u4e00\u4e2a\u7a7a\u767d\u7684\u955c\u50cf\u3002 <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u5982\u679c\u4f60\u4ee5 scratch \u4e3a\u57fa\u7840\u955c\u50cf\u7684\u8bdd\uff0c\u610f\u5473\u7740\u4f60\u4e0d\u4ee5\u4efb\u4f55\u955c\u50cf\u4e3a\u57fa\u7840\uff0c\u63a5\u4e0b\u6765\u6240\u5199\u7684\u6307\u4ee4\u5c06\u4f5c\u4e3a\u955c\u50cf\u7b2c\u4e00\u5c42\u5f00\u59cb\u5b58\u5728\u3002 <\/p>\n\n\n\n<p class=\"wp-block-paragraph\"> \u4e0d\u4ee5\u4efb\u4f55\u7cfb\u7edf\u4e3a\u57fa\u7840\uff0c\u76f4\u63a5\u5c06\u53ef\u6267\u884c\u6587\u4ef6\u590d\u5236\u8fdb\u955c\u50cf\u7684\u505a\u6cd5\u5e76\u4e0d\u7f55\u89c1\uff0c\u6bd4\u5982  swarm \u3001 coreos\/etcd \u3002\u5bf9\u4e8e Linux \u4e0b\u9759\u6001\u7f16\u8bd1\u7684\u7a0b\u5e8f\u6765\u8bf4\uff0c\u5e76\u4e0d\u9700\u8981\u6709\u64cd\u4f5c\u7cfb\u7edf\u63d0\u4f9b\u8fd0\u884c\u65f6\u652f\u6301\uff0c\u6240\u9700\u7684\u4e00\u5207\u5e93\u90fd\u5df2\u7ecf\u5728\u53ef\u6267\u884c\u6587\u4ef6\u91cc\u4e86\uff0c\u56e0\u6b64\u76f4\u63a5 FROM scratch \u4f1a\u8ba9\u955c\u50cf\u4f53\u79ef\u66f4\u52a0\u5c0f\u5de7\u3002\u4f7f\u7528 Go \u8bed\u8a00 \u5f00\u53d1\u7684\u5e94\u7528\u5f88\u591a\u4f1a\u4f7f\u7528\u8fd9\u79cd\u65b9\u5f0f\u6765\u5236\u4f5c\u955c\u50cf\uff0c\u8fd9\u4e5f\u662f\u4e3a\u4ec0\u4e48\u6709\u4eba\u8ba4\u4e3a Go \u662f\u7279\u522b\u9002\u5408\u5bb9\u5668\u5fae\u670d\u52a1\u67b6\u6784\u7684\u8bed\u8a00\u7684\u539f\u56e0\u4e4b\u4e00\u3002 <\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-cyan-blue-color\"><strong>2\u3001RUN \u6267\u884c\u547d\u4ee4<\/strong><\/mark><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">RUN \u6307\u4ee4\u662f\u7528\u6765\u6267\u884c\u547d\u4ee4\u884c\u547d\u4ee4\u7684\u3002\u7531\u4e8e\u547d\u4ee4\u884c\u7684\u5f3a\u5927\u80fd\u529b\uff0c RUN \u6307\u4ee4\u5728\u5b9a\u5236\u955c\u50cf\u65f6\u662f\u6700\u5e38\u7528\u7684\u6307\u4ee4\u4e4b\u4e00\u3002\u5176\u683c\u5f0f\u6709\u4e24\u79cd\uff1a <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">shell \u683c\u5f0f\uff1a RUN &lt;\u547d\u4ee4&gt; \uff0c\u5c31\u50cf\u76f4\u63a5\u5728\u547d\u4ee4\u884c\u4e2d\u8f93\u5165\u7684\u547d\u4ee4\u4e00\u6837\uff0c\u4f8b\u5982<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>RUN echo '&lt;h1&gt;Hello, Docker!&lt;\/h1&gt;' &gt; \/usr\/share\/nginx\/html\/index.html<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">exec \u683c\u5f0f\uff1a RUN [&#8220;\u53ef\u6267\u884c\u6587\u4ef6&#8221;, &#8220;\u53c2\u65701&#8221;, &#8220;\u53c2\u65702&#8221;] \uff0c\u8fd9\u66f4\u50cf\u662f\u51fd\u6570\u8c03\u7528\u4e2d\u7684\u683c\u5f0f\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"> \u65e2\u7136 RUN \u5c31\u50cf Shell \u811a\u672c\u4e00\u6837\u53ef\u4ee5\u6267\u884c\u547d\u4ee4\uff0c\u90a3\u4e48\u6211\u4eec\u662f\u5426\u5c31\u53ef\u4ee5\u50cf Shell \u811a\u672c\u4e00\u6837\u628a\u6bcf\u4e2a \u547d\u4ee4\u5bf9\u5e94\u4e00\u4e2a RUN \u5462\uff1f\u6bd4\u5982\u8fd9\u6837\uff1a <\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>FROM debian:jessie\nRUN apt-get update\nRUN apt-get install -y gcc libc6-dev make\nRUN wget -O redis.tar.gz \"http:\/\/download.redis.io\/releases\/redis-3.2.5.tar.gz\"\nRUN mkdir -p \/usr\/src\/redis\nRUN tar -xzf redis.tar.gz -C \/usr\/src\/redis --strip-components=1\nRUN make -C \/usr\/src\/redis\nRUN make -C \/usr\/src\/redis install<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"> Dockerfile \u4e2d\u6bcf\u4e00\u4e2a\u6307\u4ee4\u90fd\u4f1a\u5efa\u7acb\u4e00\u5c42\uff0c RUN \u4e5f\u4e0d\u4f8b\u5916\uff0c \u6bcf\u4e00\u4e2a RUN \u7684\u884c\u4e3a\uff0c \u5c31\u548c\u521a\u624d\u6211\u4eec\u624b\u5de5\u5efa\u7acb\u955c\u50cf\u7684\u8fc7\u7a0b\u4e00\u6837\uff1a\u65b0\u5efa\u7acb\u4e00\u5c42\uff0c  \u5728\u5176\u4e0a\u6267\u884c\u8fd9\u4e9b\u547d\u4ee4\uff0c\u6267\u884c\u7ed3\u675f \u540e\uff0c commit \u8fd9\u4e00\u5c42\u7684\u4fee\u6539\uff0c\u6784\u6210\u65b0\u7684\u955c\u50cf\u3002 <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u4e0a\u9762\u7684\u8fd9\u79cd\u5199\u6cd5\uff0c\u521b\u5efa\u4e86 7 \u5c42\u955c\u50cf\u3002\u8fd9\u662f\u5b8c\u5168\u6ca1\u6709\u610f\u4e49\u7684\uff0c\u800c\u4e14\u5f88\u591a\u8fd0\u884c\u65f6\u4e0d\u9700\u8981\u7684\u4e1c\u897f\uff0c\u90fd\u88ab\u88c5\u8fdb\u4e86\u955c\u50cf\u91cc\uff0c\u6bd4\u5982\u7f16\u8bd1\u73af\u5883\u3001\u66f4\u65b0\u7684\u8f6f\u4ef6\u5305\u7b49\u7b49\u3002\u7ed3\u679c\u5c31\u662f\u4ea7\u751f\u975e\u5e38\u81c3\u80bf\u3001\u975e\u5e38\u591a\u5c42\u7684\u955c\u50cf\uff0c\u4e0d\u4ec5\u4ec5\u589e\u52a0\u4e86\u6784\u5efa\u90e8\u7f72\u7684\u65f6\u95f4\uff0c\u4e5f\u5f88\u5bb9\u6613\u51fa\u9519\u3002 \u8fd9\u662f\u5f88\u591a\u521d\u5b66Docker \u7684\u4eba\u5e38\u72af\u7684\u4e00\u4e2a\u9519\u8bef\u3002 <\/p>\n\n\n\n<p class=\"has-luminous-vivid-amber-background-color has-background wp-block-paragraph\"> Union FS \u662f\u6709\u6700\u5927\u5c42\u6570\u9650\u5236\u7684\uff0c\u6bd4\u5982 AUFS\uff0c\u66fe\u7ecf\u662f\u6700\u5927\u4e0d\u5f97\u8d85\u8fc7 42 \u5c42\uff0c\u73b0\u5728\u662f\u4e0d\u5f97\u8d85\u8fc7 127 \u5c42\u3002 <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u4e0a\u9762\u7684 Dockerfile \u6b63\u786e\u7684\u5199\u6cd5\u5e94\u8be5\u662f\u8fd9\u6837\uff1a <\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>FROM debian:jessie\nRUN buildDeps='gcc libc6-dev make' \\\n&amp;&amp; apt-get update \\\n&amp;&amp; apt-get install -y $buildDeps \\\n&amp;&amp; wget -O redis.tar.gz \"http:\/\/download.redis.io\/releases\/redis-3.2.5.tar.gz\" \\\n&amp;&amp; mkdir -p \/usr\/src\/redis \\\n&amp;&amp; tar -xzf redis.tar.gz -C \/usr\/src\/redis --strip-components=1 \\\n&amp;&amp; make -C \/usr\/src\/redis \\\n&amp;&amp; make -C \/usr\/src\/redis install \\\n&amp;&amp; rm -rf \/var\/lib\/apt\/lists\/* \\\n&amp;&amp; rm redis.tar.gz \\\n&amp;&amp; rm -r \/usr\/src\/redis \\\n&amp;&amp; apt-get purge -y --auto-remove $buildDeps<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u9996\u5148\uff0c\u4e4b\u524d\u6240\u6709\u7684\u547d\u4ee4\u53ea\u6709\u4e00\u4e2a\u76ee\u7684\uff0c\u5c31\u662f\u7f16\u8bd1\u3001\u5b89\u88c5 redis \u53ef\u6267\u884c\u6587\u4ef6\u3002\u56e0\u6b64\u6ca1\u6709\u5fc5\u8981\u5efa\u7acb\u5f88\u591a\u5c42\uff0c\u8fd9\u53ea\u662f\u4e00\u5c42\u7684\u4e8b\u60c5\u3002\u56e0\u6b64\uff0c\u8fd9\u91cc\u6ca1\u6709\u4f7f\u7528\u5f88\u591a\u4e2a RUN \u5bf9\u4e00\u4e00\u5bf9\u5e94\u4e0d\u540c\u7684\u547d\u4ee4\uff0c\u800c\u662f \u4ec5\u4ec5\u4f7f\u7528\u4e00\u4e2a RUN \u6307\u4ee4\uff0c\u5e76\u4f7f\u7528 &amp;&amp; \u5c06\u5404\u4e2a\u6240\u9700\u547d\u4ee4\u4e32\u8054\u8d77\u6765\u3002\u5c06\u4e4b\u524d\u7684 7 \u5c42\uff0c\u7b80\u5316\u4e3a\u4e86 1 \u5c42\u3002\u5728\u64b0\u5199 Dockerfile \u7684\u65f6\u5019\uff0c\u8981\u7ecf\u5e38\u63d0\u9192\u81ea\u5df1\uff0c\u8fd9\u5e76\u4e0d\u662f\u5728\u5199 Shell \u811a\u672c\uff0c\u800c\u662f\u5728\u5b9a\u4e49\u6bcf \u4e00\u5c42\u8be5\u5982\u4f55\u6784\u5efa\u3002 <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u5e76\u4e14\uff0c\u8fd9\u91cc\u4e3a\u4e86\u683c\u5f0f\u5316\u8fd8\u8fdb\u884c\u4e86\u6362\u884c\u3002<strong>Dockerfile \u652f\u6301 Shell \u7c7b\u7684\u884c\u5c3e\u6dfb\u52a0 \\ \u7684\u547d\u4ee4\u6362\u884c\u65b9 \u5f0f\uff0c\u4ee5\u53ca\u884c\u9996 # \u8fdb\u884c\u6ce8\u91ca\u7684\u683c\u5f0f\u3002<\/strong>\u826f\u597d\u7684\u683c\u5f0f\uff0c\u6bd4\u5982\u6362\u884c\u3001\u7f29\u8fdb\u3001\u6ce8\u91ca\u7b49\uff0c\u4f1a\u8ba9\u7ef4\u62a4\u3001\u6392\u969c\u66f4\u4e3a\u5bb9\u6613\uff0c\u8fd9\u662f\u4e00\u4e2a\u6bd4\u8f83\u597d\u7684\u4e60\u60ef\u3002 <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u6b64\u5916\uff0c\u8fd8\u53ef\u4ee5\u770b\u5230\u8fd9\u4e00\u7ec4\u547d\u4ee4\u7684\u6700\u540e\u6dfb\u52a0\u4e86\u6e05\u7406\u5de5\u4f5c\u7684\u547d\u4ee4\uff0c\u5220\u9664\u4e86\u4e3a\u4e86\u7f16\u8bd1\u6784\u5efa\u6240\u9700\u8981\u7684\u8f6f\u4ef6\uff0c\u6e05\u7406\u4e86\u6240\u6709\u4e0b\u8f7d\u3001\u5c55\u5f00\u7684\u6587\u4ef6\uff0c\u5e76\u4e14\u8fd8\u6e05\u7406\u4e86 apt \u7f13\u5b58\u6587\u4ef6\u3002\u8fd9\u662f\u5f88\u91cd\u8981\u7684\u4e00\u6b65\uff0c\u6211\u4eec\u4e4b\u524d\u8bf4\u8fc7\uff0c\u955c\u50cf\u662f\u591a\u5c42\u5b58\u50a8\uff0c\u6bcf\u4e00\u5c42\u7684\u4e1c\u897f\u5e76\u4e0d\u4f1a\u5728\u4e0b\u4e00\u5c42\u88ab\u5220\u9664\uff0c\u4f1a\u4e00\u76f4\u8ddf\u968f\u7740\u955c\u50cf\u3002 <strong>\u56e0\u6b64\u955c\u50cf\u6784\u5efa\u65f6\uff0c\u4e00\u5b9a\u8981\u786e\u4fdd\u6bcf\u4e00\u5c42\u53ea\u6dfb\u52a0\u771f\u6b63\u9700\u8981\u6dfb\u52a0\u7684\u4e1c\u897f\uff0c\u4efb\u4f55\u65e0\u5173\u7684\u4e1c\u897f\u90fd\u5e94\u8be5\u6e05\u7406\u6389\u3002<\/strong> <\/p>\n\n\n\n<p class=\"has-luminous-vivid-amber-background-color has-background wp-block-paragraph\">\u5f88\u591a\u4eba\u521d\u5b66 Docker \u5236\u4f5c\u51fa\u4e86\u5f88\u81c3\u80bf\u7684\u955c\u50cf\u7684\u539f\u56e0\u4e4b\u4e00\uff0c\u5c31\u662f\u5fd8\u8bb0\u4e86\u6bcf\u4e00\u5c42\u6784\u5efa\u7684\u6700\u540e\u4e00\u5b9a\u8981\u6e05\u7406\u6389\u65e0\u5173\u6587\u4ef6\u3002 <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u56de\u5230\u4e4b\u524d\u5b9a\u5236\u7684 nginx \u955c\u50cf\u7684 Dockerfile \u6765\u3002\u73b0\u5728\u6211\u4eec\u660e\u767d\u4e86\u8fd9\u4e2a Dockerfile \u7684\u5185\u5bb9\uff0c\u90a3\u4e48\u8ba9\u6211\u4eec\u6765\u6784\u5efa\u8fd9\u4e2a\u955c\u50cf\u5427<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u5728 Dockerfile \u6587\u4ef6\u6240\u5728\u76ee\u5f55\u6267\u884c\u547d\u4ee4\u5982\u4e0b\uff1a<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"753\" height=\"260\" src=\"http:\/\/blog.ywdevops.cn\/wp-content\/uploads\/2021\/03\/17-1.png\" alt=\"\" class=\"wp-image-3533\" srcset=\"https:\/\/blog.ywdevops.cn\/wp-content\/uploads\/2021\/03\/17-1.png 753w, https:\/\/blog.ywdevops.cn\/wp-content\/uploads\/2021\/03\/17-1-300x104.png 300w, https:\/\/blog.ywdevops.cn\/wp-content\/uploads\/2021\/03\/17-1-600x207.png 600w\" sizes=\"auto, (max-width: 753px) 100vw, 753px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">\u4ece\u547d\u4ee4\u7684\u8f93\u51fa\u7ed3\u679c\u4e2d\uff0c\u6211\u4eec\u53ef\u4ee5\u6e05\u6670\u7684\u770b\u5230\u955c\u50cf\u7684\u6784\u5efa\u8fc7\u7a0b\u3002\u5728 Step 2 \u4e2d\uff0c\u5982\u540c\u6211\u4eec\u4e4b\u524d\u6240\u8bf4\u7684\u90a3\u6837\uff0c RUN \u6307\u4ee4\u542f\u52a8\u4e86\u4e00\u4e2a\u5bb9\u5668 8bd0fbc49545, \u6267\u884c\u4e86\u6240\u8981\u6c42\u7684\u547d\u4ee4\uff0c\u5e76\u6700\u540e\u63d0\u4ea4\u4e86\u8fd9\u4e00\u5c42ab55dfb13c1d \uff0c\u968f\u540e\u5220\u9664\u4e86\u6240\u7528\u5230\u7684\u8fd9\u4e2a\u5bb9\u56688bd0fbc49545<\/p>\n\n\n\n<p class=\"has-luminous-vivid-amber-background-color has-background wp-block-paragraph\">\u4e0a\u56fe\u4e2d\u7684ab55dfb13c1d\u5373\u4e3a\u6784\u5efa\u540e\u65b0\u7684\u955c\u50cfID<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u4e0a\u56fe\u4e2d\u4f7f\u7528\u4e86 docker build \u547d\u4ee4\u8fdb\u884c\u955c\u50cf\u6784\u5efa\u3002\u5176\u683c\u5f0f\u4e3a\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>docker build &#91;\u9009\u9879] &lt;\u4e0a\u4e0b\u6587\u8def\u5f84\/URL\/-&gt;<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u4e0a\u56fe\u4e2d-t \u540e\u9762\u4e3a\u6784\u5efa\u540e\u65b0\u955c\u50cf\u7684\u540d\u5b57\uff0c\u540e\u9762\u7684\u70b9(.)\u8868\u793a\u4e0a\u4e0b\u6587\u76ee\u5f55(\u8bf4\u662fDockerfile\u6240\u5728\u76ee\u5f55\u4e0d\u51c6\u786e)\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"> \u4ec0\u4e48\u662f\u4e0a\u4e0b\u6587\u5462\uff1f <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u9996\u5148\u6211\u4eec\u8981\u7406\u89e3 docker build \u7684\u5de5\u4f5c\u539f\u7406\u3002Docker \u5728\u8fd0\u884c\u65f6\u5206\u4e3a Docker \u5f15\u64ce\uff08\u4e5f\u5c31\u662f\u670d\u52a1\u7aef\u5b88\u62a4\u8fdb\u7a0b\uff09\u548c\u5ba2\u6237\u7aef\u5de5\u5177\u3002Docker \u7684\u5f15\u64ce\u63d0\u4f9b\u4e86\u4e00\u7ec4 REST API\uff0c\u88ab\u79f0\u4e3a Docker Remote API\uff0c\u800c\u5982 docker \u547d\u4ee4\u8fd9\u6837\u7684\u5ba2\u6237\u7aef\u5de5\u5177\uff0c\u5219\u662f\u901a\u8fc7\u8fd9\u7ec4 API \u4e0e Docker \u5f15\u64ce\u4ea4 \u4e92\uff0c\u4ece\u800c\u5b8c\u6210\u5404\u79cd\u529f\u80fd\u3002\u56e0\u6b64\uff0c\u867d\u7136\u8868\u9762\u4e0a\u6211\u4eec\u597d\u50cf\u662f\u5728\u672c\u673a\u6267\u884c\u5404\u79cd docker \u529f\u80fd\uff0c\u4f46\u5b9e\u9645\u4e0a\uff0c\u4e00\u5207\u90fd\u662f\u4f7f\u7528\u7684\u8fdc\u7a0b\u8c03\u7528\u5f62\u5f0f\u5728\u670d\u52a1\u7aef\uff08Docker \u5f15\u64ce\uff09\u5b8c\u6210\u3002\u4e5f\u56e0\u4e3a\u8fd9\u79cd C\/S \u8bbe\u8ba1\uff0c \u8ba9\u6211\u4eec\u64cd\u4f5c\u8fdc\u7a0b\u670d\u52a1\u5668\u7684 Docker \u5f15\u64ce\u53d8\u5f97\u8f7b\u800c\u6613\u4e3e\u3002 <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u5f53\u6211\u4eec\u8fdb\u884c\u955c\u50cf\u6784\u5efa\u7684\u65f6\u5019\uff0c\u5e76\u975e\u6240\u6709\u5b9a\u5236\u90fd\u4f1a\u901a\u8fc7 RUN \u6307\u4ee4\u5b8c\u6210\uff0c\u7ecf\u5e38\u4f1a\u9700\u8981\u5c06\u4e00\u4e9b\u672c\u5730\u6587\u4ef6\u590d\u5236\u8fdb\u955c\u50cf\uff0c\u6bd4\u5982\u901a\u8fc7 COPY \u6307\u4ee4\u3001 ADD \u6307\u4ee4\u7b49\u3002\u800c docker build \u547d\u4ee4\u6784\u5efa\u955c\u50cf\uff0c\u5176\u5b9e\u5e76\u975e\u5728\u672c\u5730\u6784\u5efa\uff0c\u800c\u662f\u5728\u670d\u52a1\u7aef\uff0c\u4e5f\u5c31\u662f Docker \u5f15\u64ce\u4e2d\u6784\u5efa\u7684\u3002\u90a3\u4e48\u5728\u8fd9\u79cd\u5ba2\u6237\u7aef\/\u670d\u52a1\u7aef\u7684\u67b6\u6784\u4e2d\uff0c\u5982\u4f55\u624d\u80fd\u8ba9\u670d\u52a1\u7aef\u83b7\u5f97\u672c\u5730\u6587\u4ef6\u5462\uff1f <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u8fd9\u5c31\u5f15\u5165\u4e86\u4e0a\u4e0b\u6587\u7684\u6982\u5ff5\u3002\u5f53\u6784\u5efa\u7684\u65f6\u5019\uff0c\u7528\u6237\u4f1a\u6307\u5b9a\u6784\u5efa\u955c\u50cf\u4e0a\u4e0b\u6587\u7684\u8def\u5f84\uff0c docker build \u547d\u4ee4\u5f97\u77e5\u8fd9\u4e2a\u8def\u5f84\u540e\uff0c\u4f1a\u5c06\u8def\u5f84\u4e0b\u7684\u6240\u6709\u5185\u5bb9\u6253\u5305\uff0c\u7136\u540e\u4e0a\u4f20\u7ed9 Docker \u5f15\u64ce\u3002\u8fd9\u6837 Docker \u5f15\u64ce\u6536\u5230\u8fd9\u4e2a\u4e0a\u4e0b\u6587\u5305\u540e\uff0c\u5c55\u5f00\u5c31\u4f1a\u83b7\u5f97\u6784\u5efa\u955c\u50cf\u6240\u9700\u7684\u4e00\u5207\u6587\u4ef6\u3002 <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u5982\u679c\u5728 Dockerfile \u4e2d\u8fd9\u4e48\u5199\uff1a <\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>COPY .\/package.json \/app\/<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u8fd9\u5e76\u4e0d\u662f\u8981\u590d\u5236\u6267\u884c docker build \u547d\u4ee4\u6240\u5728\u7684\u76ee\u5f55\u4e0b\u7684 package.json \uff0c\u4e5f\u4e0d\u662f\u590d\u5236 Dockerfile \u6240\u5728\u76ee\u5f55\u4e0b\u7684 package.json \uff0c\u800c\u662f\u590d\u5236 \u4e0a\u4e0b\u6587\uff08context\uff09 \u76ee\u5f55\u4e0b\u7684 package.json \u3002 <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u56e0\u6b64\uff0c COPY \u8fd9\u7c7b\u6307\u4ee4\u4e2d\u7684\u6e90\u6587\u4ef6\u7684\u8def\u5f84\u90fd\u662f<strong>\u76f8\u5bf9\u8def\u5f84<\/strong>\u3002\u8fd9\u4e5f\u662f\u521d\u5b66\u8005\u7ecf\u5e38\u4f1a\u95ee\u7684\u4e3a\u4ec0\u4e48 COPY ..\/package.json \/app \u6216\u8005 COPY \/opt\/xxxx \/app \u65e0\u6cd5\u5de5\u4f5c\u7684\u539f\u56e0\uff0c\u56e0\u4e3a\u8fd9\u4e9b\u8def\u5f84\u5df2\u7ecf\u8d85\u51fa\u4e86\u4e0a\u4e0b\u6587\u7684\u8303\u56f4\uff0cDocker \u5f15\u64ce\u65e0\u6cd5\u83b7\u5f97\u8fd9\u4e9b\u4f4d\u7f6e\u7684\u6587\u4ef6\u3002\u5982\u679c\u771f\u7684\u9700\u8981\u90a3\u4e9b\u6587\u4ef6\uff0c\u5e94\u8be5\u5c06\u5b83\u4eec\u590d\u5236\u5230\u4e0a\u4e0b\u6587\u76ee\u5f55\u4e2d\u53bb\u3002 <\/p>\n\n\n\n<p class=\"has-luminous-vivid-amber-background-color has-background wp-block-paragraph\">\u5c06\u9700\u8981\u6784\u5efa\u5230\u955c\u50cf\u4e2d\u7684\u6587\u4ef6\u5168\u90e8\u653e\u5728\u548cDockerfile\u76f8\u540c\u8def\u5f84\u4e0b\u5373\u53ef<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u7406\u89e3\u6784\u5efa\u4e0a\u4e0b\u6587\u5bf9\u4e8e\u955c\u50cf\u6784\u5efa\u662f\u5f88\u91cd\u8981\u7684\uff0c\u907f\u514d\u72af\u4e00\u4e9b\u4e0d\u5e94\u8be5\u7684\u9519\u8bef\u3002\u6bd4\u5982\u6709\u4e9b\u521d\u5b66\u8005\u5728\u53d1 \u73b0 COPY \/opt\/xxxx \/app \u4e0d\u5de5\u4f5c\u540e\uff0c\u4e8e\u662f\u5e72\u8106\u5c06 Dockerfile \u653e\u5230\u4e86\u786c\u76d8\u6839\u76ee\u5f55\u53bb\u6784\u5efa\uff0c\u7ed3\u679c\u53d1\u73b0 docker build \u6267\u884c\u540e\uff0c\u5728\u53d1\u9001\u4e00\u4e2a\u51e0\u5341 GB \u7684\u4e1c\u897f\uff0c\u6781\u4e3a\u7f13\u6162\u800c\u4e14\u5f88\u5bb9\u6613\u6784\u5efa\u5931\u8d25\u3002\u90a3\u662f\u56e0\u4e3a\u8fd9\u79cd\u505a\u6cd5\u662f\u5728\u8ba9 docker build \u6253\u5305\u6574\u4e2a\u786c\u76d8\uff0c\u8fd9\u663e\u7136\u662f\u4f7f\u7528\u9519\u8bef\u3002 <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u4e00\u822c\u6765\u8bf4\uff0c\u5e94\u8be5\u4f1a\u5c06 Dockerfile \u7f6e\u4e8e\u4e00\u4e2a\u7a7a\u76ee\u5f55\u4e0b\uff0c\u6216\u8005\u9879\u76ee\u6839\u76ee\u5f55\u4e0b\u3002\u5982\u679c\u8be5\u76ee\u5f55\u4e0b\u6ca1\u6709\u6240\u9700\u6587\u4ef6\uff0c\u90a3\u4e48\u5e94\u8be5\u628a\u6240\u9700\u6587\u4ef6\u590d\u5236\u4e00\u4efd\u8fc7\u6765\u3002\u5982\u679c\u76ee\u5f55\u4e0b\u6709\u4e9b\u4e1c\u897f\u786e\u5b9e\u4e0d\u5e0c\u671b\u6784\u5efa\u65f6\u4f20\u7ed9 Docker \u5f15\u64ce\uff0c\u90a3\u4e48\u53ef\u4ee5\u7528 .gitignore \u4e00\u6837\u7684\u8bed\u6cd5\u5199\u4e00\u4e2a .dockerignore \uff0c\u8be5\u6587\u4ef6\u662f\u7528\u4e8e\u5254\u9664\u4e0d\u9700\u8981\u4f5c\u4e3a\u4e0a\u4e0b\u6587\u4f20\u9012\u7ed9 Docker \u5f15\u64ce\u7684\uff0c\u5982\u4e0b\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>.git                #\u6392\u9664.git\u76ee\u5f55\uff0c\u540e\u9762\u4ee5\u6b64\u7c7b\u63a8\n.gitignore\nDockerfile\n.dockerignore\n.env\n.env.*\n*.log              #\u6392\u9664\u6587\u4ef6\ntmp\/\nbuild\/\ndist\/\nvendor\/\n.idea\/\n.vscode\/<\/code><\/pre>\n\n\n\n<p class=\"has-luminous-vivid-amber-background-color has-background wp-block-paragraph\">\u9ed8\u8ba4\u60c5\u51b5\u4e0b\uff0c\u5982\u679c \u4e0d\u989d\u5916\u6307\u5b9a Dockerfile \u7684\u8bdd\uff0c\u4f1a\u5c06\u4e0a\u4e0b\u6587\u76ee\u5f55\u4e0b\u7684\u540d\u4e3a Dockerfile \u7684\u6587\u4ef6\u4f5c\u4e3a Dockerfile\u3002 <\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-red-color\">\u5b9e\u9645\u4e0a Dockerfile \u7684\u6587\u4ef6\u540d\u5e76\u4e0d\u8981\u6c42\u5fc5\u987b\u4e3a Dockerfile \uff0c\u800c\u4e14\u5e76\u4e0d\u8981\u6c42 \u5fc5\u987b\u4f4d\u4e8e\u4e0a\u4e0b\u6587\u76ee\u5f55\u4e2d\uff0c\u6bd4\u5982\u53ef\u4ee5\u7528 -f ..\/Dockerfile.php \u53c2\u6570\u6307\u5b9a\u67d0\u4e2a\u6587\u4ef6\u4f5c\u4e3a Dockerfile \u3002 \u4f8b\u5982\uff1adocker  build -t \u65b0\u955c\u50cf -f ..\/Dockerfile.php .<\/mark><\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-cyan-blue-color\"><strong> 3\u3001COPY \u590d\u5236\u6587\u4ef6 <\/strong><\/mark><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"> \u548c RUN \u6307\u4ee4\u4e00\u6837\uff0c\u4e5f\u6709\u4e24\u79cd\u683c\u5f0f\uff0c\u4e00\u79cd\u7c7b\u4f3c\u4e8e\u547d\u4ee4\u884c\uff0c\u4e00\u79cd\u7c7b\u4f3c\u4e8e\u51fd\u6570\u8c03\u7528\u3002 \u8bed\u6cd5\u683c\u5f0f\u5982\u4e0b\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>COPY &lt;\u6e90\u8def\u5f84&gt;... &lt;\u76ee\u6807\u8def\u5f84&gt;           \/\/\u65b9\u6cd5\u4e00\nCOPY &#91;\"&lt;\u6e90\u8def\u5f841&gt;\",... \"&lt;\u76ee\u6807\u8def\u5f84&gt;\"]   \/\/\u65b9\u6cd5\u4e8c<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">COPY \u6307\u4ee4\u5c06\u4ece\u6784\u5efa\u4e0a\u4e0b\u6587\u76ee\u5f55\u4e2d &lt;\u6e90\u8def\u5f84&gt; \u7684\u6587\u4ef6\/\u76ee\u5f55\u590d\u5236\u5230\u65b0\u7684\u4e00\u5c42\u7684\u955c\u50cf\u5185\u7684 &lt;\u76ee\u6807\u8def \u5f84&gt; \u4f4d\u7f6e\u3002\u6bd4\u5982\uff1a <\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>COPY package.json \/usr\/src\/app\/<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">&lt;\u6e90\u8def\u5f84&gt; \u53ef\u4ee5\u662f\u591a\u4e2a\uff0c\u751a\u81f3\u53ef\u4ee5\u662f\u901a\u914d\u7b26\uff0c\u5176\u901a\u914d\u7b26\u89c4\u5219\u8981\u6ee1\u8db3 Go \u7684 filepath.Match \u89c4\u5219\uff0c\u5982\uff1a <\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>COPY hom* \/mydir\/ \nCOPY hom?.txt \/mydir\/ <\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">&lt;\u76ee\u6807\u8def\u5f84&gt; \u53ef\u4ee5\u662f\u5bb9\u5668\u5185\u7684\u7edd\u5bf9\u8def\u5f84\uff0c\u4e5f\u53ef\u4ee5\u662f\u76f8\u5bf9\u4e8e\u5de5\u4f5c\u76ee\u5f55\u7684\u76f8\u5bf9\u8def\u5f84\uff08\u5de5\u4f5c\u76ee\u5f55\u53ef\u4ee5 \u7528 WORKDIR \u6307\u4ee4\u6765\u6307\u5b9a\uff09\u3002\u76ee\u6807\u8def\u5f84\u4e0d\u9700\u8981\u4e8b\u5148\u521b\u5efa\uff0c\u5982\u679c\u76ee\u5f55\u4e0d\u5b58\u5728\u4f1a\u5728\u590d\u5236\u6587\u4ef6\u524d\u5148\u884c\u521b\u5efa\u7f3a\u5931\u76ee\u5f55\u3002 <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u9700\u8981\u6ce8\u610f\u4e00\u70b9\uff0c\u4f7f\u7528 COPY \u6307\u4ee4\uff0c\u6e90\u6587\u4ef6\u7684\u5404\u79cd\u5143\u6570\u636e\u90fd\u4f1a\u4fdd\u7559\u3002\u6bd4\u5982\u8bfb\u3001\u5199\u3001\u6267 \u884c\u6743\u9650\u3001\u6587\u4ef6\u53d8\u66f4\u65f6\u95f4\u7b49\u3002\u8fd9\u4e2a\u7279\u6027\u5bf9\u4e8e\u955c\u50cf\u5b9a\u5236\u5f88\u6709\u7528\u3002\u7279\u522b\u662f\u6784\u5efa\u76f8\u5173\u6587\u4ef6\u90fd\u5728\u4f7f\u7528 Git \u8fdb\u884c\u7ba1\u7406\u7684\u65f6\u5019\u3002 <\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-cyan-blue-color\"><strong>4\u3001COPY\u590d\u5236\u76ee\u5f55<\/strong><\/mark><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">COPY\u590d\u5236\u76ee\u5f55\u7684\u65f6\u5019\uff0c\u9700\u8981\u63d0\u524d\u5728\u5bb9\u5668\u4e2d\u521b\u5efa\u54cd\u5e94\u7684\u76ee\u5f55\u624d\u53ef\u4ee5\uff0c\u4f8b\u5982\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>FROM alpine\nmkdir \/usr\/local\/go\/conf          \/\/\u5148\u521b\u5efa\u914d\u7f6e\u6587\u4ef6\u76ee\u5f55\nCOPY  conf  \/usr\/local\/go\/conf    \/\/\u5c06\u4e0a\u4e0b\u6587\u7684conf\u590d\u5236\u5230\u5bb9\u5668\u4e2d\u6765<\/code><\/pre>\n\n\n\n<p class=\"has-luminous-vivid-amber-background-color has-background wp-block-paragraph\">\u6ce8\u610f\uff1a\u4e0a\u8ff0COPY\u547d\u4ee4\u6267\u884c\u540e\uff0c\u5b9e\u9645\u662f\u5c06conf\u76ee\u5f55\u4e0b\u7684\u5168\u90e8\u6587\u4ef6\u590d\u5236\u5230\u5bb9\u5668\u4e2d\u521b\u5efa\u7684conf\u76ee\u5f55\u4e0b\uff0c\u800c\u4e0d\u662f\u590d\u5236conf\u8fdb\u53bb<\/p>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\"><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-cyan-blue-color\"><strong>5\u3001ADD \u66f4\u9ad8\u7ea7\u7684\u590d\u5236\u6587\u4ef6<\/strong><\/mark><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">ADD \u6307\u4ee4\u548c COPY \u7684\u683c\u5f0f\u548c\u6027\u8d28\u57fa\u672c\u4e00\u81f4\u3002\u4f46\u662f\u5728 COPY \u57fa\u7840\u4e0a\u589e\u52a0\u4e86\u4e00\u4e9b\u529f\u80fd <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u6bd4\u5982 &lt;\u6e90\u8def\u5f84&gt; \u53ef\u4ee5\u662f\u4e00\u4e2a URL \uff0c\u8fd9\u79cd\u60c5\u51b5\u4e0b\uff0cDocker \u5f15\u64ce\u4f1a\u8bd5\u56fe\u53bb\u4e0b\u8f7d\u8fd9\u4e2a\u94fe\u63a5\u7684\u6587\u4ef6\u653e\u5230 &lt;\u76ee\u6807\u8def\u5f84&gt; \u53bb\u3002\u4e0b\u8f7d\u540e\u7684\u6587\u4ef6\u6743\u9650\u81ea\u52a8\u8bbe\u7f6e\u4e3a 600 \uff0c\u5982\u679c\u8fd9\u5e76\u4e0d\u662f\u60f3\u8981\u7684\u6743\u9650\uff0c\u90a3\u4e48\u8fd8\u9700\u8981\u589e\u52a0\u989d\u5916\u7684\u4e00\u5c42 RUN \u8fdb\u884c\u6743\u9650\u8c03\u6574\uff0c\u53e6\u5916\uff0c\u5982\u679c\u4e0b\u8f7d\u7684\u662f\u4e2a\u538b\u7f29\u5305\uff0c\u9700\u8981\u89e3\u538b\u7f29\uff0c\u4e5f\u4e00\u6837\u8fd8\u9700\u8981\u989d\u5916\u7684\u4e00\u5c42 RUN \u6307\u4ee4\u8fdb\u884c\u89e3\u538b\u7f29\u3002\u6240\u4ee5\u4e0d\u5982\u76f4\u63a5\u4f7f\u7528 RUN \u6307\u4ee4\uff0c\u7136\u540e\u4f7f\u7528 wget \u6216 \u8005 curl \u5de5\u5177\u4e0b\u8f7d\uff0c\u5904\u7406\u6743\u9650\u3001\u89e3\u538b\u7f29\u3001\u7136\u540e\u6e05\u7406\u65e0\u7528\u6587\u4ef6\u66f4\u5408\u7406\u3002\u56e0\u6b64\uff0c\u8fd9\u4e2a\u529f\u80fd\u5176\u5b9e\u5e76\u4e0d\u5b9e\u7528\uff0c\u800c\u4e14<strong>\u4e0d\u63a8\u8350\u4f7f\u7528<\/strong>\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u5982\u679c &lt;\u6e90\u8def\u5f84&gt; \u4e3a\u4e00\u4e2a tar \u538b\u7f29\u6587\u4ef6\u7684\u8bdd\uff0c\u538b\u7f29\u683c\u5f0f\u4e3a gzip , bzip2 \u4ee5\u53ca xz \u7684\u60c5\u51b5 \u4e0b\uff0c ADD \u6307\u4ee4\u5c06\u4f1a\u81ea\u52a8\u89e3\u538b\u7f29\u8fd9\u4e2a\u538b\u7f29\u6587\u4ef6\u5230 &lt;\u76ee\u6807\u8def\u5f84&gt; \u53bb\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u5728\u67d0\u4e9b\u60c5\u51b5\u4e0b\uff0c\u5982\u679c\u6211\u4eec\u771f\u7684\u662f\u5e0c\u671b\u590d\u5236\u4e2a\u538b\u7f29\u6587\u4ef6\u8fdb\u53bb\uff0c\u800c\u4e0d\u89e3\u538b\u7f29\uff0c\u8fd9\u65f6\u5c31\u4e0d\u53ef\u4ee5\u4f7f \u7528 ADD \u547d\u4ee4\u4e86\u3002 <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u5728 Docker \u5b98\u65b9\u7684 Dockerfile \u6700\u4f73\u5b9e\u8df5\u6587\u6863\u4e2d\u8981\u6c42\uff0c\u5c3d\u53ef\u80fd\u7684\u4f7f\u7528 COPY \uff0c\u56e0\u4e3a COPY \u7684\u8bed\u4e49\u5f88\u660e\u786e\uff0c\u5c31\u662f\u590d\u5236\u6587\u4ef6\u800c\u5df2\uff0c\u800c ADD \u5219\u5305\u542b\u4e86\u66f4\u590d\u6742\u7684\u529f\u80fd\uff0c\u5176\u884c\u4e3a\u4e5f\u4e0d\u4e00\u5b9a\u5f88\u6e05\u6670\u3002\u6700\u9002\u5408\u4f7f\u7528 ADD \u7684\u573a\u5408\uff0c\u5c31\u662f\u6240\u63d0\u53ca\u7684\u9700\u8981\u81ea\u52a8\u89e3\u538b\u7f29\u7684\u573a\u5408\u3002 <\/p>\n\n\n\n<p class=\"has-luminous-vivid-amber-background-color has-background wp-block-paragraph\">\u9700\u8981\u6ce8\u610f\u7684\u662f\uff0c ADD \u6307\u4ee4\u4f1a\u4ee4\u955c\u50cf\u6784\u5efa\u7f13\u5b58\u5931\u6548\uff0c\u4ece\u800c\u53ef\u80fd\u4f1a\u4ee4\u955c\u50cf\u6784\u5efa\u53d8\u5f97\u6bd4\u8f83\u7f13\u6162\u3002 <\/p>\n\n\n\n<p class=\"wp-block-paragraph\"> \u56e0\u6b64\u5728 COPY \u548c ADD \u6307\u4ee4\u4e2d\u9009\u62e9\u7684\u65f6\u5019\uff0c\u53ef\u4ee5\u9075\u5faa\u8fd9\u6837\u7684\u539f\u5219\uff0c\u6240\u6709\u7684\u6587\u4ef6\u590d\u5236\u5747\u4f7f\u7528 COPY \u6307\u4ee4\uff0c\u4ec5\u5728\u9700\u8981\u81ea\u52a8\u89e3\u538b\u7f29\u7684\u573a\u5408\u4f7f\u7528 ADD \u3002 <\/p>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\"><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-cyan-blue-color\"><strong> 6\u3001CMD \u5bb9\u5668\u542f\u52a8\u547d\u4ee4<\/strong> <\/mark><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">CMD \u6307\u4ee4\u7684\u683c\u5f0f\u548c RUN \u76f8\u4f3c\uff0c\u4e5f\u662f\u4e24\u79cd\u683c\u5f0f\uff1a <\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>shell \u683c\u5f0f\uff1a CMD &lt;\u547d\u4ee4&gt;\nexec \u683c\u5f0f\uff1a CMD &#91;\"\u53ef\u6267\u884c\u6587\u4ef6\", \"\u53c2\u65701\", \"\u53c2\u65702\"...]\n\u53c2\u6570\u5217\u8868\u683c\u5f0f\uff1a CMD &#91;\"\u53c2\u65701\", \"\u53c2\u65702\"...] \u3002\u5728\u6307\u5b9a\u4e86 ENTRYPOINT \u6307\u4ee4\u540e\uff0c\u7528 CMD \u6307\u5b9a\u5177\u4f53\u7684\u53c2\u6570\u3002<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u4e4b\u524d\u4ecb\u7ecd\u5bb9\u5668\u7684\u65f6\u5019\u66fe\u7ecf\u8bf4\u8fc7\uff0cDocker \u4e0d\u662f\u865a\u62df\u673a\uff0c\u5bb9\u5668\u5c31\u662f\u8fdb\u7a0b\u3002\u65e2\u7136\u662f\u8fdb\u7a0b\uff0c\u90a3\u4e48\u5728\u542f\u52a8\u5bb9\u5668\u7684\u65f6\u5019\uff0c\u9700\u8981\u6307\u5b9a\u6240\u8fd0\u884c\u7684\u7a0b\u5e8f\u53ca\u53c2\u6570\u3002 CMD \u6307\u4ee4\u5c31\u662f\u7528\u4e8e\u6307\u5b9a\u9ed8\u8ba4\u7684\u5bb9\u5668\u4e3b\u8fdb\u7a0b\u7684\u542f\u52a8\u547d\u4ee4\u7684\u3002 <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u5728\u6307\u4ee4\u683c\u5f0f\u4e0a\uff0c\u4e00\u822c\u63a8\u8350\u4f7f\u7528 exec \u683c\u5f0f\uff0c\u8fd9\u7c7b\u683c\u5f0f\u5728\u89e3\u6790\u65f6\u4f1a\u88ab\u89e3\u6790\u4e3a JSON \u6570\u7ec4\uff0c\u56e0\u6b64 \u4e00\u5b9a\u8981\u4f7f\u7528\u53cc\u5f15\u53f7 &#8221; \uff0c\u800c\u4e0d\u8981\u4f7f\u7528\u5355\u5f15\u53f7\u3002 <\/p>\n\n\n\n<p class=\"has-luminous-vivid-amber-background-color has-background wp-block-paragraph\">Docker \u4e0d\u662f\u865a\u62df\u673a\uff0c\u5bb9\u5668\u4e2d\u7684\u5e94\u7528\u90fd\u5e94\u8be5\u4ee5\u524d\u53f0\u6267\u884c\uff0c\u800c\u4e0d\u662f\u50cf\u865a\u62df\u673a\u3001\u7269\u7406\u673a\u91cc\u9762\u90a3\u6837\uff0c \u7528 upstart\/systemd \u53bb\u542f\u52a8\u540e\u53f0\u670d\u52a1\uff0c\u5bb9\u5668\u5185\u6ca1\u6709\u540e\u53f0\u670d\u52a1\u7684\u6982\u5ff5\u3002 <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u5bf9\u4e8e\u5bb9\u5668\u800c\u8a00\uff0c\u5176\u542f\u52a8\u7a0b\u5e8f\u5c31\u662f\u5bb9\u5668\u5e94\u7528\u8fdb\u7a0b\uff0c\u5bb9\u5668\u5c31\u662f\u4e3a\u4e86\u4e3b\u8fdb\u7a0b\u800c\u5b58\u5728\u7684\uff0c\u4e3b\u8fdb\u7a0b\u9000\u51fa\uff0c\u5bb9\u5668\u5c31\u5931\u53bb\u4e86\u5b58\u5728\u7684\u610f\u4e49\uff0c\u4ece\u800c\u9000\u51fa\uff0c\u5176\u5b83\u8f85\u52a9\u8fdb\u7a0b\u4e0d\u662f\u5b83\u9700\u8981\u5173\u5fc3\u7684\u4e1c\u897f\u3002 <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">1\u3001\u4e0b\u9762\u7684Dockerfile\u901a\u8fc7CMD\u5b9e\u73b0\u8f93\u51fa\u547d\u4ee4\uff0c\u5982\u56fe\uff1a<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"710\" height=\"160\" src=\"https:\/\/blog.ywdevops.cn\/wp-content\/uploads\/2022\/12\/1-1.png\" alt=\"\" class=\"wp-image-10860\" srcset=\"https:\/\/blog.ywdevops.cn\/wp-content\/uploads\/2022\/12\/1-1.png 710w, https:\/\/blog.ywdevops.cn\/wp-content\/uploads\/2022\/12\/1-1-300x68.png 300w, https:\/\/blog.ywdevops.cn\/wp-content\/uploads\/2022\/12\/1-1-600x135.png 600w\" sizes=\"auto, (max-width: 710px) 100vw, 710px\" \/><\/figure>\n\n\n\n<ul class=\"wp-block-list\">\n<li>LABEL: \u901a\u8fc7\u952e\u503c\u5bf9\u7684\u5f62\u5f0f\u8bbe\u5b9a\u6807\u7b7e\uff0c\u4e0a\u56fe\u4e2d\u5b9a\u4e49\u4f5c\u8005\u4e3agongguan<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">\u6253\u5305\u955c\u50cf\uff0c\u6267\u884c\u547d\u4ee4\u5982\u4e0b\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>cd dockerfile               #\u8fdb\u5165Dockerfile\u6587\u4ef6\u6240\u5728\u76ee\u5f55\ndocker build -t gongguan .  #\u6253\u5305\u955c\u50cf<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u4e34\u65f6\u8fd0\u884c\u4e00\u4e0b\u955c\u50cf\uff0c\u67e5\u770b\u7ed3\u679c\uff0c\u5982\u56fe\uff1a<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"709\" height=\"67\" src=\"https:\/\/blog.ywdevops.cn\/wp-content\/uploads\/2022\/12\/2-1.png\" alt=\"\" class=\"wp-image-10862\" srcset=\"https:\/\/blog.ywdevops.cn\/wp-content\/uploads\/2022\/12\/2-1.png 709w, https:\/\/blog.ywdevops.cn\/wp-content\/uploads\/2022\/12\/2-1-300x28.png 300w, https:\/\/blog.ywdevops.cn\/wp-content\/uploads\/2022\/12\/2-1-600x57.png 600w\" sizes=\"auto, (max-width: 709px) 100vw, 709px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">\u5982\u679c\u5728\u542f\u52a8\u5bb9\u5668\u7684\u65f6\u5019\u6307\u5b9a\u4e86\u547d\u4ee4\u5373\u53ef\u66ff\u6362\u5185\u5bb9\u7684CMD\u547d\u4ee4\uff0c\u5982\u56fe\uff1a<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"709\" height=\"76\" src=\"https:\/\/blog.ywdevops.cn\/wp-content\/uploads\/2022\/12\/3-1.png\" alt=\"\" class=\"wp-image-10864\" srcset=\"https:\/\/blog.ywdevops.cn\/wp-content\/uploads\/2022\/12\/3-1.png 709w, https:\/\/blog.ywdevops.cn\/wp-content\/uploads\/2022\/12\/3-1-300x32.png 300w, https:\/\/blog.ywdevops.cn\/wp-content\/uploads\/2022\/12\/3-1-600x64.png 600w\" sizes=\"auto, (max-width: 709px) 100vw, 709px\" \/><\/figure>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\"><strong><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-purple-color\">7\u3001ENTRYPOINT \u5165\u53e3\u70b9 <\/mark><\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">ENTRYPOINT \u7684\u683c\u5f0f\u548c RUN \u6307\u4ee4\u683c\u5f0f\u4e00\u6837\uff0c\u5206\u4e3a exec \u683c\u5f0f\u548c shell \u683c\u5f0f\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">ENTRYPOINT \u7684\u76ee\u7684\u548c CMD \u4e00\u6837\uff0c\u90fd\u662f\u5728\u6307\u5b9a\u5bb9\u5668\u542f\u52a8\u7a0b\u5e8f\u53ca\u53c2\u6570\u3002 ENTRYPOINT \u5728\u8fd0\u884c\u65f6 \u4e5f\u53ef\u4ee5\u66ff\u4ee3\uff0c\u4e0d\u8fc7\u6bd4 CMD \u8981\u7565\u663e\u7e41\u7410\uff0c\u9700\u8981\u901a\u8fc7 docker run \u7684\u53c2\u6570 &#8211;entrypoint \u6765\u6307\u5b9a\u3002 <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u5f53\u6307\u5b9a\u4e86 ENTRYPOINT \u540e\uff0c CMD \u7684\u542b\u4e49\u5c31\u53d1\u751f\u4e86\u6539\u53d8\uff0c\u4e0d\u518d\u662f\u76f4\u63a5\u7684\u8fd0\u884c\u5176\u547d\u4ee4\uff0c\u800c\u662f\u5c06 CMD \u7684\u5185\u5bb9\u4f5c\u4e3a\u53c2\u6570\u4f20\u7ed9 ENTRYPOINT \u6307\u4ee4\uff0c\u6362\u53e5\u8bdd\u8bf4\u5b9e\u9645\u6267\u884c\u65f6\uff0c\u5c06\u53d8\u4e3a\uff1a    <\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;ENTRYPOINT&gt; \"&lt;CMD&gt;\"<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u4e0b\u9762\u901a\u8fc7ENTRYPOINT\u5b9e\u73b0\u8ddf\u4e0a\u9762CMD\u540c\u6837\u7684\u529f\u80fd\uff0c\u5982\u56fe\uff1a<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"710\" height=\"150\" src=\"https:\/\/blog.ywdevops.cn\/wp-content\/uploads\/2022\/12\/5-1.png\" alt=\"\" class=\"wp-image-10867\" srcset=\"https:\/\/blog.ywdevops.cn\/wp-content\/uploads\/2022\/12\/5-1.png 710w, https:\/\/blog.ywdevops.cn\/wp-content\/uploads\/2022\/12\/5-1-300x63.png 300w, https:\/\/blog.ywdevops.cn\/wp-content\/uploads\/2022\/12\/5-1-600x127.png 600w\" sizes=\"auto, (max-width: 710px) 100vw, 710px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">\u8fd0\u884c\u7ed3\u679c\u5982\u4e0b\uff1a<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"709\" height=\"60\" src=\"https:\/\/blog.ywdevops.cn\/wp-content\/uploads\/2022\/12\/6-1.png\" alt=\"\" class=\"wp-image-10869\" srcset=\"https:\/\/blog.ywdevops.cn\/wp-content\/uploads\/2022\/12\/6-1.png 709w, https:\/\/blog.ywdevops.cn\/wp-content\/uploads\/2022\/12\/6-1-300x25.png 300w, https:\/\/blog.ywdevops.cn\/wp-content\/uploads\/2022\/12\/6-1-600x51.png 600w\" sizes=\"auto, (max-width: 709px) 100vw, 709px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">\u4e5f\u53ef\u4ee5\u5728\u8fd0\u884c\u547d\u4ee4\u7684\u65f6\u5019\u8fdb\u884c\u8986\u76d6\uff0c\u4f8b\u5982\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>docker run --rm --entrypoint=echo  gongguan \"hello,gongguan\"<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u5982\u679cCMD\u548cENTRYPOINT\u540c\u65f6\u51fa\u73b0\uff0cCMD\u5185\u5bb9\u5c06\u4f5c\u4e3a\u53c2\u6570\u4f20\u9012\u7ed9ENTRYPOINT\uff0c\u5982\u56fe\uff1a<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"709\" height=\"166\" src=\"https:\/\/blog.ywdevops.cn\/wp-content\/uploads\/2022\/12\/7-1.png\" alt=\"\" class=\"wp-image-10871\" srcset=\"https:\/\/blog.ywdevops.cn\/wp-content\/uploads\/2022\/12\/7-1.png 709w, https:\/\/blog.ywdevops.cn\/wp-content\/uploads\/2022\/12\/7-1-300x70.png 300w, https:\/\/blog.ywdevops.cn\/wp-content\/uploads\/2022\/12\/7-1-600x140.png 600w\" sizes=\"auto, (max-width: 709px) 100vw, 709px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"708\" height=\"67\" src=\"https:\/\/blog.ywdevops.cn\/wp-content\/uploads\/2022\/12\/8.png\" alt=\"\" class=\"wp-image-10873\" srcset=\"https:\/\/blog.ywdevops.cn\/wp-content\/uploads\/2022\/12\/8.png 708w, https:\/\/blog.ywdevops.cn\/wp-content\/uploads\/2022\/12\/8-300x28.png 300w, https:\/\/blog.ywdevops.cn\/wp-content\/uploads\/2022\/12\/8-600x57.png 600w\" sizes=\"auto, (max-width: 708px) 100vw, 708px\" \/><\/figure>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\"><strong><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-cyan-blue-color\"> <\/mark><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-purple-color\">8\u3001ENV \u8bbe\u7f6e\u73af\u5883\u53d8\u91cf <\/mark><\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u8fd9\u4e2a\u6307\u4ee4\u5f88\u7b80\u5355\uff0c\u5c31\u662f\u8bbe\u7f6e\u73af\u5883\u53d8\u91cf\u800c\u5df2\uff0c\u65e0\u8bba\u662f\u540e\u9762\u7684\u5176\u5b83\u6307\u4ee4\uff0c\u5982 RUN \uff0c\u8fd8\u662f\u8fd0\u884c\u65f6\u7684 \u5e94\u7528\uff0c\u90fd\u53ef\u4ee5\u76f4\u63a5\u4f7f\u7528\u8fd9\u91cc\u5b9a\u4e49\u7684\u73af\u5883\u53d8\u91cf\u3002 <\/p>\n\n\n\n<p class=\"wp-block-paragraph\"> \u683c\u5f0f\u6709\u4e24\u79cd\uff1a <\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>ENV &lt;key&gt; &lt;value&gt;\nENV &lt;key1&gt;=&lt;value1&gt; &lt;key2&gt;=&lt;value2&gt;...<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u73af\u5883\u53d8\u91cf\u4e5f\u652f\u6301\u6362\u884c\uff0c\u5982\u4e0b\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>ENV VERSION=1.0 DEBUG=on \\\nNAME=\"Happy Feet\"\n#\u8fd9\u4e2a\u4f8b\u5b50\u4e2d\u6f14\u793a\u4e86\u5982\u4f55\u6362\u884c\uff0c\u4ee5\u53ca\u5bf9\u542b\u6709\u7a7a\u683c\u7684\u503c\u7528\u53cc\u5f15\u53f7\u62ec\u8d77\u6765\u7684\u529e\u6cd5\uff0c\u8fd9\u548c Shell \u4e0b\u7684\u884c\u4e3a\u662f\u4e00\u81f4\u7684\u3002<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u5b9a\u4e49\u4e86\u73af\u5883\u53d8\u91cf\uff0c\u90a3\u4e48\u5728\u540e\u7eed\u7684\u6307\u4ee4\u4e2d\uff0c\u5c31\u53ef\u4ee5\u4f7f\u7528\u8fd9\u4e2a\u73af\u5883\u53d8\u91cf\u3002\u6bd4\u5982\u5728\u5b98\u65b9 node \u955c\u50cf Dockerfile \u4e2d\uff0c\u5c31\u6709\u7c7b\u4f3c\u8fd9\u6837\u7684\u4ee3\u7801\uff1a <\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>ENV NODE_VERSION 7.2.0\nRUN curl -SLO \"https:\/\/nodejs.org\/dist\/v$NODE_VERSION\/node-v$NODE_VERSION-linux-x64.ta\nr.xz\" \\\n&amp;&amp; curl -SLO \"https:\/\/nodejs.org\/dist\/v$NODE_VERSION\/SHASUMS256.txt.asc\" \\\n&amp;&amp; gpg --batch --decrypt --output SHASUMS256.txt SHASUMS256.txt.asc \\\n&amp;&amp; grep \" node-v$NODE_VERSION-linux-x64.tar.xz\\$\" SHASUMS256.txt | sha256sum -c - \\\n&amp;&amp; tar -xJf \"node-v$NODE_VERSION-linux-x64.tar.xz\" -C \/usr\/local --strip-components=\n1 \\\n&amp;&amp; rm \"node-v$NODE_VERSION-linux-x64.tar.xz\" SHASUMS256.txt.asc SHASUMS256.txt \\\n&amp;&amp; ln -s \/usr\/local\/bin\/node \/usr\/local\/bin\/nodejs<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u5728\u8fd9\u91cc\u5148\u5b9a\u4e49\u4e86\u73af\u5883\u53d8\u91cf NODE_VERSION \uff0c\u5176\u540e\u7684 RUN \u8fd9\u5c42\u91cc\uff0c\u591a\u6b21\u4f7f\u7528 $NODE_VERSION \u6765 \u8fdb\u884c\u64cd\u4f5c\u5b9a\u5236\u3002\u53ef\u4ee5\u770b\u5230\uff0c\u5c06\u6765\u5347\u7ea7\u955c\u50cf\u6784\u5efa\u7248\u672c\u7684\u65f6\u5019\uff0c\u53ea\u9700\u8981\u66f4\u65b0 7.2.0 \u5373 \u53ef\uff0c Dockerfile \u6784\u5efa\u7ef4\u62a4\u53d8\u5f97\u66f4\u8f7b\u677e\u4e86\u3002 <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u4e0b\u5217\u6307\u4ee4\u53ef\u4ee5\u652f\u6301\u73af\u5883\u53d8\u91cf\u5c55\u5f00\uff1a <\/p>\n\n\n\n<p class=\"wp-block-paragraph\"> ADD \u3001 COPY \u3001 ENV \u3001 EXPOSE \u3001 LABEL \u3001 USER \u3001 WORKDIR \u3001 VOLUME \u3001 STOPSIGNAL \u3001 ONBU ILD \u3002 <\/p>\n\n\n\n<p class=\"has-luminous-vivid-amber-background-color has-background wp-block-paragraph\">\u73af\u5883\u53d8\u91cf\u53ef\u4ee5\u4f7f\u7528\u7684\u5730\u65b9\u5f88\u591a\uff0c\u5f88\u5f3a\u5927\u3002\u901a\u8fc7\u73af\u5883\u53d8\u91cf\uff0c\u6211 \u4eec\u53ef\u4ee5\u8ba9\u4e00\u4efd Dockerfile \u5236\u4f5c\u66f4\u591a\u7684\u955c\u50cf\uff0c\u53ea\u9700\u4f7f\u7528\u4e0d\u540c\u7684\u73af\u5883\u53d8\u91cf\u5373\u53ef\u3002 <\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong> <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-cyan-blue-color\">9\u3001VOLUME \u5b9a\u4e49\u533f\u540d\u5377 <\/mark><\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"> \u683c\u5f0f\u4e3a\uff1a <\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>VOLUME &#91;\"&lt;\u8def\u5f841&gt;\", \"&lt;\u8def\u5f842&gt;\"...]\nVOLUME &lt;\u8def\u5f84&gt;<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u5bb9\u5668\u8fd0\u884c\u65f6\u5e94\u8be5\u5c3d\u91cf\u4fdd\u6301\u5bb9\u5668\u5b58\u50a8\u5c42\u4e0d\u53d1\u751f\u5199\u64cd\u4f5c\uff0c\u5bf9\u4e8e\u6570\u636e\u5e93\u7c7b\u9700\u8981\u4fdd\u5b58 \u52a8\u6001\u6570\u636e\u7684\u5e94\u7528\uff0c\u5176\u6570\u636e\u5e93\u6587\u4ef6\u5e94\u8be5\u4fdd\u5b58\u4e8e\u5377(volume)\u4e2d\uff0c  \u4e3a\u4e86\u9632\u6b62\u8fd0\u884c\u65f6\u7528\u6237\u5fd8\u8bb0\u5c06\u52a8\u6001\u6587\u4ef6\u6240\u4fdd\u5b58\u76ee\u5f55\u6302\u8f7d\u4e3a\u5377\uff0c\u5728 Dockerfile \u4e2d\uff0c\u6211\u4eec\u53ef\u4ee5\u4e8b\u5148\u6307\u5b9a\u67d0\u4e9b\u76ee\u5f55\u6302\u8f7d\u4e3a\u533f\u540d\u5377\uff0c\u8fd9\u6837\u5728\u8fd0\u884c\u65f6\u5982\u679c\u7528\u6237\u4e0d\u6307\u5b9a\u6302\u8f7d\uff0c\u5176\u5e94\u7528\u4e5f\u53ef\u4ee5\u6b63\u5e38\u8fd0\u884c\uff0c\u4e0d\u4f1a\u5411\u5bb9\u5668\u5b58\u50a8\u5c42\u5199\u5165\u5927\u91cf\u6570\u636e\u3002 <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u4f8b\u5982\uff1a VOLUME \/data <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u6302\u8f7d\u5230\u5bbf\u4e3b\u673a\u7684\u8def\u5f84\u4e3a\/data\/docker\/volumes\/30713a21e14a37ab3fa29573f69e62b964fa83e760639ce0\/_data\uff0c\/data\/docker\u4e3a\u5b89\u88c5\u65f6\u914d\u7f6e\u7684\u5b89\u88c5\u8def\u5f84\uff0c\u53ef\u5728daemon.json\u4e2d\u81ea\u5b9a\u4e49\uff0c30713a21e14a37ab3fa29573f&#8230;.\u7684\u503c\u4e3adocker\u81ea\u5e26\u7684\u5b58\u50a8\u5377\u7684\u540d\u5b57\uff0c\u901a\u8fc7docker volume ls\u53ef\u67e5\u770b\uff0c\u6bcf\u53f0\u673a\u5668\u4e0d\u540c<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u4e0a\u9762\u7684 \/data \u76ee\u5f55\u5c31\u4f1a\u5728\u8fd0\u884c\u65f6\u81ea\u52a8\u6302\u8f7d\u4e3a\u533f\u540d\u5377\uff0c\u4efb\u4f55\u5411 \/data \u4e2d\u5199\u5165\u7684\u4fe1\u606f\u90fd\u4e0d\u4f1a\u8bb0\u5f55\u8fdb\u5bb9\u5668\u5b58\u50a8\u5c42\uff0c\u4ece\u800c\u4fdd\u8bc1\u4e86\u5bb9\u5668\u5b58\u50a8\u5c42\u7684\u65e0\u72b6\u6001\u5316\u3002\u5f53\u7136\uff0c\u8fd0\u884c\u65f6\u53ef\u4ee5\u8986\u76d6\u8fd9\u4e2a\u6302\u8f7d\u8bbe \u7f6e\u3002\u6bd4\u5982\uff1a  docker run -d -v mydata:\/data xxxx <\/p>\n\n\n\n<p class=\"has-luminous-vivid-amber-background-color has-background wp-block-paragraph\">\u5728Dockerfile\u4e2d\u53ef\u4ee5\u8fd9\u6837\u5199\uff1aVOLUME[&#8220;\/data&#8221;] \u8868\u793a\u5c06\u5bb9\u5668\u5185\u7684data\u76ee\u5f55\u6302\u8f7d\u51fa\u6765\uff0cVOLUME[&#8220;\/data&#8221;,&#8221;abcd&#8221;] \u8868\u793a\u5c06\u5bb9\u5668\u7684\u4e24\u4e2a\u76ee\u5f55\u6302\u8f7d\u51fa\u6765\uff0c<strong>\u6ce8\u610f\uff1a\u4e2d\u62ec\u53f7\u5185\u7528\u53cc\u5f15\u53f7<\/strong>\uff0c\u53ef\u4ee5\u901a\u8fc7docker inspect  \u5bb9\u5668\u540d    \u67e5\u770b\u5bf9\u5e94\u7684\u5bbf\u4e3b\u673a\u7684\u6302\u8f7d\u8def\u5f84(\u5728Mounts\u6a21\u5757\u4e0b)<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong> <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-cyan-blue-color\">10\u3001EXPOSE \u58f0\u660e\u7aef\u53e3 <\/mark><\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"> \u683c\u5f0f\u4e3a EXPOSE &lt;\u7aef\u53e31&gt; [&lt;\u7aef\u53e32&gt;&#8230;] <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">EXPOSE \u6307\u4ee4\u662f\u58f0\u660e\u8fd0\u884c\u65f6\u5bb9\u5668\u63d0\u4f9b\u670d\u52a1\u7aef\u53e3\uff0c\u8fd9\u53ea\u662f\u4e00\u4e2a\u58f0\u660e\uff0c\u5728\u8fd0\u884c\u65f6\u5e76\u4e0d\u4f1a\u56e0\u4e3a\u8fd9\u4e2a\u58f0\u660e\u5e94\u7528\u5c31\u4f1a\u5f00\u542f\u8fd9\u4e2a\u7aef\u53e3\u7684\u670d\u52a1\u3002 <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u5728 Dockerfile \u4e2d\u5199\u5165\u8fd9\u6837\u7684\u58f0\u660e\u6709\u4e24\u4e2a\u597d\u5904\uff0c\u4e00\u4e2a\u662f\u5e2e\u52a9\u955c\u50cf\u4f7f\u7528\u8005\u7406\u89e3\u8fd9\u4e2a\u955c\u50cf\u670d\u52a1\u7684\u5b88\u62a4\u7aef\u53e3\uff0c\u4ee5\u65b9\u4fbf\u914d\u7f6e\u6620\u5c04\uff1b\u53e6\u4e00\u4e2a\u7528\u5904\u5219\u662f\u5728\u8fd0\u884c\u65f6\u4f7f\u7528\u968f\u673a\u7aef\u53e3\u6620\u5c04\u65f6\uff0c\u4e5f\u5c31\u662f docker run -P \u65f6\uff0c\u4f1a\u81ea\u52a8\u968f\u673a\u6620\u5c04 EXPOSE \u7684\u7aef\u53e3\u3002 <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u8981\u5c06 EXPOSE \u548c\u5728\u8fd0\u884c\u65f6\u4f7f\u7528 -p &lt;\u5bbf\u4e3b\u7aef\u53e3&gt;:&lt;\u5bb9\u5668\u7aef\u53e3&gt; \u533a\u5206\u5f00\u6765\u3002 -p \uff0c\u662f\u6620\u5c04\u5bbf\u4e3b\u7aef\u53e3\u548c\u5bb9\u5668\u7aef\u53e3\uff0c\u6362\u53e5\u8bdd\u8bf4\uff0c\u5c31\u662f\u5c06\u5bb9\u5668\u7684\u5bf9\u5e94\u7aef\u53e3\u670d\u52a1\u516c\u5f00\u7ed9\u5916\u754c\u8bbf\u95ee\uff0c\u800c EXPOSE \u4ec5\u4ec5\u662f\u58f0\u660e\u5bb9\u5668\u6253\u7b97\u4f7f\u7528\u4ec0\u4e48\u7aef\u53e3\u800c\u5df2\uff0c\u5e76\u4e0d\u4f1a\u81ea\u52a8\u5728\u5bbf\u4e3b\u8fdb\u884c\u7aef\u53e3\u6620\u5c04\u3002 <\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-cyan-blue-color\"><strong>11\u3001WORKDIR \u6307\u5b9a\u5de5\u4f5c\u76ee\u5f55 <\/strong><\/mark><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"> \u683c\u5f0f\u4e3a WORKDIR &lt;\u5de5\u4f5c\u76ee\u5f55\u8def\u5f84&gt; <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u4f7f\u7528 WORKDIR \u6307\u4ee4\u53ef\u4ee5\u6765\u6307\u5b9a\u5de5\u4f5c\u76ee\u5f55\uff08\u6216\u8005\u79f0\u4e3a\u5f53\u524d\u76ee\u5f55\uff09\uff0c\u4ee5\u540e\u5404\u5c42\u7684\u5f53\u524d\u76ee\u5f55\u5c31\u88ab\u6539\u4e3a\u6307\u5b9a\u7684\u76ee\u5f55\uff0c\u5982\u8be5\u76ee\u5f55\u4e0d\u5b58\u5728\uff0c WORKDIR \u4f1a\u5e2e\u4f60\u5efa\u7acb\u76ee\u5f55\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u4f8b\u5982\uff1a\u5728Dockerfile\u4e2d\u7f16\u5199\u5185\u5bb9\u5982\u4e0b\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>RUN cd \/app\nRUN echo \"hello\" &gt; world.txt<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u5982\u679c\u5c06\u8fd9\u4e2a Dockerfile \u8fdb\u884c\u6784\u5efa\u955c\u50cf\u8fd0\u884c\u540e\uff0c\u4f1a\u53d1\u73b0\u627e\u4e0d\u5230 \/app\/world.txt \u6587\u4ef6\uff0c\u6216\u8005\u5176\u5185\u5bb9\u4e0d\u662f hello \u3002\u539f\u56e0\u5176\u5b9e\u5f88\u7b80\u5355\uff0c\u5728 Shell \u4e2d\uff0c\u8fde\u7eed\u4e24\u884c\u662f\u540c\u4e00\u4e2a\u8fdb\u7a0b\u6267\u884c\u73af\u5883\uff0c\u56e0\u6b64\u524d\u4e00\u4e2a\u547d\u4ee4\u4fee\u6539\u7684\u5185\u5b58\u72b6\u6001\uff0c\u4f1a\u76f4\u63a5\u5f71\u54cd\u540e\u4e00\u4e2a\u547d\u4ee4\uff1b\u800c\u5728 Dockerfile \u4e2d\uff0c\u8fd9\u4e24\u884c RUN \u547d\u4ee4 \u7684\u6267\u884c\u73af\u5883\u6839\u672c\u4e0d\u540c\uff0c\u662f\u4e24\u4e2a\u5b8c\u5168\u4e0d\u540c\u7684\u5bb9\u5668\u3002\u8fd9\u5c31\u662f\u5bf9 Dockerfile \u6784\u5efa\u5206\u5c42\u5b58\u50a8\u7684\u6982\u5ff5\u4e0d\u4e86\u89e3\u6240\u5bfc\u81f4\u7684\u9519\u8bef\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u4e4b\u524d\u8bf4\u8fc7\u6bcf\u4e00\u4e2a RUN \u90fd\u662f\u542f\u52a8\u4e00\u4e2a\u5bb9\u5668\u3001\u6267\u884c\u547d\u4ee4\u3001\u7136\u540e\u63d0\u4ea4\u5b58\u50a8\u5c42\u6587\u4ef6\u53d8\u66f4\u3002\u7b2c\u4e00\u5c42 RUN cd \/app \u7684\u6267\u884c\u4ec5\u4ec5\u662f\u5f53\u524d\u8fdb\u7a0b\u7684\u5de5\u4f5c\u76ee\u5f55\u53d8\u66f4\uff0c\u4e00\u4e2a\u5185\u5b58\u4e0a\u7684\u53d8\u5316\u800c\u5df2\uff0c\u5176\u7ed3\u679c\u4e0d\u4f1a\u9020\u6210\u4efb\u4f55\u6587\u4ef6\u53d8\u66f4\u3002\u800c\u5230\u7b2c\u4e8c\u5c42\u7684\u65f6\u5019\uff0c\u542f\u52a8\u7684\u662f\u4e00\u4e2a\u5168\u65b0\u7684\u5bb9\u5668\uff0c\u8ddf\u7b2c\u4e00\u5c42\u7684\u5bb9\u5668\u66f4\u5b8c\u5168\u6ca1\u5173\u7cfb\uff0c\u81ea\u7136\u4e0d\u53ef\u80fd\u7ee7\u627f\u524d\u4e00\u5c42\u6784\u5efa\u8fc7\u7a0b\u4e2d\u7684\u5185\u5b58\u53d8\u5316\u3002 <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u56e0\u6b64\u5982\u679c\u9700\u8981\u6539\u53d8\u4ee5\u540e\u5404\u5c42\u7684\u5de5\u4f5c\u76ee\u5f55\u7684\u4f4d\u7f6e\uff0c\u90a3\u4e48\u5e94\u8be5\u4f7f\u7528 WORKDIR \u6307\u4ee4\u3002 <\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-purple-color\">12\u3001USER \u8bbe\u7f6e\u5bb9\u5668\u8fd0\u884c\u7528\u6237<\/mark><\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u4f7f\u7528USER\u8bbe\u7f6e\u542f\u52a8\u5bb9\u5668\u7684\u7528\u6237\uff0c\u5728\u751f\u4ea7\u73af\u5883\u4e2d\u4e00\u822c\u4e0d\u5efa\u8bae\u4f7f\u7528root\u542f\u52a8\u5bb9\u5668\uff0c\u6240\u4ee5\u53ef\u4ee5\u6839\u636e\u516c\u53f8\u4e1a\u52a1\u573a\u666f\u81ea\u5b9a\u4e49\u542f\u52a8\u5bb9\u5668\u7684\u7528\u6237<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u4f8b\u5b50\uff1a\u6253\u5305jar\u9879\u76ee\u5230\u5bb9\u5668\u4e2d\uff0c\u8bbe\u7f6e\u65f6\u533a\u4e0e\u7f16\u7801\uff0c\u5982\u56fe\uff1a<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"809\" height=\"351\" src=\"https:\/\/blog.ywdevops.cn\/wp-content\/uploads\/2022\/01\/12-1.png\" alt=\"\" class=\"wp-image-6257\" srcset=\"https:\/\/blog.ywdevops.cn\/wp-content\/uploads\/2022\/01\/12-1.png 809w, https:\/\/blog.ywdevops.cn\/wp-content\/uploads\/2022\/01\/12-1-300x130.png 300w, https:\/\/blog.ywdevops.cn\/wp-content\/uploads\/2022\/01\/12-1-768x333.png 768w, https:\/\/blog.ywdevops.cn\/wp-content\/uploads\/2022\/01\/12-1-600x260.png 600w\" sizes=\"auto, (max-width: 809px) 100vw, 809px\" \/><\/figure>\n\n\n\n<pre class=\"wp-block-code\"><code>FROM centos:7.4.1708\nCOPY sign-core-system-0.1.1-SNAPSHOT.jar \/opt\/\nCOPY AdobeSongStd-Light.otf \/usr\/share\/fonts\/\nCOPY signfonts \/usr\/share\/fonts\/\nCOPY bootstrap.properties \/opt\/\nCOPY handle_seal \/usr\/local\/handle_seal\/\nCOPY opencv \/usr\/lib\/opencv\nENV  TZ 'Asia\/Shanghai'\nENV  LANG en_US.UTF-8\nENV  LANGUAGE en_US:en\nENV  LC_ALL en_US.UTF-8\nCOPY opencv.conf \/etc\/ld.so.conf.d\/\nRUN  mkdir -p \/usr\/local\/document\/temp\/  \/usr\/local\/document\/seal\/  \/usr\/local\/services\/auth\/temp \\\n     &amp;&amp;  yum -y install libjpeg-turbo libpng libtiff libjpeg zlib jasper-libs gtk2 gstreamer java-1.8.0-openjdk* \\\n     &amp;&amp;  yum clean all \\\n     &amp;&amp;  cp -a \/usr\/share\/zoneinfo\/Asia\/Shanghai \/etc\/localtime  \\\n     &amp;&amp;  echo 'Asia\/Shanghai' &gt; \/etc\/timezone \\\n     &amp;&amp;  ldconfig\nCOPY license.lic \/usr\/local\/services\/auth\/\nWORKDIR \/opt\nENTRYPOINT &#91;\"java\",\"-jar\"]\nCMD &#91;\"sign-core-system-0.1.1-SNAPSHOT.jar\",\"-Dsun.jnu.encoding=UTF-8\",\"-Dfile.encoding=UTF-8\"]<\/code><\/pre>\n\n\n\n<p class=\"has-text-align-center wp-block-paragraph\"><strong><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-purple-color\">\u591a\u9636\u6bb5\u6784\u5efa<\/mark><\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u591a\u9636\u6bb5\u6784\u5efa\u5c31\u662f\u5728Dockerfile\u4e2d\u5b9a\u4e49\u591a\u4e2aFROM\uff0c\u6bcf\u4e2aFROM\u4e0b\u6709\u591a\u4e2a\u4e0d\u540c\u7684\u6307\u4ee4\uff0c\u4e00\u822c\u53ef\u7b80\u5355\u5206\u4e3a\u6784\u5efa\u6b65\u9aa4\u548c\u751f\u6210\u4e1a\u52a1\u5e94\u7528\u955c\u50cf\u6b65\u9aa4\uff0c\u524d\u9762\u7684\u4e00\u4e2a\u6216\u8005\u591a\u4e2a\u9636\u6bb5\u7528\u4e8e\u6784\u5efa\uff0c\u4ea7\u751f\u4e1a\u52a1\u5e94\u7528\u7684\u5305\u540e\uff0c\u5728\u540e\u9762\u7684\u9636\u6bb5\u5c06\u4e0a\u8ff0\u4ea7\u751f\u7684\u5305\u518d\u6b21\u8fdb\u884c\u6784\u5efa\u6210\u955c\u50cf\uff0c\u6b64\u65f6\uff0c\u6ca1\u6709\u6784\u5efa\u65f6\u4ea7\u751f\u7684\u7f13\u5b58\u6587\u4ef6\uff0c\u53ef\u4ee5\u8d77\u5230<strong>\u4f18\u5316\u955c\u50cf\u4f53\u79ef<\/strong>\u7684\u4f5c\u7528<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">1\u3001\u5b9a\u4e49Dockerfile\uff0c\u8fdb\u884c\u591a\u9636\u6bb5\u6784\u5efa\uff0c\u5982\u4e0b\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>  1 FROM 192.168.51.228:5000\/golang:1.26-alpine AS builder\n  2 WORKDIR \/src\n  3 ENV GOPROXY=https:\/\/goproxy.cn,direct\n  4 COPY go.mod go.sum .\/\n  5 RUN go mod download\n  6 \n  7 COPY . .\n  8 \n  9 RUN CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o backend .\n 10 \n 11 FROM 192.168.51.228:5000\/alpine:latest\n 12 RUN apk add --no-cache ca-certificates\n 13 WORKDIR \/app\n 14 COPY --from=builder \/src\/backend .\/backend\n 15 COPY config.yaml .\/config.yaml\n 16 EXPOSE 8080\n 17 ENTRYPOINT &#91;\".\/backend\"]<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u7b2c1\u884c\uff1a\u5b9a\u4e49\u57fa\u7840\u955c\u50cf\u5e76\u4f7f\u7528\u522b\u540d\u4e3abuilder\uff0c\u540e\u9762\u7b2c\u4e8c\u9636\u6bb5\u4f1a\u7528\u5230<\/li>\n\n\n\n<li>\u7b2c7\u884c\uff1a \u672c\u5730Dockerfile\u7684\u4e0a\u4e0b\u6587\u590d\u5236\u5230\u955c\u50cf\u5185\u90e8\u7684\/src\u76ee\u5f55\u4e0b<\/li>\n\n\n\n<li>\u7b2c9\u884c\uff1a\u7f16\u8bd1go\u4e8c\u8fdb\u5236<\/li>\n\n\n\n<li>\u7b2c11\u884c\uff1a\u7b2c\u4e8c\u9636\u6bb5\u955c\u50cf\u4e3aalpine<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>\u7f16\u8bd1\u53c2\u6570<\/th><th>\u4e8c\u8fdb\u5236\u7c7b\u578b<\/th><th>\u9002\u7528\u955c\u50cf<\/th><th>\u7f3a\u70b9<\/th><\/tr><\/thead><tbody><tr><td>\u5e26\u4e0a\u5168\u5957\uff1a<code>CGO_ENABLED=0 GOOS=linux GOARCH=amd64<\/code><\/td><td>\u9759\u6001\u94fe\u63a5\uff0c\u72ec\u7acb\u5355\u6587\u4ef6<\/td><td>alpine \/ scratch \/ busybox<\/td><td>\u4e8c\u8fdb\u5236\u6587\u4ef6\u4f53\u79ef\u7a0d\u5fae\u5927\u4e00\u70b9\u70b9<\/td><\/tr><tr><td>\u4e0d\u52a0\uff08\u9ed8\u8ba4 CGO=1\uff09<\/td><td>\u52a8\u6001\u94fe\u63a5\uff0c\u4f9d\u8d56 glibc<\/td><td>ubuntu\u3001centos \u8fd9\u7c7b\u5e26 glibc \u955c\u50cf<\/td><td>alpine \u65e0\u6cd5\u8fd0\u884c\uff0cglibc \u7248\u672c\u517c\u5bb9\u5751\u591a<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">\u5728\u751f\u4ea7\u73af\u5883\u4e2d\u6784\u5efa\u81ea\u5df1\u7684\u4e1a\u52a1\u955c\u50cf\u65f6\uff0c\u53ef\u4ee5\u6839\u636e\u4e0d\u540c\u7684\u8bed\u8a00\u5236\u5b9a\u4e0d\u540c\u7684\u6784\u5efa\u8fc7\u7a0b\uff0c\u62c6\u5206\u4ee3\u7801\u7f16\u8bd1\u8fc7\u7a0b\u548c\u751f\u6210\u4e1a\u52a1\u5e94\u7528\u955c\u50cf\u8fc7\u7a0b<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u6ce8\u610f\uff1a\u5982\u679c\u901a\u8fc7Dockerfile\u6765\u6784\u5efanginx\u955c\u50cf\u90a3\u4e48\u5728CMD\u4f4d\u7f6e\u5e94\u8be5\u4f7f\u7528nignx -g daemon off; \u5982\u4e0b\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>CMD &#91;\"nignx\",\"-g\",\"daemon off;\"]   \/\/\u6ce8\u610f\u540e\u9762\u6709\u5206\u53f7;<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><strong><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-purple-color\">\u4e3e\u4f8b\uff1a<\/mark><\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">1\u3001\u4f7f\u7528ubuntu\u4f5c\u4e3a\u57fa\u7840\u955c\u50cf\uff0c\u5236\u4f5cjava\u5bb9\u5668\uff0c\u5982\u4e0b\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>FROM ubuntu:24.04 \nWORKDIR \/opt\nADD OpenJDK8U-jre_x64_linux_hotspot_8u472b08.tar.gz \/usr\/local\/\nCOPY app.jar \/opt\/\nRUN  apt update -y &amp;&amp;  DEBIAN_FRONTEND=noninteractive apt install -y libfreetype6 locales tzdata fonts-dejavu-core fontconfig \\ \n     &amp;&amp;  ln -s \/usr\/local\/jdk8u472-b08-jre\/bin\/java \/usr\/bin\/java \\\n     &amp;&amp; sed -i '\/en_US.UTF-8\/s\/^# \/\/g' \/etc\/locale.gen \\\n     &amp;&amp; ln -fs \/usr\/share\/zoneinfo\/Asia\/Shanghai \/etc\/localtime \\\n     &amp;&amp; locale-gen en_US.UTF-8 \\\n     &amp;&amp; update-locale LANG=en_US.UTF-8 \\\n     &amp;&amp; apt clean \\\n     &amp;&amp; fc-cache -fv \\\n     &amp;&amp; rm -rf \/var\/lib\/apt\/lists\/*\nENV  TZ 'Asia\/Shanghai'\nENV  LANG en_US.UTF-8\nENV  LANGUAGE en_US:en\nENV  LC_ALL en_US.UTF-8\nENV NACOS_CONFIG_NAMESPACE=\"\"\nENV NACOS_CONFIG_GROUP=\"\"\nENV NACOS_DISCOVERY_NAMESPACE=\"\"\nENV NACOS_DISCOVERY_GROUP=\"\"\nENV SPRING_PROFILES_ACTIVE=default\nENV JAVA_OPTS=\"-Dsun.jnu.encoding=UTF-8 -Dfile.encoding=UTF-8  -Xms256m -Xmx512m\"\nENTRYPOINT &#91;\"sh\",\"-c\",\"exec java ${JAVA_OPTS} -Dspring.profiles.active=${SPRING_PROFILES_ACTIVE} -jar  \/opt\/app.jar\"]<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">2\u3001\u4f7f\u7528centos\u4f5c\u4e3a\u955c\u50cf\uff0c\u5b89\u88c5lua \u548copenresty\uff0c\u5982\u4e0b\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>FROM centos:centos7.9.2009\nADD lua-5.1.5.tar.gz openresty-1.27.1.2.tar.gz openssl-1.1.1w.tar.gz \/opt\/\nCOPY centos.repo  \/opt\/\n# \u5c421\uff1a\u4ec5\u5b89\u88c5\u7cfb\u7edf\u4f9d\u8d56\uff08\u7f13\u5b58\u6c38\u4e45\u751f\u6548\uff0c\u540e\u7eed\u6539\u6e90\u7801\u4e0d\u7528\u91cd\u88c5\uff09\nRUN rm -rf \/etc\/yum.repos.d\/* &amp;&amp; mv \/opt\/centos.repo \/etc\/yum.repos.d\/ &amp;&amp; yum clean all  &amp;&amp; yum makecache &amp;&amp; yum install -y epel-release.noarch libtermcap-devel ncurses-devel libevent-devel  make readline-devel pcre-devel gcc gcc-c++ perl zlib-devel fribidi freetype fontconfig libpng libjpeg-turbo libtiff zlib openssl  \\\n    &amp;&amp; yum clean all &amp;&amp; rm -rf \/var\/cache\/yum\/*\n\n# \u5c422\uff1a\u7f16\u8bd1lua\uff08\u7f13\u5b58lua\u7f16\u8bd1\u4ea7\u7269\uff0c\u53ea\u6539openresty\u4e0d\u4f1a\u91cd\u7f16lua\uff09\nRUN cd \/opt\/lua-5.1.5\/src \\\n    &amp;&amp; make linux \\\n    &amp;&amp; cd .. &amp;&amp; make test &amp;&amp;  make install \\\n    &amp;&amp; cp \/opt\/lua-5.1.5\/src\/liblua.so \/usr\/local\/lib \\\n    &amp;&amp; rm -rf \/opt\/lua-5.1.5\n\n# \u5c423\uff1a\u7f16\u8bd1openresty\uff08\u5355\u72ec\u4e00\u5c42\uff0c\u8c03\u8bd5openresty\u53ea\u91cd\u8dd1\u8fd9\u4e00\u5c42\uff09\nRUN cd \/opt\/openresty-1.27.1.2 \\\n    &amp;&amp; .\/configure --prefix=\/usr\/local\/openresty \\\n        --with-http_ssl_module --with-http_v2_module --with-stream --with-stream_ssl_module \\\n        --with-openssl=\/opt\/openssl-1.1.1w \\\n    &amp;&amp; gmake -j$(nproc) &amp;&amp; gmake install \\\n    &amp;&amp; rm -rf \/opt\/openresty-1.27.1.2 \/opt\/openssl-1.1.1w\n\n# \u73af\u5883\u53d8\u91cf\nENV PATH=\"\/usr\/local\/openresty\/bin:\/usr\/local\/openresty\/nginx\/sbin:$PATH\"\nEXPOSE 80\nCMD &#91;\"nginx\", \"-g\", \"daemon off;\"]<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u6ce8\uff1a\u8fd9\u91cc\u6709\u591a\u4e2aRUN \uff0c\u6240\u4ee5\u547d\u4ee4\u6267\u884c\u5230\u6700\u540e\u8981\u5220\u9664\u5b89\u88c5\u5305\u6765\u51cf\u5c0f\u955c\u50cf\u4f53\u79ef<\/p>\n\n\n\n<p class=\"has-text-align-center wp-block-paragraph\"><strong><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-purple-color\">docker buildx\u6784\u5efa\u955c\u50cf<\/mark><\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u5982\u679c\u672c\u5730\u7b80\u5355\u5355\u5e73\u53f0\u6784\u5efa\u7528 <code>docker build<\/code> \u8db3\u591f\uff1b\u9700\u8981\u8de8\u5e73\u53f0\u3001\u6279\u91cf\u3001\u7f13\u5b58\u52a0\u901f\u6216 CI\/CD \u81ea\u52a8\u5316\u65f6\uff0c\u6b64\u65f6\u8981\u4f18\u5148\u9009 <code>docker buildx<\/code>\uff0c\u4e0e\u539f\u6765\u7684 <code>docker build<\/code> \u76f8\u6bd4\uff0cBuildx \u7684\u6838\u5fc3\u4f18\u52bf\u53ef\u6982\u62ec\u4e3a\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong class=\"\">\u591a\u5e73\u53f0\/\u591a\u67b6\u6784\u6784\u5efa<\/strong>\uff1a\u4e00\u6761\u547d\u4ee4\u5373\u53ef\u540c\u65f6\u751f\u6210 linux\/amd64\u3001linux\/arm64 \u7b49\u591a\u4e2a\u67b6\u6784\u955c\u50cf\uff0c\u65e0\u9700\u672c\u5730\u5b89\u88c5\u5bf9\u5e94 CPU \u7684\u4ea4\u53c9\u7f16\u8bd1\u73af\u5883<\/li>\n\n\n\n<li><strong class=\"\">\u5e76\u884c\u6784\u5efa &amp; \u6784\u5efa\u52a0\u901f<\/strong>\uff1a\u57fa\u4e8e BuildKit \u7684 LLB \u4f4e\u5c42 DAG \u8c03\u5ea6\uff0c\u53ef\u5e76\u884c\u6267\u884c\u65e0\u4f9d\u8d56\u7684 Dockerfile \u9636\u6bb5\uff0c\u5e76\u652f\u6301\u66f4\u7ec6\u7c92\u5ea6\u7684\u5c42\u7f13\u5b58\uff0c\u663e\u8457\u7f29\u77ed CI\/CD \u8017\u65f6<\/li>\n\n\n\n<li><strong class=\"\">\u9ad8\u7ea7\u7f13\u5b58\u7b56\u7565<\/strong>\uff1a\u652f\u6301\u628a\u7f13\u5b58\u5bfc\u51fa\u5230\u672c\u5730\u76ee\u5f55\u3001\u8fdc\u7a0b registry \u751a\u81f3 S3\uff0c\u4e0b\u6b21\u6784\u5efa\u53ef\u76f4\u63a5\u62c9\u53d6\u7f13\u5b58\uff0c\u907f\u514d\u91cd\u590d\u7f16\u8bd1\uff1b\u4f20\u7edf <code>docker build<\/code> \u53ea\u80fd\u590d\u7528\u672c\u673a\u5b88\u62a4\u8fdb\u7a0b\u7684\u7f13\u5b58<\/li>\n\n\n\n<li><strong>\u591a\u6837\u5316\u8f93\u51fa<\/strong>\uff1a\u9664\u76f4\u63a5\u751f\u6210\u955c\u50cf\u5916\uff0c\u8fd8\u53ef\u5bfc\u51fa OCI \u955c\u50cf\u5305\u3001rootfs \u76ee\u5f55\u3001tar \u6587\u4ef6\uff0c\u6216\u4e00\u952e <code>--push<\/code> \u5230\u8fdc\u7aef\u4ed3\u5e93\uff0c\u65b9\u4fbf\u6d41\u6c34\u7ebf\u96c6\u6210<a rel=\"noreferrer noopener\" href=\"https:\/\/shenxianpeng.github.io\/2023\/07\/buildx-bake\/\" target=\"_blank\"><\/a><\/li>\n\n\n\n<li><strong class=\"\">\u58f0\u660e\u5f0f\u6279\u91cf\u6784\u5efa\uff08Bake\uff09<\/strong>\uff1a\u901a\u8fc7 HCL\/JSON\/YAML \u6587\u4ef6\u5b9a\u4e49\u591a\u955c\u50cf\u3001\u591a\u5e73\u53f0\u3001\u591a\u53c2\u6570\u7684\u6784\u5efa\u77e9\u9635\uff0c\u4e00\u6b21\u6027\u5b8c\u6210\u6574\u4e2a\u4ea7\u54c1\u7ebf\u7684\u955c\u50cf\u7f16\u6392\uff0c\u6bd4\u624b\u5199\u811a\u672c\u66f4\u6613\u7ef4\u62a4<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">\u5b89\u88c5\uff1a<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">1\u3001\u4e0b\u8f7dbuildx\u63d2\u4ef6\uff0c\u4e0b\u8f7d\u94fe\u63a5\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>https:&#47;&#47;github.com\/docker\/buildx\/releases\/download\/v0.30.1\/buildx-v0.30.1.linux-amd64<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">2\u3001\u521b\u5efa\u63d2\u4ef6\u76ee\u5f55\uff0c\u5c06\u4e0b\u8f7d\u7684\u6587\u4ef6\u653e\u5728\u76ee\u5f55\u4e0b\uff0c\u91cd\u547d\u540d\u4e3adocker-builds\uff0c\u5982\u4e0b\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>mkdir -p ~\/.docker\/cli-plugins\nmv buildx-v0.30.1.linux-amd64 ~\/.docker\/cli-plugins\/docker-buildx<\/code><\/pre>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"655\" height=\"189\" src=\"https:\/\/blog.ywdevops.cn\/wp-content\/uploads\/2026\/01\/5-1.png\" alt=\"\" class=\"wp-image-19550\" srcset=\"https:\/\/blog.ywdevops.cn\/wp-content\/uploads\/2026\/01\/5-1.png 655w, https:\/\/blog.ywdevops.cn\/wp-content\/uploads\/2026\/01\/5-1-300x87.png 300w, https:\/\/blog.ywdevops.cn\/wp-content\/uploads\/2026\/01\/5-1-600x173.png 600w\" sizes=\"auto, (max-width: 655px) 100vw, 655px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">3\u3001\u6dfb\u52a0\u6267\u884c\u6743\u9650\u540e\uff0c\u9a8c\u8bc1\u5b89\u88c5\u662f\u5426\u6210\u529f\uff0c\u5982\u4e0b\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>chmod +x docker-buildx\ndocker buildx version<\/code><\/pre>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"648\" height=\"106\" src=\"https:\/\/blog.ywdevops.cn\/wp-content\/uploads\/2026\/01\/6-2.png\" alt=\"\" class=\"wp-image-19551\" srcset=\"https:\/\/blog.ywdevops.cn\/wp-content\/uploads\/2026\/01\/6-2.png 648w, https:\/\/blog.ywdevops.cn\/wp-content\/uploads\/2026\/01\/6-2-300x49.png 300w, https:\/\/blog.ywdevops.cn\/wp-content\/uploads\/2026\/01\/6-2-600x98.png 600w\" sizes=\"auto, (max-width: 648px) 100vw, 648px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">buildx\u5b89\u88c5\u5b8c\u6210\u540e\uff0c\u6b64\u65f6\u4f7f\u7528buildx\u6784\u5efa\u7684\u955c\u50cf\u8fd8\u662f\u57fa\u4e8e<strong><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-purple-color\">docker\u9a71\u52a8<\/mark><\/strong>\uff0c\u5982\u56fe\uff1a<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"650\" height=\"132\" src=\"https:\/\/blog.ywdevops.cn\/wp-content\/uploads\/2026\/01\/7-2.png\" alt=\"\" class=\"wp-image-19553\" srcset=\"https:\/\/blog.ywdevops.cn\/wp-content\/uploads\/2026\/01\/7-2.png 650w, https:\/\/blog.ywdevops.cn\/wp-content\/uploads\/2026\/01\/7-2-300x61.png 300w, https:\/\/blog.ywdevops.cn\/wp-content\/uploads\/2026\/01\/7-2-600x122.png 600w\" sizes=\"auto, (max-width: 650px) 100vw, 650px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">\u8fd8\u6709<strong><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-purple-color\">docker-container\u9a71\u52a8<\/mark><\/strong>\uff0c\u4e0edocker\u9a71\u52a8\u7684\u533a\u522b\u4e3b\u8981\u5982\u4e0b\uff1a<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><tbody><tr><td>\u7279\u65b0\u7ef4\u5ea6<\/td><td>docker\u9a71\u52a8<\/td><td>docker-container\u9a71\u52a8 (\u9ed8\u8ba4\u63a8\u8350)<\/td><\/tr><tr><td>\u672c\u8d28<\/td><td>\u200b<code>docker build<\/code>\u547d\u4ee4\u7684\u5c01\u88c5\u548c\u6269\u5c55<\/td><td>\u57fa\u4e8e <code>containerd<\/code>\u548c <code>BuildKit<\/code>\u7684\u72ec\u7acb\u9ad8\u6027\u80fd\u6784\u5efa\u5668<\/td><\/tr><tr><td>\u6784\u5efa\u901f\u5ea6<\/td><td>\u8f83\u5feb<\/td><td>\u66f4\u5feb\u200b (\u5f97\u76ca\u4e8e\u66f4\u597d\u7684\u5e76\u53d1\u548c\u8d44\u6e90\u7ba1\u7406)<\/td><\/tr><tr><td>\u955c\u50cf\u5b58\u50a8<\/td><td>\u9ed8\u8ba4\u672c\u5730(docker images\u53ef\u67e5\u770b)<\/td><td>\u4e0d\u76f4\u63a5\u5199\u5165\u672c\u5730\uff0c\u9700\u901a\u8fc7 <code>--load<\/code>, <code>--push<\/code>, <code>-o<\/code>\u5bfc\u51fa<\/td><\/tr><tr><td>\u591a\u5e73\u53f0<\/td><td>\u4e0d\u652f\u6301<\/td><td>\u539f\u751f\u652f\u6301\u200b (\u901a\u8fc7 QEMU \u6a21\u62df)<\/td><\/tr><tr><td>\u6784\u5efa\u7f13\u5b58<\/td><td>\u57fa\u7840\u7f13\u5b58 (\u57fa\u4e8e\u955c\u50cf\u5c42)<\/td><td>\u9ad8\u7ea7\u7f13\u5b58\u200b (\u53ef\u5bfc\u51fa\u3001\u53ef\u590d\u7528\u3001\u53ef\u5171\u4eab)<\/td><\/tr><tr><td>\u9694\u79bb\u6027<\/td><td>\u8f83\u4f4e\uff0c\u4e0e Docker Daemon \u5171\u4eab\u73af\u5883<\/td><td>\u9ad8\uff0c\u5728\u72ec\u7acb\u7684\u5bb9\u5668\u73af\u5883\u4e2d\u8fd0\u884c\uff0c\u66f4\u5b89\u5168\u3001\u5e72\u51c0<\/td><\/tr><tr><td>\u4f7f\u7528\u573a\u666f<\/td><td>\u5feb\u901f\u8fed\u4ee3\u3001\u672c\u5730\u5f00\u53d1\u3001\u5355\u5e73\u53f0\u6784\u5efa<\/td><td>\u751f\u4ea7\u73af\u5883\u6784\u5efa\u3001CI\/CD \u6d41\u6c34\u7ebf\u3001\u591a\u5e73\u53f0\/\u591a\u67b6\u6784\u6784\u5efa<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">\u56e0\u6b64\uff0c\u5982\u679c\u53ea\u60f3\u8981\u6784\u5efa\u9002\u7528\u5f53\u524d\u4e3b\u673a\u5e73\u53f0\u7684\u955c\u50cf\uff0c\u6bd4\u5982amd64\u7b49\u5355\u5e73\u53f0\u955c\u50cf\uff0c\u53ef\u4f7f\u7528docker\u9a71\u52a8\u5c31\u884c\uff0c\u5982\u679c\u60f3\u4e00\u6b21\u6027\u6784\u5efa\u591a\u5e73\u53f0\u7684\u5e94\u7528\uff0c\u6216\u8005\u6784\u5efa\u540e\u76f4\u63a5\u63a8\u9001\u5230\u4ed3\u5e93\uff0c\u6b64\u65f6\u5efa\u8bae\u4f7f\u7528docker-container\u9a71\u52a8\uff0c\u56e0\u4e3a\u9ed8\u8ba4\u5c31\u662fdocker\u9a71\u52a8\uff0c\u5982\u679c\u60f3\u4f7f\u7528docker-container\u9a71\u52a8\uff0c\u9700\u8981\u91cd\u65b0\u521b\u5efa\u6784\u5efa\u5668\uff0c\u5982\u4e0b\uff1a<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">1\u3001\u521b\u5efa\u4e00\u4e2a\u65b0\u7684\uff0c\u5e72\u51c0\u7684\u6784\u5efa\u5668\uff0c\u5e76\u4f7f\u7528docker-container\u9a71\u52a8\uff0c\u5982\u4e0b\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>docker buildx create --name new-builder --driver docker-container  --use --bootstrap<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li>&#8211;use\uff1a\u6307\u5b9a\u5f53\u524d\u6784\u5efa\u5668\u4e3a\u9ed8\u8ba4<\/li>\n\n\n\n<li>&#8211;bootstrap\uff1a\u542f\u52a8\u6784\u5efa\u5668\uff0c\u8ba9\u5176\u72b6\u6001\u53d8\u4e3arunning<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">\u6267\u884c\u540e\u672c\u5730\u4f1a\u62c9\u53d6\u4e00\u4e2a\u5b98\u65b9\u955c\u50cfmoby\/buildkit:buildx-stable-1\uff0c<strong>\u7b2c\u4e00\u6b21 bootstrap \u5fc5\u5b9a\u62c9\u955c\u50cf<\/strong>\uff0c\u540e\u9762\u518d\u7528\u540c\u4e00\u4e2a\u6784\u5efa\u5668\u5c31\u514d\u4e86,\u6267\u884c\u540e\u53ef\u4ee5\u770b\u5230\u521b\u5efa\u7684\u6784\u5efa\u5668\u548c\u9a71\u52a8\uff0c\u8fd0\u884c\u72b6\u6001\u4e3arunning\uff0c\u5982\u56fe\uff1a<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"658\" height=\"184\" src=\"https:\/\/blog.ywdevops.cn\/wp-content\/uploads\/2026\/01\/2-3.png\" alt=\"\" class=\"wp-image-19578\" srcset=\"https:\/\/blog.ywdevops.cn\/wp-content\/uploads\/2026\/01\/2-3.png 658w, https:\/\/blog.ywdevops.cn\/wp-content\/uploads\/2026\/01\/2-3-300x84.png 300w, https:\/\/blog.ywdevops.cn\/wp-content\/uploads\/2026\/01\/2-3-600x168.png 600w\" sizes=\"auto, (max-width: 658px) 100vw, 658px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">\u5728\u6784\u5efa\u955c\u50cf\u4e4b\u524d\uff0c\u5148\u68c0\u67e5\u4e0bdaemon.json\uff0c\u4fee\u6539\u4e3a\u5185\u90e8DNS\uff0c\u5982\u56fe\uff1a<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"647\" height=\"247\" src=\"https:\/\/blog.ywdevops.cn\/wp-content\/uploads\/2026\/01\/7-3.png\" alt=\"\" class=\"wp-image-19594\" srcset=\"https:\/\/blog.ywdevops.cn\/wp-content\/uploads\/2026\/01\/7-3.png 647w, https:\/\/blog.ywdevops.cn\/wp-content\/uploads\/2026\/01\/7-3-300x115.png 300w, https:\/\/blog.ywdevops.cn\/wp-content\/uploads\/2026\/01\/7-3-600x229.png 600w\" sizes=\"auto, (max-width: 647px) 100vw, 647px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">\u4e3a\u4ec0\u4e48\u8981\u914d\u7f6e\u672c\u5730DNS\uff1f<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u56e0\u4e3adocker buildx\u6839\u636eDockerfile\u6784\u5efa\u7684\u65f6\u5019\uff0cFROM \u540e\u9762\u7684\u57fa\u7840\u955c\u50cf\u9ed8\u8ba4\u4e0d\u4f1a\u5bfb\u627e\u672c\u673a\u7684\u955c\u50cf\uff0c\u5373\u4f7f\u672c\u673a\u6709\u4e5f\u4f1a\u5ffd\u7565\uff0c\u4f1a\u4ece\u4ed3\u5e93\u53bb\u62c9\u53d6\uff0c\u4e00\u822c\u516c\u53f8\u7684docker\u4ed3\u5e93\u90fd\u662f\u5728\u516c\u53f8\u5185\u7f51\uff0c\u6240\u4ee5\u5982\u679c\u8981\u60f3\u6b63\u786e\u89e3\u6790\u5230FROM\u540e\u9762\u7684\u57df\u540d\uff0c\u5c31\u9700\u8981\u914d\u7f6e\u516c\u53f8\u5185\u90e8\u7684DNS\uff0c\u5982\u679c\u914d\u7f6e\u7684\u662f\u5916\u7f51\u7684DNS\uff0c\u90a3\u4e48\u4ed3\u5e93\u4e5f\u8981\u5728\u5916\u7f51\u73af\u5883\u624d\u884c\uff0c\u5982\u679c\u76f4\u63a5\u5199ubuntu\uff0c\u90a3\u4e48\u5c31\u4f1a\u53bbdocker hub\u4e0a\u62c9\u53d6(\u65e0\u6cd5\u62c9\u53d6)\uff0c\u800c\u4e14docker buildx \u8981\u6c42Dockerfile\u4e2dFROM\u540e\u9762\u7684\u955c\u50cf\u6240\u5728\u4ed3\u5e93\u53ea\u80fd\u8d70https\uff0c\u4e3e\u4f8b\u5982\u56fe\uff1a<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"654\" height=\"201\" src=\"https:\/\/blog.ywdevops.cn\/wp-content\/uploads\/2026\/01\/8-3.png\" alt=\"\" class=\"wp-image-19596\" srcset=\"https:\/\/blog.ywdevops.cn\/wp-content\/uploads\/2026\/01\/8-3.png 654w, https:\/\/blog.ywdevops.cn\/wp-content\/uploads\/2026\/01\/8-3-300x92.png 300w, https:\/\/blog.ywdevops.cn\/wp-content\/uploads\/2026\/01\/8-3-600x184.png 600w\" sizes=\"auto, (max-width: 654px) 100vw, 654px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">\u4e0a\u56fe\u4e2d\u7684FROM\u540e\u9762\u5bf9\u5e94\u7684\u955c\u50cf\u8981\u6ee1\u8db3\u5982\u4e0b\u51e0\u4e2a\u6761\u4ef6\uff0cbuildx\u624d\u80fd\u6784\u5efa\u6210\u529f\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u955c\u50cf\u5730\u5740\u5fc5\u987b\u6ee1\u8db3https\u8bbf\u95ee\u8981\u6c42\uff0c\u6240\u4ee5\u8981\u6c42\u901a\u8fc7\u57df\u540d<\/li>\n\n\n\n<li>\u6b64\u57df\u540d\u5fc5\u987b\u80fd\u901a\u8fc7daemon.json\u4e2d\u7684DNS\u89e3\u6790\u5230\uff0c\u4e00\u822c\u4ed3\u5e93\u90fd\u5728\u5185\u7f51\uff0c\u6240\u4ee5\u4e0a\u9762\u7684DNS\u914d\u7f6e\u7684\u5185\u7f51\u7684<\/li>\n\n\n\n<li>\u4ed3\u5e93\u4e2d\u8981\u771f\u7684\u6709ubuntu\u955c\u50cf\uff0c\u56e0\u4e3abuildx\u4e0d\u4f1a\u627e\u5f53\u524d\u672c\u673a\u7684docker images\u4e2d\u7684\u955c\u50cf<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">4\u3001\u6784\u5efa\u540e\u955c\u50cf\u4fdd\u5b58\u5230\u672c\u5730(docker image\u53ef\u4ee5\u770b\u5230)\uff0c\u5355\u5e73\u53f0\u6784\u5efa\uff0c\u5982\u4e0b\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>docker buildx build -t image-name --load .     #Dockerfile\u5728\u5f53\u524d\u4e0a\u4e0b\u6587\u76ee\u5f55\u4e0b<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li>&#8211;load\uff1a \u4e0d\u52a0\u8fd9\u4e2a\u53c2\u6570\uff0c\u6784\u5efa\u540edocker images\u770b\u4e0d\u5230<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">5\u3001\u6784\u5efa\u6307\u5b9a\u5e73\u53f0\uff0c\u5355\u5e73\u53f0\u6784\u5efa\uff0c\u5982\u4e0b\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>docker buildx build --platform linux\/amd64 -t image-name --load .<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">6\u3001\u591a\u5e73\u53f0\u6784\u5efa\uff0c\u6784\u5efa\u540e\u76f4\u63a5\u63a8\u9001\u5230\u4ed3\u5e93\u4e2d\uff0c\u56e0\u6b64\u955c\u50cf\u540d\u9700\u8981\u6709\u4ed3\u5e93\u5730\u5740\uff0c\u5982\u4e0b\uff1a\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>docker buildx build --platform linux\/amd64,linux\/arm64  -t registry.ywdevops.cn\/image-name --push .<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u591a\u5e73\u53f0\u6784\u5efa\u4e0d\u652f\u6301&#8211;load\u53c2\u6570\uff0c\u5982\u679c\u5728amd64\u4e0a\u6784\u5efaarm64\u53ef\u80fd\u4f1a\u62a5\u9519\uff0c\u56e0\u6b64\u5efa\u8bae\u8fd8\u662f\u5728amd\u5e73\u53f0\u4e0a\u6784\u5efaamd\u955c\u50cf\uff0c\u5728arm\u5e73\u53f0\u4e0a\u6784\u5efaarm\u955c\u50cf<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">7\u3001\u76f4\u63a5\u6784\u5efa\u540e\u5bfc\u51fa\u5230\u672c\u5730\uff0c\u683c\u5f0f\u4e3aoci\u683c\u5f0f\uff0c\u4e0d\u652f\u6301docker load \u5bfc\u5165\uff0c\u53ef\u88abcontainerd\u5bfc\u5165\uff0c\u5982\u4e0b\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>docker buildx build --platform linux\/amd64  -t image-name --output type=oci,dest=\/root\/linshi\/image-name.tar .<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">8\u3001\u5bfc\u51fa\u4e3adocker\u683c\u5f0f\uff0c\u53ef\u4ee5\u76f4\u63a5\u4f7f\u7528docker load -i \u5bfc\u5165\u5230\u5176\u4ed6docker\u4e2d\uff0c\u5982\u4e0b\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>docker buildx build --platform linux\/amd64  -t image-name --output type=docker,dest=\/root\/linshi\/image-name.tar .<\/code><\/pre>\n\n\n\n<p class=\"has-text-align-center wp-block-paragraph\"><strong><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-purple-color\">\u5728amd\u67b6\u6784\u673a\u5668\u4e0a\u6784\u5efaarm64\u67b6\u6784\u7684\u955c\u50cf<\/mark><\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u5728 <strong>x86_64 \u5bbf\u4e3b\u673a\u4e0a\u6784\u5efa arm64 \u955c\u50cf<\/strong>\uff0c\u53ef\u901a\u8fc7 QEMU \u7528\u6237\u6001\u6a21\u62df\uff08\u5f00\u53d1\/\u4ea4\u4ed8\u53ef\u7528\uff0c\u6700\u7b80\u5355\uff09<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">1\u3001\u5148\u6ce8\u518c QEMU\uff08\u6700\u5173\u952e\u4e00\u6b65\uff09<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>docker run --rm --privileged \\\n  multiarch\/qemu-user-static \\\n  --reset -p yes<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u9a8c\u8bc1\uff0c\u80fd\u770b\u5230\u6587\u4ef6\u8bf4\u660e\u6210\u529f\uff0c\u5982\u4e0b\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>ls \/proc\/sys\/fs\/binfmt_misc\/qemu-aarch64<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">2\u3001\u6784\u5efa<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>docker build \\\n  --platform=linux\/arm64 \\\n  -t myapp:arm64 .<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>\u5fc5\u987b\u52a0 <code>--platform=linux\/arm64<\/code><\/strong>\u200b\uff0c\u5426\u5219Docker \u9ed8\u8ba4\u6309\u5bbf\u4e3b\u673a\u67b6\u6784\uff08amd64\uff09\u6784\u5efa<\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>\u955c\u50cf\u7684\u5b9a\u5236\u5b9e\u9645\u4e0a\u5c31\u662f\u5b9a\u5236\u6bcf\u4e00\u5c42\u6240 \u6dfb\u52a0\u7684\u914d\u7f6e\u3001\u6587\u4ef6\u3002\u5982\u679c\u6211\u4eec\u53ef\u4ee5\u628a\u6bcf\u4e00\u5c42\u4fee\u6539\u3001\u5b89\u88c5\u3001\u6784\u5efa\u3001\u64cd\u4f5c\u7684\u547d\u4ee4\u90fd\u5199\u5165\u4e00\u4e2a [&hellip;]<\/p>\n","protected":false},"author":3,"featured_media":2640,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[39,23],"tags":[],"class_list":["post-2634","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-docker","category-rong"],"blocksy_meta":{"styles_descriptor":{"styles":{"desktop":"","tablet":"","mobile":""},"google_fonts":[],"version":8}},"_links":{"self":[{"href":"https:\/\/blog.ywdevops.cn\/index.php\/wp-json\/wp\/v2\/posts\/2634","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.ywdevops.cn\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.ywdevops.cn\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.ywdevops.cn\/index.php\/wp-json\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.ywdevops.cn\/index.php\/wp-json\/wp\/v2\/comments?post=2634"}],"version-history":[{"count":76,"href":"https:\/\/blog.ywdevops.cn\/index.php\/wp-json\/wp\/v2\/posts\/2634\/revisions"}],"predecessor-version":[{"id":21174,"href":"https:\/\/blog.ywdevops.cn\/index.php\/wp-json\/wp\/v2\/posts\/2634\/revisions\/21174"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blog.ywdevops.cn\/index.php\/wp-json\/wp\/v2\/media\/2640"}],"wp:attachment":[{"href":"https:\/\/blog.ywdevops.cn\/index.php\/wp-json\/wp\/v2\/media?parent=2634"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.ywdevops.cn\/index.php\/wp-json\/wp\/v2\/categories?post=2634"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.ywdevops.cn\/index.php\/wp-json\/wp\/v2\/tags?post=2634"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}