Über Docker

Warum verwenden

** Um die Umwelt sauber zu halten. ** ** **

Ohne Docker sind python3.7 und python3.8 in der lokalen Umgebung gemischt und bereits durcheinander. Chaos. Es ist auch großartig, dass die Entwicklungsumgebung und die Produktionsumgebung kombiniert werden können. Es gibt viele Fälle, in denen bei jeder Bereitstellung aufgrund der unterschiedlichen Umgebung ein Fehler auftritt. Dies kann jedoch verhindert werden. Docker ist besser als Virtual Box, da es viel schneller startet. Seit ich Docker benutze, hat sich mein Gesundheitszustand zum Zeitpunkt der Entwicklung erheblich verbessert. Es fühlt sich genauso an wie an einem organisierten Schreibtisch zu lernen.

Docker-Grundlagen

Der Inhalt ist, dass dies ausreicht, wenn Sie nur mit der Sandbox herumspielen, ohne sich der Produktionsumgebung bewusst zu sein. Zuerst denke ich, das ist alles was du brauchst. Sobald Sie sich daran gewöhnt haben, möchte ich zur erweiterten Version übergehen.

#Es zieht das Basisbild. Das Gefühl, eine Meisterumgebung zu schaffen. Legen Sie das Paket usw. darauf.
$Docker ziehen Bildname

# anaconda ->Die meisten für maschinelles Lernen erforderlichen Pakete wie Pandas sind bereits installiert, aber sie sind schwer. Leichtigkeit ist in einer Produktionsumgebung wichtig, aber ich denke, dies ist gut für die lokale Entwicklung.
$ docker pull continuumio/anaconda3

# -Starten Sie Docker weiterhin mit dem Befehl it. Wenn Sie dies nicht tun, können Sie nicht daran arbeiten, da es durch einmaliges Starten abgeschnitten wird. Auch am Ende/bin/Durch Anhängen von Bash können Sie in Bash arbeiten. Ein Bild, das die Befehlszeile verwenden kann. Andernfalls befindet es sich im interaktiven Python-Modus.
$ docker run -it continuumio/anaconda3 /bin/bash

#Wenn Sie Änderungen vornehmen, z. B. ein Paket im Container installieren, speichern Sie die Änderungen nach dem Beenden des Containers. Andernfalls bleibt die ursprüngliche Umgebung erhalten.
#Geschichte der gestarteten Container
$ docker ps -a
#Speichern Sie den Container als Bild
$ docker commit container_id container_name

#Überprüfen Sie die Liste der gespeicherten Bilder
$ docker images

#Starten Sie den gespeicherten Container
$ docker run -it container_name /bin/bash

#Mounten Sie das lokale Verzeichnis (gemeinsam mit Docker). -Beschreiben Sie "lokales Verzeichnis: Docker-Verzeichnis" nach v.
docker run -it -v /c/Users/user/Python:/home container_name /bin/bash

Docker-Anwendung

Es mag etwas schwierig sein, aber sobald Sie sich daran gewöhnt haben, können Sie es bequemer und effizienter entwickeln. Ich erinnere mich, dass ich hier lange gebraucht habe.

Der grundlegende Verwendungsfluss ist wie folgt.

  1. Erstellen Sie eine Docker-Datei und die Anforderung.txt
  2. Fügen Sie die Erweiterung Remote-Container in VS-Code ein
  3. Führen Sie das erneute Öffnen in Container & Docker-Datei über die untere linke Codetaste von VS Code aus
  4. Fügen Sie das in der Docker-Umgebung installierte Paket zur Datei "resources.txt" hinzu
  5. Erstellen Sie das nächste Mal erneut.

Hier möchte ich nur über Dockerfile, Docker-Compose-Nutzungsproduktion und Dockerfile für die Produktionsumgebung sprechen. Schließlich möchte ich mich an die Entwicklung mit Docker-Compose gewöhnen. Es wäre auch schön, eine Docker-Datei für die Produktionsumgebung erstellen zu können.

1. Dockerfile alleine

#Die oben beschriebene erleichtert die Verwendung des Caches. Beschreiben wir also diejenigen, die sich unten häufig ändern.
# python-buster ->Minimales Paket zum Ausführen von Python. OS ist Debian.Ich entwickle mich damit.
FROM python:3.8-buster

#Verwenden Sie einen absoluten Pfad als Pfad. Weil die Verzeichnisstruktur zwischen lokal und Container unterschiedlich ist.
WORKDIR /app

#Paketmanager-Updates und Paketakquisitionen zusammen.apt ist apt-Besser als zu bekommen.
RUN apt update -y && apt upgrade -y && \
    apt install -y ffmpeg

#KOPIEREN ist besser als HINZUFÜGEN. Kopieren Sie die Datei in das App-Verzeichnis. Kopieren von Dateien von lokal in Container.
COPY requirements.txt /app
# requirements.Siehe txt und pip installieren.Ich möchte pip3 in python3 verwenden.
RUN pip3 install --upgrade pip && \
    pip3 install -r requirements.txt

#Das angegebene Verzeichnis kann in jeder Umgebung gemeinsam genutzt werden.
# VOLUME /data

#Geben Sie das zu kopierende Verzeichnis explizit an. Um nur den geänderten Teil wiederzugeben. Weil ich lästig bin ".Ich bin fertig mit.
# COPY src /app/src
# COPY data /app/data
COPY . /app

# CMD ["/bin/bash"]

2. Verwenden Sie Docker-Compose

Mit Docker-compose können Sie mehrere Server gleichzeitig verwenden. Zum Beispiel nicht nur für die Python-Ausführung, sondern auch für Datenbanken wie postgres und jupyter. Es ist auch gut, Ressourcen gemeinsam nutzen zu können. Das Codebeispiel ist unten.

docker-compose.yml


version: '3'
services: 
  notebook:
    # image: jupyter/datascience-notebook ->Nicht erforderlich, da das Basis-Image in der Docker-Datei beschrieben ist.
    #  container_Wenn Sie keinen Namen angeben, wird dieser automatisch generiert und später nur schwer überprüft.
    container_name: vad-sandbox
    ports: 
      - "8888:8888"
    # 「.Führt die Docker-Datei im selben Verzeichnis aus.
    build: .
    #Geben Sie das Verzeichnis an, das gemountet werden soll.
    volumes: 
      - .:/app
    working_dir: /app
    #Der Befehl wird automatisch ausgeführt. Ich treffe es selbst, weil es leichter zu verstehen ist.
    # command: jupyter lab --ip=0.0.0.0 --allow-root

Und hier ist die Docker-Datei bei Verwendung von Docker-Compose

FROM python:3.8-buster

WORKDIR /app

RUN apt update -y && apt upgrade -y && \
    apt install -y ffmpeg

COPY requirements.txt /app

RUN pip3 install --upgrade pip && \
    pip3 install -r requirements.txt

#Verwenden Sie ipywidgets.Sie können jupyter interaktiv verwenden.
RUN jupyter nbextension enable --py widgetsnbextension --sys-prefix

COPY . /app

# CMD ["/bin/bash"]

3. Für die Docker-Produktionsumgebung

In einer Produktionsumgebung ist es wichtig, die Kapazität so weit wie möglich zu reduzieren. Daher wird ein mehrstufiger Build übernommen (die Umgebung wird zwischen Build und Ausführung aufgeteilt).

#In Python ist Buster besser als Alpin. Die c-Erweiterung kann nicht mit slim verwendet werden
#Trennen Sie beim mehrstufigen Build separate Images für Build und Ausführung und minimieren Sie die Kapazität
#Diejenige, die Sie den Cache verwenden möchten, wird oben beschrieben. Wenn es eine Änderung gibt, wird sie danach verworfen.

#Zum bauen. gcc kann für Buster verwendet werden. Erforderlich, um webrtcvad zu installieren.
FROM python:3.8-buster as builder

#Verwenden Sie den absoluten Pfad für den Pfad
WORKDIR /app

#Da die Installation von pytorch lange dauert, ist es einfach, den Cache wiederzuverwenden.
RUN pip3 install --upgrade pip && \
    pip3 install torch

#KOPIEREN ist besser als HINZUFÜGEN. Kopieren Sie die Datei in das App-Verzeichnis.
COPY requirements.txt /app
RUN pip3 install --upgrade pip && \
    pip3 install -r requirements.txt

#Ausführungscontainer
FROM python:3.8-slim-buster as runner

#Kopieren Sie das installierte Python-Paket zur Ausführung.Ich konnte es um ca. 1 GB reduzieren.
COPY --from=builder /usr/local/lib/python3.8/site-packages /usr/local/lib/python3.8/site-packages

#Paketmanager-Updates und Paketakquisitionen zusammen.apt ist apt-Besser als zu bekommen.
RUN apt update -y && apt upgrade -y && \
    apt install -y ffmpeg

COPY . /app

Schließlich

Da es sehr abstrakt ist, ist es auf den ersten Blick sicher verwirrend, aber sobald Sie sich daran gewöhnt haben, wird es zu einer bloßen Aufgabe. Sie mögen sich zuerst gestresst fühlen, aber lassen Sie uns unser Bestes geben. Sie sollten in der Lage sein, Berufung einzulegen, auch wenn Sie aktiv sind.

Recommended Posts

Über Docker
Informationen zur Docker-Kapazität
Informieren Sie sich über Docker
Über =
Java 10 Docker-Unterstützung
Docker
Über die einfache Bedienung von Docker
Informationen zum Pull-Limit von Docker Hub
Docker-Memo
Über Kotlin
Über attr_accessor
Über Hinemos
Frühling × Docker
Docker Intellij
Über Schienen 6
Über den Frühling ③
Docker-Grundlagen
Über Aufzählung
Über Polymorphismus
Über Optional
Über Hash
Über JitPack
Darüber ()
Über die Kapselung
Über JAVA_HOME
Über statische
Über Ausnahmen
Docker verstehen
Docker Memorandum
Über den Umfang
[Maven] Über Maven
Über Docker, gefälschten Server und Container
Docker-Tutorial (Memo)
(Fast über die Infrastruktur) Lesen Sie Docker-Lehrbücher für Programmierer. 1
Über die Java-Schnittstelle
[Java] Informationen zu Java 12-Funktionen
Technisches Memorandum (Docker)
Informationen zum Rails-Routing
Docker + Laravel + Codeception
Über zyklische Komplexität
Freiheit auf Docker
Informationen zur Ausnahmebehandlung
Docker-Betriebsnotiz
Memorandum Docker-Befehl
Informationen zu AsyncTask-Generika
Erfahren Sie mehr über das Docker-Image und das FROM der Docker-Datei
Über Ruby-Symbole