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

Résumé de cet article

supposition

Partie 1 Ceci est une suite de l'article.

Produit final

Diagramme d'image

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

Code source

Voir Github Repository.

Bref commentaire

Dans la première partie, nous avons créé un Dockerfile pour démarrer le serveur Web et le serveur d'applications dans chaque conteneur. Pour réduire le coût de lancement de ces conteneurs (en termes de commandes de lancement), lancez deux conteneurs avec une commande docker-compose. Les principaux changements sont les suivants.

fichier docker-compose.yml

Dans ce cas, il est nécessaire de spécifier ce qui suit comme relation entre les conteneurs et la relation entre les hôtes de conteneur.

docker-compose.yml


version: "3.7"  #Spécifiez la version du fichier de composition
services:       #Ajouter une description pour chaque conteneur sous cette couche
###########Paramètres du serveur d'applications à partir d'ici###########
    app-server:              #Peut être le nom du service, le nom d'hôte
        container_name: app-server  #Le nom du conteneur
        build:                      #Blocs requis lors de la construction avec un Dockerfile préparé par vous-même
            context: ../../         #Spécifiez le chemin d'accès pour la construction du docker, le chemin relatif à partir de l'emplacement du fichier yml
            dockerfile: deployment/dockerfiles/app-server/Dockerfile #Dockerfile à utiliser. Spécifié à partir du chemin de contexte
        networks:                   #Paramètres du réseau auquel appartient ce service
            my_host_network:        #Voir ci-dessous mon_host_Appartenir au réseau
                aliases:
                    - uwsgi-server  # my_host_Il sera possible de distinguer par ce nom sur le réseau
        expose:
            - 9876                  #Mettez ce port dans l'état LISTEN
        restart: always             #Politique de redémarrage du service
###########Jusqu'à ce point Paramètres du serveur d'applications###########
###########Paramètres du serveur Web à partir d'ici###########
    web-server:
        container_name: web-server
        build:
            context: ../../
            dockerfile: deployment/dockerfiles/web-server/Dockerfile
        networks:
            my_host_network:
                aliases:
                    - nginx-server
        ports:
            - 9090:9123     #Redirection de port de 9090 sur le PC hôte à 9123 sur le conteneur
        depends_on:         #Spécifiez la dépendance. la toile-app avant de démarrer le serveur-Va démarrer le serveur
            - app-server
        restart: always
###########Paramètres du serveur Web jusqu'à présent###########

###########Paramètres réseau d'ici###########
networks:
    my_host_network:            #Nom d'alias lorsqu'il est utilisé dans les paramètres de serveur supérieurs
        name: my-nginx-network  #Nom de réseau
        driver: bridge          #Type de pilote, pont ou superposition

En ce qui concerne le réseau, «bridge» est adopté en raison du modèle de déploiement de plusieurs conteneurs sur un PC hôte. Si l'hôte est divisé en plusieurs, utilisez ʻoverlay`.

fichier nginx.conf

Jusqu'à présent, les deux serveurs fonctionnaient (directement) sur le PC hôte, j'ai donc spécifié localhost comme destination du proxy inverse. Il est nécessaire de modifier la destination de connexion vers le conteneur du serveur d'applications dans cette étape.

nginx.conf


http {
	server {
        # 「uwsgi-serveur "est docker-compose.mon ensemble avec yml_host_réseau Nom d'alias du serveur d'applications sur le réseau
    		location / {
        		proxy_pass http://uwsgi-server:9876;
        		# before: proxy_pass http://127.0.0.1:9876;
    		}

		location /health {
        		proxy_pass http://uwsgi-server:9876/health;
        		# before: proxy_pass http://127.0.0.1:9876/health;
    		}
    	}
}

Démarrer / supprimer le conteneur

Terminal


docker-compose -f deployment/docker-compose/docker-compose.yml up
# -Spécifiez le fichier de paramètres avec l'option f

ʻUpconstruit l'image selon les paramètres du fichier yml, et le conteneur est créé. Image debuild + start. Il peut également être exécuté en arrière-plan en ajoutant l'option -d`.

Ctrl + C, lors de l'exécution au premier plan Si vous l'exécutez en arrière-plan, vous pouvez arrêter le conteneur avec docker-compose -f deployment / docker-compose / docker-compose.yml stop.

Terminal


docker-compose -f deployment/docker-compose/docker-compose.yml down

En ajoutant l'option --rmi all, toutes les images originales sont également supprimées.

About docker-compose

Points pratiques

En gros, deux points sont les suivants.

  1. Vous pourrez démarrer et arrêter plusieurs conteneurs avec une seule commande.
  2. La relation entre les conteneurs peut être spécifiée dans le fichier de paramètres.

Pour 1, supposons que vous deviez démarrer 10 conteneurs. Entrer docker run {container} 10 fois est un coût raisonnable, non? Vous pouvez oublier d'en démarrer un. Il sera complété par une commande de docker-compose up, donc il n'y aura pas d'omission de démarrage, et surtout c'est facile. (Si vous vous concentrez uniquement ici, vous pouvez écrire un shell)

Concernant 2, prenons cette étape comme exemple. Chaque conteneur ne pouvait pas être décrit dans Dockerfile, et dans le cas de docker run, certaines conditions de démarrage devaient être spécifiées comme options de démarrage.

--Serveur Web

En utilisant docker-compose, les paramètres ci-dessus peuvent être définis dans un fichier yml, il est donc possible de réduire la difficulté de construction, y compris la relation entre les conteneurs et les hôtes de conteneur. .. En particulier, la valeur d'utilité est élevée dans les cas suivants.

--Je souhaite partager le volume entre les conteneurs et les hôtes --Je veux configurer le réseau --Je veux définir de nombreuses variables d'environnement

Est-ce que docker-compose est disponible en production?

C'est mon opinion personnelle, mais je pense que la plupart d'entre eux ne sont pas utilisés ou utilisés localement. En effet, si vous pouvez créer un conteneur et définir les relations entre les conteneurs, ce n'est pas la fin de la production. Afin de déployer le service dans un environnement de production (et de préparation), en plus des étapes jusqu'à présent, nous devons penser aux termes katakana tels que «évolutivité, équilibrage de charge, réseau, exécution», etc. Il y a certains domaines qui peuvent être résolus en utilisant docker-compose, mais il semble difficile de tout faire. Celui utilisé pour l'orchestration sera toujours kubernetes. Cependant, si le déploiement d'un cluster kubernetes dans un environnement local est strict en termes de spécifications, ou simplement la vérification du comportement d'une application, docker-compose peut être utilisé plus facilement.

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
Comment couper la partie inférieure droite de l'image avec Python OpenCV
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