[PYTHON] J'ai essayé Flask avec des conteneurs distants de VS Code

Aperçu

Ceci est un mémo car vous pouvez créer un environnement Python dans un conteneur Docker avec une extension appelée Remote-Containers of VSCode.

Objectif de l'utilisation du conteneur Docker

Il y a deux objectifs.

Le premier est que l'environnement local est propre. Il y a des choses comme pyenv et anaconda qui changent d'environnement, mais à la fin cela devient localement dépendant. Même si je fais des exigences, quelle est la version Python? Je ne sais pas si c'est une commande, je ne peux pas y entrer pour une raison quelconque, je ne peux pas mélanger pip et conda, et parfois je ne sais pas ce que c'est, mais j'ai l'impression que je veux obtenir mon diplôme.

Le second est facile à déployer. Ces jours-ci, je calcule et fournit parfois des services sur le cloud plutôt que sur le PC local, alors j'aimerais le faire avec quelques Dockerfile.

C'est pourquoi vous ne les obtiendrez pas tout de suite, mais dans cet article, je vais enregistrer jusqu'à la configuration d'un Flask avec Remote-Container.

Premier résultat

J'ai mis le fichier final sur github. yo16 / simple_flask

Structure finale du fichier.


/simple_flask
    /.devcontainer
        Dockerfile
        devcontainer.json
    /simple_app
        /templates
            default.html
        app.py
    requirements.txt

Cependant, dans cet article, je ne veux pas vous dire le résultat ou le contenu de la création, mais c'est une procédure dans VS Code, donc cela n'a pas vraiment d'importance. Si vous êtes fatigué de créer une source simple de Flask, veuillez la télécharger et l'utiliser.

Étape 0: préparer le dossier

Créez un dossier pour créer cet environnement. Cette fois "simple_flask".

Structure des fichiers jusqu'à ce point.


/simple_app

Étape 1: Préparez le flacon

Tout va bien, je vais donc en faire un simple.

Structure des fichiers jusqu'à ce point.


/simple_flask
    /simple_app
        /templates
            default.html
        app.py

Je n'expliquerai pas le contenu de Flask, mais app.py a ʻapp.run () ou @ app.route ('/') . Si vous faites cela python app.py`, le site Flask sera lancé.

Étape 2: Ouvrez avec VS Code et préparez les conteneurs Docker

  1. Ouvrez le dossier supérieur / simple_flask avec VS Code
  2. Recherchez "remote-containers" dans l'extension de la barre d'outils de gauche
  3. Installation

20200926_2.PNG

Étape 3: créer un environnement Docker

  1. Cliquez sur la zone verte comme> <en bas à gauche de VS Code

  2. Sélectionnez "Remote-Containers: Open Folder in Container ..." parmi ceux qui apparaissent à l'écran. 20200926_4.PNG

  3. Sélectionnez le dossier "simple_flask" et ouvrez

  4. Sélectionnez "Python 3" tel qu'il apparaîtra à nouveau ci-dessus 20200926_5.PNG

  5. Il sortira à nouveau, alors sélectionnez la version Python appropriée 20200926_6.PNG

  6. Il sortira à nouveau, donc c'est OK (c'est le dernier) À propos, si vous cochez ici et même si 0 est sélectionné, quelque chose sera installé, alors vérifiez-le dans la procédure ultérieure. 20200926_7.PNG

  7. Si vous pouvez le faire jusqu'à présent, l'écran ci-dessous s'affiche. Le point est l'écran de type Linux dans le terminal inférieur droit. (Ça l'est vraiment) C'est déjà dans le conteneur Docker avec bash en cours d'exécution. 20200926_8.png

Donc quand j'essaye ls là, ça ressemble à ça, et "simple_app" est également fermement placé.


root@c249cd5c6b06:/workspaces/simple_flask# ls -la
total 4
drwxrwxrwx 1 root root 4096 Sep 26 14:49 .
drwxr-xr-x 3 root root 4096 Sep 26 13:54 ..
drwxrwxrwx 1 root root 4096 Sep 26 14:49 .devcontainer
drwxrwxrwx 1 root root 4096 Sep 26 14:08 simple_app

Python est également inclus.


root@c249cd5c6b06:/workspaces/simple_flask# python -V
Python 3.8.5

Étape 4: Installez Flask

Étant donné que l'image Docker de python a été sélectionnée à l'étape 3-4, Python est inclus, mais bien sûr, il n'y a pas de Flask car il est dans son état d'origine. Alors je vais le mettre. Tout d'abord, mettez-le sur la console.


root@c249cd5c6b06:/workspaces/simple_flask# pip install flask
Requirement already satisfied: flask in /usr/local/lib/python3.8/site-packages (1.1.2)
Requirement already satisfied: Werkzeug>=0.15 in /usr/local/lib/python3.8/site-packages (from flask) (1.0.1)
Requirement already satisfied: click>=5.1 in /usr/local/lib/python3.8/site-packages (from flask) (7.1.2)
Requirement already satisfied: itsdangerous>=0.24 in /usr/local/lib/python3.8/site-packages (from flask) (1.1.0)
Requirement already satisfied: Jinja2>=2.10.1 in /usr/local/lib/python3.8/site-packages (from flask) (2.11.2)
Requirement already satisfied: MarkupSafe>=0.23 in /usr/local/lib/python3.8/site-packages (from Jinja2>=2.10.1->flask) (1.1.1)

C'est dans ... (suer Eh bien, je pense que je voudrais peut-être ajouter d'autres choses, alors dans ce cas, je vais procéder avec cette procédure, donc je vais continuer avec le tay qui n'était pas inclus.

Ensuite, créez requirements.txt afin que le module actuellement inclus soit installé automatiquement lors de la création du conteneur Docker.

root@c249cd5c6b06:/workspaces/simple_flask# pip freeze > requirements.txt

Si vous faites cela, vous pouvez bien sûr le faire dans le conteneur Docker, mais vous pouvez également le faire sur VSCode. Vous pouvez l'ouvrir normalement avec VS Code pour le vérifier et le modifier.

20200926_9.PNG

Utilisez ceci dans l'étape suivante.

Étape 5: Vérifiez et modifiez le Dockerfile

Celui qui fonctionne lors de la création d'un conteneur est . / Dockercontainer / Dockerfile.

Si vous ouvrez ce fichier avec VS Code, vous pouvez voir diverses choses qui fonctionnent lorsque vous ouvrez le conteneur Docker. (J'utilise l'image de Microsoft.)

Ici, comme expliqué à l'étape 2-6, «Node.js» doit être installé indépendamment du fait qu'il soit installé ou non, alors commentez cette zone et utilisez nodejs. J'essaierai de ne pas le faire. Vous n'avez pas besoin du simple Flask dans cet article, mais si vous en avez besoin, utilisez-le.

Au contraire, le fichier requirements.txt créé à l'étape 4 n'est pas utilisé, donc décommentez-le. Copiez-le dans / tmp / pip-tmp /, pip install, et supprimez-le lorsque vous avez terminé.

Le Dockerfile modifié est ci-dessous.

# See here for image contents: https://github.com/microsoft/vscode-dev-containers/tree/v0.140.1/containers/python-3/.devcontainer/base.Dockerfile

# [Choice] Python version: 3, 3.8, 3.7, 3.6
ARG VARIANT="3"
FROM mcr.microsoft.com/vscode/devcontainers/python:0-${VARIANT}

# [Option] Install Node.js
#### comment out
# ARG INSTALL_NODE="true"
# ARG NODE_VERSION="lts/*"
# RUN if [ "${INSTALL_NODE}" = "true" ]; then su vscode -c "source /usr/local/share/nvm/nvm.sh && nvm install ${NODE_VERSION} 2>&1"; fi

# [Optional] If your pip requirements rarely change, uncomment this section to add them to the image.
#### removed "#"
COPY requirements.txt /tmp/pip-tmp/
RUN pip3 --disable-pip-version-check --no-cache-dir install -r /tmp/pip-tmp/requirements.txt \
   && rm -rf /tmp/pip-tmp

# [Optional] Uncomment this section to install additional OS packages.
# RUN apt-get update && export DEBIAN_FRONTEND=noninteractive \
#     && apt-get -y install --no-install-recommends <your-package-list-here>

# [Optional] Uncomment this line to install global node packages.
# RUN su vscode -c "source /usr/local/share/nvm/nvm.sh && npm install -g <your-package-here>" 2>&1

Étape 6: redémarrez le conteneur Docker

Recréez à nouveau le conteneur à l'aide du Dockerfile modifié.

  1. Cliquez sur la zone verte en bas à gauche 20200926_10.PNG

  2. Sélectionnez "Remote-Containers: Rebuild Container" dans le menu déroulant ci-dessus 20200926_11.PNG

C'est tout! Je vous remercie pour votre travail acharné.

Contrôle de fonctionnement

Si vous démarrez app.py avec python depuis le terminal en bas à droite, le serveur Flask habituel démarrera.

root@acebfd6333f5:/workspaces/simple_flask# python ./simple_app/app.py
 * Serving Flask app "app" (lazy loading)
 * Environment: production
   WARNING: This is a development server. Do not use it in a production deployment.
   Use a production WSGI server instead.
 * Debug mode: off
 * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)

C'est tout!

Recommended Posts

J'ai essayé Flask avec des conteneurs distants de VS Code
J'ai essayé la reconnaissance manuscrite des caractères des runes avec scikit-learn
J'ai essayé la reconnaissance d'image de CIFAR-10 avec la reconnaissance d'image Keras-
J'ai essayé d'obtenir le code d'authentification de l'API Qiita avec Python.
J'ai essayé d'extraire des fonctionnalités avec SIFT d'OpenCV
[Python] J'ai immédiatement essayé d'utiliser l'extension VS Code de Pylance.
[OpenCV / Python] J'ai essayé l'analyse d'image de cellules avec OpenCV
J'ai essayé l'interpolation d'entrée pour UE4 Python VS Code
Mémo de travail que j'ai essayé i18n avec l'application Flask
J'ai essayé la "conversion de morphologie" de l'image avec Python + OpenCV
J'ai essayé d'exécuter l'exemple de code du module Ansible
J'ai essayé fp-growth avec python
J'ai essayé de gratter avec Python
Python avec VSCode (Windows 10)
J'ai essayé Learning-to-Rank avec Elasticsearch!
J'ai essayé le clustering avec PyCaret
Déboguer Python avec VS Code
J'ai essayé gRPC avec Python
J'ai essayé de gratter avec du python
J'ai essayé de créer un environnement avec WSL + Ubuntu + VS Code dans un environnement Windows
J'ai essayé de trouver l'entropie de l'image avec python
J'ai essayé la "correction gamma" de l'image avec Python + OpenCV
J'ai essayé de trouver la moyenne de plusieurs colonnes avec TensorFlow
J'ai essayé de démarrer le serveur de Django avec VScode au lieu de Pycharm
Paramètres pour entrer et déboguer le contenu de la bibliothèque avec VS Code
J'ai essayé d'implémenter ListNet d'apprentissage de rang avec Chainer
J'ai essayé la reconnaissance de caractères manuscrits des caractères runiques avec CNN en utilisant Keras
J'ai essayé de simuler la probabilité d'un jeu de bingo avec Python
J'ai essayé de résumer des phrases avec summpy
J'ai essayé webScraping avec python.
J'ai essayé de déplacer de la nourriture avec SinGAN
J'ai essayé d'utiliser GrabCut d'OpenCV
J'ai essayé d'implémenter DeepPose avec PyTorch
Essayez d'exécuter Jupyter avec VS Code
J'ai essayé la détection de visage avec MTCNN
J'ai essayé d'exécuter prolog avec python 3.8.2.
J'ai essayé la communication SMTP avec Python
J'ai essayé la génération de phrases avec GPT-2
J'ai essayé d'apprendre LightGBM avec Yellowbrick
Installez python avec mac vs code
J'ai essayé la reconnaissance faciale avec OpenCV
J'ai essayé le notebook Jupyter de VS Code
J'ai essayé de gratter le classement du calendrier de l'avent Qiita avec Python
J'ai essayé le déploiement autonome de play avec fabric [opération AWS avec boto] [déploiement de lecture]
Bénéficiez de l'environnement le plus puissant avec VS Code, Remote-Containers et Remote Docker-Daemon
J'ai essayé d'automatiser l'arrosage du pot avec Raspberry Pi
J'ai essayé de créer une liste de nombres premiers avec python
Comment développer des conteneurs sur des serveurs distants avec VS Code Remote-Containers
J'ai essayé de corriger "J'ai essayé la simulation probabiliste du jeu de bingo avec Python"
J'étais intéressé par les diagrammes alors j'ai essayé de l'envelopper avec un flacon
J'ai essayé d'agrandir la taille du volume logique avec LVM
J'ai essayé d'exécuter la partie DNN d'OpenPose avec le processeur Chainer
J'ai essayé d'améliorer l'efficacité du travail quotidien avec Python
J'ai essayé de collecter automatiquement des images de Kanna Hashimoto avec Python! !!
J'ai essayé de créer un mécanisme de contrôle exclusif avec Go
J'ai essayé l'analyse de régression multiple avec régression polypoly
J'ai essayé d'envoyer un SMS avec Twilio
J'ai essayé d'utiliser Amazon SQS avec django-celery
J'ai essayé d'implémenter Autoencoder avec TensorFlow
J'ai essayé un petit vol en formation de drone Tello avec ESP32: Vol en formation de drone DJI Tello