83620


VSCodeを使って、SpringbootのWEBアプリを作成しました。  
<https://tech-lab.sios.jp/archives/19941>

VSCodeのデバッグと実行で、  
HelloController.javaでブレイクポイントがはれることを確認できたので  
jarファイルを作成し、Window上でDockerで動くことを確認しました。

次にDocker上の環境をデバッグできないものかと、調べていると  
VSCodeの拡張機能であるRemote Developmentを使えばよさそうでしたので、以下を参考に  
devcontainer.jsonとDockerファイルを作成しました。  
<https://speakerdeck.com/noriyukitakei/visual-studio-code-plus-docker-plus-
remote-developmentdetomcatshang-falsewebapuriwochao-jian-dan-
nidebatugu?slide=38>

VSCodeのRemote Development拡張機能をインストールしたので  
VSCode左下に現れた「＞＜」のようなボタンを押下し、  
Reopen in Containerを選択したのですが、VSCodeが再起動したのち以下のエラーが発生してしまいます。

[code]

    an error occurred building the image
    
[/code]

以下のファイルで足りていない設定や、誤りなどありますでしょうか？  
プロジェクトフォルダ.devcontainer  
devcontainer.json

[code]

    {
      "name": "test",
     
      "dockerFile": "Dockerfile",
     
      "forwardPorts": [8080],
     
      # コンテナに入ったときに最初にここで指定したものがカレントディレクトリになります。
      "workspaceFolder": "/opt/project",
     
      # ホストOSのVisual Studio Codeのプロジェクト直下のディレクトリをコンテナの/opt/projectディレクトリにマウント>します。
      "mounts": [
        "source=${localWorkspaceFolder},target=/opt/project,type=bind,consistency=cached"
      ]
     
      # コンテナが生成されたときに、コンテナ側にインストールする拡張機能です。
      # これを指定しないと、コンテナが再生成すると拡張機能が消えます。
      # 今回はJava Extension PackとTomcat for Javaをインストールします。
      "extensions": [
        "adashen.vscode-tomcat",
        "vscjava.vscode-java-pack"
      ]
    }
    
[/code]

Dockerfile

[code]

    FROM openjdk:14.0.1
    
    #COPY target/demo-0.0.1-SNAPSHOT.jar demo-0.0.1.jar
    
    #ENTRYPOINT ["java","-jar","/demo-0.0.1.jar"]
    # ローカルのソースコードをマウントするためのディレクトリを作成します。 RUN mkdir /opt/project
    
    # Mavenをインストールします。 RUN apt-get update && \
        apt-get -y install maven
    
[/code]


CC BY-SA 4.0
2021-11-14T12:06:53.897
83614
2021-11-16T01:27:39.163
12842
question
docker vscode spring-boot
springbootのWEBアプリをDocker上でデバッグしたい（VS CodeのRemote Development）


質問文中からリンクされているスライドの説明は、少し古く、かつ Tomcat のものなので今回行おうとしていることの参考として適していないように思われます。

  * [Developing inside a Container using Visual Studio Code Remote Development](https://code.visualstudio.com/docs/remote/containers)

をベースにして、 Spring Boot 向け機能拡張を追加インストールすれば良さそうです。

* * *

Spring Boot の Maven プロジェクト作成済み、 Docker Desktop for Windows セットアップ済みとします。

  1. 機能拡張 [Remote - Containers](https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.remote-containers) をローカルの VSCode にインストールします(補足: [質問文中のスライド](https://speakerdeck.com/noriyukitakei/visual-studio-code-plus-docker-plus-remote-developmentdetomcatshang-falsewebapuriwochao-jian-dan-nidebatugu?slide=32)に従って機能拡張 [Remote Development](https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.vscode-remote-extensionpack) をインストール済みであれば、Remote - Containers も導入されているはずです)。
  2. コマンドパレット(`Ctrl` \+ `Shift` \+ `P`)で " **Remote-Containers: Add Development Container Configuration Files...** " を選択します。ウィザードを進め、構築する環境を設定します。例えば Java 11 の Maven 環境であれば: 
    * "Java > 11 > None(Node をインストールしない) > Install Maven にチェック > (何もチェックしない) "
  3. ウィザードを完了させると、 `.devcontainer` ディレクトリに 2 ファイル `devcontainer.json`, `Dockerfile` が作成されます。 `devcontainer.json` を編集し、 機能拡張 [Spring Boot Extension Pack](https://marketplace.visualstudio.com/items?itemName=Pivotal.vscode-boot-dev-pack) をインストールするように次の通り `Pivotal.vscode-boot-dev-pack` を追加します: 
    * 
[code]          "extensions": [

            "vscjava.vscode-java-pack",
            "Pivotal.vscode-boot-dev-pack"
          ],
        
[/code]

  4. コマンドパレットで " **Remote-Containers: Open Folder in Container...** " を選択します。 Docker イメージが構築され、コンテナが起動します。

* * *

(コメントを受けて追記)

上記の手順で作成した環境は、ホスト(Windows)のディレクトリをコンテナ側でマウントし、双方で共有した状態になっています。

本文冒頭に記載したリンク先では、共有方式以外についても説明があります。

> While using this approach to [bind
> mount](https://docs.docker.com/storage/bind-mounts/) the local filesystem
> into a container is convenient, it does have some performance overhead on
> Windows and macOS. There are [some
> techniques](https://code.visualstudio.com/remote/advancedcontainers/improve-
> performance) that you can apply to improve disk performance, or **you
> can[open a repository in a container using a isolated container
> volume](https://code.visualstudio.com/docs/remote/containers#_quick-start-
> open-a-git-repository-or-github-pr-in-an-isolated-container-volume)
> instead**.


CC BY-SA 4.0
2021-11-14T15:46:04.647
83620
2021-11-16T01:27:39.163
2021-11-16T01:27:39.163
2808
2808
83614
answer