So stellen Sie VSCode Remote Containers in einem Docker-Compose-Projekt bereit, das sowohl die API als auch die Front-App enthält

Hintergrund

Angenommener Leser

Projektkonfiguration vor Änderung

Ordnerstruktur

project-docker ┣ Projekt-API (Rails Repository) ┃ ┣ app ┃ ┣ ... ┃ ┗ Gemfile ┣ Projektfront (Next.js Repository) ┃ ┣ .next ┃ ┣ ... ┃ ┗ package.json ┣ docker-compose.yml ┣ Dockerfile.backend ┗ Dockerfile.frontend

Wenn Sie direkt unter "Projekt-Docker" auf "Docker-Compose Up" klicken, werden API und Front (und DB) gleichzeitig gestartet und Sie werden zufrieden sein.

docker-compose.yml Unten ist docker-compose.yml. Derzeit gibt es mindestens drei "Dienste":

docker-compose.yml(Teilweise weggelassen)


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"

Installationsverfahren für Remote-Container

Annahme

--VScode und Docker sind bereits installiert

Verfahren

Nehmen wir als Beispiel die API-Seite. Machen Sie dasselbe für die Vorderseite.

1. Erstellen Sie automatisch ".devcontainer"

  1. Öffnen Sie "project-docker" aus "open workspace" von "file"
  2. Klicken Sie unten links auf dem Bildschirm auf das Symbol Remote - Container und wählen Sie "In Container erneut öffnen"
  3. Wählen Sie "From docker-compose.yml"
  4. Wählen Sie "Backend" mit einem Dienst auswählen
  5. Direkt unter project-docker werden ein .devcontainer-Verzeichnis und zwei Einstellungsdateien, devcontainer.json und docker-compose.yml, darunter erstellt. Bewegen Sie sich unter `

2. Ändern Sie .devcontainer / devcontainer.json

Die .devcontainer / devcontainer.json unmittelbar nach der automatischen Erstellung lautet wie folgt.

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"
}

Schreiben Sie dies wie folgt um.

devcontainer.json(Nur der korrigierte Teil)


{
	"name": "project-api-docker", //Mach es zu einem schönen Namen
	"dockerComposeFile": [
		"../../docker-compose.yml", //Der Pfad wurde korrigiert, da der Ordner verschoben wurde
		"docker-compose.extend.yml" // .Add verlängern (ich brauche es nicht, wenn es nur funktioniert, aber ich habe den Namen aus Gründen der Klarheit geändert)
	],
	"runServices": [
		"db",
		"backend",
		//Fügen Sie hinzu, wenn es andere Dienste wie stmp gibt."frontend"Es ist wichtig, nicht einzuschließen. Wenn leer, werden standardmäßig alle Dienste gestartet.
	],
	"workspaceFolder": "/workspace/project-api/", //Arbeitsbereichsprojekt-Mach es api
}

3. Ändern Sie "docker-compose.yml"

Die .devcontainer / docker-compose.yml unmittelbar nach der automatischen Erstellung lautet wie folgt.

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"

** Benennen Sie die Datei zunächst in .devcontainer / docker-compose.extend.yml ** um. Dies macht es leicht zu erkennen, dass .devcontainer / docker-compose.extend.yml nur einige Elemente von docker-compose.yml direkt unter project-docker überschreibt. Weil.

Schreiben Sie dann den Inhalt von ".devcontainer / docker-compose.extend.yml" wie folgt um.

yml:docker-compose.extend.yml(Nur der korrigierte Teil)


services:
  backend:    
    volumes:
      - .:/workspace:cached
      - ~/.gitconfig:/root/.gitconfig #Lokal.Home-Verzeichnis auf der Containerseite, um die gitconfig-Einstellungen im Container freizugeben(in diesem Fall/root)Montieren auf.
      - ~/.ssh:/root/.ssh #Lokal.So teilen Sie die SSH-Einstellungen in einem Container(Folgendes wird weggelassen)
      - /var/run/docker.sock:/var/run/docker.sock #Ich kommentiere nicht, aber ich verstehe die Notwendigkeit nicht wirklich. Bitte sag mir ...
    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" 

4. Öffnen Sie mit Remote - Containern

  1. Nachdem die Einstellungen abgeschlossen sind, öffnen Sie das geklonte api-okapi (oder front-okapi) direkt unter diesem Repository unter "Arbeitsbereich öffnen" von "Datei".
  2. Klicken Sie auf das Symbol unten links und wählen Sie "Remote-Container: In Container erneut öffnen".
  3. Der Container startet automatisch und der VS-Code öffnet sich im Container. (Wenn Sie bauen müssen, wird es lange dauern)

Unterschiede auf der Vorderseite

devcontainer.json(Nur der korrigierte Teil)


{
	"runServices": [
		"frontend"
		// "db",
		// "backend",
	],
}

Einstellungen nach der Installation

Ändern Sie die Einstellungen des VScode-Editors

--Beispiel: Lassen Sie ESLint das Format jedes Mal ausführen, wenn Sie eine .ts-Datei speichern

jsonc:.devcontainer/devcontainer.json


{
	"settings": {
		"editor.codeActionsOnSave": {
			"source.fixAll.eslint": true //Formatieren Sie beim Speichern einer Datei mit ESLint
		}
		...
	},
}

Ändern Sie die VScode-Plug-In-Einstellungen

--Beispiel: Fügen Sie das VScode-Plug-In für eslint ein

jsonc:.devcontainer/devcontainer.json


{
	"extensions": [
		"dbaeumer.vscode-eslint",
		...
	],
}

Bash-Einstellungen ändern

--Beispiel: Fügen Sie das Abschlussskript des Befehls git ein

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

Referenz

VSCode Remote Container bezogen

Einstellungen nach der Installation

Recommended Posts

So stellen Sie VSCode Remote Containers in einem Docker-Compose-Projekt bereit, das sowohl die API als auch die Front-App enthält
So zeigen Sie eine Browser-Vorschau mit VS-Code an
Entwicklung in einem Container mit --privileged und / sbin / init, der in VSCode Remote Containers übergeben wurde
So implementieren Sie einen Job, der die Java-API in JobScheduler verwendet
So stellen Sie eine App bereit, die ein lokales Glas auf Heroku verweist
So interagieren Sie mit einem Server, der die App nicht zum Absturz bringt
So testen Sie eine private Methode und verspotten sie teilweise in Java
Führen Sie ein Spring Boot-Projekt mit VS-Code aus
Erstellen Sie in CentOS8.2 einen privaten / öffentlichen Schlüssel und stellen Sie mit VS Code eine Verbindung zu SSH her
So führen Sie die SpringBoot-App als Dienst aus
So erstellen Sie ein Spring Boot-Projekt in IntelliJ
So konvertieren Sie A in a und a in A mit logischem Produkt und Summe in Java
[Rails] So speichern Sie die Anforderungs-URL eines Benutzers, der nicht angemeldet ist, vorübergehend und kehren nach der Anmeldung zu dieser URL zurück
So erstellen Sie ein Platzhalterteil zur Verwendung in der IN-Klausel
So legen Sie den Zeichencode und den Zeilenvorschubcode in Eclipse fest
Aufrufen und Verwenden der API in Java (Spring Boot)
So deaktivieren Sie Set-Cookie über die API auf der Vorderseite
So stellen Sie eine Kotlin (Java) -App auf AWS fargate bereit
So wählen Sie ein bestimmtes Datum anhand des Codes im FS-Kalender aus
Erstellen Sie eine Spring Boot-Webanwendung, die IBM Cloudant verwendet, und stellen Sie sie in Cloud Foundry bereit
Speicherort der Methodendefinition Zusammenfassung der zu überprüfenden Informationen Wenn im Projekt und in Rails / Gem definiert