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.
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
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.
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.
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.)
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.
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.
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:
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.
--Création d'un Dockerfile --Création d'une image à partir d'un Dockerfile
Recommended Posts