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.
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"]
Je me demande toujours comment gérer le problème de chemin dans les tests. c'est tout.
Recommended Posts