Bis Docker-Anfänger Docker-Images aus Dockerfile erstellen

Einführung

Verwenden Sie Docker, um die erforderlichen Bibliotheken und Dateien als Docker-Image und Docker-Last auf einem anderen Server zu konsolidieren, da Python-Bibliotheken wie Numpy und Pandas in einer Umgebung verarbeitet werden müssen, die nicht mit dem Internet verbunden ist. Ich werde das Verfahren von zusammenfassen. この記事のゴール.png Wir würden uns freuen, wenn Sie uns mitteilen könnten, ob es inhaltliche Fehler oder Punkte gibt, die korrigiert werden müssen.

Umgebung

Docker vorbereiten

Installieren und starten

Installieren Sie Docker von Homebrew und starten Sie Docker.app anhand dieses Artikels. So installieren Sie Docker unter Mac OS mit Homebrew --Qiita

Ich habe Docker gestartet. Ich habe das Tutorial ignoriert, daher ist es in einem sauberen Zustand. Bildschirm nach dem Start.png Durch Starten von Docker können Sie den Docker-Befehl auf dem Terminal eingeben. Außerdem wird Docker.app (GUI-Bildschirm) danach nicht mehr verwendet, sodass es in Ordnung ist, es zu schließen.

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

Bilder und Behälter

Danach gehen wir davon aus, dass wir den Unterschied zwischen "Bild" und "Container" verstehen. In Bezug auf "Bild" und "Container" gefallen mir die Erklärungen auf den folgenden Websites persönlich, da sie leicht zu verstehen sind. Unterschied zwischen Docker-Container und Image | Hacknote

Holen Sie sich das Originalbild von Docker Hub

Ich werde mein Bestes tun, um von nun an ein Docker-Image zu erstellen, aber anscheinend ist es der Mainstream, ein Original-Docker-Image basierend auf einem anderen Docker-Image zu erstellen, anstatt ein Docker-Image von Grund auf neu zu erstellen, also mache ich es auch Ich werde nachahmen. Dieses Mal brauche ich Python und die dazugehörigen Bibliotheken, daher möchte ich es auf das Docker-Image stützen, auf dem Miniconda3 war. continuumio/miniconda3 - Docker Hub

Lass es uns jetzt ziehen.

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

Wenn der Pull abgeschlossen ist, können Sie das Ergebnis mit dem Befehl "Docker-Bilder" überprüfen (siehe unten). Es ist in Ordnung, wenn ein Repository mit dem Namen continuumio / miniconda3 registriert ist. Das gleiche Ergebnis wird mit "Docker-Bild ls" angezeigt.

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

Versuchen Sie, den Container über das Docker-Image auszuführen

Versuchen Sie nun, von diesem miniconda3 Docker-Image aus den Container mit dem Befehl docker run --rm -it continuumio / miniconda3 auszuführen.

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

---- rm ist eine Option zum automatischen Löschen des Containers nach dem Schließen des Containers (Docker-Image wird nicht gelöscht) --- Es ist eine Option zum Arbeiten mit Containern in einer interaktiven Shell --continuumio / miniconda3 ist der Name des Docker-Bildes, einschließlich des Schrägstrichs (kein Symbol).

Bei der Ausführung ändert sich die Eingabeaufforderungsanzeige auf der linken Seite des Terminals. In diesem Zustand können Sie erwartungsgemäß einen Container aus dem Docker-Image erstellen und mit einer interaktiven Shell betreiben.

(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

Geben Sie "exit" ein, um den Container zu verlassen. Da die Option "--rm" hinzugefügt wurde, als der Befehl "run" ausgeführt wurde, verschwindet der zu diesem Zeitpunkt ausgeführte Container.

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

Nachdem wir bestätigt haben, dass dieses Docker-Image verwendet werden kann, erstellen wir darauf basierend ein Original-Docker-Image.

Erstellen einer Docker-Datei

Die Docker-Datei entspricht der Entwurfszeichnung, die zum Erstellen des ursprünglichen Docker-Images erforderlich ist. In der Docker-Datei müssen Sie das Basis-Docker-Image und den Befehl definieren, den Sie ausführen möchten. Erstellen Sie dieses Mal während der Installation von numpy, pandas und jupyter notebook eine Docker-Datei im Verzeichnis / usr / workspace, um ein Docker-Image mit einem lokal erstellten Python-Skript zu erstellen.

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

--FROM gibt das ursprüngliche Docker-Image an

Erstellen Sie nun ein Docker-Image aus dieser Docker-Datei. Führen Sie nach "cd" in dem Verzeichnis, in dem die Docker-Datei gespeichert ist, den Befehl "docker build -t test." Aus. --- t gibt einen Namen für das diesmal erstellte Docker-Image an. Diesmal habe ich es nicht genannt. --Das letzte. Gibt das Verzeichnis an, in dem die Docker-Datei gespeichert ist. Dieses Mal ist es ".", Um das aktuelle Verzeichnis anzugeben.

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
    ---------------------------|-----------------

(Weggelassen)

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 %

Da die Docker-Datei insgesamt 4 Zeilen enthielt, wird der Fortschritt als Schritt n / 4 angezeigt. Überprüfen Sie nach dem Erstellen des Docker-Images das Ergebnis wie zuvor mit dem Befehl "Docker-Images".

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 %

Ein Bild mit dem Namen test wurde hinzugefügt! Lassen Sie uns dies auch als Container ausführen.

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 %

Ich konnte IPython ausführen und sowohl Numpy als auch Pandas importieren. / usr / workspace / helloworld.py ist auch korrekt im Docker-Image enthalten.

Speichern Sie das Docker-Image als Datei

Sie können es mit dem Befehl docker save speichern. Übrigens scheint Speichern verwendet zu werden, um das Docker-Image zu speichern, und Exportieren, um den Docker-Container zu speichern. Docker speichern → Export laden → Importieren Welche? --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 %

Es wird von Docker Save als TAR-Datei exportiert. Diese TAR-Datei kann mit Docker Load -i saved_img.tar geladen werden.

Laden Sie das Docker-Image

Laden Sie schließlich die gespeicherte Datei save_img.tar, nachdem das vorhandene Docker-Image "test" entfernt wurde, um festzustellen, ob der Container ordnungsgemäß funktioniert.

Löschen Sie das vorhandene Docker-Image

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 %

Laden der .tar-Datei

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 %

Führen Sie den Container über das geladene Docker-Image aus

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 %

Das Bibliotheksskript war auch nach dem Laden der .tar-Datei verfügbar! Das möchten Sie tun.

Zusammenfassung

Recommended Posts

Bis Docker-Anfänger Docker-Images aus Dockerfile erstellen
Erfahren Sie mehr über das Docker-Image und das FROM der Docker-Datei
[Hinweis] Erstellen Sie mit Docker eine Java-Umgebung von Grund auf neu
Übertragen Sie ein Docker-Image von GitHub Actions in die GitHub Container Registry
Erstellen Sie einen Pfad aus einem Array
Löschen Sie alle Docker-Bilder