[PYTHON] Utilisez le conteneur de développement Docker facilement avec VS Code

introduction

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.

La grandeur de cette extension

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.)

Construction d'environnement pour la construction d'environnement

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.

Extension de code VS

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.

vscode-remote-try-python

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.

Construction d'environnement de développement

Structure du projet

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

Autres paramètres individuels

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.

Grand voyage

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.

référence

Documentation officielle, longue

Après avoir lu cet article, j'ai commencé à utiliser Remote-Containers. Merci!

Recommended Posts

Utilisez le conteneur de développement Docker facilement avec VS Code
[Django] Créez rapidement un environnement de développement de conteneur Django (Docker) à l'aide de VS Code + Remote Containers
Utiliser python avec docker
Utiliser Python dans un environnement Anaconda avec VS Code
Python avec VSCode (Windows 10)
Déboguer Python avec VS Code
Utilisez prefetch_related commodément avec Django
Créer un environnement de développement VS Code + Docker avec une machine virtuelle Linux
[Django] Créez rapidement un environnement de développement de conteneur Django (Docker) avec PyCharm
[Venv non requis] L'environnement de développement Python le plus puissant créé avec des conteneurs distants [VS Code / Docker]
Développement Google AppEngine avec Docker
Essayez d'exécuter Jupyter avec VS Code
Reconstruisez l'environnement de développement de Django avec Docker! !! !! !!
Développement d'applications avec Docker + Python + Flask
Installez python avec mac vs code
Comment déboguer un programme Python en se connectant à distance à un conteneur Docker dans un environnement WSL2 avec VS Code
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)
Utiliser le chiffrement de la bibliothèque de chiffrement avec l'image Python de Docker
Passez PYTHONPATH en 1 minute avec VS Code
Afficher le graphique japonais avec VS Code + matplotlib
Pylint de VSCode est ennuyeux avec l'importation! !! !! !!
Comment utiliser VS Code (serveur de code) avec Google Colab en seulement 3 lignes
Flutter dans Docker - Comment créer et utiliser un environnement de développement Flutter dans un conteneur Docker
Compilation croisée de Raspberry Pi et création d'un environnement de développement de débogage à distance avec VS Code
Construction d'un environnement d'analyse de données Python facile avec Windows10 Pro x VS Code x Docker
Créer un environnement de développement de langage C avec un conteneur
J'ai essayé Flask avec des conteneurs distants de VS Code
Environnement virtuel / package Python (Windows10) avec VSCode
Déboguer avec VS Code en utilisant Boost Python Numpy
[Python] Créer un environnement de développement Django avec Docker
Utilisez l'API Kaggle dans un conteneur Docker
Utiliser python dans le conteneur Docker comme interpréteur Pycharm
Créer un environnement d'exécution python avec VS Code
Configurer l'environnement de développement TinyGo pour VS Code
Préparation à l'utilisation de Tensorflow (Anaconda) avec Visual Studio Code
Paramètres VS Code pour le développement en Python avec achèvement
[Mac OS] Utilisez Kivy avec PyCharm! [Développement d'applications Python]
Relancer la recherche de symboles dans l'espace de travail Python avec VS Code
Environnement de développement Python avec Windows + Anaconda3 + Visual Studio Code
Construction facile de code C ++ avec CMake sur Docker
Environnement de développement Python avec Windows + Python + PipEnv + Visual Studio Code
Activez l'intelligence des bibliothèques externes avec Pipenv + VSCode
Déboguer à distance l'environnement Django créé avec docker-compose avec VS Code
Créez un environnement de développement avec Poetry Django Docker Pycharm