[PYTHON] J'ai essayé de créer un Dockerfile pour l'environnement de développement de Django

introduction

Puisqu'il était nécessaire d'apprendre d'abord Dockerfile pour apprendre docker-compose, j'aimerais créer un Dockerfile en utilisant l'application de Django, qui est un framework de Python.

Préparation préalable

Comme préparation préliminaire, l'image Docker et le conteneur commenceront vides.

$ docker image ls
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE

$docker container ls
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                    PORTS                  NAMES

Créer un projet Django

Cette fois, j'utiliserai l'application créée avec Django créée dans cet article.

Pour expliquer uniquement ce que vous devez garder à l'esprit afin de ne pas avoir à lire l'article, la commande suivante lancera l'application.

$ python manage.py runserver

C'est une application simple qui affiche le Hello World suivant lorsque vous accédez à http: // localhost: 8000 / hello pendant que l'application est en cours d'exécution.

スクリーンショット 2020-08-10 23.08.30.png

Construction

La structure est illustrée ci-dessous.

Il est également disponible sur GitHub.

Dockerfile


$ tree
.
├── Dockerfile
├── requirements.txt
├── hello
│ └── (omis)
├── helloWorldProject
│ └── (omis)
├── README.md
├── db.sqlite3
└── manage.py

Dockerfile et requirements.txt sont les fichiers qui devraient être créés cette fois, je vais donc les expliquer.

Créer un Dockerfile

Cette fois, je l'ai créé comme suit.

Dockerfile


# python:3.Définir l'image officielle de 8 comme image de base
FROM python:3.8

#Créer un répertoire de travail
RUN mkdir /code

#Paramètres du répertoire de travail
WORKDIR /code

#Copier les actifs du répertoire actuel dans le répertoire spécifié sur le conteneur
ADD . /code

#exigences avec pip.Ajouter le package spécifié dans txt
RUN pip install -r requirements.txt

#Démarrer (commencer à accepter sur le port 8002 du conteneur)
CMD python3 manage.py runserver 0.0.0.0:8002

Le contenu de ce fichier est le suivant.

--Créez un répertoire de travail (/ code) basé sur l'image officielle de python: 3.8 --Transférez toutes les sources actuelles dans ce conteneur --Installez les modules requis avec pip ――Il est écrit que l'application est lancée au démarrage du conteneur.

Je n'expliquerai pas comment écrire un Dockerfile.

La différence entre «RUN» et «CMD» était facile à comprendre dans cet article. (En termes simples, RUN est la commande qui est exécutée pendant la construction, et CMD est la commande qui est exécutée au démarrage du conteneur.)

Création de requirements.txt

Les modules installés avec la commande pip, comme décrit dans le Dockerfile, sont maintenant décrits dans requirements.txt.

Cette fois, nous avons besoin de Django, nous allons donc l'écrire.

requirements.txt


Django==3.1

S'il n'y a qu'un seul module comme cette fois, il n'est pas nécessaire d'en faire un fichier externe, mais s'il y a plusieurs modules à installer, c'est plus facile à gérer en écrivant comme ça.

Créer une image à partir d'un Dockerfile

Après avoir préparé le Dockerfile, l'image est créée en exécutant la commande docker build -t [nom de l'image à créer] [chemin relatif au Dockerfile].

Cette fois, nous allons créer une image nommée «hello-world».

$ docker build -t hello-world .
(réduction)
Successfully tagged hello-world:latest

$ docker image ls
REPOSITORY          TAG                 IMAGE ID            CREATED              SIZE
hello-world         latest              6e2fc6616ab1        About a minute ago   922MB
python              3.8                 6feb119dd186        5 days ago           882MB

Vous pouvez voir que l'image «hello-world» a été créée comme ceci. À propos, l'image de python: 3.8 est également extraite et affichée.

En regardant l'élément de SIZE, hello-world est plus grand que python, donc vous pouvez voir que divers ajouts ont été faits à l'image d'origine.

Démarrer le conteneur

Maintenant que nous avons créé l'image, commençons le conteneur.

$ docker container run -d -p 8001:8002 hello-world
$ docker container ls
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                    NAMES
ff92b40204f3        hello-world         "/bin/sh -c 'python3…"   About an hour ago   Up About an hour    0.0.0.0:8001->8002/tcp   funny_antonelli

Les informations supplémentaires sur les options de la commande run sont les suivantes.

---d: commence en arrière-plan ---p: expose le port du conteneur

Puisqu'il est spécifié comme "8001: 8002" cette fois, cela signifie que le "port 8001 de l'hôte" et le "port 8002 du conteneur" sont liés.

(À l'origine, les ports 8001 et 8002 ne sont pas utilisés, mais nous utilisons des numéros différents pour connaître les numéros de port de l'hôte et du conteneur.)

Si vous visitez http: // localhost: 8001 / hello, vous devriez voir quelque chose comme ceci: スクリーンショット 2020-08-11 2.13.29.png

mérite

En écrivant un fichier Dockerfile

"Chaque fois que vous extrayez cette image Docker, puis exécutez la commande d'exécution du conteneur docker, assurez-vous de vous connecter à ce conteneur et d'exécuter cette commande et cette commande ~ (omis)"

Des procédures telles que

"Exécutez le docker build -t [nom de l'image]. Commande dans le répertoire où se trouve le Dockerfile. 』\

Vous n'aurez besoin que d'une seule ligne de.

Par exemple, dans ce cas, tout ce qui se trouve sous FROM python: 3.8 dans le Dockerfile doit être affiché dans le manuel de procédure.

Résumé

--Création d'un Dockerfile --Création d'une image à partir d'un Dockerfile

Recommended Posts

J'ai essayé de créer un Dockerfile pour l'environnement de développement de Django
Créer un environnement de développement Python pour le développement de l'IA
Créer un environnement de développement pour l'apprentissage automatique
J'ai créé un environnement de développement pour Django 3.0 avec Docker, Docker-compose, Poetry
Créer un environnement Kubernetes pour le développement sur Ubuntu
Créer un environnement de développement mruby pour ESP32 (édition Linux)
Je veux créer un bel environnement de développement Python pour mon nouveau Mac
Mettre en place un environnement de développement pour le traitement du langage naturel
Je souhaite créer facilement un environnement de développement basé sur un modèle
Comment créer un environnement de développement pour TensorFlow (1.0.0) (Mac)
[Pour organiser] Environnement de développement Python
[Memo] Construire un environnement de développement pour Django + Nuxt.js avec Docker
Dockerfile pour créer un environnement de science des données basé sur pip3
Je veux créer un Dockerfile pour le moment.
J'ai créé un environnement pour Masonite, un framework WEB Python similaire à Laravel, avec Docker!
J'ai touché PyAuto pendant un moment
Étape par étape pour créer un Dockerfile
[Pour les débutants] Django -Construction d'environnement de développement-
Options d'environnement de développement Python pour mai 2020
Paramètres Emacs pour l'environnement de développement Python
Création d'un environnement pour Anaconda et Jupyter
Reconstruisez l'environnement de développement de Django avec Docker! !! !! !!
Créer un environnement de développement local pour Lambda + Python à l'aide de Serverless Framework
[python] J'ai créé un diagramme de corrélation de suivi pour Twitter (édition Gremlin)
[DynamoDB] [Docker] Créer un environnement de développement pour DynamoDB et Django avec docker-compose
J'ai créé un docset de tableau de bord pour Holoviews
J'ai créé un modèle de projet Python générique
Environnement de développement Python pour macOS utilisant venv 2016
Créez facilement un environnement de développement avec Laragon
Créons un environnement virtuel pour Python
J'ai créé un environnement Anaconda à l'aide de Docker!
Je veux créer un environnement Python
[Mac] Création d'un environnement virtuel pour Python
J'ai créé un site de visualisation du PIB (production nationale totale) en utilisant DASH!
J'ai essayé d'installer Kivy dans un environnement Mac
Préparer l'environnement de développement pour keyhac pour Mac
Construire un environnement conda pour les utilisateurs de ROS
Construction d'un environnement de développement pour l'atelier Choreonoid
J'ai construit un environnement TensorFlow avec windows10
J'ai essayé de créer un environnement de développement Mac Python avec pythonz + direnv
Démarrage de Node.js dans un environnement virtuel
J'ai créé un outil de mot de passe en Python.
J'ai fait une bibliothèque pour l'assurance actuarielle
Échapper à l'environnement virtuel de Python ~ Une histoire sur le fait d'être piégé dans un environnement virtuel que j'ai créé ~
Créez un environnement de développement local avec WSL + Docker Desktop pour Windows + docker-lambda + Python
Créer un environnement de développement de langage C avec un conteneur
J'ai créé un fichier de dictionnaire python pour Neocomplete
Création d'un wrapper Python pour l'API Qiita
J'ai fait un algorithme de rechange2 moins cher pour uWSGI
J'ai créé un outil utile pour Digital Ocean
Préparer un environnement de langage de programmation pour l'analyse des données
Création d'un outil de gestion de bibliothèque d'en-tête uniquement pour C / C ++
[Python] Créer un environnement de développement Django avec Docker
J'ai créé un téléchargeur pour l'expression distribuée par mot
Créez un environnement de développement Python sur votre Mac
[Python] Préparation au développement Web (création d'un environnement virtuel)
Créer un environnement de développement Django à l'aide de Doker Toolbox
Commandes pour créer un environnement python3 avec virtualenv