{"id":3234,"date":"2025-07-23T16:13:00","date_gmt":"2025-07-23T08:13:00","guid":{"rendered":"https:\/\/systw.net\/note\/?p=3234"},"modified":"2026-07-23T16:16:22","modified_gmt":"2026-07-23T08:16:22","slug":"dockerfile","status":"publish","type":"post","link":"https:\/\/systw.net\/note\/archives\/3234","title":{"rendered":"Dockerfile"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Dockerfile \u662f\u7528\u4f86\u81ea\u52d5\u5316\u5efa\u7f6e Docker \u6620\u50cf\u6a94\uff08Image\uff09\u7684\u7d14\u6587\u5b57\u8aaa\u660e\u66f8\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u53ef\u4ee5\u628a\u5b83\u60f3\u50cf\u6210\u4e00\u4efd\u98df\u8b5c\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u57fa\u790e\u98df\u6750\uff08Base Image\uff09\uff1a\u4f60\u8981\u7528\u54ea\u7a2e\u4f5c\u696d\u7cfb\u7d71\u6216\u74b0\u5883\u5e95\u5b50\uff1f<\/li>\n\n\n\n<li>\u6e96\u5099\u5de5\u4f5c\uff08Commands\uff09\uff1a\u8981\u5b89\u88dd\u54ea\u4e9b\u5957\u4ef6\uff1f\u6a94\u6848\u8981\u653e\u54ea\uff1f<\/li>\n\n\n\n<li>\u958b\u706b\u4e0a\u83dc\uff08CMD\uff09\uff1a\u5bb9\u5668\u555f\u52d5\u6642\u8981\u57f7\u884c\u7684\u6307\u4ee4\u3002<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity is-style-dots\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">1. \u521d\u5b78\u8005\u5fc5\u5b78\u7684 5 \u500b\u6838\u5fc3\u6307\u4ee4<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u5beb Dockerfile \u5176\u5be6\u4e0d\u96e3\uff0c90% \u7684\u60c5\u6cc1\u4e0b\u4f60\u53ea\u9700\u8981\u641e\u61c2\u9019 5 \u500b\u6307\u4ee4\uff1a<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><td><strong>\u6307\u4ee4<\/strong><\/td><td><strong>\u8aaa\u660e<\/strong><\/td><td><strong>\u6bd4\u55bb<\/strong><\/td><\/tr><\/thead><tbody><tr><td><code>FROM<\/code><\/td><td>\u6307\u5b9a\u57fa\u790e\u6620\u50cf\u6a94\uff08\u901a\u5e38\u662f OS \u6216\u8a9e\u8a00\u74b0\u5883\uff09<\/td><td>\u6e96\u5099\u5730\u57fa \/ \u9078\u6e6f\u5e95<\/td><\/tr><tr><td><code>WORKDIR<\/code><\/td><td>\u8a2d\u5b9a\u5bb9\u5668\u5167\u7684\u5de5\u4f5c\u76ee\u9304\uff08\u5f8c\u7e8c\u6307\u4ee4\u57f7\u884c\u7684\u4f4d\u7f6e\uff09<\/td><td>\u5207\u63db\u5230\u5eda\u623f\u5207\u83dc\u5340<\/td><\/tr><tr><td><code>COPY<\/code><\/td><td>\u5c07\u96fb\u8166\uff08Host\uff09\u4e0a\u7684\u6a94\u6848\u8907\u88fd\u5230\u5bb9\u5668\u5167<\/td><td>\u628a\u98df\u6750\u653e\u9032\u934b\u88e1<\/td><\/tr><tr><td><code>RUN<\/code><\/td><td>\u5efa\u7f6e\u6620\u50cf\u6a94\u6642\u57f7\u884c\u7684\u6307\u4ee4\uff08\u901a\u5e38\u7528\u65bc\u5b89\u88dd\u5957\u4ef6\uff09<\/td><td>\u5099\u6599\uff08\u5207\u83dc\u3001\u6d17\u83dc\uff09<\/td><\/tr><tr><td><code>CMD<\/code><\/td><td>\u5bb9\u5668\u555f\u52d5\u5f8c\u9810\u8a2d\u57f7\u884c\u7684\u6307\u4ee4<\/td><td>\u9ede\u706b\u958b\u5403<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\">\u6ce8\u610f\u4e8b\u9805\uff1a<code>RUN<\/code> \u662f\u5728\u300c\u6253\u5305\u6620\u50cf\u6a94\u300d\u6642\u57f7\u884c\u7684\uff08\u53ea\u57f7\u884c\u4e00\u6b21\uff09\uff1b<code>CMD<\/code> \u5247\u662f\u5bb9\u5668\u300c\u6bcf\u6b21\u555f\u52d5\u300d\u6642\u624d\u6703\u57f7\u884c\u7684\u3002<\/p>\n<\/blockquote>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity is-style-dots\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">2. \u5be6\u6230\u7bc4\u4f8b\uff1aNode.js Web \u61c9\u7528<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u5047\u8a2d\u6709\u4e00\u500b\u7c21\u55ae\u7684 Node.js \u5c08\u6848\uff0c\u6a94\u6848\u7d50\u69cb\u5982\u4e0b\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>my-node-app\/\n\u251c\u2500\u2500 package.json\n\u251c\u2500\u2500 index.js\n\u2514\u2500\u2500 Dockerfile<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Dockerfile \u7bc4\u4f8b<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">\u5728\u5c08\u6848\u6839\u76ee\u9304\u5efa\u7acb\u540d\u70ba <code>Dockerfile<\/code>\uff08\u7121\u526f\u6a94\u540d\uff09\u7684\u6a94\u6848\uff0c\u5167\u5bb9\u5982\u4e0b\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>FROM node:18-alpine\n\nWORKDIR \/app\nCOPY package.json .\/\nRUN npm install\nCOPY . .\n\nEXPOSE 3000\nCMD &#91;\"node\", \"index.js\"]<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u89e3\u8aaa\u5982\u4e0b\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li># 1. \u6307\u5b9a\u5b98\u65b9 Node.js 18 \u8f15\u91cf\u7248\uff08alpine\uff09\u4f5c\u70ba\u57fa\u790e\u74b0\u5883<br>FROM node:18-alpin<\/li>\n\n\n\n<li># 2. \u8a2d\u5b9a\u5bb9\u5668\u5167\u7684\u5de5\u4f5c\u76ee\u9304\u70ba \/app<br>WORKDIR \/app<\/li>\n\n\n\n<li># 3. \u628a\u96fb\u8166\u88e1\u7684 <code>package.json<\/code> \u8907\u88fd\u4e00\u4efd\uff0c\u653e\u5230\u5bb9\u5668\u88e1\u9762\u7684 <code>\/app\/package.json<\/code>\u3002<br>COPY package.json .\/<\/li>\n\n\n\n<li># 4. \u5bb9\u5668\u88e1\u9762\u7d42\u65bc\u6709\u4e86 <code>package.json<\/code>\uff0c<code>npm<\/code> \u624d\u53ef\u4ee5\u8b80\u53d6\u88e1\u9762\u7684\u5957\u4ef6\u6e05\u55ae\u4e26\u958b\u59cb\u4e0b\u8f09<br>RUN npm install<\/li>\n\n\n\n<li># 5. \u8907\u88fd\u5c08\u6848\u5176\u9918\u6240\u6709\u6a94\u6848\u5230\u5bb9\u5668\u5167<br>COPY . .<\/li>\n\n\n\n<li># 6. \u6a19\u793a\u9019\u500b\u5bb9\u5668\u6703\u4f7f\u7528 3000 \u57e0\u865f\uff08\u4e3b\u8981\u7528\u65bc\u63d0\u793a\u8207\u6587\u4ef6\u5316\uff09<br>EXPOSE 3000<\/li>\n\n\n\n<li># 7. \u8a2d\u5b9a\u5bb9\u5668\u555f\u52d5\u6642\u57f7\u884c\u7684\u6307\u4ee4<br>CMD [&#8220;node&#8221;, &#8220;index.js&#8221;]<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity is-style-dots\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">3. \u5982\u4f55\u7de8\u8b6f\u8207\u57f7\u884c\uff1f<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u5beb\u597d Dockerfile \u5f8c\uff0c\u958b\u8d77\u7d42\u7aef\u6a5f\uff08Terminal\uff09\u57f7\u884c\u4ee5\u4e0b\u6b65\u9a5f\uff1a<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>1.\u5efa\u7f6e\u6620\u50cf\u6a94 (Build)\uff1a<\/strong>\u6253\u5305\u4f60\u7684\u61c9\u7528\u7a0b\u5f0f\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u5728 <code>Dockerfile<\/code> \u6240\u5728\u76ee\u9304\u57f7\u884c\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>docker build -t my-node-app:1.0 .<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>-t my-node-app:1.0<\/code>\uff1a\u70ba\u4f60\u7684\u6620\u50cf\u6a94\u547d\u540d\u8207\u52a0\u4e0a\u7248\u672c\u865f\u3002<\/li>\n\n\n\n<li>\u672b\u5c3e\u7684 <code>.<\/code>\uff1a\u4ee3\u8868 Dockerfile \u5728\u7576\u524d\u76ee\u9304\u3002<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>2.\u555f\u52d5\u5bb9\u5668 (Run)\uff1a<\/strong>\u5c07\u6620\u50cf\u6a94\u904b\u884c\u8d77\u4f86\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u5efa\u7f6e\u5b8c\u6210\u5f8c\uff0c\u555f\u52d5\u5bb9\u5668\u4e26\u5c07\u96fb\u8166\u7684 3000 \u57e0\u5c0d\u63a5\u5bb9\u5668\u7684 3000 \u57e0\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>docker run -p 3000:3000 -d --name my-running-app my-node-app:1.0<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>-p 3000:3000<\/code>\uff1a\u5be6\u4f5c Port \u8f49\u767c\uff08[\u96fb\u8166 Port]:[\u5bb9\u5668 Port]\uff09\u3002<\/li>\n\n\n\n<li><code>-d<\/code>\uff1a\u5728\u80cc\u666f\u57f7\u884c\uff08Detached mode\uff09\u3002<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>3.\u9a57\u8b49\u7d50\u679c\uff1a<\/strong>\u78ba\u8a8d\u670d\u52d9\u6b63\u5e38\u904b\u4f5c\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u6253\u958b\u700f\u89bd\u5668\u8f38\u5165 <code>http:\/\/localhost:3000<\/code>\uff0c\u5373\u53ef\u770b\u5230\u61c9\u7528\u7a0b\u5f0f\u57f7\u884c\u7684\u7d50\u679c\uff01<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity is-style-dots\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\u521d\u5b78\u8005\u907f\u5751\u6307\u5357<\/h2>\n\n\n\n<ol start=\"1\" class=\"wp-block-list\">\n<li><strong>\u5229\u7528\u5feb\u53d6\u512a\u5316\u6253\u5305\u901f\u5ea6<\/strong>\uff1a\u4e0a\u9762\u7684\u7bc4\u4f8b\u4e2d\uff0c\u6211\u5011\u5148\u8907\u88fd <strong><code>package.json<\/code> <\/strong>\u4e26\u57f7\u884c<strong> <code>npm install<\/code><\/strong>\uff0c\u6700\u5f8c\u624d\u8907\u88fd\u5176\u4ed6\u7a0b\u5f0f\u78bc\uff08<code>COPY . .<\/code>\uff09\u3002\u9019\u662f\u56e0\u70ba Docker \u6703\u5feb\u53d6\uff08Cache\uff09\u6c92\u8b8a\u52d5\u7684\u5c64\u7d1a\u3002\u53ea\u8981\u5957\u4ef6\u6c92\u8b8a\uff0c\u4e0b\u6b21\u4fee\u6539\u7a0b\u5f0f\u78bc\u518d\u6253\u5305\u6642\uff0c\u5c31\u4e0d\u7528\u91cd\u65b0 <code>npm install<\/code>\uff0c\u901f\u5ea6\u6703\u5feb\u975e\u5e38\u591a\uff01<\/li>\n\n\n\n<li><strong>\u526f\u6a94\u540d\u8207\u5927\u5c0f\u5beb<\/strong>\uff1a\u6a94\u540d\u5fc5\u9808\u7cbe\u78ba\u70ba <code>Dockerfile<\/code>\uff0c\u9996\u5b57\u6bcd\u5927\u5beb\uff0c\u4e14\u4e0d\u8981\u52a0 <code>.txt<\/code> \u7b49\u526f\u6a94\u540d\u3002<\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Dockerfile \u662f\u7528\u4f86\u81ea\u52d5\u5316\u5efa\u7f6e Docker \u6620\u50cf\u6a94\uff08Image\uff09\u7684\u7d14\u6587\u5b57\u8aaa\u660e\u66f8<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"fifu_image_url":"","fifu_image_alt":"","_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":true,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2}},"categories":[19],"tags":[],"class_list":["post-3234","post","type-post","status-publish","format-standard","hentry","category-linuxsystem"],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"jetpack-related-posts":[{"id":1666,"url":"https:\/\/systw.net\/note\/archives\/1666","url_meta":{"origin":3234,"position":0},"title":"Docker","author":"raymond","date":"2023 \u5e74 8 \u6708 27 \u65e5","format":false,"excerpt":"Docker\u662f\u8f15\u91cf\u7d1a\u7684\u865b\u64ec\u5316\u89e3\u6c7a\u65b9\u6848\uff0c\u4f7f\u7528container\u7684\u6280\u8853\uff0c\u985e\u4f3c\u865b\u64ec\u6a5f\u6280\u8853\uff0c\u4f46\u4e0d\u7528\u50cf\u865b\u64ec\u6a5f\u5728\u2026","rel":"","context":"\u5728\u300cLinux\u7cfb\u7d71\u300d\u4e2d","block_context":{"text":"Linux\u7cfb\u7d71","link":"https:\/\/systw.net\/note\/archives\/category\/system\/linuxsystem"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":3237,"url":"https:\/\/systw.net\/note\/archives\/3237","url_meta":{"origin":3234,"position":1},"title":"Docker Compose","author":"raymond","date":"2025 \u5e74 7 \u6708 23 \u65e5","format":false,"excerpt":"\u5982\u679c\u628a Docker Container \u6bd4\u55bb\u70ba\u300c\u6a02\u5668\u300d\uff0c\u90a3\u9ebc Docker Compose \u5c31\u662f\u300c\u2026","rel":"","context":"\u5728\u300cLinux\u7cfb\u7d71\u300d\u4e2d","block_context":{"text":"Linux\u7cfb\u7d71","link":"https:\/\/systw.net\/note\/archives\/category\/system\/linuxsystem"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":669,"url":"https:\/\/systw.net\/note\/archives\/669","url_meta":{"origin":3234,"position":2},"title":"Apache Application","author":"raymond","date":"2015 \u5e74 8 \u6708 22 \u65e5","format":false,"excerpt":"apache\u5e38\u898b\u61c9\u7528\u5982\u4e0b .....................................\u2026","rel":"","context":"\u5728\u300cLinux\u670d\u52d9\u300d\u4e2d","block_context":{"text":"Linux\u670d\u52d9","link":"https:\/\/systw.net\/note\/archives\/category\/system\/linuxservice"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":613,"url":"https:\/\/systw.net\/note\/archives\/613","url_meta":{"origin":3234,"position":3},"title":"MRTG","author":"raymond","date":"2008 \u5e74 8 \u6708 25 \u65e5","format":false,"excerpt":"MRTG(multi router traffic grapher)\u88fd\u4f5c\u7db2\u8def\u6d41\u91cf\u7d71\u8a08\u5716\u7684\u5de5\u5177\u5b98\u65b9\u7db2\u7ad9\u2026","rel":"","context":"\u5728\u300c\u7cfb\u7d71\u7ba1\u7406\u5de5\u5177\u300d\u4e2d","block_context":{"text":"\u7cfb\u7d71\u7ba1\u7406\u5de5\u5177","link":"https:\/\/systw.net\/note\/archives\/category\/system\/systemtool"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":744,"url":"https:\/\/systw.net\/note\/archives\/744","url_meta":{"origin":3234,"position":4},"title":"\u4e2d\u592e\u8655\u7406\u5668\u55ae\u5143","author":"raymond","date":"2007 \u5e74 11 \u6708 12 \u65e5","format":false,"excerpt":"cpu\u7684\u767c\u5c554bit\u00a0Intel 40048bitIntel 8008\u3001Intel 808\u2026","rel":"","context":"\u5728\u300c\u8a08\u7b97\u6a5f\u7d44\u7e54\u8207\u7d50\u69cb\u300d\u4e2d","block_context":{"text":"\u8a08\u7b97\u6a5f\u7d44\u7e54\u8207\u7d50\u69cb","link":"https:\/\/systw.net\/note\/archives\/category\/system\/computerarchitecture"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":641,"url":"https:\/\/systw.net\/note\/archives\/641","url_meta":{"origin":3234,"position":5},"title":"Win2000\u74b0\u5883\u8b8a\u6578","author":"raymond","date":"2010 \u5e74 3 \u6708 11 \u65e5","format":false,"excerpt":"\u74b0\u5883\u8b8a\u6578\u662f\u5132\u5b58\u8207\u7cfb\u7d71\u76f8\u95dc\u7684\u8cc7\u8a0a\u7cfb\u7d71\u5728\u958b\u6a5f\u4e4b\u5f8c\uff0c\u6703\u81ea\u884c\u8a2d\u5b9a\u82e5\u5e72\u74b0\u5883\u8b8a\u6578\uff0c\u4ee5\u4f5c\u70ba\u7cfb\u7d71\u904b\u4f5c\u4e4b\u7528\uff0c\u74b0\u5883\u8b8a\u6578\u7684\u2026","rel":"","context":"\u5728\u300cWindows\u7cfb\u7d71\u300d\u4e2d","block_context":{"text":"Windows\u7cfb\u7d71","link":"https:\/\/systw.net\/note\/archives\/category\/system\/windows"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]}],"_links":{"self":[{"href":"https:\/\/systw.net\/note\/wp-json\/wp\/v2\/posts\/3234","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/systw.net\/note\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/systw.net\/note\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/systw.net\/note\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/systw.net\/note\/wp-json\/wp\/v2\/comments?post=3234"}],"version-history":[{"count":2,"href":"https:\/\/systw.net\/note\/wp-json\/wp\/v2\/posts\/3234\/revisions"}],"predecessor-version":[{"id":3236,"href":"https:\/\/systw.net\/note\/wp-json\/wp\/v2\/posts\/3234\/revisions\/3236"}],"wp:attachment":[{"href":"https:\/\/systw.net\/note\/wp-json\/wp\/v2\/media?parent=3234"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/systw.net\/note\/wp-json\/wp\/v2\/categories?post=3234"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/systw.net\/note\/wp-json\/wp\/v2\/tags?post=3234"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}