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 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.)
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.
Ö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.
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.
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
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.
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.
Offizielle Dokumentation, lang
Nachdem ich diesen Artikel gelesen hatte, begann ich mit der Verwendung von Remote-Containern. Vielen Dank!