我有一個 Python 應用程式,如果可能的話,我想通過洗掉 git 來減小影像大小。這是 Dockerfile:
FROM python:3.8-slim-buster
ARG GITHUB_TOKEN
RUN apt-get update && \
apt-get upgrade -y && \
apt-get install -y git gcc
WORKDIR /app
COPY . .
RUN git config --global url."https://${GITHUB_TOKEN}@github.com/".insteadOf "https://github.com/"
RUN pip install -r requirements.txt
EXPOSE 3000
CMD ["./start.sh"]
我嘗試了以下方法:
FROM python:3.8-slim-buster AS base
ARG GITHUB_TOKEN
RUN apt-get update && \
apt-get upgrade -y && \
apt-get install -y git gcc
WORKDIR /app
FROM base
COPY . .
RUN git config --global url."https://${GITHUB_TOKEN}@github.com/".insteadOf "https://github.com/"
RUN pip install -r requirements.txt
EXPOSE 3000
CMD ["./start.sh"]
影像構建沒有錯誤,但大小在兩個版本中保持不變。我該怎么辦?
uj5u.com熱心網友回復:
使用多階段構建,您將構建和運行階段分開。我們在運行階段實作的主要好處是避免安裝編譯工具(較小的影像大小),并且不會積累過多的中間層(再次較小的影像大小)。
因此,在第一階段,構建它:
FROM python:3.8-slim-buster AS builder
ARG GITHUB_TOKEN
RUN apt-get update && \
apt-get upgrade -y && \
apt-get install -y git gcc
WORKDIR /app
COPY . .
RUN git config --global url."https://${GITHUB_TOKEN}@github.com/".insteadOf "https://github.com/"
RUN pip install -r requirements.txt
并且,對于第二階段,運行它:
FROM python:3.8-slim-buster
COPY --from=builder /app /app/
EXPOSE 3000
CMD ["./start.sh"]
最后結果:
FROM python:3.8-slim-buster AS builder
ARG GITHUB_TOKEN
RUN apt-get update && \
apt-get upgrade -y && \
apt-get install -y git gcc
WORKDIR /app
COPY . .
RUN git config --global url."https://${GITHUB_TOKEN}@github.com/".insteadOf "https://github.com/"
RUN pip install -r requirements.txt
FROM python:3.8-slim-buster
COPY --from=builder /app /app/
EXPOSE 3000
CMD ["./start.sh"]
你的錯誤是:
FROM base“base”是第一階段的別名,不應用作基本映像,而應與 COPY 命令一起使用。- 在運行階段,不帶 --from 引數的 COPY 將從主背景關系(檔案系統)復制檔案。我們想使用 --from 引數復制上一階段生成的編譯工件。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/316330.html
上一篇:如何在Windows10上啟動時修復Docker錯誤System.InvalidOperationException?
下一篇:為docker容器創建一個空目錄
