From a4806408be756705a38581534d6fdfd5c1a24c4e Mon Sep 17 00:00:00 2001 From: Yuri Trukhin Date: Mon, 15 Apr 2024 12:27:27 +0200 Subject: [PATCH] Support for JetBrains IDEs in Dev Container (including the ability to run on a remote Docker server where the bind command does not allow the devcontainer to start). --- .devcontainer/jetbrains/Dockerfile | 17 +++++++++++++++++ .devcontainer/jetbrains/devcontainer.json | 19 +++++++++++++++++++ .devcontainer/jetbrains/initializeCommands.sh | 3 +++ .devcontainer/{ => vscode}/Dockerfile | 0 .devcontainer/{ => vscode}/devcontainer.json | 0 5 files changed, 39 insertions(+) create mode 100644 .devcontainer/jetbrains/Dockerfile create mode 100644 .devcontainer/jetbrains/devcontainer.json create mode 100755 .devcontainer/jetbrains/initializeCommands.sh rename .devcontainer/{ => vscode}/Dockerfile (100%) rename .devcontainer/{ => vscode}/devcontainer.json (100%) diff --git a/.devcontainer/jetbrains/Dockerfile b/.devcontainer/jetbrains/Dockerfile new file mode 100644 index 000000000..8d1dd0395 --- /dev/null +++ b/.devcontainer/jetbrains/Dockerfile @@ -0,0 +1,17 @@ +ARG VARIANT=17-bullseye +FROM mcr.microsoft.com/vscode/devcontainers/java:0-${VARIANT} + +RUN groupadd -r developer +RUN useradd -r -g developer -d /home/developer -s /bin/bash developer +RUN mkdir -p /home/developer && chown developer:developer /home/developer + +ARG NODE_VERSION="none" +RUN if [ "${NODE_VERSION}" != "none" ]; then su vscode -c "umask 0002 && . /usr/local/share/nvm/nvm.sh && nvm install ${NODE_VERSION} 2>&1"; fi + +ARG USER=vscode +VOLUME /home/$USER/.m2 +VOLUME /home/$USER/.gradle + +ARG JAVA_VERSION=17.0.7-ms +RUN sudo mkdir /home/$USER/.m2 /home/$USER/.gradle && sudo chown $USER:$USER /home/$USER/.m2 /home/$USER/.gradle +RUN bash -lc '. /usr/local/sdkman/bin/sdkman-init.sh && sdk install java $JAVA_VERSION && sdk use java $JAVA_VERSION' diff --git a/.devcontainer/jetbrains/devcontainer.json b/.devcontainer/jetbrains/devcontainer.json new file mode 100644 index 000000000..b562abc25 --- /dev/null +++ b/.devcontainer/jetbrains/devcontainer.json @@ -0,0 +1,19 @@ +{ + "name": "Petclinic", + "dockerFile": "Dockerfile", + "runArgs": [ + "--mount", + "type=volume,source=maven-repo,target=/home/developer/.m2", + "--mount", + "type=volume,source=gradle-home,target=/home/developer/.gradle", + "--env", + "GRADLE_USER_HOME=/home/developer/.gradle" + ], + "initializeCommand": "./.devcontainer/jetbrains/initializeCommands.sh", + "postCreateCommand": "sudo chown developer:developer /home/developer/.m2 /home/developer/.gradle", + "remoteUser": "developer", + "features": { + "docker-in-docker": "latest" + }, + "forwardPorts": [8080] +} diff --git a/.devcontainer/jetbrains/initializeCommands.sh b/.devcontainer/jetbrains/initializeCommands.sh new file mode 100755 index 000000000..58d58b838 --- /dev/null +++ b/.devcontainer/jetbrains/initializeCommands.sh @@ -0,0 +1,3 @@ +#!/bin/bash +docker volume inspect maven-repo >/dev/null 2>&1 || docker volume create maven-repo +docker volume inspect gradle-home >/dev/null 2>&1 || docker volume create gradle-home diff --git a/.devcontainer/Dockerfile b/.devcontainer/vscode/Dockerfile similarity index 100% rename from .devcontainer/Dockerfile rename to .devcontainer/vscode/Dockerfile diff --git a/.devcontainer/devcontainer.json b/.devcontainer/vscode/devcontainer.json similarity index 100% rename from .devcontainer/devcontainer.json rename to .devcontainer/vscode/devcontainer.json