Recherche d'un moyen efficace d'écrire un Dockerfile avec Python avec de la poésie

Présentation de la réduction de la taille de l'image Docker pour l'apprentissage automatique de Python Un blog M3 très utile twitter Je l'ai vu sur //twitter.com/m3_engineering/status/1306859277131427840), je vais donc faire un tour de ferroutage et écrire brièvement la différence avec le Dockerfile que j'utilise. Il s'agit d'un fichier Docker pour le tableau de bord, pas pour l'apprentissage automatique, veuillez donc le consulter comme référence. Je ne pense pas que le contenu suivant soit excellent, alors j'apprécierais que quelqu'un avec une meilleure idée puisse me donner un tsukkomi. Et comme toujours, j'espère que quelqu'un de l'autre côté d'Internet m'aidera. Streamlit est très pratique.

Conclusion

Même partie

Partie différente

code

build

Il n'y a pas longtemps, j'ai défini la variable d'environnement comme STAGE = dans .env, mais je l'ai arrêtée car la réécriture est gênante.

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

Impressions

Je me demande toujours comment gérer le problème de chemin dans les tests. c'est tout.

Recommended Posts

Recherche d'un moyen efficace d'écrire un Dockerfile avec Python avec de la poésie
Un moyen simple d'éviter plusieurs boucles for en Python
Une manière intelligente de chronométrer le traitement avec Python
Je veux écrire dans un fichier avec Python
Comment écrire quoi faire lorsque l'application est affichée pour la première fois dans Qt pour Python avec Designer
Comment convertir / restaurer une chaîne avec [] en python
Je veux écrire en Python! (2) Écrivons un test
Je veux travailler avec un robot en python.
Pour ceux qui veulent écrire Python avec vim
Un véritable moyen pour les personnes utilisant python 3.8.0-2 à partir de Windows de travailler avec des caractères multi-octets
Création d'une bibliothèque Python pour écrire des inclusions complexes et les réduire de manière facile à lire
Écrire en csv avec Python
Comment convertir un tableau en dictionnaire avec Python [Application]
Créer un compte enfant de connect with Stripe en Python
Probablement le moyen le plus simple de créer un pdf avec Python 3
Expérimentez pour créer un PDF indépendant pour Kindle avec Python
[Python] Comment écrire une instruction if en une phrase.
Comment définir plusieurs variables dans une instruction Python for
Comment créer un package Python (écrit pour un stagiaire)
Un moyen standard de développer et de distribuer des packages en Python
Introduction d'une bonne méthode de gestion des connexions DB en Python
Tourner un tableau de chaînes avec une instruction for (Python3)
Obtenez de manière récursive la liste Excel dans un dossier spécifique avec python et écrivez-la dans Excel.
C'est un problème d'écrire "coding: utf-8" en Python, donc je vais faire quelque chose avec Shellscript
J'ai créé un environnement pour Masonite, un framework WEB Python similaire à Laravel, avec Docker!
Recherche d'un moyen unifié d'attendre et d'obtenir les changements d'état de Selenium pour les éléments Python
Un moyen simple de visualiser le temps pris en Python et un moyen plus intelligent de l'améliorer
Ecrire une dichotomie en Python
[Python] Ecrire dans un fichier csv avec Python
Ecrire un serveur HTTP / 2 en Python
Ecrire des algorithmes A * (A-star) en Python
Ecrire un graphique à secteurs en Python
Ecrire le plugin vim en Python
Écrire une recherche de priorité en profondeur en Python
Premiers pas avec Python pour les non-ingénieurs
Une alternative à `pause` en Python
Ecrire un script batch avec Python3.5 ~
Comment transformer une chaîne en tableau ou un tableau en chaîne en Python
Un jeu pour partir à l'aventure en mode interactif de python
Essayez d'extraire une chaîne de caractères d'une image avec Python3
[Introduction à Python] Comment utiliser l'opérateur in dans l'instruction for?
Comment utiliser un éditeur externe pour le développement Python avec Grasshopper
Dockerfile avec les bibliothèques nécessaires pour le traitement du langage naturel avec python
Écrire de la documentation dans Sphinx avec Python Livereload
Livre en spirale en Python! Python avec un livre en spirale! (Chapitre 14 ~)
Essayez de vous connecter à qiita avec Python
Mémo pour demander des KPI avec python
Ecrire le test dans la docstring python
Envoyer des e-mails à une adresse e-mail spécifique avec python sans paramétrer SMTP
Ecrire une liste de liens en langage C dans un style orienté objet (avec comparaison de code entre Python et Java)
Comment utiliser BigQuery en Python
Ecrire une courte définition de propriété en Python
Lire le fichier Python # .txt pour Python super débutant super débutant avec travail .py
[Python] Créez un linebot pour écrire le nom et l'âge sur l'image
Comment obtenir stacktrace en python
Un moyen simple d'utiliser Wikipedia avec Python
Ecrire un programme de chiffrement Caesar en Python