[PYTHON] [Avec diagramme d'image] Nginx + gunicorn + Flask converti en Docker [Partie 1]

Résumé de cet article

supposition

La notation de la commande est basée sur l'hypothèse que «MacOS» sera utilisé comme PC hôte.

Préparation en tant que PC hôte

Dans cet article, nous allons créer un PC local en tant que PC hôte Docker. Dans ce cas, des préparatifs pour l'exécution de Docker sont nécessaires. Il existe plusieurs méthodes, mais pour MacOS, installer Docker for Mac dans brew est le moyen le plus rapide.

Terminal


brew cask install docker

Cela installera l'application, alors lancez Docker.app localement. Si une icône comme une baleine apparaît en haut à droite et qu'elle s'exécute comme indiqué ci-dessous, elle est terminée. スクリーンショット 2020-01-08 14.20.55.png

Produit final

Diagramme d'image

Flask_Nginx_unicorn_diagramdrawio-Step3-docker-compose (1).png

Code source

Voir Github Repository.

Brève explication du code source

Il y a deux changements principaux par rapport à l'étape 1 dans la création d'un conteneur Docker.

--Créer de nouveaux fichiers Docker pour le serveur Web et le serveur d'applications --Créer un nouveau Makefile contenant la commande de démarrage

Parmi ceux-ci, le deuxième Makefile ne fait que simplifier l'entrée de la commande docker, et l'ajout essentiel est le premier Dockerfile. Je voudrais jeter un œil au contenu de chaque Dockerfile. (Le Dockerfile lui-même sera décrit plus tard)

serveur Web

Dockerfile


#Spécifiez l'image de base. Dans ce cas, une balise spécifique est spécifiée jusqu'à la version.
FROM nginx:1.17.6-alpine

#Fichier de configuration du PC hôte(config/nginx.conf)Copiez dans le répertoire créé ci-dessus et envoyez
RUN mkdir -p /etc/nginx
COPY config/nginx.conf /etc/nginx/nginx.conf

Si vous souhaitez simplement utiliser nginx, vous pouvez simplement extraire l'image officielle de nginx publiée sur Docker Hub. Cette fois, je veux lire le fichier de configuration nginx créé à portée de main et le démarrer, donc je fais le travail suivant.

  1. Instruisez l'image de base
  2. Créez un chemin pour envoyer votre propre fichier de configuration
  3. Copiez votre propre fichier de configuration du PC hôte vers cette image

Serveur d'applications

Dockerfile


#Cette fois, il est basé sur une image python basée sur Debian
FROM python:3.8-slim-buster

#Transfert du fichier de configuration(Je ne peux pas penser à un endroit convenable/Directement sous l'application)
RUN mkdir -p /app/config
COPY requirements.txt /app/requirements.txt
COPY config/gunicorn_settings.py /app/config/gunicorn_settings.py
COPY flask_app.py /app/flask_app.py

#Installation du package
RUN pip install -r /app/requirements.txt

EXPOSE 9876

WORKDIR /app

#Commande lors de l'exécution de run
# ENTRYPOINT->Avec CMD, CMD peut être écrasé par l'argument au moment de l'exécution
ENTRYPOINT [ "gunicorn", "flask_app:app" ]
CMD [ "-c", "/app/config/gunicorn_settings.py" ]

Vous pouvez commencer avec l'image de base d'os uniquement et installer python etc., mais puisque l'image officielle de python a été publiée, cette fois, nous commencerons sur cette base. Jusqu'à l'installation du package est presque identique au serveur Web, mais en dessous, il y a une description que le serveur Web n'avait pas. Je fais ce qui suit.

  1. Dans le conteneur du serveur d'applications, mettez le port 9876 à l'état LISTEN.
  2. Définissez le répertoire de base lors du démarrage du conteneur sur / app
  3. Exécutez la commande gunicorn flask_app: app -c / app / config / gunicorn_settings.py lors du démarrage du conteneur.

About Docker

Raison de Docker

Je pense qu'il y a certaines choses à ce sujet, mais voici deux des avantages que je ressens.

Unification de l'environnement de développement / exécution et simplification de la préparation

Dans le passé, lors du développement d'une équipe, il était nécessaire pour le développeur de préparer un environnement de développement sur chaque machine, puis de commencer le développement. Il peut y avoir un document qui montre la procédure, mais en réalité, cela peut coûter plus cher car l'environnement ne peut pas être construit correctement pour des raisons telles que des documents incomplets ou des mises à jour d'outils. De plus, il existe un risque que chaque individu améliore sa langue et provoque de subtiles différences. D'autre part, en utilisant le conteneur Docker préparé à l'avance,

Vous pouvez en bénéficier.

Les conteneurs peuvent être placés dans l'environnement de production

Maintenant que l'opération sur le cloud est devenue courante, de nombreux outils d'orchestration de conteneurs utilisant GKE, etc. sont sur le marché. Puisqu'il s'agit simplement d'une orchestration de conteneur, cela signifie que l'application s'exécute réellement sur le conteneur, même dans l'environnement de production. Bien sûr, il est nécessaire de changer les variables d'environnement et les points de terminaison entre le développement, la mise en scène et la production, mais cela peut également être absorbé par l'orchestration, et dans tous les cas ** Le conteneur qui a fonctionné dans l'environnement de développement peut être utilisé presque tel quel dans l'environnement de production Il sera opérationnel **.

Images et conteneurs

Tout d'abord, créez une image (= build), puis créez et démarrez un conteneur basé sur cette image. Ce n'est pas un bon exemple, mais si vous le remplacez par un jeu PC --Docker image = disque --Docker container = window pendant que le jeu est en cours d'exécution C'est comme ça.

Qu'est-ce que Docker Hub?

Un service qui vous permet de télécharger, publier et partager des images de conteneur que vous avez créées. En bref, c'est comme * Github's Docker Limited Edition *. Les images publiées peuvent être téléchargées et utilisées gratuitement. Lors de la création de votre propre image personnalisée, sélectionnez l'image de base parmi celles enregistrées dans Docker Hub.

Fiabilité de l'image

De nombreuses images de bénévoles sont également enregistrées dans Docker Hub. Parmi eux, celui qui doit être sélectionné comme image de base est celui avec la balise Docker Official Images. En un mot, c'est ** parce que c'est fiable **, mais voici quelques bulletins.

Qu'est-ce qu'un Dockerfile

Il s'agit d'un fichier qui décrit des instructions permettant d'effectuer une série d'opérations telles que l'image qui constitue la base du conteneur à créer, l'installation de l'application et la préparation du démarrage de l'application.

Veuillez consulter ici pour plus de détails sur la description du Dockerfile.

Recommended Posts

[Avec diagramme d'image] Nginx + gunicorn + Flask converti en Docker [Partie 2]
[Avec diagramme d'image] Nginx + gunicorn + Flask converti en Docker [Partie 1]
Journal de sortie vers la console avec Flask + Nginx sur Docker
Jusqu'à ce que l'API créée par Flask + MySQL soit convertie en Docker
Résumé des paramètres de Nginx (édition Flask + Docker + Gunicorn)
Conversion de l'environnement Django en Docker (Docker + Django + Gunicorn + nginx) Partie 2
Exécutez Flask sur CentOS avec python3.4, Gunicorn + Nginx.
Utilisation de Flask avec la configuration Nginx + gunicorn [Environnement local]
Conversion de l'environnement Django en Docker (Docker + Django + Gunicorn + nginx) Partie 3
Comment télécharger avec Heroku, Flask, Python, Git (Partie 3)
Lancer une application Web Python sur Nginx + Gunicorn avec Docker
Comment télécharger avec Heroku, Flask, Python, Git (Partie 1)
Comment télécharger avec Heroku, Flask, Python, Git (Partie 2)
Traitement d'image avec Python (partie 2)
API avec Flask + uWSGI + Nginx
De la construction de l'environnement au déploiement pour flask + Heroku avec Docker
Traitement d'image avec Python (partie 1)
J'ai remarqué en essayant d'exécuter ninix-aya avec Docker (partie 3)
Traitement d'image avec Python (3)
(Remarque) Remarques sur la création de l'environnement TensorFlow + Flask + Nginx avec Docker Compose
Créer un serveur Flask avec Docker
Comment écrire une image de base Docker
Convertir un PDF en image avec ImageMagick
Développement d'applications avec Docker + Python + Flask
Comment se connecter à Docker + NGINX
Fonction de téléchargement d'image avec Vue.js + Flask
J'ai écrit un diagramme de configuration du système avec des diagrammes sur Docker
mail html avec image à envoyer avec python
Classification d'image avec Keras - Du prétraitement au test de classification -
Introduction au remplissage d'image Python Remplissage d'image à l'aide d'ImageDataGenerator
Envoyer du CSS compressé à Gzip avec Flask
Connectez-vous à MySQL avec Python dans Docker
Utiliser le chiffrement de la bibliothèque de chiffrement avec l'image Python de Docker
Créer un environnement Python + uWSGI + Nginx avec Docker
[Part1] Scraping avec Python → Organisez jusqu'à csv!
[Golang] Créer une image de menu fixe avec des actions Github
Créer un service Web avec Docker + Flask
Lancez l'application Flask avec Docker sur Heroku
Essayez de générer une image avec aliénation
Construire un environnement de NGINX + NGINX Unit + MySQL avec Docker
Comment installer python3 avec docker centos
Exemple de conversion en ondelettes d'images en Python
Flacon + Gunicorn + Nginx + Supervisor jusqu'à ce que cela fonctionne