[DOCKER] Créez un environnement de développement Go avec les conteneurs distants de VS Code

introduction

Il était confortable de créer un environnement de développement Go à l'aide de conteneurs distants, qui est une extension de VSCode, je vais donc le présenter. J'omettrai la méthode d'installation de VSCode et Docker Desktop.

Remote Containers Remote Containers est une extension des fonctions de développement à distance de VS Code, spécialisée pour Docker. De plus, il semble qu'il existe des "Remote SSH" qui se connectent à distance via SSH et des "Remote WSL" qui se connectent à distance en utilisant WSL (Windows Subsystem for Linux).

En se connectant à distance du VS Code local au conteneur Docker via VS Code Server, il est possible de développer dans un environnement distinct de l'environnement local. En d'autres termes, c'est une fonction formidable qui ne pollue pas l'environnement local tout en bénéficiant de la complétion de code etc. car tout est terminé sur Docker.

Installation

Recherchez et installez des conteneurs distants à partir des extensions de code VS. image.png

Réglage initial

Ouvrez le menu avec Ctrl + Shift + P et Sélectionnez Remote-Containers: Add Development Cotainers Configuration Files .... image.png

Dans mon environnement, j'ai déjà construit l'environnement avec docker-compose.yml et DockerFile, afin que je puisse définir les paramètres initiaux en fonction de ces paramètres. Vous pouvez également utiliser les paramètres prédéfinis en sélectionnant «À partir d'une définition de configuration de conteneur prédéfinie ...». Cette fois, nous utiliserons le fichier docker-compose existant pour la configuration initiale. image.png

image.png

.devcontainer Lorsque vous effectuez les réglages initiaux, le dossier .devcontainer est automatiquement créé et en dessous. ・ Devcontainer.jsonDocker-compose.yml Est généré automatiquement. devcontainer.json sera le fichier de configuration.

Ici, la structure actuelle des répertoires est la suivante.

- .devcontainer
 ├ devcontainer.json
  └ docker-compose.yml
- sample
└ Code source
- docker-compose.yml
- docker-compose.dev.yml
- Dockerfile 
- Dockerfile.dev

Les fichiers générés automatiquement sont les suivants.

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"

Paramètres pour Go

Nous ajouterons des paramètres pour développer Go.

extensions Les extensions VS Code installées localement ne peuvent pas être utilisées dans un conteneur distant, définissez donc les extensions pour qu'elles soient installées automatiquement au démarrage du conteneur. Mettez dans les extensions Go. Cette chaîne peut être obtenue en cliquant avec le bouton droit de la souris sur Copy Extension Id dans la liste des extensions.

devcontainer.json


	"extensions": [
		"golang.go"
	]

settings Puisque gopls est utilisé, ajoutez les paramètres en vous référant à github. En ce qui concerne le paramètre Gomod (GO111MODULE), il n'est plus nécessaire après 1.13, mais si vous ne le définissez pas, une erreur apparaîtra dans l'instruction d'importation, alors définissez-la.

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 Définissez l'espace de travail lors du démarrage du conteneur distant. Du côté docker-compose.yml, le volume sera monté sous / go / src /, donc changez l'espace de travail en conséquence.

devcontainer.json


"workspaceFolder": "/go/src/sample",

La configuration est terminée.

Commencez

Démarrez en fait le conteneur. Sélectionnez Remote-Containers: Reopen in Container dans Ctrl + Shift + P

image.png

Au premier démarrage, les outils ne sont pas installés dans / go / bin, alors installez-les.

Puisque gopls est utilisé, installez-le à partir de la notification ci-dessous, ou Exécutez go get -v golang.org / x / tools / gopls image.png

Pour les autres outils, installez autre que gocode et gocode-gomod depuis Go: Install / Update Tools image.png

image.png

J'ai pu confirmer que tout était installé sous / go / bin.

image.png

À ce stade, vous pouvez développer sur le conteneur. Bien sûr, il est géré conteneur par conteneur, donc si vous supprimez un conteneur, celui installé disparaîtra, vous devrez donc le reconfigurer.

déboguer

Vous pouvez également déboguer à l'intérieur du conteneur. Créez un dossier .vscode dans le même répertoire que le code source monté pour créer launch.json.

launch.json


{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "Remote",
            "type": "go",
            "request": "launch",
            "host": "localhost",
            "program": "${workspaceRoot}",
            "args": []
        }
    ]
}

Sommaire

Je décrirai le fichier qui a finalement été créé. J'espère que cela vous aidera.

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

référence

--Go study (1) Paramètre d'environnement Mac + VSCode + Go: https://qiita.com/oruharo/items/545378eae5c707f717ed

Recommended Posts

Créez un environnement de développement Go avec les conteneurs distants de VS Code
Créez un environnement de développement confortable avec VSCode x Remote Development x Pipenv
Créez facilement un environnement de développement avec Laragon
[Django] Créez rapidement un environnement de développement de conteneur Django (Docker) à l'aide de VS Code + Remote Containers
Créer un environnement de développement de langage C avec un conteneur
[Python] Créer un environnement de développement Django avec Docker
Créer un environnement de développement Django à l'aide de Doker Toolbox
Créer un environnement d'exécution python avec VS Code
Créer un environnement de développement d'applications d'apprentissage automatique avec Python
Créez un environnement de développement avec Poetry Django Docker Pycharm
Compilation croisée de Raspberry Pi et création d'un environnement de développement de débogage à distance avec VS Code
Créez un environnement de développement Django avec Docker! (Docker-compose / Django / postgreSQL / nginx)
[Memo] Construire un environnement de développement pour Django + Nuxt.js avec Docker
Créer un environnement go à l'aide de Docker
[Django] Créez rapidement un environnement de développement de conteneur Django (Docker) avec PyCharm
Comment créer un environnement de développement de la série Python2.7 avec Vagrant
Créer un environnement Python avec WSL + Pyenv + Jupyter + VSCode
[Venv non requis] L'environnement de développement Python le plus puissant créé avec des conteneurs distants [VS Code / Docker]
[DynamoDB] [Docker] Créer un environnement de développement pour DynamoDB et Django avec docker-compose
Créer un environnement Tensorflow avec Raspberry Pi [2020]
Créez un environnement d'API rapide avec docker-compose
[Linux] Créer un environnement Jenkins avec Docker
Créez un environnement virtuel pour python avec pyenv
Créez un environnement Python moderne avec Neovim
[Linux] Construction de l'environnement Docker avec Amazon Linux 2
J'ai essayé de créer un environnement de développement Mac Python avec pythonz + direnv
Créez un environnement WardPress sur AWS avec Pulumi
Créer un environnement de développement Python avec Visual Studio Code
Créez un environnement python avec ansible sur centos6
Créer un environnement de construction python3 avec Sublime Text3
Créer un environnement de développement à l'aide de Jupyter et Flask avec Python dans Docker (prend en charge à la fois VS Code / code-server)
Créez un environnement Django avec Vagrant en 5 minutes
Créez un environnement de développement Python sur votre Mac
[Memo] Créez un environnement virtuel avec Pyenv + anaconda
Créez un environnement virtuel avec pyenv et venv
Créer un environnement Kubernetes pour le développement sur Ubuntu
Construire un environnement Python avec OSX Elcapitan
Créez un environnement de développement de plugins Minecraft avec Eclipse
Créez rapidement un environnement Python Django avec IntelliJ
Créer un environnement de développement mruby pour ESP32 (édition Linux)
Créer un environnement d'apprentissage automatique Python avec des conteneurs
Construire un environnement de développement Python sur Raspberry Pi
Obtenez un environnement de développement Python rapide avec Poetry
[Janvier 2020] Commençons sérieusement le «conteneur de développement» explosif avec le conteneur distant de VS Code.
Créer un environnement de développement TensorFlow sur Amazon EC2 avec une copie de commande
Créez un environnement de développement local avec WSL + Docker Desktop pour Windows + docker-lambda + Python
Créer un environnement de développement Python basé sur GVim sur Windows 10 (3) GVim8.0 et Python3.6
Créer un environnement de développement Django à l'aide de pyenv-virtualenv sur Mac
Créez un environnement virtuel python avec virtualenv et virtualenvwrapper
Créez un environnement de développement local pour Laravel6.X sur votre Mac
Réparer un environnement de développement cassé avec la migration des non-conformistes (Remarque)
Créez un environnement python pour chaque répertoire avec pyenv-virtualenv
Créez un environnement de développement python avec vagrant + ansible + fabric
Créer un environnement de développement Python basé sur GVim sur l'installation de Windows 10 (1)