[PYTHON] Ich habe versucht, eine Umgebung zu erstellen, in der die Arbeit im Docker-Container auf dem Remote-Server direkt über den lokalen VS-Code mit SSH-Verbindung ausgeführt werden kann

Ich bin Ishikawa von NTT Docomo. Es ist mein zweites Jahr als Mitglied der Gesellschaft.

In letzter Zeit hat aus verschiedenen Gründen die Anzahl der Unternehmen und Schulen, die empfehlen, von zu Hause aus zu arbeiten und zu Hause zu forschen, zugenommen.

Unter solchen Umständen hat die Anzahl der Menschen, die von zu Hause aus arbeiten, erheblich zugenommen. Wenn ich mich zu diesem Zeitpunkt darauf konzentrieren würde, eine Umgebung für die Fernentwicklung zu schaffen, könnte ich mich recht gut fühlen.

Sie können im Docker-Container auf dem Remote-Server so arbeiten, als würden Sie lokal arbeiten.

Als Voraussetzung für diese Umweltkonstruktion

Wird besorgt.

Es gibt auch eine Methode, die Docker Desktop verwendet, aber ich fand sie etwas problematisch, daher werde ich dieses Mal eine Methode vorstellen, die sie nicht verwendet.

Die fertige Umgebung

Sie können die folgenden Vorgänge in dem auf dem Remote-Server eingerichteten Docker-Container nur auf dem VS-Code-Bildschirm des lokalen PCs ausführen.

Darüber hinaus können Sie mit Cyberduck Dateien im Container bearbeiten und übertragen und mit GPU berechnen.

Container erstellen

Dann, wie man sofort eine Umgebung erstellt.

Stellen Sie zunächst eine SSH-Verbindung auf dem Remote-Server her.

Hier verwenden wir die Verbindung durch RSA-Schlüsselauthentifizierung. (* Die Einstellungsmethode für die RSA-Schlüsselauthentifizierung ist allgemein und in Ordnung, daher wird sie hier weggelassen.)

Erstellen Sie nach dem Anmelden am Remoteserver mit SSH-Verbindung an einem beliebigen Speicherort auf dem Remoteserver eine Docker-Datei wie die folgende. Der Dateiname lautet "Dockerfile".

#Bild der Basis. Das Folgende ist für meine GPU-Umgebung geeignet. Wählen Sie daher die für Sie geeignete aus.
#Für diejenigen, die keine GPU verwenden"ubuntu:18.04"Usw. sind in Ordnung.
FROM nvidia/cuda:10.1-cudnn7-runtime-ubuntu18.04

#Der Name der Person, die es gemacht hat.
LABEL maintainer "dcm_ishikawa"

#Importieren Sie die minimal erforderlichen Elemente und die für die SSH-Verbindung erforderlichen Elemente.
RUN apt-get update --fix-missing && \
    apt-get install -y apt-utils && \
    apt-get install -y software-properties-common vim curl unzip htop openssh-server wget procps

#Einstellungen für die SSH-Verbindung.
# "password"Bitte ändern Sie den Ort in ein Passwort.
#Ubuntu 18 ist auf verschiedene Arten eingestellt.Es ist eine Arbeit, in 04 eine SSH-Verbindung als Root-Benutzer herzustellen.
RUN mkdir /var/run/sshd
RUN echo 'root:password' | chpasswd
RUN echo '\nPermitRootLogin yes' >> /etc/ssh/sshd_config
RUN sed 's@session\s*required\s*pam_loginuid.so@session optional pam_loginuid.so@g' -i /etc/pam.d/sshd

#GPU-Einstellungen. Nicht erforderlich, wenn Sie keine GPU verwenden.
ENV NVIDIA_VISIBLE_DEVICES all
ENV NVIDIA_DRIVER_CAPABILITIES utility,compute

#Einstellungen für die SSH-Verbindung.
ENV NOTVISIBLE "in users profile"
RUN echo "export VISIBLE=now" >> /etc/profile

#Ermöglicht das Starten einer SSH-Verbindung beim Ausführen.
EXPOSE 22
CMD ["/usr/sbin/sshd", "-D"]

Führen Sie nach dem Erstellen der Docker-Datei den folgenden Befehl an derselben Stelle aus, an der Sie die Docker-Datei gespeichert haben.

docker image build . -t [imagename]
docker run --name [containername] -d -p 10000:22 -p 18888:8888 [imagename]

[Bildname] ist ein beliebiger Bildname und [Containername] ist ein beliebiger Containername.

Für -p 10000: 22 ist 10000 eine beliebige Portnummer, wenn der Port an den Remote-Server übergeben wird.

Für -p 18888: 8888 ist 18888 die Portnummer beim Zugriff mit Jupyter Notebook im Browser. Nicht erforderlich, wenn Sie Jupyter Notebook nicht verwenden oder wenn Sie Juoyter Notebook für VS-Code verwenden.

Wenn Sie den folgenden Befehl auf dem Remote-Server eingeben und in den Container einfügen, ist die Containererstellung erfolgreich.

ssh [email protected] -p 10000

Sie werden beim Herstellen einer Verbindung nach einem Passwort gefragt, aber das Passwort ist das in der Docker-Datei beschriebene.

Sobald die Verbindung hergestellt ist, erstellen Sie "~ / .ssh / autorisierte_Tasten" im Container und geben Sie den öffentlichen Schlüssel ein, der auf Ihrem lokalen PC erstellt wurde.

Verwenden Sie anschließend "exit", um die SSH-Verbindung zum Container zu trennen.

Erstellen Sie außerdem "~ / .ssh / authorized_keys" auf dem Remote-Server und geben Sie den öffentlichen Schlüssel ein, der auf dem lokalen PC erstellt wurde.

Damit ist die Arbeit am Remote-Server abgeschlossen. Lassen Sie uns auch die SSH-Verbindung zum Remote-Server trennen.

VS-Code-Einstellungen

Dann ist es die Einstellung des lokalen PCs.

Fügen Sie die folgende Beschreibung über den Remote-Server und SSH zum Container auf dem Remote-Server zu ~ / .ssh / config auf dem lokalen PC hinzu. (Erstellen Sie diese Datei, wenn sie überhaupt nicht vorhanden ist.)

~/.ssh/config


Host Server01                       #Beliebiger Verbindungsname
  HostName xxx.xxx.xxx.xxx          #Remote-Server-Adresse
  User username                     #Benutzername auf dem Remote-Server
  IdentityFile ~/.ssh/id_rsa        #Der Pfad des erstellten privaten Schlüssels

Host Server01:Container             #Beliebiger Verbindungsname
  HostName 127.0.0.1
  User root
  IdentityFile ~/.ssh/id_rsa        #Das gleiche wie oben
  Port 10000                        #Die Portnummer wurde beim Ausführen des Containers übergeben
  ProxyCommand ssh -W %h:%p Server01 #Server01 ist derselbe wie der in der ersten Zeile

Installieren Sie als Nächstes die Erweiterung für die SSH-Verbindung von VS Code unter der folgenden URL.

https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.remote-ssh-explorer

Starten Sie VSCode und drücken Sie die Fernverbindungstaste links.

画像1.png

Der Verbindungsname des in ~ / .ssh / config angegebenen Containers wird in der Liste angezeigt. (Hier Server01: Container)

Klicken Sie auf die Ordnermarkierung rechts neben dem Verbindungsnamen, um die VS-Code-Verbindung zum Container herzustellen.

画像2.png

Auf dem angezeigten Bildschirm befindet sich eine Schaltfläche mit der Aufschrift "Ordner öffnen". Durch Drücken können Sie einen beliebigen Ort im Container auswählen. Wählen Sie also den Ort aus, den Sie dem Arbeitsbereich hinzufügen möchten.

Danke für deine harte Arbeit. Damit ist der Umgebungsaufbau abgeschlossen. Im Folgenden wird beschrieben, wie Sie es verwenden. Siehe.

Befehlsausführung

Sie können die Befehlszeile des Containers öffnen, indem Sie auf die Schaltflächen in der Reihenfolge der Bilder klicken.

画像3.png

Python-Installation

Verwenden Sie wget über die Befehlszeile des Containers, um Installationsprogramme wie Anaconda und Miniconda herunterzuladen und zu installieren.

(Beispiel)


wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh
bash Miniconda3-latest-Linux-x86_64.sh
rm Miniconda3-latest-Linux-x86_64.sh
source ~/.bashrc

Starten Sie Jupyter Notebook

Installieren Sie zunächst die Python-Erweiterung im Container-Arbeitsbereich. ** (* In einigen Fällen ist es nicht standardmäßig installiert!) ** Installation: https://marketplace.visualstudio.com/items?itemName=ms-python.python

Installieren Sie dann Jupyter über die Befehlszeile im Container.

pip install jupyter

Geben Sie den Befehl ein, um Jupyter zu starten.

Bei Verwendung von VS-Code

Öffnen Sie die Befehlspalette mit Befehl + Umschalt + P und Geben Sie > Neues leeres Jupyter-Notizbuch erstellen ein und drücken Sie Enter. Mit einem kürzlich durchgeführten Update ist dies alles, was Sie zum Starten benötigen. Es ist wunderbar.

Bei Verwendung in einem Browser

Führen Sie den folgenden Befehl in der Befehlszeile im Container aus.

jupyter notebook --port 8888 --ip=0.0.0.0 --allow-root

** Beachten Sie, dass es einige Dinge gibt, die mit dem Befehl jupyter notebook allein nicht erledigt werden können. ** ** ** Ich denke, es ist bequem, es mit Alias zu setzen.

Folgendes wird an die Befehlszeile zurückgegeben. Kopieren Sie daher den Teil xxxxxxxxxxxxxxx.

http://127.0.0.1:8000/?token=xxxxxxxxxxxxxxx

Öffnen Sie Ihren lokalen Browser und gehen Sie zur Adressleiste Geben Sie [Remote Server IP Address]: 18888 ein und drücken Sie Enter. (18888 ist die Portnummer, die während des Docker-Laufs angegeben wurde.) Danach werden Sie nach einem Passwort oder Token gefragt. Geben Sie also das zuvor kopierte xxxxxxxxxxxxxxxx ein und Sie können Jupyter Notebook in Ihrem Browser verwenden.

Verbindung mit Cyberduck

Sie können eine Verbindung über "Neue Verbindung" mit den folgenden Einstellungen herstellen.

--Wählen Sie SFTP --Server: Remoteserveradresse --Port: Die während des Laufs angegebene Portnummer (10000 hier)

Wenn die Verbindung nicht funktioniert

Wenn Ihre VS-Code- oder Befehlszeilen-SSH-Verbindung nicht funktioniert, haben Sie den Container wahrscheinlich mehrmals neu erstellt und haben einen Konflikt mit "unknown_hosts".

Sie können das Problem lösen, indem Sie die entsprechende Beschreibung in "~ / .ssh / unknown_hosts" auf dem lokalen PC löschen oder in "~ / .ssh / unknown_hosts.old" umbenennen.

Am Ende

Was haben Sie gedacht. Ich hoffe, dieser Artikel hilft Ihnen bei Ihrer Arbeit von zu Hause aus und bei der Recherche. Lasst uns weiter zusammenarbeiten und unser Bestes geben!

Recommended Posts

Ich habe versucht, eine Umgebung zu erstellen, in der die Arbeit im Docker-Container auf dem Remote-Server direkt über den lokalen VS-Code mit SSH-Verbindung ausgeführt werden kann
Ich habe versucht, eine Umgebung mit WSL + Ubuntu + VS-Code in einer Windows-Umgebung zu erstellen
Bearbeiten Sie die Datei des SSH-Verbindungszielservers auf dem Server mit VS-Code
Melden Sie sich mit SSH bei einem Remote-Server an
[Django] Verwenden Sie VS Code + Remote-Container, um schnell eine Entwicklungsumgebung für Django-Container (Docker) zu erstellen.
So erstellen Sie einfach eine Umgebung, in der Python-Code auf Jupyter ausgeführt werden kann, ohne die lokale Umgebung zu verschmutzen
Ich habe versucht, E-Mails vom Sakura-Server mit Flask-Mail zu senden
Da es keine Beschreibung zum Erstellen einer Umgebung für nnabla mit Docker einschließlich GPU gibt, habe ich es selbst versucht, Teil 1
Debuggen eines Python-Programms durch Remoteverbindung mit einem Docker-Container in einer WSL2-Umgebung mit VS-Code
Ich habe versucht, eine Umgebung zu erstellen, in der Tweet-Daten in WSL (bash) erfasst, gespeichert und analysiert werden können.
Ich habe versucht, den unter "Abrufen von Bildern von der Flickr-API mit Python" (Teil 2) veröffentlichten Vorlagencode zu überarbeiten.
Ich habe versucht, mit Raspberry Pi 4 eine Umgebung von Ubuntu 20.04 LTS + ROS2 zu erstellen
Ich habe versucht, die Pferde vorherzusagen, die mit LightGBM unter den Top 3 sein werden
Bearbeiten und debuggen Sie den Code in Raspberry Pi mit der SSH-Verbindungsfunktion von VSCode
Verfahren zum Anhängen und Debuggen von VS-Code an Jupyter Lab auf einem Remote-Server
mong - Ich habe versucht, den Code, der zufällig den Containernamen von Docker generiert, nach Python zu portieren. -
Ich habe versucht, mit Python (Mac OS X) eine Umgebung für maschinelles Lernen zu erstellen.
Um Japanisch mit Python in der Docker-Umgebung verwenden zu können
[Go + Gin] Ich habe versucht, eine Docker-Umgebung zu erstellen
[Deep Learning von Grund auf neu] Ich habe versucht, die Gradientenbestätigung auf leicht verständliche Weise zu erklären.
Das Bild wird in der lokalen Entwicklungsumgebung angezeigt, aber das Bild wird nicht auf dem Remote-Server von VPS angezeigt.
Ich habe versucht, das Offline-Spracherkennungssystem Julius mit Python in der virtuellen Docker-Umgebung auszuführen
Setzen Sie Ubuntu in Raspi ein, setzen Sie Docker darauf und steuern Sie GPIO mit Python aus dem Container
Ich habe versucht, eine Umgebung zu schaffen, in der Sie ein lustiges Zoom-Meeting mit Linux (Ubuntu) + Zoom + OBS Studio + Soundeffekten haben können