[PYTHON] Verwenden Sie den Docker-Entwicklungscontainer bequem mit VS Code

Einführung

Für diese Personen wird die Verwendung der Erweiterungsfunktion "Remote-Container" vorgestellt, mit der Sie bequem eine Entwicklungsumgebung mit Docker-Containern aus VS Code erstellen und betreiben können.

Die Größe dieser Erweiterung

Die VS-Code-Erweiterung "Remote-Container" startet VS-Code in einem Container und kommuniziert mit VS-Code auf dem Host-Computer, sodass Sie in einem Container so entwickeln können, als würden Sie in einer lokalen Umgebung entwickeln. ist.

Die detaillierte Konfiguration wird im offiziellen Dokument angezeigt.

(https://code.visualstudio.com/assets/docs/remote/containers/)

Darüber hinaus ist es möglich, mehrere Entwicklungsumgebungen über VS Code zu verwalten und einen Container mit einem Klick zu starten.

(https://code.visualstudio.com/assets/docs/remote/containers/)

Wenn Sie mit der Entwicklung beginnen, müssen Sie den Container daher nicht über einen Befehl starten, eine Shell anhängen und den Container eingeben.

Sie können mit der Entwicklung in einem Container beginnen, genauso wie Sie VS Code in Ihrer lokalen Umgebung öffnen und mit der Entwicklung beginnen würden.

Die Systemanforderungen sind wie folgt.

  • Windows: Docker Desktop 2.0+ on Windows 10 Pro/Enterprise. (Docker Toolbox is not supported.)
  • macOS: Docker Desktop 2.0+.
  • Linux: Docker CE/EE 18.06+ and Docker Compose 1.21+. (The Ubuntu snap package is not supported.)

Umweltbau für Umweltbau

Docker

Installieren Sie zuerst Docker, aber lassen Sie es hier weg.

Ich habe Docker Desktop in einer Windows-Umgebung installiert, aber ich hatte unvorstellbare Schwierigkeiten.

VS-Code-Erweiterung

Öffnen Sie das Erweiterungsmenü mit Strg + Umschalt + X im VS-Code, suchen Sie nach "Remote-Containern" und installieren Sie.

Es ist Microsoft offiziell, also sicher (?).

Es gibt auch eine Erweiterung namens Remote Development, die Remote-Container / Remote-SSH / Remote-WSL kombiniert. Das ist also in Ordnung.

git

Im offiziellen Microsoft-Repository auf Github befindet sich eine Beispielkonfigurationsdatei, sodass das Klonen problemlos möglich ist.

Installieren wir also git (Schritt weggelassen).

Das Beispiel-Repository befindet sich unten.

vscode-remote-try-python

Dieses Mal werde ich Python verwenden, aber es gibt auch node.js, java, go usw.

Sie benötigen lediglich eine Docker-Datei und devcontainer.json im Verzeichnis .devcontainer, damit Sie genau das mitbringen können.

Es gibt eine Funktion von Remote-Containern namens "Try a Sample", und Sie können versuchen, diese Repositorys ohne Klonen zu verwenden. Dies ist jedoch etwas ärgerlich, da die Erstellung des Docker-Images plötzlich beginnt.

Bau der Entwicklungsumgebung

Projektstruktur

Angenommen, Sie möchten eine Entwicklungsumgebung für eine Python-Anwendung erstellen.

Öffnen Sie das Projektverzeichnis von VS Code mit der folgenden Verzeichnisstruktur.

project/
    └ .devcontainer/
        ├ Dockerfile
        └ devcontainer.json
    └ .git/
    └ package/
        ├ __init__.py
        ├ __main__.py
        └  module.py
    ├ requirements.txt
    └ .gitignore

Klicken Sie auf das Menü f1 oder das grüne Symbol unten links und wählen Sie "Remote-Container: Ordner im Container öffnen ...".

(https://code.visualstudio.com/assets/docs/remote/containers/)

Anschließend liest VS Code die Docker-Datei und devcontainer.json unter .devcontainer und startet den Docker-Container gemäß den Einstellungen.

Schauen wir uns nun den Inhalt von Dockerfile und devcontainer.json an, um genau zu verstehen, was passiert.

Dockerfile

Dies ist eine gewöhnliche Docker-Datei, und obwohl nichts Besonderes daran ist, macht es einen guten Job, Benutzerrechte festzulegen.

#-------------------------------------------------------------------------------------------------------------
# Copyright (c) Microsoft Corporation. All rights reserved.
# Licensed under the MIT License. See https://go.microsoft.com/fwlink/?linkid=2090316 for license information.
#-------------------------------------------------------------------------------------------------------------

FROM python:3

Dieses Element gibt das Image an, auf dem das Docker-Image erstellt wird.

Wenn Sie die Python-Version im Detail angeben möchten, setzen Sie diese auf Python: 3.7.

ARG USERNAME=vscode
ARG USER_UID=1000
ARG USER_GID=$USER_UID

RUN apt-get update \
    && apt-get -y install --no-install-recommends apt-utils dialog 2>&1 \

    && apt-get -y install git iproute2 procps lsb-release \

    ~~~

    && groupadd --gid $USER_GID $USERNAME \
    && useradd -s /bin/bash --uid $USER_UID --gid $USER_GID -m $USERNAME \

    && apt-get install -y sudo \
    && echo $USERNAME ALL=\(root\) NOPASSWD:ALL > /etc/sudoers.d/$USERNAME\
    && chmod 0440 /etc/sudoers.d/$USERNAME \

Hier werden die apt-get-Einstellungen und Benutzerberechtigungen festgelegt.

Kurz gesagt, es scheint, dass ein Benutzer namens vscode, der die Berechtigung zu sudo besitzt, mit dem Container umgehen kann.

devcontainer.json

Hier ist das Miso dieser Erweiterung.

	"name": "Python 3",
	"context": "..",
	"dockerFile": "Dockerfile",

	"settings": { 
		"terminal.integrated.shell.linux": "/bin/bash",
		"python.pythonPath": "/usr/local/bin/python",
		"python.linting.enabled": true,
		"python.linting.pylintEnabled": true,
		"python.linting.pylintPath": "/usr/local/bin/pylint"
	},

	"appPort": [ 9000 ],

	"postCreateCommand": "sudo pip install -r requirements.txt",

	"remoteUser": "vscode",

	"extensions": [
		"ms-python.python"
	]
}

Die hier im JSON-Format geschriebenen Elemente sind die Einstellungen für die Erweiterung Remote-Container.

Laut der offiziellen Dokumentation können viele andere Elemente eingestellt werden.

Standardmäßig ist das Projektstammverzeichnis an den / workspace des Containers gebunden.

{	
    "workspaceFolder": "/home/vscode",
    "workspaceMount": "type=bind,source=${localWorkspaceFolder},target=/home/vscode/project"
}

In diesem Fall befindet sich auch das Standardverzeichnis, das an / home / vscode gebunden und von VS Code geöffnet ist.

{	
    "containerEnv": {
        "WORKSPACE": "/home/vscode"
    }
}

Mit dem Element containerEnv können Sie Umgebungsvariablen festlegen, die im Container verwendet werden können.

{	
    "runArgs": [
		"--name=project_dev_container"
    ]
}

Sie können beim Starten des Containers im Element runArgs auch direkt Optionen angeben.

Tatsächlich liest VS Code diese Datei devcontainer.json, fügt verschiedene Optionen hinzu und Docker wird ausgeführt, um den Container zu starten.

Zu diesem Zeitpunkt wird die im Element runArgs angegebene Liste der Zeichenfolgen durch Leerzeichen getrennt hinzugefügt.

Weitere Informationen: Entwickeln in einem Container --devcontainer.json-Referenz

Andere individuelle Einstellungen

git

Wenn .git / in dem Projektverzeichnis enthalten ist, das an den Container gebunden werden soll, können Sie die VS Code-Versionsverwaltungsfunktion im Container so wie sie ist verwenden.

Die Versionsverwaltungsfunktion von VS Code ist sehr praktisch, und Sie können Git-Add, Git-Commit, Git-Push usw. über die GUI ausführen.

Jedes Mal, wenn Sie versuchen, mit einem Mote-Repository in einem Container zu kommunizieren, müssen Sie sich bei Github authentifizieren.

Es kann jedoch unsere VS-Code- und Git-Anmeldeinformationen für den Host-Computer freigeben.

Developing inside a Container - Sharing Git credentials with your container

Speichern Sie zunächst den Github-Benutzernamen und die E-Mail-Adresse in der .gitconfig-Datei auf dem Hostcomputer.

$ git config --global user.name "Your Name"
$ git config --global user.email "your.email@address"

Diese Einstellungen werden in .gitconfig im Benutzerstamm geschrieben, aber VS Code scheint sie automatisch in den Container zu kopieren.

Als Nächstes werden Authentifizierungsinformationen wie Kennwörter angezeigt. Es gibt jedoch zwei Möglichkeiten, diese festzulegen.

Wenn Sie sich über die https-Kommunikation mit einer ID und einem Kennwort authentifizieren, speichern Sie das Kennwort im Helfer für Anmeldeinformationen von git. Die Einstellungen werden dann mit dem Container synchronisiert.

Caching your GitHub password in Git

$ git config --global credential.helper wincred

Für die Authentifizierung mit ssh scheinen die Einstellungen synchronisiert zu sein, wenn der öffentliche Schlüssel für Github im SSH-Agenten auf dem Hostcomputer registriert ist.

Mit PowerShell

ssh-add $HOME/.ssh/github_rsa

Dann wird der Schlüssel im SSH-Agenten registriert.

Es gibt jedoch viele Fälle, in denen der SSH-Agent nicht gestartet wird. In diesem Fall geben Sie PowerShell mit Administratorrechten ein.

Set-Service ssh-agent -StartupType Automatic
Start-Service ssh-agent
Get-Service ssh-agent

Sie können es auch in der GUI unter Dienste> OpenSSH Authentication Agent-Eigenschaften festlegen.

Weitere Informationen finden Sie unter [Verwenden von Windows 10 ssh-agent mit Eingabeaufforderung, WSL und Git Bash zum Aktivieren von # ssh-agent-](https://qiita.com/q1701/items/3cdc2d7ef7a3539f351d#ssh-agent-% E3% 81% AE% E6% 9C% 89% E5% 8A% B9% E5% 8C% 96) usw.

AWS Access Key

Ich habe Probleme mit dem Zugriff, wenn ich versuche, innerhalb eines Containers mit AWS S3 zu kommunizieren.

Ich habe Zugriffsschlüsselinformationen im Verzeichnis .aws im Benutzerstamm des Hostcomputers und möchte sie auch im Container lesen.

Im Gegensatz zu Git scheint es jedoch nicht automatisch geladen zu werden.

Daher müssen Sie es einmal mit Docker cp von außerhalb des Containers in den Container kopieren.

docker cp $HOME/.aws {Containername}:home/vscode

Hier ist es zweckmäßig, einen Namen für den Container zu haben, der von Remote-Containern gestartet werden soll.

Im runArgs-Element von devcontainer.json zuvor

{	
    "runArgs": [
		"--name=project_dev_container"
    ]
}

Es ist eine gute Idee, dem Container einen solchen Namen zu geben.

Tolle Reise

Wenn Sie es tatsächlich verwenden, können Sie den Entwicklungscontainer fast so behandeln, wie Sie es normalerweise mit VS Code tun würden.

Bei der Entwicklung mit Python ist es normal, eine virtuelle Umgebung vorzubereiten. Durch Erstellen der Umgebung im Container ist dies jedoch nicht erforderlich.

Dies liegt daran, dass jedes Projekt einen anderen Container verwendet, sodass die globale Installation von Paketen die Umgebung nicht verschmutzt.

Und da das Image für jede Python-Version vorbereitet ist, können Sie es entsprechend der Produktionsumgebung angeben.

(In diesem Bereich sollten Docker anstelle von Remote-Containern verwendet werden.)

Sie können diese Entwicklungsumgebungen mit einem einzigen Klick öffnen und zwischen ihnen wechseln.

Diese Erweiterung bindet auch automatisch Ports, sodass Sie Ihren lokalen Server ohne Stress für die Front-End-Entwicklung verwenden können.

Beispielsweise startet node.js jedoch einen lokalen Server durch Angabe von Port 3000, sodass dieser Port auf dem lokalen Computer veröffentlicht werden muss.

In diesem Fall in devcontainer.json

{	
    "appPort": [ 3000 ]
}

Lassen Sie es uns so einstellen.

Referenz

Offizielle Dokumentation, lang

Nachdem ich diesen Artikel gelesen hatte, begann ich mit der Verwendung von Remote-Containern. Vielen Dank!

Recommended Posts

Verwenden Sie den Docker-Entwicklungscontainer bequem mit VS Code
[Django] Verwenden Sie VS Code + Remote-Container, um schnell eine Entwicklungsumgebung für Django-Container (Docker) zu erstellen.
Verwenden Sie Python mit Docker
Verwenden Sie Python in einer Anaconda-Umgebung mit VS-Code
Python mit VSCode (Windows 10)
Debuggen Sie Python mit VS-Code
Verwenden Sie prefetch_related bequem mit Django
Erstellen Sie eine VS Code + Docker-Entwicklungsumgebung mit Linux VM
[Django] Erstellen Sie mit PyCharm schnell eine Entwicklungsumgebung für Django-Container (Docker)
[Venv nicht erforderlich] Die stärkste Python-Entwicklungsumgebung, die mit Remote Containern erstellt wurde [VS Code / Docker]
Google AppEngine-Entwicklung mit Docker
Versuchen Sie, Jupyter mit VS-Code auszuführen
Erstellen Sie die Entwicklungsumgebung von Django mit Docker neu! !! !! !!
Anwendungsentwicklung mit Docker + Python + Flask
Installieren Sie Python mit Mac vs Code
Debuggen eines Python-Programms durch Remoteverbindung mit einem Docker-Container in einer WSL2-Umgebung mit VS-Code
Erstellen Sie eine Entwicklungsumgebung mit Jupyter und Flask mit Python in Docker (unterstützt sowohl VS Code als auch Code-Server).
Verwenden Sie die Verschlüsselung der Verschlüsselungsbibliothek mit dem Python-Image von Docker
Pass PYTHONPATH in 1 Minute mit VS Code
Japanisches Diagramm mit VS Code + matplotlib anzeigen
VSCodes Pylint nervt beim Import! !! !! !!
Verwendung von VS Code (Codeserver) mit Google Colab in nur 3 Zeilen
Flutter in Docker - Erstellen und Verwenden einer Flutter-Entwicklungsumgebung in einem Docker-Container
Cross-Compilieren von Raspberry Pi und Erstellen einer Remote-Debug-Entwicklungsumgebung mit VS Code
Einfache Erstellung einer Python-Datenanalyseumgebung mit Windows 10 Pro x VS Code x Docker
Erstellen Sie eine Entwicklungsumgebung für die C-Sprache mit einem Container
Ich habe Flask mit Remote-Containern von VS Code ausprobiert
Virtuelle Python / Windows (Windows 10) -Umgebung / Paket mit VSCode
Debuggen mit VS-Code mit Boost Python Numpy
[Python] Erstellen Sie mit Docker eine Django-Entwicklungsumgebung
Verwenden Sie die Kaggle-API in einem Docker-Container
Verwenden Sie Python im Docker-Container als Pycharm-Interpreter
Erstellen Sie eine Python-Ausführungsumgebung mit VS-Code
Richten Sie die TinyGo-Entwicklungsumgebung für VS Code ein
Vorbereiten der Verwendung von Tensorflow (Anaconda) mit Visual Studio Code
VS-Code-Einstellungen für die Entwicklung in Python mit Abschluss
[Mac OS] Verwenden Sie Kivy mit PyCharm! [Python-Anwendungsentwicklung]
Beleben Sie die Symbolsuche im Python-Arbeitsbereich mit VS-Code
Python-Entwicklungsumgebung mit Windows + Anaconda3 + Visual Studio Code
Einfache Erstellung von C ++ - Code mit CMake auf Docker
Python-Entwicklungsumgebung mit Windows + Python + PipEnv + Visual Studio-Code
Aktivieren Sie externe Bibliotheksinformationen mit Pipenv + VSCode
Debuggen Sie die mit Docker-Compose mit VS-Code erstellte Django-Umgebung aus der Ferne
Erstellen Sie eine Entwicklungsumgebung mit Poetry Django Docker Pycharm