Jusqu'à ce que les débutants de Docker créent des images Docker à partir de Dockerfile

introduction

Puisqu'il est devenu nécessaire de traiter à l'aide de bibliothèques Python telles que numpy et pandas dans un environnement non connecté à Internet, utilisez Docker pour consolider les bibliothèques et fichiers nécessaires en tant qu'image Docker et charger docker sur un autre serveur. Je vais résumer la procédure de. この記事のゴール.png Nous vous serions reconnaissants de bien vouloir nous faire savoir s'il y a des erreurs dans le contenu ou des points qui doivent être corrigés.

environnement

Préparation de Docker

Installer et lancer

Installez Docker à partir de Homebrew et démarrez Docker.app en vous référant à cet article. Comment installer Docker sur Mac OS avec Homebrew --Qiita

J'ai commencé Docker. J'ai ignoré le didacticiel, il est donc dans un état propre. Écran après startup.png En démarrant Docker, vous pouvez taper la commande docker sur le terminal. De plus, Docker.app (écran GUI) ne sera plus utilisé par la suite, vous pouvez donc le fermer.

kaz@Kaz-MBP ~ % docker --version
Docker version 19.03.12, build 48a66213fe

Images et conteneurs

Après cela, nous partirons du principe que nous comprenons la différence entre «image» et «conteneur». Concernant "image" et "conteneur", j'aime personnellement les explications sur les sites suivants car elles sont faciles à comprendre. Différence entre le conteneur docker et l'image | Hacknote

Obtenez l'image d'origine de Docker Hub

Je ferai de mon mieux pour créer une image Docker à partir de maintenant, mais apparemment, il est courant de créer une image Docker originale basée sur une autre image Docker au lieu de créer une image Docker à partir de zéro, donc je le fais aussi Je vais imiter. Cette fois, j'ai besoin de Python et de ses bibliothèques associées, je voudrais donc le baser sur l'image Docker sur laquelle se trouvait Miniconda3. continuumio/miniconda3 - Docker Hub

Tirons-le maintenant.

kaz@Kaz-MBP ~ % docker pull continuumio/miniconda3
Using default tag: latest
latest: Pulling from continuumio/miniconda3
68ced04f60ab: Pull complete
9c388eb6d33c: Pull complete
96cf53b3a9dd: Pull complete
Digest: sha256:456e3196bf3ffb13fee7c9216db4b18b5e6f4d37090b31df3e0309926e98cfe2
Status: Downloaded newer image for continuumio/miniconda3:latest
docker.io/continuumio/miniconda3:latest

Lorsque l'extraction est terminée, vous pouvez vérifier le résultat avec la commande docker images comme indiqué ci-dessous. C'est OK si un référentiel nommé continuumio / miniconda3 est enregistré. Le même résultat est affiché avec docker image ls.

kaz@Kaz-MBP ~ % docker images
REPOSITORY               TAG                 IMAGE ID            CREATED             SIZE
continuumio/miniconda3   latest              b4adc22212f1        6 months ago        429MB

Essayez d'exécuter le conteneur à partir de l'image Docker

Maintenant, à partir de cette image Docker miniconda3, essayez d'exécuter le conteneur avec la commande docker run --rm -it continuumio / miniconda3.

kaz@Kaz-MBP ~ % docker run --rm -it continuumio/miniconda3
(base) root@8993959bca74:/#

---- rm est une option pour supprimer automatiquement le conteneur une fois le conteneur fermé (l'image Docker n'est pas supprimée) --- c'est une option pour travailler avec des conteneurs dans un shell interactif --continuumio / miniconda3 est le nom de l'image Docker, y compris la barre oblique (pas un symbole)

Une fois exécuté, l'affichage des invites sur le côté gauche du terminal change. Dans cet état, vous pouvez créer un conteneur à partir de l'image Docker comme prévu et le faire fonctionner avec un shell interactif.

(base) root@8993959bca74:/# ls
bin   dev  home  lib64	mnt  proc  run	 srv  tmp  var
boot  etc  lib	 media	opt  root  sbin  sys  usr
(base) root@8993959bca74:/#
(base) root@8993959bca74:/# conda info -e
# conda environments:
#
base                  *  /opt/conda

(base) root@8993959bca74:/#
(base) root@8993959bca74:/# python --version
Python 3.7.6

Entrez exit pour quitter le conteneur. Puisque l'option --rm a été ajoutée lors de l'exécution de la commande run, le conteneur exécuté à ce moment disparaît.

(base) root@8993959bca74:/# exit
exit
kaz@Kaz-MBP ~ %
kaz@Kaz-MBP ~ % python --version
Python 2.7.16

Maintenant que nous avons confirmé que cette image Docker peut être utilisée, créons une image Docker originale basée sur cela.

Créer un Dockerfile

Le Dockerfile est comme le dessin de conception nécessaire pour créer l'image Docker d'origine. Dans le Dockerfile, vous devez définir l'image Docker de base et la commande que vous souhaitez exécuter. Cette fois, lors de l'installation de numpy, pandas et jupyter notebook, créez un Dockerfile dans le répertoire / usr / workspace pour créer une image Docker contenant un script Python créé localement.

FROM continuumio/miniconda3
RUN conda install numpy pandas jupyter -y
RUN mkdir /usr/workspace/
COPY helloworld.py /usr/workspace/

--FROM spécifie l'image Docker d'origine

Maintenant, créez une image Docker à partir de ce Dockerfile. Après cd dans le répertoire où le Dockerfile est stocké, exécutez la commande docker build -t test .. --- t donne un nom à l'image Docker créée cette fois. Cette fois, je l'ai nommé 'test'

kaz@Kaz-MBP qiita % docker build -t test .
Sending build context to Docker daemon  3.072kB
Step 1/4 : FROM continuumio/miniconda3
 ---> b4adc22212f1
Step 2/4 : RUN conda install numpy pandas jupyter -y
 ---> Running in fce2bbf772f7
Collecting package metadata (current_repodata.json): ...working... done
Solving environment: ...working... failed with initial frozen solve. Retrying with flexible solve.
Solving environment: ...working... failed with repodata from current_repodata.json, will retry with next repodata source.
Collecting package metadata (repodata.json): ...working... done
Solving environment: ...working... done

## Package Plan ##

  environment location: /opt/conda

  added / updated specs:
    - jupyter
    - numpy
    - pandas


The following packages will be downloaded:

    package                    |            build
    ---------------------------|-----------------

(Omis)

Preparing transaction: ...working... done
Verifying transaction: ...working... done
Executing transaction: ...working... done
Removing intermediate container fce2bbf772f7
 ---> 1b4aaad5eec1
Step 3/4 : RUN mkdir /usr/workspace/
 ---> Running in 3c29b1840f3b
Removing intermediate container 3c29b1840f3b
 ---> 6b9931871d40
Step 4/4 : COPY helloworld.py /usr/workspace/
 ---> bf07bc8332af
Successfully built bf07bc8332af
Successfully tagged test:latest
kaz@Kaz-MBP qiita %

Puisqu'il y avait 4 lignes au total dans le Dockerfile, la progression est affichée à l'étape n / 4. Après avoir créé l'image Docker, vérifiez le résultat avec la commande docker images comme précédemment.

kaz@Kaz-MBP qiita % docker images
REPOSITORY               TAG                 IMAGE ID            CREATED             SIZE
test                     latest              bf07bc8332af        40 seconds ago      2.46GB
continuumio/miniconda3   latest              b4adc22212f1        6 months ago        429MB
kaz@Kaz-MBP qiita %

Une image nommée test a été ajoutée! Exécutons cela aussi comme un conteneur.

kaz@Kaz-MBP qiita % docker run --rm -it test
(base) root@ba61e23ba183:/#
(base) root@ba61e23ba183:/# ipython
Python 3.7.6 (default, Jan  8 2020, 19:59:22)
Type 'copyright', 'credits' or 'license' for more information
IPython 7.18.1 -- An enhanced Interactive Python. Type '?' for help.

In [1]: import numpy, pandas

In [2]: exit
(base) root@ba61e23ba183:/#
(base) root@ba61e23ba183:/# ls /usr/workspace/
helloworld.py
(base) root@ba61e23ba183:/#
(base) root@ba61e23ba183:/# python /usr/workspace/helloworld.py
Hello, world!
(base) root@ba61e23ba183:/#
(base) root@ba61e23ba183:/#
(base) root@ba61e23ba183:/# exit
exit
kaz@Kaz-MBP qiita %

J'ai pu exécuter IPython et importer à la fois numpy et pandas. / usr / workspace / helloworld.py est également correctement inclus dans l'image Docker.

Enregistrer l'image Docker en tant que fichier

Vous pouvez l'enregistrer avec la commande docker save. À propos, enregistrer semble être utilisé pour enregistrer l'image Docker et exporter pour enregistrer le conteneur Docker. Sauvegarde Docker → exportation de charge → importation Lequel? --Qiita

kaz@Kaz-MBP qiita % docker save test > saved_img.tar
kaz@Kaz-MBP qiita %
kaz@Kaz-MBP qiita % ls
Dockerfile	helloworld.py	saved_img.tar
kaz@Kaz-MBP qiita %

Il est exporté sous forme de fichier tar par docker save. Ce fichier tar peut être chargé avec docker load -i saved_img.tar.

Charger l'image Docker

Enfin, avec l'image Docker "test" supprimée, chargez le fichier saved_img.tar enregistré pour voir si le conteneur fonctionne correctement.

Supprimer l'image Docker existante

kaz@Kaz-MBP qiita % docker images
REPOSITORY               TAG                 IMAGE ID            CREATED             SIZE
test                     latest              bf07bc8332af        24 minutes ago      2.46GB
continuumio/miniconda3   latest              b4adc22212f1        6 months ago        429MB
kaz@Kaz-MBP qiita %
kaz@Kaz-MBP qiita % docker rmi test
Untagged: test:latest
Deleted: sha256:bf07bc8332af060f8711f1610d331c1b5e28555942f1d78b57d8522c04206645
Deleted: sha256:375aa2957526e2da07a6057f47463dfc1568f4eb486df466ecf152c88e1069c4
Deleted: sha256:6b9931871d407a8f3506e64a8e2487a1ef418190308c34cc1d16ea4b97ea310b
Deleted: sha256:33afa4a779be5b75042a62c62563d16940f9d8c71a754317f33d74220f275f4c
Deleted: sha256:1b4aaad5eec1c08bf8b7dd8a3023fdd856c33b835467281d058694e3874d4d9c
Deleted: sha256:77a6450e1f92f5757655aafa4b74ea2c413b7a93b7fbcf1c15741bd3f9c0669e
kaz@Kaz-MBP qiita %
kaz@Kaz-MBP qiita % docker images
REPOSITORY               TAG                 IMAGE ID            CREATED             SIZE
continuumio/miniconda3   latest              b4adc22212f1        6 months ago        429MB
kaz@Kaz-MBP qiita %

Chargement du fichier .tar

kaz@Kaz-MBP qiita % docker load -i saved_img.tar
7ee81e12667e: Loading layer   2.07GB/2.07GB
8f3d70528b79: Loading layer   2.56kB/2.56kB
771c1ba5862d: Loading layer  3.072kB/3.072kB
Loaded image: test:latest
kaz@Kaz-MBP qiita %
kaz@Kaz-MBP qiita %
kaz@Kaz-MBP qiita % docker images
REPOSITORY               TAG                 IMAGE ID            CREATED             SIZE
test                     latest              bf07bc8332af        28 minutes ago      2.46GB
continuumio/miniconda3   latest              b4adc22212f1        6 months ago        429MB
kaz@Kaz-MBP qiita %

Exécutez le conteneur à partir de l'image Docker chargée

kaz@Kaz-MBP qiita % docker run --rm -it test
(base) root@d4a072d6c4bd:/#
(base) root@d4a072d6c4bd:/# ipython
Python 3.7.6 (default, Jan  8 2020, 19:59:22)
Type 'copyright', 'credits' or 'license' for more information
IPython 7.18.1 -- An enhanced Interactive Python. Type '?' for help.

In [1]: import numpy, pandas

In [2]: exit
(base) root@d4a072d6c4bd:/#
(base) root@d4a072d6c4bd:/# python /usr/workspace/helloworld.py
Hello, world!
(base) root@d4a072d6c4bd:/#
(base) root@d4a072d6c4bd:/# exit
exit
kaz@Kaz-MBP qiita %

Le script de la bibliothèque était également disponible après le chargement du fichier .tar! C'est ce que tu veux faire.

Sommaire

Recommended Posts

Jusqu'à ce que les débutants de Docker créent des images Docker à partir de Dockerfile
En savoir plus sur l'image du docker et le FROM du Dockerfile
[Note] Créez un environnement Java à partir de zéro avec docker
Transférer une image Docker des actions GitHub vers GitHub Container Registry
Créer un chemin à partir d'un tableau
Supprimer toutes les images Docker