Es war bequem, eine Go-Entwicklungsumgebung mit Remote Containers zu erstellen, einer Erweiterung von VSCode, daher werde ich sie vorstellen. Ich werde die Installationsmethode von VSCode und Docker Desktop weglassen.
Remote Containers Remote Containers ist eine Erweiterung der Remoteentwicklungsfunktionen von VS Code, die auf Docker spezialisiert ist. Darüber hinaus scheint es "Remote-SSH" zu geben, die eine Remoteverbindung über SSH herstellen, und "Remote-WSL", die eine Remoteverbindung über WSL (Windows-Subsystem für Linux) herstellt.
Durch die Remoteverbindung vom lokalen VS-Code zum Docker-Container über VS Code Server ist es möglich, in einer von der lokalen Umgebung getrennten Umgebung zu entwickeln. Mit anderen Worten, es ist eine wunderbare Funktion, die die lokale Umgebung nicht verschmutzt und gleichzeitig von der Code-Vervollständigung usw. profitiert, da alles in Docker abgeschlossen ist.
Suchen und installieren Sie Remote-Container über VS Code Extensions.
Öffnen Sie das Menü mit "Strg + Umschalt + P" und Wählen Sie "Remote-Container: Entwicklungs-Cotainer-Konfigurationsdateien hinzufügen ...".
In meiner Umgebung habe ich die Umgebung bereits mit docker-compose.yml und DockerFile erstellt, sodass ich die anfänglichen Einstellungen basierend auf diesen Einstellungen vornehmen kann. Sie können die voreingestellten Einstellungen auch verwenden, indem Sie "Aus einer vordefinierten Containerkonfigurationsdefinition ..." auswählen. Dieses Mal verwenden wir die vorhandene Docker-Compose-Datei für die Ersteinrichtung.
.devcontainer
Wenn Sie die Grundeinstellungen vornehmen, wird automatisch der Ordner ".devcontainer" erstellt und darunter.
・ Devcontainer.json
・ Docker-compose.yml
Wird automatisch generiert.
devcontainer.json ist die Konfigurationsdatei.
Hier ist die aktuelle Verzeichnisstruktur wie folgt.
- .devcontainer
├ devcontainer.json
└ docker-compose.yml
- sample
└ Quellcode
- docker-compose.yml
- docker-compose.dev.yml
- Dockerfile
- Dockerfile.dev
Die automatisch generierten Dateien lauten wie folgt.
devcontainer.json
// If you want to run as a non-root user in the container, see .devcontainer/docker-compose.yml.
{
"name": "Existing Docker Compose (Extend)",
// Update the 'dockerComposeFile' list if you have more compose files or use different names.
// The .devcontainer/docker-compose.yml file contains any overrides you need/want to make.
"dockerComposeFile": [
"..\\docker-compose.dev.yml",
"docker-compose.yml"
],
// The 'service' property is the name of the service for the container that VS Code should
// use. Update this value and .devcontainer/docker-compose.yml to the real service name.
"service": "sample",
// The optional 'workspaceFolder' property is the path VS Code should open by default when
// connected. This is typically a file mount in .devcontainer/docker-compose.yml
"workspaceFolder": "/workspace",
// Set *default* container specific settings.json values on container create.
"settings": {
"terminal.integrated.shell.linux": null
},
// Add the IDs of extensions you want installed when the container is created.
"extensions": []
// Use 'forwardPorts' to make a list of ports inside the container available locally.
// "forwardPorts": [],
// Uncomment the next line if you want start specific services in your Docker Compose config.
// "runServices": [],
// Uncomment the next line if you want to keep your containers running after VS Code shuts down.
// "shutdownAction": "none",
// Uncomment the next line to run commands after the container is created - for example installing curl.
// "postCreateCommand": "apt-get update && apt-get install -y curl",
// Uncomment to connect as a non-root user if you've added one. See https://aka.ms/vscode-remote/containers/non-root.
// "remoteUser": "vscode"
}
docker-compose.yml
version: '3'
services:
# Update this to the name of the service you want to work with in your docker-compose.yml file
sample:
# If you want add a non-root user to your Dockerfile, you can use the "remoteUser"
# property in devcontainer.json to cause VS Code its sub-processes (terminals, tasks,
# debugging) to execute as the user. Uncomment the next line if you want the entire
# container to run as this user instead. Note that, on Linux, you may need to
# ensure the UID and GID of the container user you create matches your local user.
# See https://aka.ms/vscode-remote/containers/non-root for details.
#
# user: vscode
# Uncomment if you want to override the service's Dockerfile to one in the .devcontainer
# folder. Note that the path of the Dockerfile and context is relative to the *primary*
# docker-compose.yml file (the first in the devcontainer.json "dockerComposeFile"
# array). The sample below assumes your primary file is in the root of your project.
#
# build:
# context: .
# dockerfile: .devcontainer/Dockerfile
volumes:
# Update this to wherever you want VS Code to mount the folder of your project
- .:/workspace:cached
# Uncomment the next line to use Docker from inside the container. See https://aka.ms/vscode-remote/samples/docker-from-docker-compose for details.
# - /var/run/docker.sock:/var/run/docker.sock
# Uncomment the next four lines if you will use a ptrace-based debugger like C++, Go, and Rust.
# cap_add:
# - SYS_PTRACE
# security_opt:
# - seccomp:unconfined
# Overrides default command so things don't shut down after the process ends.
command: /bin/sh -c "while sleep 1000; do :; done"
Wir werden Einstellungen für die Entwicklung von Go hinzufügen.
extensions Lokal installierte VS-Code-Erweiterungen können nicht in einem Remote-Container verwendet werden. Legen Sie daher fest, dass die Erweiterungen beim Starten des Containers automatisch installiert werden. Fügen Sie Go-Erweiterungen ein. Diese Zeichenfolge erhalten Sie, indem Sie in der Erweiterungsliste mit der rechten Maustaste auf "Erweiterungs-ID kopieren" klicken.
devcontainer.json
"extensions": [
"golang.go"
]
settings
Da gopls verwendet wird, fügen Sie die Einstellungen unter [github] hinzu (https://github.com/golang/tools/blob/master/gopls/doc/vscode.md).
Die Gomod-Einstellung (GO111MODULE
) ist nach 1.13 nicht mehr erforderlich. Wenn Sie sie jedoch nicht festlegen, wird in der import-Anweisung ein Fehler angezeigt. Legen Sie sie daher fest.
devcontainer.json
"settings": {
"terminal.integrated.shell.linux": "/bin/bash",
"go.useLanguageServer": true,
"[go]": {
"editor.formatOnSave": true,
"editor.codeActionsOnSave": {
"source.organizeImports": true,
},
// Optional: Disable snippets, as they conflict with completion ranking.
"editor.snippetSuggestions": "none",
},
"[go.mod]": {
"editor.formatOnSave": true,
"editor.codeActionsOnSave": {
"source.organizeImports": true,
},
},
"gopls": {
// Add parameter placeholders when completing a function.
"usePlaceholders": true,
// If true, enable additional analyses with staticcheck.
// Warning: This will significantly increase memory usage.
"staticcheck": false,
},
"go.toolsEnvVars":{
"GO111MODULE":"on"
}
}
workspaceFolder
Legen Sie den Arbeitsbereich beim Starten des Remote-Containers fest.
Auf der docker-compose.yml-Seite wird das Volume unter / go / src /
gemountet. Ändern Sie daher den Arbeitsbereich entsprechend.
devcontainer.json
"workspaceFolder": "/go/src/sample",
Das Setup ist abgeschlossen.
Starten Sie den Container tatsächlich. Wählen Sie "Remote-Container: Im Container erneut öffnen" unter "Strg + Umschalt + P"
Beim ersten Start werden die Tools nicht in / go / bin
installiert, also installieren Sie sie.
Da gopls verwendet wird, installieren Sie es über die unten stehende Benachrichtigung oder
Führen Sie go get -v golang.org / x / tools / gopls
aus
Installieren Sie für andere Tools andere als "gocode" und "gocode-gomod" unter "Go: Install / Update Tools".
Ich konnte bestätigen, dass alles unter "/ go / bin" installiert war.
Zu diesem Zeitpunkt können Sie sich auf dem Container entwickeln. Natürlich wird es Container für Container verwaltet. Wenn Sie also einen Container löschen, verschwindet der installierte Container und Sie müssen ihn neu konfigurieren.
Sie können auch im Container debuggen. Erstellen Sie einen .vscode-Ordner im selben Verzeichnis wie der bereitgestellte Quellcode, um "launch.json" zu erstellen.
launch.json
{
"version": "0.2.0",
"configurations": [
{
"name": "Remote",
"type": "go",
"request": "launch",
"host": "localhost",
"program": "${workspaceRoot}",
"args": []
}
]
}
Ich werde die Datei beschreiben, die schließlich erstellt wurde. Ich hoffe, Sie finden es hilfreich.
devcontianer.json
{
"name": "Existing Docker Compose (Extend)",
"dockerComposeFile": [
"docker-compose.yml"
],
"service": "sample",
"workspaceFolder": "/go/src/sample",
"settings": {
"terminal.integrated.shell.linux": "/bin/bash",
"go.useLanguageServer": true,
"[go]": {
"editor.formatOnSave": true,
"editor.codeActionsOnSave": {
"source.organizeImports": true,
},
"editor.snippetSuggestions": "none",
},
"[go.mod]": {
"editor.formatOnSave": true,
"editor.codeActionsOnSave": {
"source.organizeImports": true,
},
},
"gopls": {
"usePlaceholders": true,
"staticcheck": false,
},
"go.toolsEnvVars":{
"GO111MODULE":"on"
}
},
"extensions": [
"golang.go"
]
}
docker-compose.yml
version: '3'
services:
# Update this to the name of the service you want to work with in your docker-compose.yml file
sample:
image: golang:1.14
volumes:
- ./../:/go/src/:cached
tty: true
environment:
- MYSQL_CONNECTION_STRING=${CONNECTION_STRING}
networks:
- default
- db-network
networks:
db-network:
external: true