Einführung, wie die Größe des Docker-Images für das maschinelle Lernen von Python reduziert werden kann Ein sehr nützliches M3-Blog twitter Ich habe es unter //twitter.com/m3_engineering/status/1306859277131427840) gesehen, also mache ich eine Huckepackfahrt und schreibe kurz den Unterschied zu der Docker-Datei, die ich benutze. Dies ist eine Docker-Datei für das Dashboard, nicht für maschinelles Lernen. Schauen Sie sich diese als Referenz an. Ich denke nicht, dass der folgende Inhalt ausgezeichnet ist, daher würde ich es begrüßen, wenn mir jemand mit einer besseren Idee einen Tsukkomi geben könnte. Und wie immer hoffe ich, dass mir jemand auf der anderen Seite des Internets hilft. Streamlit ist sehr praktisch.
--Versionsmanagement mit Poesie --Verwenden Sie einen mehrstufigen Build --docker build funktioniert mit cache auf dev, prod
code
build
Vor nicht allzu langer Zeit habe ich die Umgebungsvariable als "STAGE =" in ".env" definiert, aber ich habe sie gestoppt, weil das Umschreiben problematisch ist.
# dev build
STAGE=dev docker-compose build
# prod build
docker-compose up build
Dockerfile
FROM python:3.8.5-slim as builder
WORKDIR /work/src
RUN pip install --upgrade pip && pip install poetry
COPY pyproject.toml poetry.lock ./
RUN poetry export --without-hashes -f requirements.txt > requirements.txt
RUN poetry export --without-hashes --dev -f requirements.txt > requirements-dev.txt
RUN pip install -r requirements.txt
### for dev.
FROM python:3.8.5-slim as dev
ENV PYTHONUNBUFFERED=1
WORKDIR /work/src
COPY --from=builder /usr/local/lib/python3.8/site-packages /usr/local/lib/python3.8/site-packages
# need to copy if python package is installed in /usr/local/bin
COPY --from=builder /usr/local/bin/streamlit /usr/local/bin/streamlit
COPY src/ ./
# for dev packages
COPY --from=builder /work/src/requirements-dev.txt requirements-dev.txt
RUN pip install -r requirements-dev.txt
COPY tests/ ./
EXPOSE 8501
CMD ["streamlit", "run", "hello.py"]
### for prod
FROM python:3.8.5-slim as prod
ENV PYTHONUNBUFFERED=1
WORKDIR /work/src
COPY --from=builder /usr/local/lib/python3.8/site-packages /usr/local/lib/python3.8/site-packages
# need to copy if python package is installed in /usr/local/bin
COPY --from=builder /usr/local/bin/streamlit /usr/local/bin/streamlit
COPY src/ ./
EXPOSE 8501
CMD ["streamlit", "run", "hello.py"]
docker-compose.yml
version: '3'
services:
app:
build:
context: .
target: ${STAGE:-prod}
image: "internal-dashboard_app_${STAGE:-prod}"
container_name: "internal-dashboard_${STAGE:-prod}"
volumes:
- ./src:/work/src
ports:
- "8501:8501"
restart: always
command: ["streamlit", "run", "hello.py"]
Ich frage mich immer, wie ich mit dem Pfadproblem in Tests umgehen soll. das ist alles.
Recommended Posts