Hoe code in Docker-containers te bewerken met Visual Studio Code

0
189

Het ontwikkelen of debuggen van code in Docker-containers kan lastig zijn. U zou normaal gesproken een bijlage aan de container toevoegen en shell-hulpprogramma's gebruiken om bestanden te bewerken. Met de extensie Remote Containers van Visual Studio Code kunt u mappen in containers openen, zodat u ermee kunt werken in uw code-editor.

Ontwikkeling op afstand werkt met Docker Desktop 2.0 en hoger voor Windows en macOS en Docker Engine 18.06 en hoger voor Linux. Als u Windows 10 Home gebruikt, moeten de update van april 2020, Docker Desktop 2.3 en het Windows-subsysteem voor Linux zijn geïnstalleerd.

Aan de containerzijde is VS Code compatibel met zowel x64- als ARM-containers. U kunt de besturingssystemen Alpine, Debian, Ubuntu, CentOS en RHEL gebruiken. Als je basisimage niet direct werkt, zou je er extra pakketten in moeten kunnen installeren om de verbinding te voltooien.

Aan de slag

Start VS Code, druk op Ctrl+Shift+P en zoek naar “extensies”. Selecteer de “Extensies installeren” item om de zijbalk te openen. Zoek in het extensievenster naar “Remote – Containers” en installeer het overeenkomende item.

Nadat de extensie is geïnstalleerd, verschijnt er een nieuwe groene knop in de linkerbenedenhoek van uw statusbalk. Klik hierop om het opdrachtenpalet te openen, dat vooraf is gevuld met beschikbare opdrachten op afstand. Als u liever de muis niet gebruikt, kunt u de opdrachten ook vinden door op Ctrl+Shift+P te drukken en “remote” te typen. De extensie verschijnt ook in andere delen van de gebruikersinterface, zoals de welkomstpagina en het venster voor het openen van mappen.

Advertentie

Om uw eerste Dockerized-map te openen, roept u de lijst met opdrachten op en selecteert u 'Attach to Running Container'. U moet een waarschuwing bevestigen dat de container niet-vertrouwde code kan uitvoeren. U mag alleen bestanden koppelen aan containers die zijn gemaakt op basis van afbeeldingen die u vertrouwt, omdat een schadelijke container met een VS Code-werkruimtebestand uw systeem in gevaar kan brengen.

VS Code geeft een lijst weer van de Docker-containers die op uw systeem worden uitgevoerd. Selecteer de container waarmee u verbinding wilt maken. Er wordt een nieuw venster geopend. Het kan een paar seconden duren om te starten terwijl VS Code de externe servercomponenten in de container installeert. U ziet de actieve container linksonder in de statusbalk weergegeven.

Zodra het raam klaar is, kunt u beginnen met werken. Klik op de “Map openen” knop in het linkerdeelvenster om een ​​prompt voor het kiezen van bestanden te openen. Dit toont het bestandssysteem in de container. Navigeer naar de map die u wilt openen en druk op “OK”.

De zijbalk wordt bijgewerkt om de inhoud van de geselecteerde map weer te geven. Klik op een van de bestanden om deze te openen in de VS Code-editor. U kunt nu wijzigingen aanbrengen in de container, zonder handmatig bestanden te kopiëren of een werkmap-bindkoppeling in te stellen. Dit maximaliseert de efficiëntie bij het gebruik van een Dockerized ontwikkelomgeving of het debuggen van een defecte container.

De volledige functieset van VS Code is beschikbaar, inclusief het aanvullen van IntelliSense-code en de bijbehorende toolkit voor foutopsporing. Vensters zoals de console en de terminal worden gekoppeld aan de invoer- en uitvoerstromen van de container.

Hoe werkt het?

Het eerste dat u moet herkennen aan de integratie is dat VS Code het bestandssysteem van uw container zal veranderen. Het zal een server installeren in de containers waarmee u verbinding maakt, die informatie terugvoert naar de editor-client.

Advertentie

De server bewaakt het bestandssysteem, leest bestanden en start processen in de container. Dit maakt mogelijkheden zoals de debugger van VS Code mogelijk. De editor zal de server vragen om uw broncode uit te voeren, zodat deze de code in de container kan inspecteren.

Op dezelfde manier installeert VS Code kopieën van uw andere extensies in de container. Dit zorgt ervoor dat ze volledige toegang hebben tot het containerbestandssysteem, zodat ze zonder verschillen werken in vergelijking met een lokale map. Het eindresultaat is een volwaardige editor-ervaring die transparant werkt, ook al is deze verspreid over uw host en containers. Afhankelijk van de grootte van uw omgeving kan de eerste installatie even duren, maar de containerserver wordt in de cache opgeslagen voor later gebruik.

Ontwikkelcontainers

Behalve het openen van bestanden in een bestaande container, kunt u met het externe systeem ontwikkelcontainers definiëren die uw werkomgeving inkapselen. Een dergelijke container zou alle softwareafhankelijkheden moeten bevatten die u zou installeren voordat u uw toepassing lokaal ontwikkelt.

Wanneer u een ontwikkelcontainer gebruikt, kunt u ofwel uw werkmap koppelen of een geïsoleerd volume gebruiken. De laatste optie voorkomt vervuiling van het bestandssysteem en biedt verbeterde prestaties omdat het meer native is voor Docker.

Ontwikkelingscontainers worden gemaakt op basis van .devcontainer/devcontainer.json-bestanden. Deze beschrijven de Docker- en Visual Studio-configuratie waarmee uw ontwikkelomgeving wordt gestart.

{ "image": "mcr.microsoft.com/vscode/devcontainers/javascript-node:16", "extensions": " EditorConfig.EditorConfig", "forwardPorts": [3000] }

Het hierboven getoonde bestand devcontainer.json stelt een ontwikkelcontainer in die gebruikmaakt van de Node.js-sjabloon van Microsoft. De EditorConfig VS Code-extensie is ingeschakeld en voegt ondersteuning toe voor .editorconfig-bestanden in uw werkmap. Poort 3000 wordt vervolgens toegewezen van de host naar de container.

Advertentie

Dev-containerbestanden ondersteunen ook een paar andere opties. U kunt VS Code settings.json-waarden instellen, een opdracht toevoegen om in de container uit te voeren en de gebruiker definiëren als wie de VS Code-server zal worden uitgevoerd.

Als u niet zelf een containerconfiguratiebestand wilt maken, zal de opdracht Remote-Containers: Add Development Configuration Files er automatisch een aan uw project toevoegen. U kunt kiezen uit een lijst met vooraf geconfigureerde sjablonen die u later kunt aanpassen.

Zodra u een devcontainer.json-bestand in uw project hebt, voert u de < strong>Remote-Containers: container opnieuw opbouwencommando uit het commandopalet. Hiermee wordt een containerimage gemaakt met behulp van de opgegeven configuratie. Wanneer de build is voltooid, voer je Remote-Containers: Reopen Folder in Container uit om je huidige lokale map te openen in een nieuwe ontwikkelcontainer.

Als je een Git-repository gebruikt , is het meestal eenvoudiger om de repo rechtstreeks in een container te klonen. De Remote-Containers: kloonrepository in containervolumeopdracht accepteert een Git-URL om te klonen. Het maakt een nieuw volume en koppelt het aan een dev-containerinstantie. Hierdoor kun je aan Git-repo's werken zonder ze naar je lokale bestandssysteem te klonen, waardoor onnodige vervuiling wordt voorkomen. VS Code deelt automatisch uw lokale Git-inloggegevens met de container.

De extensie configureren

The Remote – Containers-extensie wordt geleverd met verschillende instellingen waarmee u uw containerervaring kunt configureren. Je kunt ze vinden met de opdracht Remote-Containers: Instellingen voor Remote-Containers.

De eerste verzameling instellingen betreft dotfiles. Dotfiles verwijzen naar configuratiebestanden die beginnen met een punt (.). Remote-Containers kunnen automatisch een Git-repository met dotfiles klonen in nieuwe containers, zodat u aan de slag kunt met uw gebruikelijke instellingen.

Advertentie

Voeg de URL van uw dotfiles-repository toe aan de Repository-instelling. De repository wordt gekloond naar het doelpadpad, dat standaard ~/dotfiles is. Als u een opdracht wilt uitvoeren nadat de repository is gekloond, specificeert u deze als Installatieopdracht.

Remote-Containers gebruikt standaard docker als het binaire bestand dat containeropdrachten uitvoert. U kunt dit wijzigen in elk Docker CLI-compatibel binair bestand met de Docker Path-instelling. Als u Podman gebruikt, kunt u met het specificeren van podman als deze waarde met zijn containers werken met VS-code.

U kunt standaard externe extensies configureren onder de kop Standaardextensies. Klik op “Artikel toevoegen” om een ​​extensie te kiezen om aan elke container toe te voegen. Hiermee kunt u ervoor zorgen dat uw extensies die u moet gebruiken wereldwijd beschikbaar zijn, zelfs als ze niet in een devcontainer.json-bestand staan.

Een laatste groep instellingen betreft Git-configuratie. Wanneer "Kopieer Git Config" is aangevinkt, wordt uw lokale .gitconfig-bestand automatisch automatisch naar containers gekopieerd. Als u dit inschakelt, zorgt u ervoor dat uw commits correct worden toegeschreven aan de gebruikersgegevens die u al lokaal gebruikt.

De “Git Credential Helper Config Location” instelling bepaalt het configuratiebestand waarnaar nieuwe Git-inloggegevens worden geschreven. Je kunt kiezen uit je lokale gebruikersbestand, ~/.gitconfig, of de globale systeemlocatie, /etc/gitconfig.

Samenvatting

De afstandsbediening – Met de Containers-extensie voor Visual Studio Code kunt u bestanden en mappen in Docker-containers bewerken. Het werkt naadloos samen met de functies van de VS Code-editor, waaronder IntelliSense, directory-indexering, foutopsporing en extensies. Intern lanceert VS Code een ontwikkelserver in de container, zodat de tools volledige toegang hebben tot het bestandssysteem waarmee ze werken.

Advertentie

Er zijn verschillende mogelijke toepassingen voor deze functionaliteit, met Gedockte ontwikkelomgevingen en on-the-fly container bewerken de belangrijkste kanshebbers. Hoewel het idee om containers te gebruiken om ontwikkeling te systematiseren al een tijdje bestaat, maakt VS Code het veel gemakkelijker om aan de slag te gaan door een IDE-ervaring aan te bieden die Docker native begrijpt.

Je zou een Docker-image kunnen voorbereiden die geeft ontwikkelaars alles wat ze nodig hebben om op uw systeem te werken – programmeertaal, afhankelijkheden en gemakstools. Ontwikkelaars zouden een container starten, er verbinding mee maken vanuit VS Code en hun werk doen zonder iets (behalve Code) op hun eigen machine te installeren. Als een afhankelijkheid moet worden gepatcht, hoeft u alleen de gedeelde Docker-afbeelding bij te werken en ontwikkelaars ertoe te brengen de nieuwe tag te halen.