--Lors du lancement d'un nouveau projet en interne, il s'agit d'un plug-in de Visual Studio Code (ci-après VS Code) Remote --Containers Je voulais développer en utilisant -containers). --En utilisant docker, l'environnement d'exploitation de l'application peut être partagé au sein de l'équipe, mais ** la construction de l'environnement d'exploitation de l'éditeur est laissée à chaque membre **. Dans ce projet, il a été décidé dès le départ d'inclure plusieurs outils de vérification de syntaxe et de complétion de code tels que eslint et rubocop, donc Remote --Containers -vscode-remote.remote-containers), je voulais partager l'environnement d'exploitation de l'éditeur avec les membres avec docker pour plus d'efficacité.
docker-compose.yml
, et ce projet contient plusieurs applications (par exemple API et Front).
--Je veux pouvoir développer chaque application avec Remote --Containersproject-docker ┣ project-api (référentiel rails) ┃ ┣ app ┃ ┣ ... ┃ ┗ Gemfile ┣ project-front (référentiel Next.js) ┃ ┣ .next ┃ ┣ ... ┃ ┗ package.json ┣ docker-compose.yml ┣ Dockerfile.backend ┗ Dockerfile.frontend
Si vous appuyez sur docker-compose up
directement sous project-docker
, l'API et le front (et la base de données) démarreront en même temps et vous serez heureux.
docker-compose.yml
Ci-dessous se trouve docker-compose.yml
. Pour le moment, il existe au moins trois «services»:
docker-compose.yml(Partiellement omis)
services:
db:
image: postgres:11.5
ports:
- "5432:5432"
backend:
build:
context: .
dockerfile: Dockerfile.backend
volumes:
- ./project-api:/project-api
command: /bin/sh -c "rm -f /api-okapi/tmp/pids/server.pid && bundle exec rails s -p 3000 -b '0.0.0.0'"
ports:
- "3000:3000"
depends_on:
- db
frontend:
build:
context: .
dockerfile: Dockerfile.frontend
command: npm run dev
volumes:
- ./project-front:/project-front
ports:
- "8080:8080"
.devcontainer
pour placer le fichier de configuration de Remote --Containers, et sous celui-ci, devcontainer.json
et docker-compose. Le but est de créer deux fichiers de configuration, .extend.yml
.--VScode et docker sont déjà installés --Dans le volet Extensions VScode, Remote --Containers est déjà installé. --Une fois installé, une icône Remote --Containers sera ajoutée en bas à gauche de l'écran VScode.
Prenons le côté API comme exemple. Faites de même pour la face avant.
.devcontainer
project-docker
depuis" open workspace "de" file "From docker-compose.yml
backend
avec sélectionnez un serviceproject-docker
, un répertoire .devcontainer
et deux fichiers de paramétrage, devcontainer.json
et docker-compose.yml
, seront créés en dessous. Déplacez-vous sous `.devcontainer / devcontainer.json
Le fichier .devcontainer / devcontainer.json
immédiatement après sa création automatique est le suivant.
devcontainer.json
// If you want to run as a non-root user in the container, see .devcontainer/docker-compose.yml.
// 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.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": "backend",
// 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"
}
Réécrivez ceci comme suit.
devcontainer.json(Seule la partie corrigée)
{
"name": "project-api-docker", //Donnez-lui un joli nom
"dockerComposeFile": [
"../../docker-compose.yml", //Correction du chemin car le dossier a été déplacé
"docker-compose.extend.yml" // .Ajouter une extension (je n'en ai pas besoin si cela fonctionne, mais j'ai changé le nom pour plus de clarté)
],
"runServices": [
"db",
"backend",
//Ajoutez s'il existe d'autres services tels que stmp."frontend"Il est important de ne pas inclure. S'il est vide, tous les services seront démarrés par défaut.
],
"workspaceFolder": "/workspace/project-api/", //projet d'espace de travail-Make it api
}
docker-compose.yml
Le .devcontainer / docker-compose.yml
immédiatement après sa création automatique est le suivant.
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
backend:
# 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"
Tout d'abord, ** renommez le fichier en .devcontainer / docker-compose.extend.yml
**.
Cela permet de voir facilement que .devcontainer / docker-compose.extend.yml
est juste en train d'écraser certains éléments de docker-compose.yml
directement sous project-docker
. Car.
Ensuite, réécrivez le contenu de .devcontainer / docker-compose.extend.yml
comme suit.
yml:docker-compose.extend.yml(Seule la partie corrigée)
services:
backend:
volumes:
- .:/workspace:cached
- ~/.gitconfig:/root/.gitconfig #Local.Répertoire de base côté conteneur pour partager les paramètres gitconfig à l'intérieur du conteneur(dans ce cas/root)Monter sur.
- ~/.ssh:/root/.ssh #Local.Pour partager les paramètres SSH dans un conteneur(Ce qui suit est omis)
- /var/run/docker.sock:/var/run/docker.sock #Je ne fais pas de commentaires, mais je ne comprends pas vraiment la nécessité. S'il vous plaît dites-moi ...
command: /bin/sh -c "rm -f tmp/pids/server.pid && bundle exec rails s -p 3000 -b '0.0.0.0' ; while sleep 1000; do :; done"
――Il est particulièrement important de modifier la «commande». Si vous conservez la description d'origine, le serveur ne démarrera pas car il écrase la commande
(dans ce cas, la commande de démarrage du serveur rails) du backend
du parent docker-compose.yml
. Apportez la description originale et ajoutez while sleep 1000; do :; done
à la fin.
frontend
est inclus dans runServices
.devcontainer.json(Seule la partie corrigée)
{
"runServices": [
"frontend"
// "db",
// "backend",
],
}
depend_on
est spécifié dans le parent docker-compose.yml
, il démarrera même s'il est supprimé du paramètre runServices
.paramètres
de .devcontainer / devcontainer.json
dans chaque référentiel..vscode / settings.json
.jsonc:.devcontainer/devcontainer.json
{
"settings": {
"editor.codeActionsOnSave": {
"source.fixAll.eslint": true //Formater avec ESLint lors de l'enregistrement d'un fichier
}
...
},
}
extensions
de .devcontainer / devcontainer.json
dans chaque référentiel.jsonc:.devcontainer/devcontainer.json
{
"extensions": [
"dbaeumer.vscode-eslint",
...
],
}
.bashrc
, modifiez volume
de docker-compose.yml
, et montez-le directement sous le répertoire personnel (/ root
dans ce cas) du côté du conteneur. ..
--Dans ce qui suit, le dossier bash-config
est préparé sous project-docker
, et le montage est défini avec docker-compose.yml
de la balle parent.docker-compose.yml
frontend:
volumes:
- ./bash-config/.bashrc:/root/.bashrc
- ./bash-config/.git-completion.bash:/root/.git-completion.bash
- ./bash-config/.git-prompt.sh:/root/.git-prompt.sh
...
bash-config
sous chaque référentiel et de modifier les paramètres dans docker-compose.extend.yml
.Recommended Posts