Auf der Suche nach einer effizienten Möglichkeit, eine Docker-Datei mit Python mit Gedichten zu schreiben

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.

Fazit

Gleicher Teil

--Versionsmanagement mit Poesie --Verwenden Sie einen mehrstufigen Build --docker build funktioniert mit cache auf dev, prod

Anderer Teil

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"]

Impressionen

Ich frage mich immer, wie ich mit dem Pfadproblem in Tests umgehen soll. das ist alles.

Recommended Posts

Auf der Suche nach einer effizienten Möglichkeit, eine Docker-Datei mit Python mit Gedichten zu schreiben
Eine einfache Möglichkeit, mehrere for-Schleifen in Python zu vermeiden
Eine clevere Möglichkeit zur Zeitverarbeitung mit Python
Ich möchte mit Python in eine Datei schreiben
So schreiben Sie, was zu tun ist, wenn die Anwendung zum ersten Mal in Qt for Python mit Designer angezeigt wird
So konvertieren / wiederherstellen Sie einen String mit [] in Python
Ich möchte in Python schreiben! (2) Schreiben wir einen Test
Ich möchte mit einem Roboter in Python arbeiten.
Für diejenigen, die Python mit vim schreiben möchten
Eine echte Möglichkeit für Benutzer von Python 3.8.0-2 aus Windows, mit Multi-Byte-Zeichen zu arbeiten
Erstellt eine Python-Bibliothek, um komplexe Einschlüsse zu schreiben und auf einfach zu lesende Weise zu reduzieren
Schreiben Sie mit Python in csv
So konvertieren Sie mit Python [Anwendung] von einem Array in ein Wörterbuch
Erstellen Sie ein untergeordnetes Konto für die Verbindung mit Stripe in Python
Wahrscheinlich der einfachste Weg, um mit Python 3 ein PDF zu erstellen
Experimentieren Sie mit Python, um ein PDF für Selbstversorger für Kindle zu erstellen
[Python] Wie schreibe ich eine if-Anweisung in einen Satz?
So definieren Sie mehrere Variablen in einer Python for-Anweisung
Wie erstelle ich ein Python-Paket (geschrieben für Praktikanten)
Eine Standardmethode zum Entwickeln und Verteilen von Paketen in Python
Einführung einer guten Methode zur Verwaltung von DB-Verbindungen in Python
Drehen Sie ein Array von Zeichenfolgen mit einer for-Anweisung (Python3).
Rufen Sie die Excel-Liste rekursiv in einem bestimmten Ordner mit Python ab und schreiben Sie sie in Excel.
Es ist mühsam, "Kodierung: utf-8" in Python zu schreiben, also werde ich etwas mit Shellscript machen
Ich suche einen einheitlichen Weg, um auf Statusänderungen von Selenium für Python-Elemente zu warten
Eine einfache Möglichkeit, die in Python benötigte Zeit anzuzeigen und sie intelligenter zu verbessern
Schreiben Sie eine Dichotomie in Python
[Python] Mit Python in eine CSV-Datei schreiben
Schreiben Sie einen HTTP / 2-Server in Python
Schreiben Sie A * (A-Stern) -Algorithmen in Python
Schreiben Sie ein Kreisdiagramm in Python
Schreiben Sie das Vim-Plugin in Python
Schreiben Sie eine Suche mit Tiefenpriorität in Python
Erste Schritte mit Python für Nicht-Ingenieure
Eine Alternative zu "Pause" in Python
Schreiben Sie ein Batch-Skript mit Python3.5 ~
So machen Sie einen String in Python zu einem Array oder ein Array zu einem String
Ein Spiel für ein Abenteuer im interaktiven Python-Modus
Versuchen Sie, mit Python3 eine Zeichenfolge aus einem Bild zu extrahieren
[Einführung in Python] Wie verwende ich den Operator in in der for-Anweisung?
Verwendung eines externen Editors für die Python-Entwicklung mit Grasshopper
Dockerfile mit den notwendigen Bibliotheken für die Verarbeitung natürlicher Sprache mit Python
Spiralbuch in Python! Python mit einem Spiralbuch! (Kapitel 14 ~)
Versuchen Sie, sich mit Python bei qiita anzumelden
Memo, um nach KPI mit Python zu fragen
Schreiben Sie den Test in die Python-Dokumentzeichenfolge
Senden Sie E-Mails mit Python an eine bestimmte E-Mail-Adresse, ohne SMTP festzulegen
Schreiben Sie eine C-Sprach-Linkliste in einem objektorientierten Stil (mit Codevergleich zwischen Python und Java).
So arbeiten Sie mit BigQuery in Python
Schreiben Sie eine kurze Eigenschaftsdefinition in Python
Lesen Sie die Python # .txt-Datei für Super-Anfänger in Python mit .py
[Python] Erstellen Sie einen Linebot, um den Namen und das Alter auf das Bild zu schreiben
Wie bekomme ich Stacktrace in Python?
Einfache Möglichkeit, Wikipedia mit Python zu verwenden
Schreiben Sie ein Caesar-Verschlüsselungsprogramm in Python