[PYTHON] Déployer l'application Django avec Docker

** Docker ** est une technologie qui facilite la création, le déploiement et l'exécution d'applications à l'aide de conteneurs.

Qu'est-ce que Docker?

Docker est une technologie qui facilite la création, le déploiement et l'exécution d'applications à l'aide de conteneurs. Les conteneurs permettent aux développeurs de conditionner tous les composants dont ils ont besoin pour leur application et de les expédier plus tard sous forme de packages. Il vous permet également d'exécuter plus d'applications sur le même serveur.

Avec Docker, les applications exécutées sur des conteneurs sont isolées les unes des autres, offrant un niveau de sécurité supérieur. De plus, Docker garantit que chaque conteneur dispose de ses propres ressources, de sorte que l'application n'utilisera que les ressources allouées.

Conditions préalables

Avant de commencer ce guide, vous avez besoin des éléments suivants:

Installer Docker

Connectez-vous au serveur à l'aide de la commande ssh.

$ ssh [email protected]

Mettez à jour le package Ubuntu.

$ sudo apt-get update

Installez la dernière version de Docker avec la commande suivante.

$ sudo apt-get install docker

Pour vérifier que Docker est correctement installé, exécutez la commande suivante:

$ sudo docker run hello-world

Si elle est effectuée correctement, la commande ci-dessus devrait permettre à l'instance de télécharger l'image de test et de l'exécuter dans le conteneur.

Conteneurs et images dans Docker

L'instance Alibaba Cloud ECS (https://www.alibabacloud.com/en/product/ecs) vous permet d'utiliser des images pour créer des clusters ECS avec la même configuration. De même, le conteneur Docker a une image. Conceptuellement, les deux sont très similaires. Basé sur la documentation officielle de Docker.

Une image de conteneur est un progiciel exécutable léger et autonome qui contient tout ce dont vous avez besoin pour l'exécuter: code, runtime, outils système, bibliothèques système, paramètres.

Vous pouvez voir le conteneur en cours d'exécution en exécutant $ sudo docker ps.

Une image, en revanche, est un fichier inactif et immuable, tel qu'un instantané d'un conteneur. L'image est créée avec la commande build, et lorsqu'elle est démarrée avec la commande run, elle crée un conteneur.

Les images peuvent être visualisées en exécutant $ sudo docker images.

Créer une application Django

Tout d'abord, installons Django et créons une application Django.

$ sudo pip install django==1.9
$ django-admin startproject djangoapp

Fichier des exigences

Créez un fichier d'exigences dans le répertoire djangoapp pour définir les dépendances dont votre application a besoin.

$ cd djangoapp
$ nano requirements.txt

Ajoutez la dépendance suivante.

#requirements.txt

Django==1.9
gunicorn==19.6.0

Créer un fichier Docker

Docker a la capacité de lire les instructions à partir d'un fichier Docker et de créer une image automatiquement. Le fichier Docker contient toutes les commandes et instructions que Docker utilise pour créer l'image.

Définissons quelques commandes de base utilisées dans le Dockerfile.

--FROM --Initialise une nouvelle étape de construction et définit l'image de base pour les instructions suivantes. Par conséquent, un Dockerfile valide doit commencer par une instruction FROM. --RUN --Exécute la commande spécifiée. --ADD --Copiez le fichier dans le conteneur. --EXPOSE: notifie à Docker que le conteneur écoute sur le port réseau spécifié au moment de l'exécution. --CMD - Fournit les valeurs par défaut pour l'exécution des conteneurs. Créons maintenant un fichier appelé Dockerfile.

$ nano Dockerfile

Tout d'abord, définissons toutes les propriétés nécessaires dans le Dockerfile. Définit l'image de base et le nom du responsable.

# base image 
FROM python:2.7

# File Author / Maintainer
MAINTAINER Esther

Ensuite, copiez le dossier d'application dans le conteneur et définissez le répertoire dans lequel CMD sera exécuté.

# Copy the application folder inside the container
ADD . /usr/src/app

# set the default directory where CMD will execute
WORKDIR /usr/src/app

Enfin, définissez la commande par défaut et exécutez-la.

CMD exec gunicorn djangoapp.wsgi:application --bind 0.0.0.0:8000 --workers 3

Le Dockerfile final devrait ressembler à ceci:

# set the base image 
FROM python:2.7

# File Author / Maintainer
MAINTAINER Esther

#add project files to the usr/src/app folder
ADD . /usr/src/app

#set directoty where CMD will execute 
WORKDIR /usr/src/app

COPY requirements.txt ./

# Get pip to download and install requirements:
RUN pip install --no-cache-dir -r requirements.txt

# Expose ports
EXPOSE 8000

# default command to execute    
CMD exec gunicorn djangoapp.wsgi:application --bind 0.0.0.0:8000 --workers 3 

Créer une image Docker

Exécutez la commande suivante pour créer l'image docker.

$ sudo docker build -t django_application_image .

Sending build context to Docker daemon   12.8kB
Step 1/7 : FROM python:2.7
 ---> 2863c80c418c
Step 2/7 : ADD . /usr/src/app
 ---> 09b03ff8466e
Step 3/7 : WORKDIR /usr/src/app
Removing intermediate container a71a3bf6af90
 ---> 3186c92adc85
Step 4/7 : COPY requirements.txt ./
 ---> 701c0be5e039
Step 5/7 : RUN pip install --no-cache-dir -r requirements.txt
 ---> Running in ed034f98db74
Collecting Django==1.9 (from -r requirements.txt (line 1))
  Downloading Django-1.9-py2.py3-none-any.whl (6.6MB)
Collecting gunicorn==19.6.0 (from -r requirements.txt (line 2))
  Downloading gunicorn-19.6.0-py2.py3-none-any.whl (114kB)
Installing collected packages: Django, gunicorn
Successfully installed Django-1.9 gunicorn-19.6.0
Removing intermediate container ed034f98db74
 ---> 1ffd08204a07
Step 6/7 : EXPOSE 8000
 ---> Running in 987b48e1a4ef
Removing intermediate container 987b48e1a4ef
 ---> ef889d6e8fcb
Step 7/7 : CMD exec gunicorn djangoapp.wsgi:application --bind 0.0.0.0:8000 --workers 3
 ---> Running in 4d929e361d0f
Removing intermediate container 4d929e361d0f
 ---> c6baca437c64
Successfully built c6baca437c64
Successfully tagged django_application_image:latest

L'image construite se trouve dans le registre d'images Docker local de la machine. Pour voir les images, exécutez $ sudo docker images.

REPOSITORY                 TAG                 IMAGE ID            CREATED             SIZE
django_application_image   latest              c6baca437c64        34 minutes ago      702MB

Exécutez l'application

$ sudo docker run -p 8000:8000 -i -t django_application_image

[2018-03-25 12:29:08 +0000] [1] [INFO] Starting gunicorn 19.6.0
[2018-03-25 12:29:08 +0000] [1] [INFO] Listening at: http://0.0.0.0:8000
[2018-03-25 12:29:08 +0000] [1] [INFO] Using worker: sync
[2018-03-25 12:29:08 +0000] [8] [INFO] Booting worker with pid: 8
[2018-03-25 12:29:08 +0000] [9] [INFO] Booting worker with pid: 9
[2018-03-25 12:29:08 +0000] [10] [INFO] Booting worker with pid: 10

Un message s'affiche sur http://0.0.0.0:8000 indiquant que ** gunicorn ** entretient l'application. Vous devriez être redirigé vers l'adresse IP de votre serveur (adresse_ip: 8000) et vous devriez voir la page d'accueil de Django.

Pour voir un conteneur en cours d'exécution

$ sudo docker ps -a
CONTAINER ID        IMAGE                      COMMAND                  CREATED             STATUS                           PORTS                            NAMES
100695b41a0a        django_application_image   "/bin/sh -c 'exec gu…"   13 seconds ago      Exited (0) 4 seconds ago                                          hopeful_easley

Conclusion

Lorsque vous utilisez Docker, vous rencontrez parfois des problèmes. La première chose à faire lorsqu'une erreur se produit est de vérifier le fichier journal Docker.

Docker et d'autres conteneurs sont de puissantes alternatives aux machines virtuelles traditionnelles pour le développement d'applications. Pour plus d'informations sur la façon d'exécuter des conteneurs sur Alibaba Cloud, veuillez visiter la page Container Services (https://www.alibabacloud.com/en/product/container-service).

Recommended Posts

Déployer l'application Django avec Docker
Créer une application Web avec Django
Un mémo sur la création d'une application Django (Python) avec Docker
Déployer l'application Django sur EC2 avec Nginx + Gunicorn + Supervisor
Exécutez une application Web Python avec Docker
J'ai fait une application WEB avec Django
[Python] Créer un environnement de développement Django avec Docker
Créez une application Hello World avec un seul fichier avec django
Déployer Django sans serveur avec Lambda
Créer une page d'accueil avec django
Créer une application Web avec Django
Créer une application Rails avec Docker
Comment déployer une application Django dans le cloud Alibaba
Déployer l'application Django sur Google App Engine (Python3)
Lancer une application Web Python sur Nginx + Gunicorn avec Docker
Déployer une application existante avec docker + pyenv-virtualenv + uwsgi + django
Déployer l'application Django créée avec PTVS sur Azure
Lancer Django sur un conteneur Docker à l'aide de docker-compose up
Créez un environnement de développement avec Poetry Django Docker Pycharm
Créez un environnement de développement Django avec Docker! (Docker-compose / Django / postgreSQL / nginx)
Mesurer la couverture des applications Django avec Coverage.py
[Memo] Construire un environnement de développement pour Django + Nuxt.js avec Docker
Créer un serveur Flask avec Docker
Créer un fichier deb avec Docker
Déployer l'application Django sur Heroku
Django Tips-Créez un site de classement avec Django-
Application de publication sur Twitter réalisée avec Django
[Django] Créez rapidement un environnement de développement de conteneur Django (Docker) avec PyCharm
Exécutez python3 Django1.9 avec mod_wsgi (déployer)
Django + Docker
Créer un filtre avec un modèle django
Créer une application Todo avec Django ① Créer un environnement avec Docker
Développement d'applications avec Docker + Python + Flask
Créer un téléchargeur de fichiers avec Django
Une série d'ingénieurs d'infrastructure amateurs touchant Django avec Docker ③: administrateur Django
J'ai créé un environnement de développement pour Django 3.0 avec Docker, Docker-compose, Poetry
Lancement d'une application Web sur AWS avec django et modification des tâches
[DynamoDB] [Docker] Créer un environnement de développement pour DynamoDB et Django avec docker-compose
Lecteur RSS simple réalisé avec Django
Obtenez un environnement local pour DynamoDB avec Docker
Raclons un site dynamique avec Docker
Créer un écran de connexion dans Django all auth
[Python] Une application web rapide avec Bottle!
Développement d'applications à l'aide de SQLite avec Django (PTVS)
[Linux] Créer un environnement Jenkins avec Docker
Remarques sur l'activation de PostgreSQL avec Django
Créer un service Web avec Docker + Flask
Lancez l'application Flask avec Docker sur Heroku
[Linux] Construction de l'environnement Docker avec Amazon Linux 2
Django Heroku Deploy 1
Internationalisation avec Django
Une série d'ingénieurs d'infrastructure amateurs touchant Django avec Docker (2): création d'un modèle
Django Heroku Deploy 2
CRUD avec Django
Commande Django + Docker
Jusqu'à ce que l'application Web créée avec Bottle soit publiée (déployée) sur Heroku
J'ai créé une application graphique avec Python + PyQt5
Démarrez Django dans un environnement virtuel à l'aide de Pipenv
Démarrez un serveur Web Python simple avec Docker