{"id":32045,"date":"2023-01-28T10:35:25","date_gmt":"2023-12-06T19:42:53","guid":{"rendered":"https:\/\/www.silicloud.com\/zh\/blog\/%e5%af%b9%e4%ba%86%ef%bc%8c%e6%88%91%e4%bb%ac%e6%9d%a5%e5%ad%a6%e4%b9%a0%e4%b8%80%e4%b8%8bdocker%e5%90%a7%ef%bc%88%e9%aa%8c%e8%af%81%e6%97%a5%e5%bf%97%ef%bc%89%e3%80%82\/"},"modified":"2024-04-29T11:52:22","modified_gmt":"2024-04-29T03:52:22","slug":"%e5%af%b9%e4%ba%86%ef%bc%8c%e6%88%91%e4%bb%ac%e6%9d%a5%e5%ad%a6%e4%b9%a0%e4%b8%80%e4%b8%8bdocker%e5%90%a7%ef%bc%88%e9%aa%8c%e8%af%81%e6%97%a5%e5%bf%97%ef%bc%89%e3%80%82","status":"publish","type":"post","link":"https:\/\/www.silicloud.com\/zh\/blog\/%e5%af%b9%e4%ba%86%ef%bc%8c%e6%88%91%e4%bb%ac%e6%9d%a5%e5%ad%a6%e4%b9%a0%e4%b8%80%e4%b8%8bdocker%e5%90%a7%ef%bc%88%e9%aa%8c%e8%af%81%e6%97%a5%e5%bf%97%ef%bc%89%e3%80%82\/","title":{"rendered":"\u5bf9\u4e86\uff0c\u6211\u4eec\u6765\u5b66\u4e60\u4e00\u4e0bDocker\u5427\uff08\u9a8c\u8bc1\u65e5\u5fd7\uff09"},"content":{"rendered":"<p>\u9a8c\u8bc1\u65e5\u5fd7\u3002\u8bf7\u4e0d\u8981\u6839\u636e\u6b64\u6267\u884c\u4efb\u4f55\u64cd\u4f5c\uff08\u6b64\u65e5\u5fd7\u53ef\u80fd\u5305\u542b\u5927\u91cf\u8fd4\u5de5\uff09\u3002<\/p>\n<h1>\u5728\u5f00\u59cb\u7740\u624b\u4e4b\u524d\u9700\u8981\u8bb0\u4f4f\u7684\u4e8b\u60c5 (\u5173\u4e8e\u95ee\u9898)<\/h1>\n<p>dockerfile, docker-compose\u3063\u3066\u306a\u3093\u3060<\/p>\n<p>docker image\u3092\u958b\u767a\u30e1\u30f3\u30d0\u30fc\u3067\u5171\u6709\u3059\u308b\u305f\u3081\u306b\u306f\uff1f(docker hub\uff1f\u3092\u30ed\u30fc\u30ab\u30eb\u3067\u4f5c\u308c\u308b\uff1f)<\/p>\n<p>docker-compose\u3068Pacemaker\u306e\u7d61\u307f\u65b9<\/p>\n<p>Node.js\u306eApp\u3092\u30b3\u30f3\u30c6\u30ca\u5316\u3059\u308b\u6642\u306bImage\u306b\u30d5\u30a1\u30a4\u30eb\u3092\u5165\u308c\u308b\u306e\u304b\u3001Volume\u3067\u5e38\u306b\u30db\u30b9\u30c8\u3092\u30de\u30a6\u30f3\u30c8\u3059\u308b\u306e\u304b(\u524d\u8005\u3060\u3068\u601d\u3063\u3066\u308b\u3051\u3069\u30cd\u30bf\u304c\u306a\u3055\u3059\u304e\u308b)<\/p>\n<h1>Dockerfile\u548cDocker Compose\u662f\u4ec0\u4e48\uff1f<\/h1>\n<p>\u5728Docker\u9886\u57df\u672f\u8bed\u7e41\u591a\uff0c\u9700\u8981\u6709\u4e00\u4e2a\u5927\u81f4\u7684\u7406\u89e3\u3002<\/p>\n<p>\u53c2\u8003\u7684\u7f51\u5740\u5408\u96c6<\/p>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">[Django] Docker\u30d5\u30a1\u30a4\u30eb\u3068docker-compose.yml\u306e\u9055\u3044<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">Dockerfile \u3068 docker-compose \u3092\u5229\u7528\u3059\u308b\u3068\u4f55\u304c\u3046\u308c\u3057\u3044\u306e\u304b\uff1f<\/ul>\n<div>\n<div class=\"post-table\">\u7528\u8a9e\u5185\u5bb9dockerfile1\u3064\u306e\u30b3\u30f3\u30c6\u30ca\u306e\u30ec\u30b7\u30d4docker-compose.yml\u8907\u6570\u306e\u30b3\u30f3\u30c6\u30ca\u3092\u7d44\u307f\u5408\u308f\u305b\u305f\u30a2\u30d7\u30ea\u306e\u30ec\u30b7\u30d4docker Enginedocker\u64cd\u4f5c\u7528\u306eUI\u3002CLI\u30d9\u30fc\u30b9\u3002Ubuntu\u3067\u3084\u308b\u306a\u3089\u3060\u3044\u305f\u3044\u3053\u3063\u3061docker Desktopdocker\u64cd\u4f5c\u7528\u306eUI\u3002GUI\u30d9\u30fc\u30b9\u3002Windows, Mac\u306f\u3053\u3063\u3061\u3060\u3063\u305f\u3002\u4eee\u60f3\u30de\u30b7\u30f3\u3092\u4f5c\u3063\u3066\u64cd\u4f5c\u3059\u308b<\/div>\n<\/div>\n<h1>Docker Compose\u4e0ePacemaker\u7684\u5173\u8054\u65b9\u5f0f<\/h1>\n<p>\u8bf7\u63d0\u4f9b\u53c2\u8003\u7f51\u5740\u96c6\u5408\u3002<\/p>\n<ul class=\"post-ul\">ocf_heartbeat_docker-compose<\/ul>\n<p>\u8fd9\u4e2a\u611f\u89c9\u53ef\u80fd\u6709\u3002\u6216\u8bb8\u80fd\u7528docker-compose\u6765\u8fdb\u884cRA\u63a7\u5236\u3002<br \/>\n\u4f46\u662f\u6bcf\u6b21\u90fd\u9700\u8981\u8fdb\u884c\u6784\u5efa\u4e4b\u7c7b\u7684\u64cd\u4f5c\uff0c\u6211\u53ef\u80fd\u65e0\u6cd5\u5e94\u4ed8\u3002<\/p>\n<h1>\u5148\u8bd5\u4e00\u4e0b\u5427<\/h1>\n<h2>Docker\u7684\u5b89\u88c5<\/h2>\n<p>\u53c2\u8003\u7f51\u5740\u96c6\u5408<\/p>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">\u7c21\u5358\u306a4\u3064\u306e\u65b9\u6cd5\u3011Ubuntu\u306bDocker\u3092\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3059\u308b\u306b\u306f<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">Ubuntu 22.04\u306bdocker\u3092\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3059\u308b<\/ul>\n<p>\u542c\u8bf4\u5b89\u88c5\u7684\u65b9\u6cd5\u6709\u4e09\u79cd\u3002<\/p>\n<ol>\n<li style=\"list-style-type: none;\">\n<ol>\u5728apt\u4e2d\u987a\u5229\u83b7\u53d6\u5230\u6700\u65b0\u7684\u4e1c\u897f<\/ol>\n<\/li>\n<\/ol>\n<p>&nbsp;<\/p>\n<ol>\n<li style=\"list-style-type: none;\">\n<ol>\u4e8b\u5148\u83b7\u53d6.deb\u6587\u4ef6\u5e76\u8fdb\u884c\u672c\u5730\u5b89\u88c5<\/ol>\n<\/li>\n<\/ol>\n<p>&nbsp;<\/p>\n<ol>\u81ea\u52a8\u5b89\u88c5\u811a\u672c<\/ol>\n<p>\u7b2c\u4e09\u4e2a\u6b63\u76f4\u662f\u5565\u610f\u601d\u5462\uff1f\u4f5c\u4e3a\u6784\u5efa\u7ba1\u7406\u7684\u4eba\u6211\u66f4\u559c\u6b22\u7b2c\u4e8c\u4e2a\u9009\u9879\uff0c\u4e0d\u8fc7\u6682\u65f6\u5148\u8bd5\u8bd5\u7b2c\u4e00\u4e2a\u3002<\/p>\n<p>\u9996\u5148\u66f4\u65b0apt\u4ed3\u5e93\uff0c\u5e76\u83b7\u53d6\u6240\u9700\u7684\u5305\u6765\u83b7\u53d6\u4e0eDocker\u76f8\u5173\u7684apt\u4ed3\u5e93\u3002<\/p>\n<pre class=\"post-pre\"><code># apt\u30ea\u30dd\u30b8\u30c8\u30ea\u3092\u6700\u65b0\u5316\r\n$ sudo apt update\r\n\r\n# docker\u95a2\u9023\u306eapt\u30ea\u30dd\u30b8\u30c8\u30ea\u3092\u8ffd\u52a0\u3059\u308b\u305f\u3081\u306b\u5fc5\u8981\u306a\u30d1\u30c3\u30b1\u30fc\u30b8\u3092\u53d6\u5f97\r\n$ sudo apt install ca-certificates curl gnupg lsb-release\r\n<\/code><\/pre>\n<p>\u5c06Docker\u7684GPG\u5bc6\u94a5\u6dfb\u52a0\u5230apt\u6ce8\u518c\u4e2d\u3002<br \/>\n\u53c2\u8003\uff1aGPG\u662f\u4ec0\u4e48\uff1f<\/p>\n<pre class=\"post-pre\"><code>$ sudo mkdir -p \/etc\/apt\/keyrings\r\n$ curl -fsSL https:\/\/download.docker.com\/linux\/ubuntu\/gpg | sudo gpg --dearmor -o \/etc\/apt\/keyrings\/docker.gpg\r\n$ sudo chmod a+r \/etc\/apt\/keyrings\/docker.gpg\r\n<\/code><\/pre>\n<p>\u5bf9\u4e8echmod\u4e2d\u7684a+r\uff0c\u6211\u66fe\u60f3\u77e5\u9053\u662f\u4ec0\u4e48\u610f\u601d\uff0c\u540e\u6765\u53d1\u73b0\u662f\u6307\u201call + r\u201d\u3002\u5e73\u65f6\u6211\u4e60\u60ef\u7565\u5199chmod +x\uff0c\u4f46\u8981\u660e\u786e\u6307\u5b9a\u7684\u8bdd\u5c31\u53d8\u6210a+x\u4e86\u3002<\/p>\n<pre class=\"post-pre\"><code>$ echo \"deb [arch=$(dpkg --print-architecture) signed-by=\/etc\/apt\/keyrings\/docker.gpg] https:\/\/download.docker.com\/linux\/ubuntu $(lsb_release -cs) stable\" | sudo tee \/etc\/apt\/sources.list.d\/docker.list &gt; \/dev\/null\r\n<\/code><\/pre>\n<p>tee\u662f\u4ec0\u4e48\u6765\u7740\u3002<\/p>\n<blockquote><p>tee\u547d\u4ee4\u662f\u4ec0\u4e48\uff1f&#8221;tee&#8221;\u547d\u4ee4\u7528\u4e8e\u5c06\u4ece\u6807\u51c6\u8f93\u5165\u63a5\u6536\u5230\u7684\u5185\u5bb9\u5199\u5165\u6807\u51c6\u8f93\u51fa\u548c\u6587\u4ef6\u3002\u53ef\u4ee5\u540c\u65f6\u8fdb\u884c\u4fdd\u5b58\u5230\u6587\u4ef6\u548c\u8f93\u51fa\u5230\u6807\u51c6\u8f93\u51fa\uff0c\u4e5f\u53ef\u4ee5\u8f93\u51fa\u5230\u591a\u4e2a\u6587\u4ef6\u3002<\/p><\/blockquote>\n<p>\u4e0d\u9700\u8981\u4f7f\u7528tee\uff0c\u5982\u679c\u8981\u628a\u5b83\u4e1f\u5230\/dev\/null\u91cc\u7684\u8a71\uff0c\u53ef\u4ee5\u76f4\u63a5\u561b\u2026\u4e0d\u884c\u5417\uff1f<\/p>\n<pre class=\"post-pre\"><code>$ sudo apt update\r\n$ sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin\r\n<\/code><\/pre>\n<p>\u5728\u6211\u53c2\u8003\u7684\u4e24\u4e2a\u7f51\u7ad9\u4e0a\uff0c\u6700\u540e\u4e00\u70b9\u5dee\u5f02\u662fdocker-compose-plugin\u7684\u5b58\u5728\u4e0e\u5426\u3002\u6211\u66fe\u7ecf\u5728\u5f88\u4e45\u4ee5\u524d\u4e00\u6b21\u77ed\u6682\u63a5\u89e6docker\u65f6\u8bb0\u5f97\u8fd9\u4e2a\u3002\u56e0\u4e3a\u5c06\u6765\u53ef\u80fd\u4f1a\u9700\u8981\uff0c\u6240\u4ee5\u6700\u597d\u63d0\u524d\u5b89\u88c5\u597d\u3002<\/p>\n<p>\u6211\u672c\u4ee5\u4e3a\u4e0d\u9700\u8981\u6307\u5b9a\uff0c\u4f46\u5b83\u5df2\u7ecf\u5305\u542b\u5728\u5185\u4e86\u3002\u770b\u8d77\u6765\u5b83\u4f3c\u4e4e\u548c\u5176\u4ed6\u67d0\u4e2a\u4e00\u540c\u5b89\u88c5\u4e86\u3002<\/p>\n<pre class=\"post-pre\"><code>$ docker -v\r\nDocker version 24.0.6, build ed223bc\r\n<\/code><\/pre>\n<h2>\u8ba9\u666e\u901a\u7528\u6237\u80fd\u591f\u8fd0\u884cDocker<\/h2>\n<pre class=\"post-pre\"><code>$ getent group | grep docker\r\ndocker:x:999:\r\n$ sudo usermod -aG docker $USER\r\n$ getent group | grep docker\r\ndocker:x:999:udon\r\n<\/code><\/pre>\n<p>\u53ea\u8981\u91cd\u65b0\u767b\u5f55\u5e76\u4f7f\u7528id\u547d\u4ee4\u786e\u8ba4\u6240\u5c5e\u3002<\/p>\n<pre class=\"post-pre\"><code>$ id\r\nuid=1000(udon) gid=1000(udon) groups=1000(udon),4(adm),24(cdrom),27(sudo),30(dip),46(plugdev),110(lxd),999(docker)\r\n<\/code><\/pre>\n<p>\u786e\u8ba4\u52a8\u4f5c<\/p>\n<pre class=\"post-pre\"><code>$ docker run hello-world\r\n\r\n\r\nHello from Docker!\r\nThis message shows that your installation appears to be working correctly.\r\n\r\nTo generate this message, Docker took the following steps:\r\n 1. The Docker client contacted the Docker daemon.\r\n 2. The Docker daemon pulled the \"hello-world\" image from the Docker Hub.\r\n    (amd64)\r\n 3. The Docker daemon created a new container from that image which runs the\r\n    executable that produces the output you are currently reading.\r\n 4. The Docker daemon streamed that output to the Docker client, which sent it\r\n    to your terminal.\r\n\r\nTo try something more ambitious, you can run an Ubuntu container with:\r\n $ docker run -it ubuntu bash\r\n\r\nShare images, automate workflows, and more with a free Docker ID:\r\n https:\/\/hub.docker.com\/\r\n\r\nFor more examples and ideas, visit:\r\n https:\/\/docs.docker.com\/get-started\/\r\n<\/code><\/pre>\n<h2>\u6211\u8bd5\u7740\u5199\u4e00\u4e2a Dockerfile\u3002<\/h2>\n<p>\u5b66\u4e60\u5728\u5bb9\u5668\u4e2d\u542f\u52a8Node.js\u7684\u6700\u4f73\u5b9e\u8df5\u3002<\/p>\n<p>\u53c2\u8003\u94fe\u63a5\u5408\u96c6<\/p>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">Docker\u3067Node.js\u3092\u52d5\u304b\u3059\u3068\u304d\u306e\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">Docker\u30a4\u30e1\u30fc\u30b8\u3092\u8efd\u91cf\u5316\u3057\u3088\u3046<\/ul>\n<p>\u8bd5\u7740\u653e\u7a7a\u5927\u8111\uff0c\u6a21\u4eff\u4f8b\u9898\u4e2d\u7684\u9519\u8bef\u65b9\u6cd5\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"kd\">const<\/span> <span class=\"nx\">express<\/span> <span class=\"o\">=<\/span> <span class=\"nf\">require<\/span><span class=\"p\">(<\/span><span class=\"dl\">'<\/span><span class=\"s1\">express<\/span><span class=\"dl\">'<\/span><span class=\"p\">)<\/span>\r\n<span class=\"kd\">const<\/span> <span class=\"nx\">app<\/span> <span class=\"o\">=<\/span> <span class=\"nf\">express<\/span><span class=\"p\">()<\/span>\r\n<span class=\"kd\">const<\/span> <span class=\"nx\">port<\/span> <span class=\"o\">=<\/span> <span class=\"mi\">3000<\/span>\r\n\r\n<span class=\"nx\">app<\/span><span class=\"p\">.<\/span><span class=\"nf\">get<\/span><span class=\"p\">(<\/span><span class=\"dl\">'<\/span><span class=\"s1\">\/<\/span><span class=\"dl\">'<\/span><span class=\"p\">,<\/span> <span class=\"p\">(<\/span><span class=\"nx\">req<\/span><span class=\"p\">,<\/span> <span class=\"nx\">res<\/span><span class=\"p\">)<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"p\">{<\/span>\r\n  <span class=\"nx\">res<\/span><span class=\"p\">.<\/span><span class=\"nf\">send<\/span><span class=\"p\">(<\/span><span class=\"dl\">'<\/span><span class=\"s1\">Hello World!<\/span><span class=\"dl\">'<\/span><span class=\"p\">)<\/span>\r\n<span class=\"p\">})<\/span>\r\n\r\n<span class=\"nx\">app<\/span><span class=\"p\">.<\/span><span class=\"nf\">listen<\/span><span class=\"p\">(<\/span><span class=\"nx\">port<\/span><span class=\"p\">,<\/span> <span class=\"p\">()<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"p\">{<\/span>\r\n  <span class=\"nx\">console<\/span><span class=\"p\">.<\/span><span class=\"nf\">log<\/span><span class=\"p\">(<\/span><span class=\"s2\">`Example app listening on port <\/span><span class=\"p\">${<\/span><span class=\"nx\">port<\/span><span class=\"p\">}<\/span><span class=\"s2\">`<\/span><span class=\"p\">)<\/span>\r\n<span class=\"p\">})<\/span>\r\n<\/code><\/pre>\n<pre class=\"post-pre\"><code><span class=\"p\">{<\/span>\r\n  <span class=\"nl\">\"name\"<\/span><span class=\"p\">:<\/span> <span class=\"s2\">\"nodejs-docker\"<\/span><span class=\"p\">,<\/span>\r\n  <span class=\"nl\">\"version\"<\/span><span class=\"p\">:<\/span> <span class=\"s2\">\"1.0.0\"<\/span><span class=\"p\">,<\/span>\r\n  <span class=\"nl\">\"main\"<\/span><span class=\"p\">:<\/span> <span class=\"s2\">\"index.js\"<\/span><span class=\"p\">,<\/span>\r\n  <span class=\"nl\">\"scripts\"<\/span><span class=\"p\">:<\/span> <span class=\"p\">{<\/span>\r\n    <span class=\"nl\">\"start\"<\/span><span class=\"p\">:<\/span> <span class=\"s2\">\"node index.js\"<\/span>\r\n  <span class=\"p\">},<\/span>\r\n  <span class=\"nl\">\"author\"<\/span><span class=\"p\">:<\/span> <span class=\"s2\">\"conop\"<\/span><span class=\"p\">,<\/span>\r\n  <span class=\"nl\">\"license\"<\/span><span class=\"p\">:<\/span> <span class=\"s2\">\"MIT\"<\/span><span class=\"p\">,<\/span>\r\n  <span class=\"nl\">\"dependencies\"<\/span><span class=\"p\">:<\/span> <span class=\"p\">{<\/span>\r\n    <span class=\"nl\">\"express\"<\/span><span class=\"p\">:<\/span> <span class=\"s2\">\"^4.18.1\"<\/span>\r\n  <span class=\"p\">}<\/span>\r\n<span class=\"p\">}<\/span>\r\n<\/code><\/pre>\n<pre class=\"post-pre\"><code>$ ls -ltR ..\/opt\r\n..\/opt:\r\ntotal 8\r\n-rw-rw-r-- 1 udon udon 214 Sep 18 14:42 pakcage.json\r\n-rw-rw-r-- 1 udon udon 219 Sep 18 14:41 index.js\r\n<\/code><\/pre>\n<pre class=\"post-pre\"><code><span class=\"k\">FROM<\/span><span class=\"s\"> node<\/span>\r\n<span class=\"k\">WORKDIR<\/span><span class=\"s\"> \/app<\/span>\r\n<span class=\"k\">COPY<\/span><span class=\"s\"> . .<\/span>\r\n<span class=\"k\">RUN <\/span>yarn <span class=\"nb\">install<\/span>\r\n<span class=\"k\">CMD<\/span><span class=\"s\"> \"yarn\" \"start\"<\/span>\r\n<\/code><\/pre>\n<pre class=\"post-pre\"><code>$ docker build -t nodejs-docker .\r\n:\r\n[+] Building 55.9s (9\/9) FINISHED            docker:default\r\n:\r\ndocker run -p 3000:3000 nodejs-docker\r\n&gt;&gt; yarn run v1.22.18\r\n&gt;&gt; $ node index.js\r\n&gt;&gt; sample app listening on port 3000\r\n\r\n$ docker image ls nodejs-docker\r\nREPOSITORY      TAG       IMAGE ID       CREATED          SIZE\r\nnodejs-docker   latest    cce892b92beb   17 minutes ago   1.1GB\r\n<\/code><\/pre>\n<h2>node.js\u7684\u7248\u672c\u662f\u4ec0\u4e48\uff1f<\/h2>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d0f8e37434c4406bef152\/49-0.png\" alt=\"image.png\" \/><\/div>\n<p>LTS\u7684\u6700\u65b0\u7248\u672c\u662f18.17.1\u3002<\/p>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d0f8e37434c4406bef152\/51-0.png\" alt=\"image.png\" \/><\/div>\n<p>\u652f\u6301\u52302025\u5e744\u670830\u65e5\u3002<\/p>\n<p>Docker\u4ed3\u5e93<\/p>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d0f8e37434c4406bef152\/54-0.png\" alt=\"image.png\" \/><\/div>\n<p>\u4ee5\u4e0b\u662f\u5e26\u6709 slim \u7248\u7684\uff1a<\/p>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">18.17.1-bookworm-slim<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">18.17.1-slim<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">18.17.1-bullseye-slim<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">18.17.1-buster-slim<\/ul>\n<p>\u4e66\u5446\u5b50\u3001\u4e2d\u7684\u4eba\u3001\u6363\u4e71\u9b3c\u7684\u533a\u522b\u5728\u54ea\u91cc\uff1f<\/p>\n<p>\u4e0d\u540c\u7c7b\u578b\u548c\u9009\u62e9Docker\u955c\u50cf\u7684\u65b9\u6cd5<\/p>\n<p>\u4f3c\u4e4e\u662fDebian\u7684\u7248\u672c\u3002\u6211\u60f3\u4f7f\u7528\u6709\u5f88\u591a\u6210\u5c31\u7684bullseye\u7248\u672c\uff0c\u4f46\u5728\u5b89\u5168\u6027\u65b9\u9762\u662f\u5426\u9009\u62e9\u6700\u65b0\u7684bookworm\u7248\u672c\u4ee4\u6211\u5f88\u72b9\u8c6b\u3002<\/p>\n<pre class=\"post-pre\"><code>$ cat Dockerfile\r\nFROM node:18.17.1-bookworm-slim\r\nWORKDIR \/app\r\nCOPY . .\r\nRUN yarn install\r\nCMD \"yarn\" \"start\"\r\n\r\n$ docker build -t nodejs-docker .\r\n$ docker image ls nodejs-docker\r\nREPOSITORY      TAG       IMAGE ID       CREATED         SIZE\r\nnodejs-docker   latest    df64eef74043   2 seconds ago   249MB\r\n<\/code><\/pre>\n<p>\u54c7\uff01\u51cf\u5c11\u4e86\u597d\u591a\u3002\u592a\u611f\u52a8\u4e86\u3002<\/p>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">npm\u3068\u306f\u3000yarn\u3068\u306f<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">Dockerfile\u306eRUN\u547d\u4ee4<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">Dockerfile\u30ea\u30d5\u30a1\u30ec\u30f3\u30b9 &#8211; RUN<\/ul>\n<pre class=\"post-pre\"><code>$ cat Dockerfile\r\nFROM node:18.17.1-bookworm-slim\r\nWORKDIR \/app\r\nCOPY . .\r\nRUN yarn install --prod --frozen-lockfile\r\nCMD \"yarn\" \"start\"\r\n<\/code><\/pre>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">package-lock.json\u3068yarn.lock\u3068\u306f!? \u5206\u304b\u308a\u3084\u3059\u304f\u30b7\u30f3\u30d7\u30eb\u306b\u89e3\u8aac!!<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">\u30d1\u30c3\u30b1\u30fc\u30b8\u30de\u30cd\u30fc\u30b8\u30e3\u30fc\u300cYarn\u300d\u306e\u4f7f\u3044\u65b9<\/ul>\n<pre class=\"post-pre\"><code>$ cat Dockerfile\r\nFROM node:18.17.1-bookworm-slim\r\nWORKDIR \/app\r\n\r\nCOPY package.json .\/\r\nRUN yarn install --prod --frozen-lockfile\r\n\r\nCOPY . .\r\nCMD \"yarn\" \"start\"\r\n<\/code><\/pre>\n<p>\u56e0\u4e3a\u6ca1\u6709\u4f7f\u7528\u8fc7yarn\u8fdb\u884c\u5305\u7ba1\u7406\uff0c\u6240\u4ee5\u6ca1\u6709yarn.lock\u6587\u4ef6\uff0c\u6682\u65f6\u5c06\u5176\u6392\u9664\u3002<\/p>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">Dockerfile\u30ea\u30d5\u30a1\u30ec\u30f3\u30b9 &#8211; ENTRYPOINT<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">Dockerfile\u306eCMD\u3068ENTRYPOINT\u306e\u9055\u3044<\/ul>\n<p>\u542c\u8bf4\u54ac\u4e00\u53e3Tini\u53ef\u4ee5\u89e3\u51b3\u5404\u79cd\u95ee\u9898<\/p>\n<pre class=\"post-pre\"><code>$ cat Dockerfile\r\nFROM node:18.17.1-bookworm-slim\r\nWORKDIR \/app\r\n\r\nRUN apk add --no-cache tini\r\n\r\nCOPY package.json .\/\r\nRUN yarn install --prod --frozen-lockfile\r\n\r\nCOPY . .\r\n\r\nENTRYPOINT [\"\/sbin\/tini\", \"--\" ]\r\nCMD \"node\", \"index.js\"\r\n<\/code><\/pre>\n<ul class=\"post-ul\">Docker \u74b0\u5883\u5225 no cache install<\/ul>\n<pre class=\"post-pre\"><code>$ cat Dockerfile\r\nFROM node:18.17.1-bookworm-slim\r\nENV NODE_ENV production\r\n\r\nWORKDIR \/app\r\n\r\nRUN apt-get update\r\nRUN apt-get install -y tini\r\nRUN apt-get clean\r\nRUN rm -rf \/var\/lib\/apt\/lists\/*\r\n\r\nENTRYPOINT [\"\/sbin\/tini\", \"--\" ]\r\n\r\nCOPY --chown=node:node package.json .\/\r\nRUN yarn install --prod --frozen-lockfile\r\n\r\nCOPY --chown=node:node . .\r\n\r\nUSER node\r\nCMD \"node\", \"index.js\"\r\n\r\n$ docker image ls nodejs-docker\r\nREPOSITORY      TAG       IMAGE ID       CREATED          SIZE\r\nnodejs-docker   latest    ac301270a047   53 seconds ago   270MB\r\n<\/code><\/pre>\n<pre class=\"post-pre\"><code>$ docker run -p 3000:3000 nodejs-docker\r\ndocker: Error response from daemon: failed to create task for container: failed to create shim task: OCI runtime create failed: runc create failed: unable to start container process: exec: \"\/sbin\/tini\": stat \/sbin\/tini: no such file or directory: unknown.\r\nERRO[0000] error waiting for container:\r\n<\/code><\/pre>\n<p>\u55ef\uff0c\u627e\u4e0d\u5230\/sbin\/tini\u3002<br \/>\n\u6839\u636e\u8c03\u67e5\uff0c\u53d1\u73b0\u5982\u679c\u662f\u963f\u5c14\u6d3e\u7cfb\u7edf\uff0c\u5e94\u8be5\u4f7f\u7528\/sbin\/tini\u3002\u6211\u4eec\u8981\u7528\/usr\/sbin\/tini\u3002<\/p>\n<pre class=\"post-pre\"><code>$ cat Dockerfile\r\nFROM node:18.17.1-bookworm-slim\r\nENV NODE_ENV production\r\n\r\nWORKDIR \/app\r\n\r\nRUN apt-get update\r\nRUN apt-get install -y tini\r\nRUN apt-get clean\r\nRUN rm -rf \/var\/lib\/apt\/lists\/*\r\n\r\nENTRYPOINT [\"\/usr\/bin\/tini\", \"--\" ]\r\n\r\nCOPY --chown=node:node package.json .\/\r\nRUN yarn install --prod --frozen-lockfile\r\n\r\nCOPY --chown=node:node . .\r\n\r\nUSER node\r\nCMD which tini\r\nCMD \"node\", \"index.js\"\r\n<\/code><\/pre>\n<pre class=\"post-pre\"><code>$ docker run -p 3000:3000 nodejs-docker\r\n\/bin\/sh: 1: node,: not found\r\n<\/code><\/pre>\n<p>\u5988\u54aa\uff01\uff01\uff01<\/p>\n<pre class=\"post-pre\"><code>$ cat Dockerfile\r\nFROM node:18.17.1-bookworm-slim\r\nENV NODE_ENV production\r\n\r\nWORKDIR \/app\r\n\r\nRUN apt-get update\r\nRUN apt-get install -y tini\r\nRUN apt-get clean\r\nRUN rm -rf \/var\/lib\/apt\/lists\/*\r\n\r\nENTRYPOINT [\"\/usr\/bin\/tini\", \"--\" ]\r\n\r\nCOPY --chown=node:node package.json .\/\r\nRUN yarn install --prod --frozen-lockfile\r\n\r\nCOPY --chown=node:node . .\r\n\r\nUSER node\r\nCMD [\"node\", \"index.js\"]\r\n<\/code><\/pre>\n<p>\u6700\u540e\uff0c\u6211\u5fd8\u4e86\u5c06CMD\u8f6c\u6362\u4e3aJson\u683c\u5f0f\u3002<\/p>\n<pre class=\"post-pre\"><code>$ docker run -p 3000:3000 nodejs-docker\r\nExample app listening on port 3000\r\n^C $\r\n<\/code><\/pre>\n","protected":false},"excerpt":{"rendered":"<p>\u9a8c\u8bc1\u65e5\u5fd7\u3002\u8bf7\u4e0d\u8981\u6839\u636e\u6b64\u6267\u884c\u4efb\u4f55\u64cd\u4f5c\uff08\u6b64\u65e5\u5fd7\u53ef\u80fd\u5305\u542b\u5927\u91cf\u8fd4\u5de5\uff09\u3002 \u5728\u5f00\u59cb\u7740\u624b\u4e4b\u524d\u9700\u8981\u8bb0\u4f4f\u7684\u4e8b\u60c5 (\u5173\u4e8e\u95ee\u9898) d [&hellip;]<\/p>\n","protected":false},"author":5,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-32045","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v21.5 (Yoast SEO v21.5) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>\u5bf9\u4e86\uff0c\u6211\u4eec\u6765\u5b66\u4e60\u4e00\u4e0bDocker\u5427\uff08\u9a8c\u8bc1\u65e5\u5fd7\uff09 - Blog - Silicon Cloud<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.silicloud.com\/zh\/blog\/\u5bf9\u4e86\uff0c\u6211\u4eec\u6765\u5b66\u4e60\u4e00\u4e0bdocker\u5427\uff08\u9a8c\u8bc1\u65e5\u5fd7\uff09\u3002\/\" \/>\n<meta property=\"og:locale\" content=\"zh_CN\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"\u5bf9\u4e86\uff0c\u6211\u4eec\u6765\u5b66\u4e60\u4e00\u4e0bDocker\u5427\uff08\u9a8c\u8bc1\u65e5\u5fd7\uff09\" \/>\n<meta property=\"og:description\" content=\"\u9a8c\u8bc1\u65e5\u5fd7\u3002\u8bf7\u4e0d\u8981\u6839\u636e\u6b64\u6267\u884c\u4efb\u4f55\u64cd\u4f5c\uff08\u6b64\u65e5\u5fd7\u53ef\u80fd\u5305\u542b\u5927\u91cf\u8fd4\u5de5\uff09\u3002 \u5728\u5f00\u59cb\u7740\u624b\u4e4b\u524d\u9700\u8981\u8bb0\u4f4f\u7684\u4e8b\u60c5 (\u5173\u4e8e\u95ee\u9898) d [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.silicloud.com\/zh\/blog\/\u5bf9\u4e86\uff0c\u6211\u4eec\u6765\u5b66\u4e60\u4e00\u4e0bdocker\u5427\uff08\u9a8c\u8bc1\u65e5\u5fd7\uff09\u3002\/\" \/>\n<meta property=\"og:site_name\" content=\"Blog - Silicon Cloud\" \/>\n<meta property=\"article:published_time\" content=\"2023-12-06T19:42:53+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-04-29T03:52:22+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d0f8e37434c4406bef152\/49-0.png\" \/>\n<meta name=\"author\" content=\"\u6e05, \u5b87\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"\u4f5c\u8005\" \/>\n\t<meta name=\"twitter:data1\" content=\"\u6e05, \u5b87\" \/>\n\t<meta name=\"twitter:label2\" content=\"\u9884\u8ba1\u9605\u8bfb\u65f6\u95f4\" \/>\n\t<meta name=\"twitter:data2\" content=\"4 \u5206\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e5%af%b9%e4%ba%86%ef%bc%8c%e6%88%91%e4%bb%ac%e6%9d%a5%e5%ad%a6%e4%b9%a0%e4%b8%80%e4%b8%8bdocker%e5%90%a7%ef%bc%88%e9%aa%8c%e8%af%81%e6%97%a5%e5%bf%97%ef%bc%89%e3%80%82\/\",\"url\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e5%af%b9%e4%ba%86%ef%bc%8c%e6%88%91%e4%bb%ac%e6%9d%a5%e5%ad%a6%e4%b9%a0%e4%b8%80%e4%b8%8bdocker%e5%90%a7%ef%bc%88%e9%aa%8c%e8%af%81%e6%97%a5%e5%bf%97%ef%bc%89%e3%80%82\/\",\"name\":\"\u5bf9\u4e86\uff0c\u6211\u4eec\u6765\u5b66\u4e60\u4e00\u4e0bDocker\u5427\uff08\u9a8c\u8bc1\u65e5\u5fd7\uff09 - Blog - Silicon Cloud\",\"isPartOf\":{\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#website\"},\"datePublished\":\"2023-12-06T19:42:53+00:00\",\"dateModified\":\"2024-04-29T03:52:22+00:00\",\"author\":{\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/1a6ecd3d914d22a5ac32791ffc1fbd8e\"},\"breadcrumb\":{\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e5%af%b9%e4%ba%86%ef%bc%8c%e6%88%91%e4%bb%ac%e6%9d%a5%e5%ad%a6%e4%b9%a0%e4%b8%80%e4%b8%8bdocker%e5%90%a7%ef%bc%88%e9%aa%8c%e8%af%81%e6%97%a5%e5%bf%97%ef%bc%89%e3%80%82\/#breadcrumb\"},\"inLanguage\":\"zh-Hans\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.silicloud.com\/zh\/blog\/%e5%af%b9%e4%ba%86%ef%bc%8c%e6%88%91%e4%bb%ac%e6%9d%a5%e5%ad%a6%e4%b9%a0%e4%b8%80%e4%b8%8bdocker%e5%90%a7%ef%bc%88%e9%aa%8c%e8%af%81%e6%97%a5%e5%bf%97%ef%bc%89%e3%80%82\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e5%af%b9%e4%ba%86%ef%bc%8c%e6%88%91%e4%bb%ac%e6%9d%a5%e5%ad%a6%e4%b9%a0%e4%b8%80%e4%b8%8bdocker%e5%90%a7%ef%bc%88%e9%aa%8c%e8%af%81%e6%97%a5%e5%bf%97%ef%bc%89%e3%80%82\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"\u9996\u9875\",\"item\":\"https:\/\/www.silicloud.com\/zh\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"\u5bf9\u4e86\uff0c\u6211\u4eec\u6765\u5b66\u4e60\u4e00\u4e0bDocker\u5427\uff08\u9a8c\u8bc1\u65e5\u5fd7\uff09\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#website\",\"url\":\"https:\/\/www.silicloud.com\/zh\/blog\/\",\"name\":\"Blog - Silicon Cloud\",\"description\":\"\",\"inLanguage\":\"zh-Hans\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/1a6ecd3d914d22a5ac32791ffc1fbd8e\",\"name\":\"\u6e05, \u5b87\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"zh-Hans\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/4b2016c18459a605fc469c7566608f5686491baa112d0871ee613f61b7210565?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/4b2016c18459a605fc469c7566608f5686491baa112d0871ee613f61b7210565?s=96&d=mm&r=g\",\"caption\":\"\u6e05, \u5b87\"},\"url\":\"https:\/\/www.silicloud.com\/zh\/blog\/author\/qingyu\/\"},{\"@type\":\"ImageObject\",\"inLanguage\":\"zh-Hans\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e5%af%b9%e4%ba%86%ef%bc%8c%e6%88%91%e4%bb%ac%e6%9d%a5%e5%ad%a6%e4%b9%a0%e4%b8%80%e4%b8%8bdocker%e5%90%a7%ef%bc%88%e9%aa%8c%e8%af%81%e6%97%a5%e5%bf%97%ef%bc%89%e3%80%82\/#local-main-organization-logo\",\"url\":\"\",\"contentUrl\":\"\",\"caption\":\"Blog - Silicon Cloud\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"\u5bf9\u4e86\uff0c\u6211\u4eec\u6765\u5b66\u4e60\u4e00\u4e0bDocker\u5427\uff08\u9a8c\u8bc1\u65e5\u5fd7\uff09 - Blog - Silicon Cloud","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.silicloud.com\/zh\/blog\/\u5bf9\u4e86\uff0c\u6211\u4eec\u6765\u5b66\u4e60\u4e00\u4e0bdocker\u5427\uff08\u9a8c\u8bc1\u65e5\u5fd7\uff09\u3002\/","og_locale":"zh_CN","og_type":"article","og_title":"\u5bf9\u4e86\uff0c\u6211\u4eec\u6765\u5b66\u4e60\u4e00\u4e0bDocker\u5427\uff08\u9a8c\u8bc1\u65e5\u5fd7\uff09","og_description":"\u9a8c\u8bc1\u65e5\u5fd7\u3002\u8bf7\u4e0d\u8981\u6839\u636e\u6b64\u6267\u884c\u4efb\u4f55\u64cd\u4f5c\uff08\u6b64\u65e5\u5fd7\u53ef\u80fd\u5305\u542b\u5927\u91cf\u8fd4\u5de5\uff09\u3002 \u5728\u5f00\u59cb\u7740\u624b\u4e4b\u524d\u9700\u8981\u8bb0\u4f4f\u7684\u4e8b\u60c5 (\u5173\u4e8e\u95ee\u9898) d [&hellip;]","og_url":"https:\/\/www.silicloud.com\/zh\/blog\/\u5bf9\u4e86\uff0c\u6211\u4eec\u6765\u5b66\u4e60\u4e00\u4e0bdocker\u5427\uff08\u9a8c\u8bc1\u65e5\u5fd7\uff09\u3002\/","og_site_name":"Blog - Silicon Cloud","article_published_time":"2023-12-06T19:42:53+00:00","article_modified_time":"2024-04-29T03:52:22+00:00","og_image":[{"url":"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d0f8e37434c4406bef152\/49-0.png"}],"author":"\u6e05, \u5b87","twitter_card":"summary_large_image","twitter_misc":{"\u4f5c\u8005":"\u6e05, \u5b87","\u9884\u8ba1\u9605\u8bfb\u65f6\u95f4":"4 \u5206"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.silicloud.com\/zh\/blog\/%e5%af%b9%e4%ba%86%ef%bc%8c%e6%88%91%e4%bb%ac%e6%9d%a5%e5%ad%a6%e4%b9%a0%e4%b8%80%e4%b8%8bdocker%e5%90%a7%ef%bc%88%e9%aa%8c%e8%af%81%e6%97%a5%e5%bf%97%ef%bc%89%e3%80%82\/","url":"https:\/\/www.silicloud.com\/zh\/blog\/%e5%af%b9%e4%ba%86%ef%bc%8c%e6%88%91%e4%bb%ac%e6%9d%a5%e5%ad%a6%e4%b9%a0%e4%b8%80%e4%b8%8bdocker%e5%90%a7%ef%bc%88%e9%aa%8c%e8%af%81%e6%97%a5%e5%bf%97%ef%bc%89%e3%80%82\/","name":"\u5bf9\u4e86\uff0c\u6211\u4eec\u6765\u5b66\u4e60\u4e00\u4e0bDocker\u5427\uff08\u9a8c\u8bc1\u65e5\u5fd7\uff09 - Blog - Silicon Cloud","isPartOf":{"@id":"https:\/\/www.silicloud.com\/zh\/blog\/#website"},"datePublished":"2023-12-06T19:42:53+00:00","dateModified":"2024-04-29T03:52:22+00:00","author":{"@id":"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/1a6ecd3d914d22a5ac32791ffc1fbd8e"},"breadcrumb":{"@id":"https:\/\/www.silicloud.com\/zh\/blog\/%e5%af%b9%e4%ba%86%ef%bc%8c%e6%88%91%e4%bb%ac%e6%9d%a5%e5%ad%a6%e4%b9%a0%e4%b8%80%e4%b8%8bdocker%e5%90%a7%ef%bc%88%e9%aa%8c%e8%af%81%e6%97%a5%e5%bf%97%ef%bc%89%e3%80%82\/#breadcrumb"},"inLanguage":"zh-Hans","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.silicloud.com\/zh\/blog\/%e5%af%b9%e4%ba%86%ef%bc%8c%e6%88%91%e4%bb%ac%e6%9d%a5%e5%ad%a6%e4%b9%a0%e4%b8%80%e4%b8%8bdocker%e5%90%a7%ef%bc%88%e9%aa%8c%e8%af%81%e6%97%a5%e5%bf%97%ef%bc%89%e3%80%82\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.silicloud.com\/zh\/blog\/%e5%af%b9%e4%ba%86%ef%bc%8c%e6%88%91%e4%bb%ac%e6%9d%a5%e5%ad%a6%e4%b9%a0%e4%b8%80%e4%b8%8bdocker%e5%90%a7%ef%bc%88%e9%aa%8c%e8%af%81%e6%97%a5%e5%bf%97%ef%bc%89%e3%80%82\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"\u9996\u9875","item":"https:\/\/www.silicloud.com\/zh\/blog\/"},{"@type":"ListItem","position":2,"name":"\u5bf9\u4e86\uff0c\u6211\u4eec\u6765\u5b66\u4e60\u4e00\u4e0bDocker\u5427\uff08\u9a8c\u8bc1\u65e5\u5fd7\uff09"}]},{"@type":"WebSite","@id":"https:\/\/www.silicloud.com\/zh\/blog\/#website","url":"https:\/\/www.silicloud.com\/zh\/blog\/","name":"Blog - Silicon Cloud","description":"","inLanguage":"zh-Hans"},{"@type":"Person","@id":"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/1a6ecd3d914d22a5ac32791ffc1fbd8e","name":"\u6e05, \u5b87","image":{"@type":"ImageObject","inLanguage":"zh-Hans","@id":"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/4b2016c18459a605fc469c7566608f5686491baa112d0871ee613f61b7210565?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/4b2016c18459a605fc469c7566608f5686491baa112d0871ee613f61b7210565?s=96&d=mm&r=g","caption":"\u6e05, \u5b87"},"url":"https:\/\/www.silicloud.com\/zh\/blog\/author\/qingyu\/"},{"@type":"ImageObject","inLanguage":"zh-Hans","@id":"https:\/\/www.silicloud.com\/zh\/blog\/%e5%af%b9%e4%ba%86%ef%bc%8c%e6%88%91%e4%bb%ac%e6%9d%a5%e5%ad%a6%e4%b9%a0%e4%b8%80%e4%b8%8bdocker%e5%90%a7%ef%bc%88%e9%aa%8c%e8%af%81%e6%97%a5%e5%bf%97%ef%bc%89%e3%80%82\/#local-main-organization-logo","url":"","contentUrl":"","caption":"Blog - Silicon Cloud"}]}},"_links":{"self":[{"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts\/32045","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/users\/5"}],"replies":[{"embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/comments?post=32045"}],"version-history":[{"count":2,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts\/32045\/revisions"}],"predecessor-version":[{"id":85113,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts\/32045\/revisions\/85113"}],"wp:attachment":[{"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/media?parent=32045"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/categories?post=32045"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/tags?post=32045"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}