[PYTHON] Comment utiliser Docker pour conteneuriser votre application et comment utiliser Docker Compose pour exécuter votre application dans un environnement de développement

image.png

introduction

Docker est l'une des technologies de conteneurisation les plus populaires. C'est un outil facile à utiliser et facile à utiliser pour les développeurs, et présente l'avantage d'être plus fluide et plus facile à utiliser que d'autres technologies similaires. Depuis sa première version open source en mars 2013, Docker a été au centre de l'attention des développeurs et des ingénieurs d'exploitation. Selon Docker Inc., les utilisateurs de Docker ont téléchargé plus de 105 milliards de conteneurs sur Docker Hub et ancré 5,8 millions de conteneurs. Ce projet compte plus de 32 000 étoiles sur Github.

Depuis lors, Docker est devenu courant et plus de 100 000 projets tiers ont utilisé cette technologie, augmentant la demande de développeurs ayant des compétences en conteneurisation.

Cet article de blog décrit comment utiliser Docker pour conteneuriser votre application et comment utiliser Docker Compose pour exécuter votre application dans un environnement de développement. Utilisez l'API Python comme application principale.

MetricFire Free Réservation Découvrez comment surveiller votre configuration Kubernetes, Python.

Configuration de l'environnement de développement

Avant de commencer, installez certaines exigences. Ici, nous utilisons la mini API Python développée dans Flask. Flask est un framework Python et constitue un excellent choix pour le prototypage rapide d'API. Notre application est développée avec Flask. Si vous êtes nouveau dans Python, voici les étapes pour créer cette API.

Commencez par créer un environnement virtuel Python et séparez les dépendances des autres dépendances système. Avant cela, vous avez besoin de PIP, le célèbre gestionnaire de packages Python.

L'installation est très simple. Vous devez exécuter deux commandes:

curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py
python get-pip.py

Pour référence, Python 3 doit être installé. Vous pouvez vérifier cela en tapant:

​python --version​

Après avoir installé le PIP, utilisez la commande suivante pour installer l'environnement virtuel.

​pip install virtualenv​

Vous pouvez trouver d'autres méthodes d'installation en suivant le guide officiel. Ensuite, créez un projet dans le dossier où vous devez créer un environnement virtuel et l'activer. Il crée également un dossier pour l'application et un fichier appelé app.py.

mkdir app
cd app
python3 -m venv venv
. venv/bin/activate
mkdir code
cd code
touch app.py

Créez une API simple pour afficher la météo d'une ville particulière. Par exemple, supposons que vous souhaitiez afficher la météo à Londres. Doit être demandé en utilisant l'itinéraire:

/london/uk

Vous devez utiliser PIP pour installer les dépendances Python appelées "flask" et "requests". Nous les utiliserons plus tard:

pip install flask requests​

Le fichier des exigences ressemble à ceci:

certifi==2019.9.11
chardet==3.0.4
Click==7.0
Flask==1.1.1
idna==2.8
itsdangerous==1.1.0
Jinja2==2.10.3
MarkupSafe==1.1.1
requests==2.22.0
urllib3==1.25.7
Werkzeug==0.16.0

Il s'agit du code initial de l'API.

from flask import Flask
app = Flask(__name__)

@app.route('/')
def index():
    return 'App Works!'

if __name__ == '__main__':
    app.run(host="0.0.0.0", port=5000)

Pour tester, vous devez exécuter python app.py et accéder à http: //127.0.0.1:5000/. "AppWorks!" S'affiche. Sur la page Web. Assurez-vous de créer un compte sur le même site Web et de générer une clé API car nous utiliserons les données d'openweathermap.org.

Ensuite, nous devons ajouter du code utile à l'API pour afficher les données météorologiques d'une ville particulière.

@app.route('/<string:city>/<string:country>/')
def weather_by_city(country, city):
    url = 'https://samples.openweathermap.org/data/2.5/weather'
    params = dict(
        q=city + "," + country,
        appid= API_KEY,
    )
    response = requests.get(url=url, params=params)
    data = response.json()
    return data

Le code global ressemble à ceci:

from flask import Flask
import requests

app = Flask(__name__)

API_KEY = "b6907d289e10d714a6e88b30761fae22"

@app.route('/')
def index():
    return 'App Works!'

@app.route('/<string:city>/<string:country>/')
def weather_by_city(country, city):

    url = 'https://samples.openweathermap.org/data/2.5/weather'
    params = dict(
        q=city + "," + country,
        appid= API_KEY,
    )

    response = requests.get(url=url, params=params)
    data = response.json()
    return data

if __name__ == '__main__':
    app.run(host="0.0.0.0", port=5000)

127.0.0.1:5000/london/ukにアクセスすると、次のようなJSONが表示されるはずです。

{
  "base": "stations",
  "clouds": {
    "all": 90
  },
  "cod": 200,
  "coord": {
    "lat": 51.51,
    "lon": -0.13
  },
...

La mini API fonctionne. Conteneurisons-le en utilisant Docker.

Créer un conteneur d'application à l'aide de Docker

Créons un conteneur API. La première étape consiste à créer un Dockerfile. Un Dockerfile est un fichier texte utile qui contient diverses étapes et instructions que le démon Docker doit suivre pour créer une image. Après avoir construit l'image, vous pourrez exécuter le conteneur.

Dockerfile commence toujours par une instruction FROM.

FROM python:3
ENV PYTHONUNBUFFERED 1
RUN mkdir /app
WORKDIR /app
COPY requirements.txt /app
RUN pip install --upgrade pip
RUN pip install -r requirements.txt
COPY . /app
EXPOSE 5000
CMD [ "python", "app.py" ]

Dans le fichier ci-dessus, j'ai fait ce qui suit:

  1. Utilisez l'image de base "python: 3"
  2. Réglez également PYTHONUNBUFFERED sur 1. La définition de PYTHONUNBUFFERED sur 1 vous permet de vider les messages du journal dans un flux au lieu de les mettre en mémoire tampon.
  3. Créez également un dossier / application et définissez-le comme répertoire de travail
  4. Copiez la configuration requise et utilisez-la pour installer toutes les dépendances
  5. Copiez tous les fichiers qui composent l'application, le fichier app.py, dans workdir
  6. Puisque l'application utilise ce port, exposez enfin le port 5000 et lancez la commande python avec app.py comme argument. Cela lancera l'API lorsque le conteneur sera lancé.

Après avoir créé le Dockerfile, vous devez créer le Dockerfile avec le nom de l'image et les balises que vous choisissez. Dans ce cas, utilisez «météo» comme nom et «v1» comme balise.

docker build -t weather:v1 .

Assurez-vous que vous créez à partir du dossier contenant les fichiers Dockerfile et app.py.

Après avoir créé le conteneur, vous pouvez l'exécuter en utilisant:

docker run -dit --rm -p 5000:5000 --name weather weather:v1

Le conteneur s'exécute en arrière-plan car il utilise l'option -d. Le conteneur s'appelle "météo" (-nom météo). Étant donné que le port hôte 5000 est mappé au port de conteneur exposé 5000, il est également accessible sur le port 5000.

Si vous souhaitez confirmer la création du conteneur, vous pouvez utiliser:

docker ps

Vous devriez voir une sortie qui est très similaire à la sortie suivante.

CONTAINER ID        IMAGE               COMMAND             CREATED              STATUS              PORTS                    NAMES
0e659e41d475        weather:v1          "python app.py"     About a minute ago   Up About a minute   0.0.0.0:5000->5000/tcp   weather

Vous pouvez maintenant interroger l'API. Testons en utilisant CURL.

curl http://0.0.0.0:5000/london/uk/

Si la dernière commande doit renvoyer JSON:

{
  "base": "stations",
  "clouds": {
    "all": 90
  },
  "cod": 200,
  "coord": {
    "lat": 51.51,
    "lon": -0.13
...
}

Utilisation de Docker Compose pour le développement

Docker Compose est un Docker Inc pour définir et exécuter des applications Docker multi-conteneurs. Un outil open source développé par. Docker Compose est également un outil destiné à être utilisé dans les environnements de développement. Cela vous permet de recharger automatiquement le conteneur lorsque votre code est mis à jour, sans avoir à redémarrer manuellement le conteneur ou à reconstruire l'image à chaque modification. Il serait frustrant sans Compose de développer en utilisant uniquement des conteneurs Docker.

La partie implémentation utilise le fichier "docker-compose.yaml".

Il s'agit du fichier "docker-compose.yaml" utilisé par l'API.

version: '3.6'
services:
  weather:
    image: weather:v1
    ports:
      - "5000:5000"
    volumes:
      - .:/app

Dans le fichier ci-dessus, vous pouvez voir que le service "météo" a été configuré pour utiliser l'image "météo: v1". Mappez le port hôte 5000 au port conteneur 5000 et montez le dossier actuel dans le dossier «/ app» à l'intérieur du conteneur.

Vous pouvez également utiliser un Dockerfile au lieu d'une image. J'ai déjà un Dockerfile, je le recommande donc dans ce cas.

version: '3.6'
services:
  weather:
    build: .
    ports:
      - "5000:5000"
    volumes:
      - .:/app

Maintenant, exécutez "docker-compose up" pour démarrer l'exécution du service, ou exécutez "docker-compose up --build" pour générer puis exécuter.

Sommaire

Dans cet article, j'ai appris à créer un conteneur Docker pour la mini API Python et j'ai utilisé Docker Compose pour créer un environnement de développement. Si vous utilisez un autre langage de programmation tel que Go ou Rails, vous suivez généralement les mêmes étapes, avec quelques différences mineures. MetricFire Free Réservation MetricFire](https://www.metricfire.com/japan/?utm_source=blog&utm_medium=Qiita&utm_campaign=Japan&utm_content=Develop%20and%20Deploy%20a%20Python%20API%20with%20Kubernetes%20and%20Docker) est adapté à l'environnement de surveillance. Veuillez vérifier si.

Recommended Posts

Comment utiliser Docker pour conteneuriser votre application et comment utiliser Docker Compose pour exécuter votre application dans un environnement de développement
Comment exécuter une application Django sur un conteneur Docker (environnement de développement et de production)
Flutter dans Docker - Comment créer et utiliser un environnement de développement Flutter dans un conteneur Docker
Mettez Jupyter et Docker Compose dans votre Chromebook et utilisez-le comme un environnement de développement léger!
Comment utiliser pyenv et pyenv-virtualenv à votre manière
[Introduction à l'application Udemy Python3 +] 36. Utilisation de In et Not
Comment utiliser Jupyter Notebook sans polluer votre environnement avec Docker
Apprenez à utiliser Docker en créant un environnement pour Django + MySQL
Comment utiliser is et == en Python
Utiliser WebDAV dans un environnement Docker portable
Comment rendre le nom du conteneur accessible dans Docker en tant que sous-domaine
[Note] Comment créer un environnement de développement Ruby
[Note] Comment créer un environnement de développement Mac
Utilisez un GPU gratuit dans votre environnement préféré
Comment exécuter AutoGluon dans un environnement GPU Google Colab
Un mémorandum sur l'utilisation de keras.preprocessing.image de Keras
Comment créer un environnement Django (python) sur Docker
Comment utiliser le moteur de modèle dans une application de fichier de Pyramid
Comment créer un environnement de développement pour TensorFlow (1.0.0) (Mac)
Comment configurer et compiler l'environnement Cython
[Linux] Comment mettre votre IP dans une variable
[Django] Créez rapidement un environnement de développement de conteneur Django (Docker) à l'aide de VS Code + Remote Containers
Créer un environnement Docker qui peut utiliser PyTorch et JupyterLab
Avantages et inconvénients de la conversion de l'environnement de développement de Django en Docker
Comment utiliser la méthode __call__ dans la classe Python
Comment utiliser VS Code dans un environnement Venv avec Windows
Comment créer et utiliser des bibliothèques statiques / dynamiques en langage C
Comment développer dans un environnement virtuel Python [Memo]
Comparaison de l'utilisation des fonctions d'ordre supérieur dans Python 2 et 3
Utilisez mitmproxy pour forcer l'API de votre application dans un environnement de développement
Comment créer un environnement de développement de la série Python2.7 avec Vagrant
Remarques sur la création d'un environnement LAMP à l'aide de Vagrant et VirtulBox
Comment installer OpenCV sur Cloud9 et l'exécuter en Python
Exécuter eclipse dans un environnement Docker (noVNC)
Comment comparer des listes et récupérer des éléments communs dans une liste
Comment utiliser les classes dans Theano
Apprentissage de l'historique pour participer au développement d'applications d'équipe avec Python ~ Créer un environnement Docker / Django / Nginx / MariaDB ~
Comment déboguer Dash (Flask) dans Docker + VSCode + environnement de connexion à distance
Comment utiliser les fonctions dans des fichiers séparés version Perl et version Python
Comment utiliser les variables d'environnement Serverless Framework et Python et gérer les étapes
Comment utiliser .bash_profile et .bashrc
Comment installer et utiliser Graphviz
Comment utiliser Mysql avec python
Comment utiliser ChemSpider en Python
Comment utiliser PubChem avec Python
Je veux créer un fichier pip et le refléter dans le menu fixe
Comment supprimer un conteneur Docker
Comment exécuter du code TensorFlow 1.0 en 2.0
Une histoire sur tout, de la collecte de données au développement d'IA et à la publication d'applications Web en Python (3. développement d'IA)
Comment se connecter à Docker + NGINX
[DynamoDB] [Docker] Créer un environnement de développement pour DynamoDB et Django avec docker-compose
Comment déboguer un programme Python en se connectant à distance à un conteneur Docker dans un environnement WSL2 avec VS Code
Créer un environnement de développement à l'aide de Jupyter et Flask avec Python dans Docker (prend en charge à la fois VS Code / code-server)
Créez des raccourcis pour exécuter des fichiers Python sur le terminal avec VScode
Je voulais utiliser le notebook jupyter avec docker dans l'environnement pip (opticspy)
Comment obtenir un nom de colonne et un nom d'index spécifiques avec Pandas DataFrame
Comment installer le package python dans un environnement local en tant qu'utilisateur général
Comment utiliser PyCharm avec des points de terminaison de développement Glue exécutés à l'intérieur de VPC