Pour ces personnes, nous présenterons comment utiliser la fonction d'extension "Remote-Containers" qui vous permet de créer et d'exploiter facilement un environnement de développement à l'aide de conteneurs Docker de VS Code.
L'extension VS Code "Remote-Containers" lance VS Code dans un conteneur et communique avec VS Code sur la machine hôte afin que vous puissiez développer dans un conteneur comme si vous développiez dans un environnement local. est.
La configuration détaillée est indiquée dans le document officiel.
(https://code.visualstudio.com/assets/docs/remote/containers/)
De plus, il est possible de gérer plusieurs environnements de développement à partir de VS Code et de lancer un conteneur en un seul clic.
(https://code.visualstudio.com/assets/docs/remote/containers/)
Par conséquent, lors du démarrage du développement, il n'est pas nécessaire de démarrer le conteneur à partir d'une commande, d'attacher un shell et d'entrer dans le conteneur.
Vous pouvez commencer à développer dans un conteneur comme vous le feriez pour VS Code dans votre environnement local et commencer à développer.
La configuration système requise est la suivante.
- Windows: Docker Desktop 2.0+ on Windows 10 Pro/Enterprise. (Docker Toolbox is not supported.)
- macOS: Docker Desktop 2.0+.
- Linux: Docker CE/EE 18.06+ and Docker Compose 1.21+. (The Ubuntu snap package is not supported.)
Docker
Tout d'abord, installez Docker, mais omettez-le ici.
J'ai installé Docker Desktop dans un environnement Windows, mais j'ai connu des difficultés inimaginables.
Ouvrez le menu d'extension avec ctrl + shift + X sur VS Code, recherchez "Remote-Containers" et installez.
C'est officiel de Microsoft, donc c'est sûr (?).
Il existe également une extension appelée Développement à distance qui combine Remote-Containers / Remote-SSH / Remote-WSL, donc ce n'est pas grave.
git
Il existe un exemple de fichier de configuration dans le référentiel Microsoft officiel sur Github, il est donc facile de le cloner.
Alors installons git (étape omise).
L'exemple de référentiel est ci-dessous.
Cette fois, j'utiliserai Python, mais il y a aussi node.js, java, go, etc.
Tout ce dont vous avez besoin est un Dockerfile et devcontainer.json sous le répertoire .devcontainer, vous pouvez donc apporter exactement cela.
Il existe une fonction de Remote-Containers appelée "Try a Sample", et vous pouvez essayer d'utiliser ces référentiels sans clonage, mais c'est un peu ennuyeux car la construction de l'image docker démarre soudainement.
Par exemple, supposons que vous souhaitiez créer un environnement de développement pour une application Python.
Ouvrez le répertoire du projet à partir de VS Code avec la structure de répertoires comme suit.
project/
└ .devcontainer/
├ Dockerfile
└ devcontainer.json
└ .git/
└ package/
├ __init__.py
├ __main__.py
└ module.py
├ requirements.txt
└ .gitignore
Cliquez sur le menu f1 ou sur l'icône verte qui apparaît en bas à gauche et sélectionnez "Remote-Containers: Open Folder in Container ...".
(https://code.visualstudio.com/assets/docs/remote/containers/)
Ensuite, VS Code lit le Dockerfile et devcontainer.json sous .devcontainer et lance le conteneur Docker en fonction des paramètres.
Examinons maintenant le contenu de Dockerfile et de devcontainer.json pour comprendre exactement ce qui se passe.
Dockerfile
Il s'agit d'un Dockerfile ordinaire, et bien qu'il n'y ait rien de spécial à ce sujet, il fait un bon travail de définition des privilèges utilisateur.
#-------------------------------------------------------------------------------------------------------------
# Copyright (c) Microsoft Corporation. All rights reserved.
# Licensed under the MIT License. See https://go.microsoft.com/fwlink/?linkid=2090316 for license information.
#-------------------------------------------------------------------------------------------------------------
FROM python:3
Cet élément spécifie l'image qui sert de base à la création de l'image Docker.
Si vous souhaitez spécifier la version de python en détail, définissez ceci sur python: 3.7.
ARG USERNAME=vscode
ARG USER_UID=1000
ARG USER_GID=$USER_UID
RUN apt-get update \
&& apt-get -y install --no-install-recommends apt-utils dialog 2>&1 \
&& apt-get -y install git iproute2 procps lsb-release \
~~~
&& groupadd --gid $USER_GID $USERNAME \
&& useradd -s /bin/bash --uid $USER_UID --gid $USER_GID -m $USERNAME \
&& apt-get install -y sudo \
&& echo $USERNAME ALL=\(root\) NOPASSWD:ALL > /etc/sudoers.d/$USERNAME\
&& chmod 0440 /etc/sudoers.d/$USERNAME \
Ici, les paramètres apt-get et les autorisations utilisateur sont définis.
En bref, il semble qu'un utilisateur nommé vscode qui a l'autorité sur sudo puisse gérer le conteneur.
devcontainer.json
Voici le miso de cette extension.
"name": "Python 3",
"context": "..",
"dockerFile": "Dockerfile",
"settings": {
"terminal.integrated.shell.linux": "/bin/bash",
"python.pythonPath": "/usr/local/bin/python",
"python.linting.enabled": true,
"python.linting.pylintEnabled": true,
"python.linting.pylintPath": "/usr/local/bin/pylint"
},
"appPort": [ 9000 ],
"postCreateCommand": "sudo pip install -r requirements.txt",
"remoteUser": "vscode",
"extensions": [
"ms-python.python"
]
}
Les éléments écrits au format json ici sont les paramètres de l'extension Remote-Containers.
Selon la documentation officielle, de nombreux autres éléments peuvent être définis.
Par défaut, le répertoire racine du projet est lié à l'espace de travail / du conteneur,
{
"workspaceFolder": "/home/vscode",
"workspaceMount": "type=bind,source=${localWorkspaceFolder},target=/home/vscode/project"
}
Si vous le faites, le répertoire par défaut lié à / home / vscode et ouvert par VS Code sera également là.
{
"containerEnv": {
"WORKSPACE": "/home/vscode"
}
}
L'élément containerEnv vous permet de définir des variables d'environnement qui peuvent être utilisées dans le conteneur.
{
"runArgs": [
"--name=project_dev_container"
]
}
Vous pouvez également spécifier directement des options lors du lancement du conteneur dans l'élément runArgs.
En fait, VS Code lit ce devcontainer.json, ajoute diverses options et docker s'exécute pour lancer le conteneur.
À ce moment, la liste des chaînes de caractères spécifiées dans l'élément runArgs est ajoutée séparées par des espaces.
Pour plus d'informations: Développement dans un conteneur - référence devcontainer.json
git
Si .git / est inclus dans le répertoire du projet pour être lié au conteneur, vous pouvez utiliser la fonction de gestion de version VS Code dans le conteneur tel quel.
La fonction de gestion de version de VS Code est très pratique, et vous pouvez faire git add, git commit, git push, etc. avec l'interface graphique.
Cependant, chaque fois que vous essayez de communiquer avec un référentiel mote à l'intérieur d'un conteneur, vous devez vous authentifier avec Github.
Cependant, il a la possibilité de partager notre code VS et nos informations d'identification git avec la machine hôte.
Developing inside a Container - Sharing Git credentials with your container
Tout d'abord, enregistrez le nom d'utilisateur et l'adresse e-mail Github dans le fichier .gitconfig avec la machine hôte.
$ git config --global user.name "Your Name"
$ git config --global user.email "your.email@address"
Ces paramètres sont écrits dans le .gitconfig dans la racine de l'utilisateur, mais il semble que VS Code les copiera automatiquement dans le conteneur.
Viennent ensuite les informations d'authentification telles que les mots de passe, mais il existe deux façons de les définir.
Si vous vous authentifiez avec un identifiant et un mot de passe en utilisant la communication https, enregistrez le mot de passe dans l'assistant d'informations d'identification de git et les paramètres seront synchronisés avec le conteneur.
Caching your GitHub password in Git
$ git config --global credential.helper wincred
Pour l'authentification avec ssh, il semble que les paramètres soient synchronisés si la clé publique pour Github est enregistrée dans l'agent SSH sur la machine hôte.
Avec PowerShell
ssh-add $HOME/.ssh/github_rsa
Ensuite, la clé sera enregistrée dans l'agent SSH.
Cependant, dans de nombreux cas, l'agent SSH n'est pas démarré, auquel cas vous entrez PowerShell avec des privilèges d'administrateur.
Set-Service ssh-agent -StartupType Automatic
Start-Service ssh-agent
Get-Service ssh-agent
Ou vous pouvez le définir dans l'interface graphique à partir de Services> Propriétés de l'agent d'authentification OpenSSH.
Pour plus d'informations, consultez [Utilisation de Windows 10 ssh-agent avec l'invite de commande, WSL, Git Bash pour activer # ssh-agent-](https://qiita.com/q1701/items/3cdc2d7ef7a3539f351d#ssh-agent-% E3% 81% AE% E6% 9C% 89% E5% 8A% B9% E5% 8C% 96) etc.
AWS Access Key
Lorsque j'essaie de communiquer avec AWS S3 depuis l'intérieur du conteneur, j'obtiens un problème de clé d'accès.
J'ai accès aux informations clés dans le répertoire .aws dans la racine utilisateur de la machine hôte et je souhaite également les lire dans le conteneur.
Cependant, contrairement au cas de git, il ne semble pas se charger automatiquement.
Par conséquent, vous devez le copier de l'extérieur du conteneur vers le conteneur une fois à l'aide de docker cp.
docker cp $HOME/.aws {Nom du conteneur}:home/vscode
Ici, il est pratique d'avoir un nom pour le conteneur à lancer par Remote-Containers.
Dans l'élément runArgs de devcontainer.json précédemment,
{
"runArgs": [
"--name=project_dev_container"
]
}
C'est une bonne idée de donner au conteneur un nom comme celui-ci.
Lorsque vous l'utilisez réellement, vous pouvez gérer le conteneur de développement presque de la même manière que vous le feriez normalement avec VS Code.
De plus, lors du développement avec Python, il est normal de préparer un environnement virtuel, mais en construisant l'environnement à l'intérieur du conteneur, ce n'est pas nécessaire.
En effet, chaque projet utilise un conteneur différent, de sorte que l'installation de packages globalement ne pollue pas l'environnement.
Et comme l'image est préparée pour chaque version de Python, vous pouvez la spécifier en fonction de l'environnement de production.
(Cette zone est un mérite d'utiliser docker plutôt que Remote-Containers)
Vous pouvez ouvrir et basculer entre ces environnements de développement en un seul clic.
Cette extension lie également automatiquement les ports, de sorte que vous pouvez utiliser votre serveur local pour le développement frontal sans stress.
Cependant, par exemple, node.js démarrera un serveur local en spécifiant le port 3000, de sorte que le port doit être publié sur la machine locale.
Dans ce cas, dans devcontainer.json
{
"appPort": [ 3000 ]
}
Mettons-le comme ça.
Documentation officielle, longue
Après avoir lu cet article, j'ai commencé à utiliser Remote-Containers. Merci!
Recommended Posts