À propos de Docker

Pourquoi utiliser

** Pour garder l'environnement propre. ** **

Sans Docker, python3.7 et python3.8 sont mélangés dans l'environnement local, et il est déjà en désordre. le chaos. Il est également formidable que l'environnement de développement et l'environnement de production puissent être combinés. Il existe de nombreux cas où une erreur se produit en raison de l'environnement différent à chaque fois que vous déployez, mais cela peut être évité. Docker est meilleur que Virtual Box car il démarre beaucoup plus rapidement. Depuis que j'ai commencé à utiliser Docker, ma santé au moment du développement s'est considérablement améliorée. C'est comme si étudier dans un bureau organisé est le même sentiment.

Principes de base de Docker

Le contenu est que cela suffit si vous jouez simplement avec le bac à sable sans être conscient de l'environnement de production. Au début, je pense que c'est tout ce dont vous avez besoin. Une fois que vous vous y êtes habitué, je souhaite passer à la version avancée.

#Il tire l'image de base. Le sentiment de créer un environnement de chef-d'œuvre. Placez le paquet etc. dessus.
$nom de l'image d'extraction du docker

# anaconda ->La plupart des packages requis pour l'apprentissage automatique tels que les pandas sont déjà installés, mais ils sont lourds. La légèreté est importante dans un environnement de production, mais je pense que c'est bien pour le développement local.
$ docker pull continuumio/anaconda3

# -Continuez à démarrer Docker avec la commande it. Si vous ne le faites pas, vous ne pouvez pas y travailler car il sera coupé juste en le démarrant une fois. Aussi à la fin/bin/En attachant bash, vous pouvez travailler dans le bash. Une image qui peut utiliser la ligne de commande. Sinon, ce sera en mode interactif python.
$ docker run -it continuumio/anaconda3 /bin/bash

#Si vous apportez des modifications telles que l'installation d'un package à l'intérieur du conteneur, enregistrez les modifications après avoir quitté le conteneur. Sinon, l'environnement initial restera.
#Histoire des conteneurs démarrés
$ docker ps -a
#Enregistrer le conteneur en tant qu'image
$ docker commit container_id container_name

#Consultez la liste des images enregistrées
$ docker images

#Démarrez le conteneur enregistré
$ docker run -it container_name /bin/bash

#Monter le répertoire local (partagé avec Docker). -Décrivez "répertoire local: répertoire Docker" après v.
docker run -it -v /c/Users/user/Python:/home container_name /bin/bash

Application Docker

Cela peut être un peu difficile, mais une fois que vous vous y êtes habitué, vous pouvez le développer plus confortablement et plus efficacement. Je me souviens avoir pris beaucoup de temps ici.

Le flux d'utilisation de base est le suivant.

  1. Créez un Dockerfile et requirements.txt
  2. Mettez l'extension Remote-Containers dans VS Code
  3. Exécutez la réouverture dans le conteneur & Dockerfile à partir du bouton de code inférieur gauche de VS Code
  4. Ajoutez le package installé sous l'environnement Docker à requirements.txt
  5. La prochaine fois, reconstruisez.

Ici, je voudrais parler de Dockerfile seul, de la production d'utilisation de docker-compose et de Dockerfile pour l'environnement de production. Finalement, j'aimerais m'habituer au développement en utilisant docker-compose. De plus, ce serait bien de pouvoir créer un Dockerfile pour l'environnement de production.

1. Dockerfile seul

#Celui décrit en haut facilite l'utilisation du cache, décrivons donc ceux qui changent fréquemment en bas.
# python-buster ->Package minimal pour exécuter python. OS est debian.Je développe avec ça.
FROM python:3.8-buster

#Utilisez un chemin absolu comme chemin. Parce que la structure du répertoire est différente entre local et conteneur.
WORKDIR /app

#Mises à jour du gestionnaire de packages et acquisitions de packages ensemble.apt est apte-Mieux que devenir.
RUN apt update -y && apt upgrade -y && \
    apt install -y ffmpeg

#COPY vaut mieux que ADD. Copiez le fichier dans le répertoire de l'application. Copie de fichiers du local vers le conteneur.
COPY requirements.txt /app
# requirements.Voir txt et pip install.Je veux utiliser pip3 dans python3.
RUN pip3 install --upgrade pip && \
    pip3 install -r requirements.txt

#Le répertoire spécifié peut être partagé dans chaque environnement.
# VOLUME /data

#Spécifiez explicitement le répertoire à copier. Pour ne refléter que la pièce modifiée. Parce que je suis gênant, ".J'en ai fini avec.
# COPY src /app/src
# COPY data /app/data
COPY . /app

# CMD ["/bin/bash"]

2. Utilisez Docker-Compose

En utilisant Docker-compose, vous pouvez utiliser plusieurs serveurs en même temps. Par exemple, non seulement pour l'exécution de python, mais également pour des bases de données telles que postgres et jupyter. Il est également bon de pouvoir partager des ressources. L'exemple de code est ci-dessous.

docker-compose.yml


version: '3'
services: 
  notebook:
    # image: jupyter/datascience-notebook ->Non requis car l'image de base est décrite dans le Dockerfile.
    #  container_Si vous ne spécifiez pas de nom, il sera automatiquement généré et il sera difficile de le vérifier ultérieurement.
    container_name: vad-sandbox
    ports: 
      - "8888:8888"
    # 「.Exécutera le Dockerfile dans le même répertoire.
    build: .
    #Spécifiez le répertoire à monter.
    volumes: 
      - .:/app
    working_dir: /app
    #Il exécutera automatiquement la commande. Je le frappe moi-même parce que c'est plus facile à comprendre.
    # command: jupyter lab --ip=0.0.0.0 --allow-root

Et voici le dockerfile lors de l'utilisation de docker-compose

FROM python:3.8-buster

WORKDIR /app

RUN apt update -y && apt upgrade -y && \
    apt install -y ffmpeg

COPY requirements.txt /app

RUN pip3 install --upgrade pip && \
    pip3 install -r requirements.txt

#Utiliser ipywidgets.Vous pouvez utiliser jupyter de manière interactive.
RUN jupyter nbextension enable --py widgetsnbextension --sys-prefix

COPY . /app

# CMD ["/bin/bash"]

3. Pour l'environnement de production Docker

Dans un environnement de production, il est important de réduire au maximum la capacité. Par conséquent, une construction en plusieurs étapes est adoptée (l'environnement est divisé entre la construction et l'exécution).

#En python, buster est meilleur que alpin. L'extension c ne peut pas être utilisée avec slim
#Dans la construction en plusieurs étapes, séparez les images pour la construction et l'exécution, et minimisez la capacité
#Celui que vous souhaitez utiliser le cache est décrit en haut. S'il y a un changement, il sera supprimé après cela.

#Pour construire. gcc peut être utilisé pour Buster. Requis pour installer webrtcvad.
FROM python:3.8-buster as builder

#Utiliser le chemin absolu pour le chemin
WORKDIR /app

#Comme pytorch prend beaucoup de temps à installer, il est facile de réutiliser le cache.
RUN pip3 install --upgrade pip && \
    pip3 install torch

#COPY vaut mieux que ADD. Copiez le fichier dans le répertoire de l'application.
COPY requirements.txt /app
RUN pip3 install --upgrade pip && \
    pip3 install -r requirements.txt

#Conteneur d'exécution
FROM python:3.8-slim-buster as runner

#Copiez le package python installé pour exécution.J'ai pu le réduire d'environ 1 Go.
COPY --from=builder /usr/local/lib/python3.8/site-packages /usr/local/lib/python3.8/site-packages

#Mises à jour du gestionnaire de packages et acquisitions de packages ensemble.apt est apte-Mieux que devenir.
RUN apt update -y && apt upgrade -y && \
    apt install -y ffmpeg

COPY . /app

finalement

Comme il est très abstrait, il est certain que cela prête à confusion à première vue, mais une fois que vous vous y êtes habitué, cela devient une simple tâche. Vous pouvez vous sentir stressé au début, mais faisons de notre mieux. Vous devriez pouvoir faire appel même si vous êtes actif.

Recommended Posts

À propos de Docker
À propos de la capacité de Docker
Découvrez Docker
À propos =
Prise en charge de Java 10 Docker
docker
À propos du fonctionnement simple de Docker
À propos de la limite d'extraction Docker Hub
mémo docker
À propos de Kotlin
À propos de attr_accessor
À propos de Hinemos
printemps × docker
Docker Intellij
À propos des rails 6
À propos du printemps ③
Principes de base de Docker
À propos d'énumération
À propos du polymorphisme
À propos facultatif
À propos du hachage
À propos de JitPack
À propos de ça ()
À propos de l'encapsulation
À propos de JAVA_HOME
À propos de statique
À propos des exceptions
Comprendre Docker
Mémorandum Docker
À propos de la portée
[Maven] À propos de Maven
À propos de Docker, faux serveur et conteneur
tutoriel docker (mémo)
(Presque sur l'infrastructure) Lisez les manuels Docker pour les programmeurs.1
À propos de l'interface Java
[Java] À propos des fonctionnalités de Java 12
Mémorandum technique (Docker)
À propos du routage des rails
Docker + Laravel + Codeception
À propos de la complexité cyclique
Liberty sur Docker
À propos de la gestion des exceptions
Mémo d'opération Docker
Commande de mémorandum docker
À propos des génériques AsyncTask
En savoir plus sur l'image du docker et le FROM du Dockerfile
À propos des symboles Ruby