Erstellen Sie eine Go-Entwicklungsumgebung mit den Remote-Containern von VS Code

Einführung

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.

Installation

Suchen und installieren Sie Remote-Container über VS Code Extensions. image.png

Grundeinstellung

Öffnen Sie das Menü mit "Strg + Umschalt + P" und Wählen Sie "Remote-Container: Entwicklungs-Cotainer-Konfigurationsdateien hinzufügen ...". image.png

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. image.png

image.png

.devcontainer Wenn Sie die Grundeinstellungen vornehmen, wird automatisch der Ordner ".devcontainer" erstellt und darunter. ・ Devcontainer.jsonDocker-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"

Einstellungen für Go

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.

Anlaufen

Starten Sie den Container tatsächlich. Wählen Sie "Remote-Container: Im Container erneut öffnen" unter "Strg + Umschalt + P"

image.png

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 image.png

Installieren Sie für andere Tools andere als "gocode" und "gocode-gomod" unter "Go: Install / Update Tools". image.png

image.png

Ich konnte bestätigen, dass alles unter "/ go / bin" installiert war.

image.png

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.

debuggen

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": []
        }
    ]
}

Zusammenfassung

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

Referenz

Recommended Posts

Erstellen Sie eine Go-Entwicklungsumgebung mit den Remote-Containern von VS Code
Erstellen Sie mit VSCode x Remote Development x Pipenv eine komfortable Entwicklungsumgebung
Erstellen Sie mit Laragon ganz einfach eine Entwicklungsumgebung
[Django] Verwenden Sie VS Code + Remote-Container, um schnell eine Entwicklungsumgebung für Django-Container (Docker) zu erstellen.
Erstellen Sie eine Entwicklungsumgebung für die C-Sprache mit einem Container
[Python] Erstellen Sie mit Docker eine Django-Entwicklungsumgebung
Erstellen Sie mit der Doker Toolbox eine Django-Entwicklungsumgebung
Erstellen Sie eine Python-Ausführungsumgebung mit VS-Code
Erstellen Sie mit Python eine Entwicklungsumgebung für maschinelles Lernen
Erstellen Sie eine Entwicklungsumgebung mit Poetry Django Docker Pycharm
Cross-Compilieren von Raspberry Pi und Erstellen einer Remote-Debug-Entwicklungsumgebung mit VS Code
Erstellen Sie mit Docker eine Django-Entwicklungsumgebung! (Docker-compose / Django / postgreSQL / nginx)
[Memo] Erstellen Sie mit Docker eine Entwicklungsumgebung für Django + Nuxt.js
Erstellen Sie mit Docker eine Go-Umgebung
[Django] Erstellen Sie mit PyCharm schnell eine Entwicklungsumgebung für Django-Container (Docker)
Erstellen einer Entwicklungsumgebung für die Python2.7-Serie mit Vagrant
Erstellen Sie eine Python-Umgebung mit WSL + Pyenv + Jupyter + VSCode
[Venv nicht erforderlich] Die stärkste Python-Entwicklungsumgebung, die mit Remote Containern erstellt wurde [VS Code / Docker]
[DynamoDB] [Docker] Erstellen Sie mit Docker-Compose eine Entwicklungsumgebung für DynamoDB und Django
Erstellen Sie eine Tensorflow-Umgebung mit Raspberry Pi [2020]
Erstellen Sie mit Docker-Compose eine schnelle API-Umgebung
[Linux] Erstellen einer Jenkins-Umgebung mit Docker
Erstellen Sie mit pyenv eine virtuelle Umgebung für Python
Erstellen Sie mit Neovim eine moderne Python-Umgebung
[Linux] Aufbau einer Docker-Umgebung mit Amazon Linux 2
Ich habe versucht, eine Mac Python-Entwicklungsumgebung mit pythonz + direnv zu erstellen
Erstellen Sie mit pulumi eine WardPress-Umgebung auf AWS
Erstellen Sie eine Python-Entwicklungsumgebung mit Visual Studio Code
Erstellen Sie eine Python-Umgebung mit ansible auf centos6
Erstellen Sie mit Sublime Text3 eine Python3-Build-Umgebung
Erstellen Sie eine Entwicklungsumgebung mit Jupyter und Flask mit Python in Docker (unterstützt sowohl VS Code als auch Code-Server).
Erstellen Sie mit Vagrant in 5 Minuten eine Django-Umgebung
Erstellen Sie eine Python-Entwicklungsumgebung auf Ihrem Mac
[Memo] Erstellen Sie eine virtuelle Umgebung mit Pyenv + anaconda
Erstellen Sie eine virtuelle Umgebung mit pyenv und venv
Erstellen Sie eine Kubernetes-Umgebung für die Entwicklung unter Ubuntu
Erstellen einer Python-Umgebung mit OSX Elcapitan
Erstellen Sie mit Eclipse eine Minecraft-Plug-Entwicklungsumgebung
Erstellen Sie mit IntelliJ schnell eine Python Django-Umgebung
Erstellen Sie eine mruby-Entwicklungsumgebung für ESP32 (Linux Edition)
Erstellen Sie eine Python-Umgebung für maschinelles Lernen mit Containern
Erstellen Sie eine Python-Entwicklungsumgebung auf Raspberry Pi
Holen Sie sich mit Poetry eine schnelle Python-Entwicklungsumgebung
[Januar 2020] Beginnen wir den explosiven "Entwicklungscontainer" ernsthaft mit dem Remote Container von VS Code.
Erstellen Sie eine TensorFlow-Entwicklungsumgebung auf Amazon EC2 mit Befehlskopie
Erstellen Sie eine lokale Entwicklungsumgebung mit WSL + Docker Desktop für Windows + Docker-Lambda + Python
Erstellen Sie eine GVim-basierte Python-Entwicklungsumgebung unter Windows 10 (3) GVim8.0 und Python3.6
Erstellen einer Django-Entwicklungsumgebung mit pyenv-virtualenv auf einem Mac
Erstellen Sie eine virtuelle Python-Umgebung mit virtualenv und virtualenvwrapper
Erstellen Sie eine lokale Entwicklungsumgebung für Laravel6.X auf Ihrem Mac
Reparieren einer kaputten Entwicklungsumgebung mit Mavericks-Migration (Hinweis)
Erstellen Sie mit pyenv-virtualenv eine Python-Umgebung für jedes Verzeichnis
Erstellen Sie eine Python-Entwicklungsumgebung mit Vagrant + Ansible + Fabric
Erstellen Sie eine GVim-basierte Python-Entwicklungsumgebung unter Windows 10 (1)