{"id":1430,"date":"2024-05-08T10:47:47","date_gmt":"2024-05-08T02:47:47","guid":{"rendered":"http:\/\/oneai.eu.org\/?p=1430"},"modified":"2024-05-08T10:47:47","modified_gmt":"2024-05-08T02:47:47","slug":"%e5%86%99-dockerfile-%e7%9a%84%e4%b8%80%e4%ba%9b%e6%8a%80%e5%b7%a7","status":"publish","type":"post","link":"https:\/\/oneai.eu.org\/?p=1430","title":{"rendered":"\u5199 Dockerfile \u7684\u4e00\u4e9b\u6280\u5de7"},"content":{"rendered":"<div class=\"Post-RichTextContainer\">\n<div class=\"css-1yuhvjn\">\n<div class=\"css-376mun\">\n<div class=\"RichText ztext Post-RichText css-jflero\" options=\"[object Object]\">\n<p data-first-child=\"\" data-pid=\"EXB5Oczm\">\u548c\u5f88\u591a\u5f00\u6e90\u9879\u76ee\u4e00\u6837\uff0cSQLFlow \u9879\u76ee\u4e3a\u4e86\u65b9\u4fbf\u8c03\u8bd5\u548c\u534f\u540c\u5de5\u4f5c\uff0c\u628a\u6240\u6709 build tools \u5b89\u88c5\u5728\u4e00\u4e2a Docker image \u91cc\u3002\u9879\u76ee\u7684\u8d21\u732e\u8005\u4eec\u7528\u8fd9\u4e2a Docker image \u4f5c\u4e3a\u81ea\u5df1\u7684\u5f00\u53d1\u73af\u5883\u3002\u5199 Dockerfile \u7684\u8fc7\u7a0b\u91cc\uff0c\u6211\u4eec\u603b\u7ed3\u4e86\u4e00\u4e9b\u6280\u5de7\uff0c\u5206\u4eab\u5982\u4e0b\uff0c\u629b\u7816\u5f15\u7389\u3002<\/p>\n<h2>\u7528 python -m pip \u800c\u4e0d\u662f pip<\/h2>\n<p data-pid=\"VMgXSF4t\">\u8fd9\u662f\u4e3a\u4e86\u786e\u4fdd\u6211\u4eec\u4f7f\u7528\u7684 pip \u662f\u6211\u4eec\u60f3\u7528\u7684\u90a3\u4e2a python \u5bf9\u5e94\u7684 pip\u3002\u6709\u65f6\u5019\uff0c\u4e00\u4e2a\u7cfb\u7edf\u91cc\u5b89\u88c5\u4e86 Python 2 \u548c Python 3\uff0c\u800c\u6211\u4eec\u53ef\u80fd\u9519\u8bef\u5730\u8bbe\u7f6e\u4e86 PATH \u73af\u5883\u53d8\u91cf\uff08\u6216\u5219\u56e0\u4e3a\u5176\u4ed6\u7684\u539f\u56e0\uff09\uff0c\u5bfc\u81f4\u6211\u4eec\u8fd0\u884c python \u547d\u4ee4\u7684\u65f6\u5019\uff0c\u542f\u52a8\u7684 Python 3\uff08\u6216\u8005 2\uff09\uff0c\u4f46\u662f pip \u547d\u4ee4\u662f Python 2\uff08\u6216\u80053\uff09\u7684 pip\u3002\u8fd8\u6709\u4e00\u4e9b\u5176\u4ed6\u539f\u56e0\u4f7f\u6211\u4eec\u66f4\u5e94\u8be5\u7528 python -m pip \u7684\uff0c\u8be6\u89c1 <a href=\"https:\/\/link.zhihu.com\/?target=https%3A\/\/snarky.ca\/why-you-should-use-python-m-pip\/\" class=\" external\" target=\"_blank\" rel=\"nofollow noreferrer noopener\" data-za-detail-view-id=\"1043\"><span class=\"invisible\">https:\/\/<\/span><span class=\"visible\">snarky.ca\/why-you-shoul<\/span><span class=\"invisible\">d-use-python-m-pip\/<\/span><span class=\"ellipsis\"><\/span><\/a><\/p>\n<p data-pid=\"SFA5fNDu\">\u4e00\u4e2a\u5178\u578b\u7684\u4f8b\u5b50\uff08\u5347\u7ea7 pip\uff09\u3002<\/p>\n<div class=\"highlight\">\n<pre><code class=\"language-bash\">python -m pip install --quiet --upgrade pip<\/code><\/pre>\n<\/div>\n<h2>\u8ba9 pip install \u66f4\u5b89\u9759<\/h2>\n<p data-pid=\"c-MKZLVA\">\u4e0a\u4f8b\u4e2d\uff0c\u5728 pip install \u547d\u4ee4\u91cc\uff0c\u6211\u4eec\u7528\u4e86 --quiet \u53c2\u6570\uff0c\u51cf\u5c11 pip install \u6253\u5370\u51fa\u6765\u7684\u4fe1\u606f\u3002\u8fd9\u6837\u53ef\u4ee5\u8ba9 docker build \u66f4\u5b89\u9759\u3002\u5c24\u5176\u662f\uff0c\u5982\u679c\u5728 CI \u91cc\u8fd0\u884c docker build \u7684\u8bdd\uff0c\u51cf\u5c11\u6253\u5370\u4fe1\u606f\u53ef\u4ee5\u8ba9 CI log \u66f4\u52a0\u53ef\u8bfb\u3002<\/p>\n<h2>\u8ba9 apt-get install \u66f4\u5b89\u9759<\/h2>\n<p data-pid=\"Rz_1FZGB\">\u7c7b\u4f3c\u7684\uff0c\u7528 apt-get \u5b89\u88c5\u8f6f\u4ef6\u5305\u7684\u65f6\u5019\uff0c\u6211\u4eec\u7528 -qq \u547d\u4ee4\uff0c\u751a\u81f3\u91cd\u5b9a\u5411\u8f93\u51fa\u5230 \/dev\/null \u8ba9\u5b83\u66f4\u5b89\u9759\u3002<\/p>\n<div class=\"highlight\">\n<pre><code class=\"language-text\">apt-get -qq update\napt-get -qq install -y curl &gt; \/dev\/null<\/code><\/pre>\n<\/div>\n<h2>\u8ba9 curl \u548c wget \u66f4\u5b89\u9759<\/h2>\n<p data-pid=\"RoLkvQJh\">\u9996\u5148\uff0c\u5982\u679c\u8981\u4e0b\u8f7d\u6587\u4ef6\uff0ccurl \u548c wget \u4e8c\u9009\u4e00\u5373\u53ef\u3002\u5982\u679c\u7528 curl\uff0c\u53ef\u4ee5\u7528  --silent \u53c2\u6570\u3002<\/p>\n<div class=\"highlight\">\n<pre><code class=\"language-text\">curl -sLO https:\/\/storage.googleapis.com\/minikube\/releases\/latest\/minikube-linux-amd64<\/code><\/pre>\n<\/div>\n<p data-pid=\"QfhysrZH\">wget \u6709 --quiet \u53c2\u6570\u3002<\/p>\n<div class=\"highlight\">\n<pre><code class=\"language-text\">wget -q https:\/\/storage.googleapis.com\/minikube\/releases\/latest\/minikube-linux-amd64<\/code><\/pre>\n<\/div>\n<h2>\u7528 axel \u800c\u4e0d\u662f curl \u6216\u8005 wget<\/h2>\n<p data-pid=\"Lsj3JerS\">\u4f5c\u4e3a\u4e00\u4e2a\u5f00\u6e90\u8f6f\u4ef6\uff0c\u4e2d\u5916\u5f00\u53d1\u8005\u90fd\u4f1a\u8fd0\u884c docker build\u3002\u5f00\u53d1\u8005\u6240\u5904\u7684\u5730\u7406\u4f4d\u7f6e\u4e0d\u540c\uff0c\u5404\u81ea\u90fd\u5e0c\u671b\u4ece\u8ddd\u79bb\u81ea\u5df1\u6700\u8fd1\uff08\u6700\u5feb\uff09\u7684 mirror \u4e0b\u8f7d\u548c\u5b89\u88c5\u6587\u4ef6\u3002axel \u53ef\u4ee5\u4ece\u591a\u4e2a mirror \u4e0b\u8f7d\u540c\u4e00\u4e2a\u6587\u4ef6\uff0c\u6839\u636e\u5404\u4e2a mirror \u7684\u901f\u5ea6\uff0c\u51b3\u5b9a\u5206\u522b\u4ece\u4e0d\u540c mirror \u4e0b\u8f7d\u7684\u5b57\u8282\u6570\u91cf\u3002\u5982\u679c\u6709\u7684 mirror \u6302\u4e86\uff0caxel \u53ef\u4ee5\u5ffd\u7565\u4e4b\u3002\u5c24\u5176\u5bf9\u4e8e\u8eab\u5904\u56fd\u5185\u7684\u5f00\u53d1\u8005\uff0caxel \u5b8c\u5168\u53ef\u4ee5\u53d6\u4ee3 curl \u4ee5\u53ca wget\u3002<\/p>\n<p data-pid=\"r1MpnyvE\">axel \u548c wget \u4e00\u6837\u652f\u6301 --quiet \u53c2\u6570\u3002\u4ee5\u4e0b\u662f\u4e00\u4e2a\u4ece\u5927\u6d0b\u4e24\u5cb8\u7684 mirrors \u4e0b\u8f7d Go \u7f16\u8bd1\u5668\u7684\u4f8b\u5b50\u3002<\/p>\n<div class=\"highlight\">\n<pre><code class=\"language-text\">echo \"Install Go compiler ...\"\nGO_MIRROR_0=\"http:\/\/mirrors.ustc.edu.cn\/golang\/go1.13.4.linux-amd64.tar.gz\"\nGO_MIRROR_1=\"https:\/\/dl.google.com\/go\/go1.13.4.linux-amd64.tar.gz\"\naxel --quiet --output go.tar.gz $GO_MIRROR_0 $GO_MIRROR_1<\/code><\/pre>\n<\/div>\n<h2>\u8ba9 python <a href=\"https:\/\/link.zhihu.com\/?target=http%3A\/\/setup.py\/\" class=\" wrap external\" target=\"_blank\" rel=\"nofollow noreferrer noopener\" data-za-detail-view-id=\"1043\">setup.py<\/a> \u66f4\u5b89\u9759<\/h2>\n<p data-pid=\"t2o-ZYeY\">\u6709\u65f6\u5019\u6211\u4eec\u4f1a\u5728 Dockerfile \u91cc build \u548c install Python packages\uff0c\u6b64\u65f6\u6211\u4eec\u9700\u8981\u8fd0\u884c<\/p>\n<div class=\"highlight\">\n<pre><code class=\"language-text\">python .\/setup.py build --quiet\npython .\/setup.py install --quiet<\/code><\/pre>\n<\/div>\n<p data-pid=\"18n5jGC2\">\u4e0d\u8fc7\u5982\u679c\u6211\u4eec\u8981 build binary distribution package\uff0c\u5219\u9700\u8981\u6ce8\u610f\u4f7f\u7528\u5168\u5c40\u53c2\u6570 --quiet<\/p>\n<div class=\"highlight\">\n<pre><code class=\"language-text\">python .\/setup.py --quiet bdist_wheel<\/code><\/pre>\n<\/div>\n<h2>\u660e\u8fa8 ARG \u548c ENV<\/h2>\n<p data-pid=\"Zqbc967C\">ARG \u548c ENV \u662f Dockerfile \u91cc\u7528\u6765\u5b9a\u5236\u5316 Docker image \u7684\u5229\u5668\uff0c\u7ecf\u5e38\u7ed3\u5408\u5728\u4e00\u8d77\u4f7f\u7528\uff0c\u4e5f\u5e38\u9886 Dockerfile \u65b0\u624b\u6320\u5934\u3002\u5176\u5b9e\uff0c\u8bb0\u4f4f\u4e00\u4e0b\u51e0\u6761\u89c4\u5219\uff0c\u57fa\u672c\u5c31\u53ef\u4ee5\u4e86\u3002<\/p>\n<ol>\n<li data-pid=\"KNrvHuw1\">ARG \u5b58\u5728\u4e8e docker build \u547d\u4ee4\u6267\u884c\u671f\u95f4\u3002\u9ed8\u8ba4\u503c\u5199\u5728 Dockerfile \u91cc\u3002\u5982\u679c\u9700\u8981\u4fee\u6539\uff0c\u53ef\u4ee5\u901a\u8fc7 docker build \u547d\u4ee4\u91cc\u7684 --build-arg \u53c2\u6570\u6765\u6307\u5b9a\u3002<\/li>\n<li data-pid=\"F1sj2s9R\">ENV \u5b58\u5728\u4e8e docker run \u547d\u4ee4\u6267\u884c\u671f\u95f4\u3002\u9ed8\u8ba4\u503c\u5199\u5728 Dockerfile \u91cc\u3002\u5982\u679c\u8981\u4fee\u6539\uff0c\u53ef\u4ee5\u901a\u8fc7 docker run \u547d\u4ee4\u7684 --env \u53c2\u6570\u6765\u6307\u5b9a\u3002<\/li>\n<li data-pid=\"41Dw9cp8\">\u5982\u679c\u8981\u628a ARG \u7684\u503c\u4fdd\u5b58\u5230 container \u8fd0\u884c\u8d77\u6765\u4e4b\u540e\u4ecd\u7136\u53ef\u4ee5\u53ef\u7528\uff0c\u5219\u9700\u8981\u5728 ARG \u4e4b\u540e\u5199\u4e00\u4e2a ENV\u3002<\/li>\n<\/ol>\n<p data-pid=\"FvgZbaXw\">\u4e3a\u4e86\u65b9\u4fbf\u7406\u89e3\uff0c\u8bf7\u770b\u4e0b\u9762\u51e0\u4e2a\u4f8b\u5b50\u3002\u7b2c\u4e00\u4e2a\u4f8b\u5b50\uff1a\u4e3a\u4e86\u628a ARG \u7684\u503c\u4fdd\u5b58\u5230 docker run \u7684\u65f6\u5019\u4e5f\u53ef\u4ee5\u88ab\u7528\u5230\uff0c\u6211\u4eec\u628a\u5b83\u5199\u5165\u4e00\u4e2a\u6587\u4ef6 \/root\/hello.sh\u3002<\/p>\n<div class=\"highlight\">\n<pre><code class=\"language-docker\"><span class=\"k\">FROM<\/span><span class=\"s\"> ubuntu:18.04<\/span><span class=\"err\">\n<\/span><span class=\"err\"><\/span><span class=\"k\">ARG<\/span> <span class=\"nv\">releaser<\/span><span class=\"o\">=<\/span>\u738b\u76ca\n<span class=\"k\">RUN<\/span> <span class=\"nb\">echo<\/span> <span class=\"s2\">\"echo <\/span><span class=\"nv\">$releaser<\/span><span class=\"s2\">\"<\/span> &gt; \/root\/hello.sh<span class=\"err\">\n<\/span><span class=\"err\"><\/span><span class=\"k\">RUN<\/span> chmod +x \/root\/hello.sh<\/code><\/pre>\n<\/div>\n<p data-pid=\"-XbTHdAp\">\u8fd9\u6837\uff0c\u6211\u4eec\u53ef\u4ee5 docker run \u7684\u65f6\u5019\u8fd0\u884c \/root\/hello.sh\uff0c\u6253\u5370\u51fa docker bulid \u7684\u65f6\u5019\u6307\u5b9a\u7684 releaser\u3002<\/p>\n<div class=\"highlight\">\n<pre><code class=\"language-bash\">docker build -t dev .\ndocker run --rm -it dev bash -c \/root\/hello.sh <span class=\"c1\"># \u6253\u5370\u51fa \u738b\u76ca<\/span><\/code><\/pre>\n<\/div>\n<p data-pid=\"RgQ0LzGi\">\u4e0d\u8fc7\u56e0\u4e3a ARG \u53ea\u5b58\u5728\u4e8e docker build \u547d\u4ee4\u6267\u884c\u671f\u95f4\uff0c\u6240\u4ee5\u4e0b\u9762\u547d\u4ee4\u4ec0\u4e48\u4e5f\u6253\u5370\u4e0d\u51fa\u6765<\/p>\n<div class=\"highlight\">\n<pre><code class=\"language-text\">docker run --rm -it dev bash -c \"echo $releaser\"<\/code><\/pre>\n<\/div>\n<p data-pid=\"k3a7XTV1\">\u5982\u679c\u8981\u8ba9\u4e0a\u9762\u547d\u4ee4\u4e5f\u53ef\u4ee5\u6253\u5370\u51fa releaser \u8fd9\u4e2a ARG \u7684\u503c\uff0c\u53ef\u4ee5\u5728 Dockerfile \u91cc\u52a0\u4e00\u4e2a ENV\u3002<\/p>\n<div class=\"highlight\">\n<pre><code class=\"language-docker\"><span class=\"k\">FROM<\/span><span class=\"s\"> ubuntu:18.04<\/span><span class=\"err\">\n<\/span><span class=\"err\"><\/span><span class=\"k\">ARG<\/span> <span class=\"nv\">releaser<\/span><span class=\"o\">=<\/span>\u738b\u76ca\n<span class=\"k\">ENV<\/span> <span class=\"nv\">releaser<\/span><span class=\"o\">=<\/span><span class=\"nv\">$releaser<\/span><\/code><\/pre>\n<\/div>\n<p data-pid=\"l44VquLJ\">\u8fd9\u6837\uff0c\u4e0b\u9762\u547d\u4ee4\u5c31\u4e5f\u53ef\u4ee5\u6253\u5370\u51fa\u201d\u738b\u76ca\u201c\u4e86\u3002<\/p>\n<div class=\"highlight\">\n<pre><code class=\"language-bash\">docker build -t dev .\ndocker run --rm -it dev bash -c <span class=\"s2\">\"echo <\/span><span class=\"nv\">$releaser<\/span><span class=\"s2\">\"<\/span><\/code><\/pre>\n<\/div>\n<h2>docker build --quiet<\/h2>\n<p data-pid=\"Cwfhyy-Z\">\u4e0a\u9762\u4e00\u4e9b\u7ecf\u9a8c\u662f\u8ba9 docker build \u53d8\u5f97\u66f4\u5b89\u9759\u7684\u3002\u5982\u679c\u8981\u6781\u7aef\u7684\u5b89\u9759\uff0c\u4e0d\u9700\u8981\u901a\u8fc7\u5728\u5199 Dockerfile \u7684\u65f6\u5019\u6ce8\u610f\u4ec0\u4e48\uff0c\u53ea\u9700\u8981\u5728 docker build \u547d\u4ee4\u91cc\u52a0\u4e0a --quiet \u2014\u2014 \u5982\u679c\u4e0d\u6015\u8fd9\u6837\u5bfc\u81f4\u4e16\u754c\u592a\u8fc7\u5b89\u9759\u7684\u8bdd\u3002<\/p>\n<hr>\n<p data-pid=\"Mc4Y6gCd\"><\/div>\n<\/figure>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>\u548c\u5f88\u591a\u5f00\u6e90\u9879\u76ee\u4e00\u6837\uff0cSQLFlow \u9879\u76ee\u4e3a\u4e86\u65b9\u4fbf\u8c03\u8bd5\u548c\u534f\u540c\u5de5\u4f5c\uff0c\u628a\u6240\u6709 build tools \u5b89\u88c5\u5728\u4e00\u4e2a Docker image \u91cc\u3002\u9879\u76ee\u7684\u8d21\u732e\u8005\u4eec\u7528\u8fd9\u4e2a Docker image \u4f5c\u4e3a\u81ea\u5df1\u7684\u5f00\u53d1\u73af\u5883\u3002\u5199 Dockerfile \u7684\u8fc7\u7a0b\u91cc\uff0c\u6211\u4eec\u603b\u7ed3\u4e86\u4e00\u4e9b\u6280\u5de7\uff0c\u5206\u4eab\u5982\u4e0b\uff0c\u629b\u7816\u5f15\u7389\u3002 \u7528 python -m pip \u800c\u4e0d\u662f pip \u8fd9\u662f\u4e3a\u4e86\u786e\u4fdd\u6211\u4eec\u4f7f\u7528\u7684 pip \u662f\u6211\u4eec\u60f3\u7528\u7684\u90a3\u4e2a python \u5bf9\u5e94\u7684 pip\u3002\u6709\u65f6\u5019\uff0c\u4e00\u4e2a\u7cfb\u7edf\u91cc\u5b89\u88c5\u4e86 Python 2 \u548c Python 3\uff0c\u800c\u6211\u4eec\u53ef\u80fd\u9519\u8bef\u5730\u8bbe\u7f6e\u4e86 PATH \u73af\u5883\u53d8\u91cf\uff08\u6216\u5219\u56e0\u4e3a\u5176\u4ed6\u7684\u539f\u56e0\uff09\uff0c\u5bfc\u81f4\u6211\u4eec\u8fd0\u884c python \u547d\u4ee4\u7684\u65f6\u5019\uff0c\u542f\u52a8\u7684 Python 3\uff08\u6216\u8005 2\uff09\uff0c\u4f46\u662f pip \u547d\u4ee4\u662f Python 2\uff08\u6216\u80053\uff09\u7684 pip\u3002\u8fd8\u6709\u4e00\u4e9b\u5176\u4ed6\u539f\u56e0\u4f7f\u6211\u4eec\u66f4\u5e94\u8be5\u7528 python -m pip \u7684\uff0c\u8be6\u89c1 https:\/\/snarky.ca\/why-you-should-use-python-m-pip\/ \u4e00\u4e2a\u5178\u578b\u7684\u4f8b\u5b50\uff08\u5347\u7ea7 pip\uff09\u3002 python -m pip install &#8211;quiet &#8211;upgrade pip \u8ba9 pip install \u66f4\u5b89\u9759 \u4e0a\u4f8b\u4e2d\uff0c\u5728 pip install \u547d\u4ee4\u91cc\uff0c\u6211\u4eec\u7528\u4e86 &#8211;quiet \u53c2\u6570\uff0c\u51cf\u5c11 pip install \u6253\u5370\u51fa\u6765\u7684\u4fe1\u606f\u3002\u8fd9\u6837\u53ef\u4ee5\u8ba9 docker build \u66f4\u5b89\u9759\u3002\u5c24\u5176\u662f\uff0c\u5982\u679c\u5728 CI \u91cc\u8fd0\u884c docker build \u7684\u8bdd\uff0c\u51cf\u5c11\u6253\u5370\u4fe1\u606f\u53ef\u4ee5\u8ba9 CI log \u66f4\u52a0\u53ef\u8bfb\u3002 \u8ba9 apt-get install \u66f4\u5b89\u9759 \u7c7b\u4f3c\u7684\uff0c\u7528 apt-get \u5b89\u88c5\u8f6f\u4ef6\u5305\u7684\u65f6\u5019\uff0c\u6211\u4eec\u7528 -qq \u547d\u4ee4\uff0c\u751a\u81f3\u91cd\u5b9a\u5411\u8f93\u51fa\u5230 \/dev\/null \u8ba9\u5b83\u66f4\u5b89\u9759\u3002 apt-get -qq update apt-get -qq install -y curl &gt; \/dev\/null \u8ba9 curl \u548c wget \u66f4\u5b89\u9759 \u9996\u5148\uff0c\u5982\u679c\u8981\u4e0b\u8f7d\u6587\u4ef6\uff0ccurl \u548c wget \u4e8c\u9009\u4e00\u5373\u53ef\u3002\u5982\u679c\u7528 curl\uff0c\u53ef\u4ee5\u7528 &#8211;silent \u53c2\u6570\u3002 curl -sLO https:\/\/storage.googleapis.com\/minikube\/releases\/latest\/minikube-linux-amd64 wget \u6709 &#8211;quiet \u53c2\u6570\u3002 wget -q https:\/\/storage.googleapis.com\/minikube\/releases\/latest\/minikube-linux-amd64 \u7528 axel \u800c\u4e0d\u662f curl \u6216\u8005 wget \u4f5c\u4e3a\u4e00\u4e2a\u5f00\u6e90\u8f6f\u4ef6\uff0c\u4e2d\u5916\u5f00\u53d1\u8005\u90fd\u4f1a\u8fd0\u884c docker build\u3002\u5f00\u53d1\u8005\u6240\u5904\u7684\u5730\u7406\u4f4d\u7f6e\u4e0d\u540c\uff0c\u5404\u81ea\u90fd\u5e0c\u671b\u4ece\u8ddd\u79bb\u81ea\u5df1\u6700\u8fd1\uff08\u6700\u5feb\uff09\u7684 mirror \u4e0b\u8f7d\u548c\u5b89\u88c5\u6587\u4ef6\u3002axel \u53ef\u4ee5\u4ece\u591a\u4e2a mirror \u4e0b\u8f7d\u540c\u4e00\u4e2a\u6587\u4ef6\uff0c\u6839\u636e\u5404\u4e2a mirror \u7684\u901f\u5ea6\uff0c\u51b3\u5b9a\u5206\u522b\u4ece\u4e0d\u540c mirror \u4e0b\u8f7d\u7684\u5b57\u8282\u6570\u91cf\u3002\u5982\u679c\u6709\u7684 mirror \u6302\u4e86\uff0caxel \u53ef\u4ee5\u5ffd\u7565\u4e4b\u3002\u5c24\u5176\u5bf9\u4e8e\u8eab\u5904\u56fd\u5185\u7684\u5f00\u53d1\u8005\uff0caxel \u5b8c\u5168\u53ef\u4ee5\u53d6\u4ee3 curl \u4ee5\u53ca wget\u3002 axel \u548c wget \u4e00\u6837\u652f\u6301 &#8211;quiet \u53c2\u6570\u3002\u4ee5\u4e0b\u662f\u4e00\u4e2a\u4ece\u5927\u6d0b\u4e24\u5cb8\u7684 mirrors \u4e0b\u8f7d Go \u7f16\u8bd1\u5668\u7684\u4f8b\u5b50\u3002 echo &#8220;Install Go compiler &#8230;&#8221; GO_MIRROR_0=&#8221;http:\/\/mirrors.ustc.edu.cn\/golang\/go1.13.4.linux-amd64.tar.gz&#8221; GO_MIRROR_1=&#8221;https:\/\/dl.google.com\/go\/go1.13.4.linux-amd64.tar.gz&#8221; axel &#8211;quiet &#8211;output go.tar.gz $GO_MIRROR_0 $GO_MIRROR_1 \u8ba9 python setup.py \u66f4\u5b89\u9759 \u6709\u65f6\u5019\u6211\u4eec\u4f1a\u5728 Dockerfile \u91cc build \u548c install Python packages\uff0c\u6b64\u65f6\u6211\u4eec\u9700\u8981\u8fd0\u884c python .\/setup.py build &#8211;quiet python .\/setup.py install &#8211;quiet \u4e0d\u8fc7\u5982\u679c\u6211\u4eec\u8981 build binary distribution package\uff0c\u5219\u9700\u8981\u6ce8\u610f\u4f7f\u7528\u5168\u5c40\u53c2\u6570 &#8211;quiet python .\/setup.py &#8211;quiet bdist_wheel \u660e\u8fa8 ARG \u548c ENV ARG \u548c ENV \u662f Dockerfile \u91cc\u7528\u6765\u5b9a\u5236\u5316 Docker image \u7684\u5229\u5668\uff0c\u7ecf\u5e38\u7ed3\u5408\u5728\u4e00\u8d77\u4f7f\u7528\uff0c\u4e5f\u5e38\u9886 Dockerfile \u65b0\u624b\u6320\u5934\u3002\u5176\u5b9e\uff0c\u8bb0\u4f4f\u4e00\u4e0b\u51e0\u6761\u89c4\u5219\uff0c\u57fa\u672c\u5c31\u53ef\u4ee5\u4e86\u3002 ARG \u5b58\u5728\u4e8e docker build \u547d\u4ee4\u6267\u884c\u671f\u95f4\u3002\u9ed8\u8ba4\u503c\u5199\u5728 Dockerfile \u91cc\u3002\u5982\u679c\u9700\u8981\u4fee\u6539\uff0c\u53ef\u4ee5\u901a\u8fc7 doc&#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_eb_attr":"","footnotes":""},"categories":[84],"tags":[],"class_list":["post-1430","post","type-post","status-publish","format-standard","hentry","category-docker"],"_links":{"self":[{"href":"https:\/\/oneai.eu.org\/index.php?rest_route=\/wp\/v2\/posts\/1430","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/oneai.eu.org\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/oneai.eu.org\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/oneai.eu.org\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/oneai.eu.org\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1430"}],"version-history":[{"count":1,"href":"https:\/\/oneai.eu.org\/index.php?rest_route=\/wp\/v2\/posts\/1430\/revisions"}],"predecessor-version":[{"id":1431,"href":"https:\/\/oneai.eu.org\/index.php?rest_route=\/wp\/v2\/posts\/1430\/revisions\/1431"}],"wp:attachment":[{"href":"https:\/\/oneai.eu.org\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1430"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/oneai.eu.org\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1430"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/oneai.eu.org\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1430"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}