LoginSignup
0
0
はじめての記事投稿
Qiita Engineer Festa20242024年7月17日まで開催中!

Intellij IDEAとDockerでAmazon corretto17 open jdkでの開発環境を作ってみた

Last updated at Posted at 2024-06-14

はじめに

大学の課題でeclipse+amazon corretto17という開発環境の指定が入ったjava開発をやらなきゃいけなくなりました。
IntelliJで慣れてしまっている自分にeclipse(しかも大学のLinuxに入っている英語版)での開発は地獄だったので、いっそのこと自前の開発環境を最近習ったdockerを使って構築してみようと思った次第です。
仮想環境での開発については初心者すぎる筆者が行き当たりばったりで環境構築したので間違いだらけだと思います。積極的にコメント等で指摘していただけると助かります。

Amazon corretto 17 でDev Containerを作成

IntelliJを今回使うPC(今年新調したばかり)に入れるのが初めてだったので、以下のようなwelcome画面から始めることができました。すでにプロジェクトを作成したことがある場合にはどうすればいいか、有識者の方教えていただけますと幸いです。

(6/16追記:友人によると設定の「前回のプロジェクトを開く」という項目をOFFにすれば毎回Welcome画面を出せるとのことです。)

以下の画面でDev Containerを選択し、新規Dev Container作成。

image.png

コンテナにマウントして使用したいディレクトリにあらかじめ以下のものを用意しておく。

  • .devcontainer/devcontainer.json
  • ./Dockerfile
FROM amazoncorretto:17
WORKDIR /usr/src/app
RUN yum update -y && yum install -y procps
CMD [ "java --version" ]
SHELL [ "/bin/bash", "-c" ]
devcontainer.json
{
  "name": "Java Development with Amazon Corretto 17",
  "build": {
    "dockerfile": "Dockerfile",
    "context": ".",
    "args": {
      
    }
  },
  "runArgs": [
    "-v", "C:\\Users\\username\\dirname:/usr/src/app"
  ],
  "settings": {
    
    "terminal.integrated.shell.linux": "/bin/bash"
  },
  "extensions": [
    
  ],
  "postCreateCommand": "",
  "remoteUser": "root"
}

以下の画面でローカルプロジェクトから作成、「devcontainer.jsonへのパス」にプロジェクトを作りたいディレクトリ/.devcontainer/devcontainer.jsonを指定して「コンテナーをビルドして続行」

image.png

Dockerfiledevcontainer.jsonが正しい内容で記述できていれば以下の画面になる。
image.png

続行ボタンを押すとあとはIntelliJが勝手に環境を作ってくれる。

つまづいた点

Dockerfiledevcontainer.jsonの内容について、当初は書き方をよく知らないためGithub Copilotを用いて以下のように作成していた。

FROM amazoncorretto:17
WORKDIR /usr/src/app
devcontainer.json
{
  "name": "Java Development with Amazon Corretto 17",
  "build": {
    "dockerfile": "Dockerfile",
    "context": ".",
    "args": {
      
    }
  },
  "runArgs": [
    "-v", "C:/Users/username/dirname:/usr/src/app"
  ],
  "settings": {
    
    "terminal.integrated.shell.linux": "/bin/bash"
  },
  "extensions": [
    
  ],
  "postCreateCommand": "",
  "remoteUser": "root"
}

その結果、以下のようなログとエラーメッセージによりDev Containerに接続することができなかった。

Docker に接続中... 接続済み

[+] Building 0.1s (6/6) FINISHED docker:default
=> [internal] load build definition from Dockerfile 0.0s
=> => transferring dockerfile: 81B 0.0s
=> [internal] load metadata for docker.io/library/amazoncorretto:17 0.0s
=> [internal] load .dockerignore 0.0s
=> => transferring context: 2B 0.0s
=> [1/2] FROM docker.io/library/amazoncorretto:17 0.0s
=> [2/2] WORKDIR /usr/src/app 0.0s
=> exporting to image 0.0s
=> => exporting layers 0.0s
=> => writing image sha256:f37128c0b000caabf40765e5634629ffd07c4aa2685b3 0.0s
=> => naming to docker.io/library/jb-devcontainer-java_development_with_ 0.0s

What's next:
View a summary of image vulnerabilities and recommendations → docker scout quickview
コンテナーを作成中…
com.fasterxml.jackson.databind.exc.ValueInstantiationException: Cannot construct instance of com.github.dockerjava.api.model.Binds, problem: Error parsing Bind 'C:/Users/username/dirname:/usr/src/app:rw'

そこで、devcontainer.jsonrunargsを以下のように編集した。
パスの記述をWindowsの方式に変更しただけであるが、これでパスの指定についての問題は解決してしまった。

devcontainer.json
"runArgs": [
        "-v", "C:\\Users\\username\\dirname:/usr/src/app"
        // 変更前→ "-v", "C:/Users/username/dirname:/usr/src/app"
    ]

しかし、依然以下のようなエラーによりDev Containerを正常に作成することができなかった。

Docker に接続中... 接続済み
前の Dev Container を除去中...

[+] Building 0.1s (6/6) FINISHED docker:default
=> [internal] load build definition from Dockerfile 0.0s
=> => transferring dockerfile: 136B 0.0s
=> [internal] load metadata for docker.io/library/amazoncorretto:17 0.0s
=> [internal] load .dockerignore 0.0s
=> => transferring context: 2B 0.0s
=> [1/2] FROM docker.io/library/amazoncorretto:17 0.0s
=> CACHED [2/2] WORKDIR /usr/src/app 0.0s
=> exporting to image 0.0s
=> => exporting layers 0.0s
=> => writing image sha256:a1e796c4d4bc8791b50d83152fbb3a263929132623809 0.0s
=> => naming to docker.io/library/jb-devcontainer-java_development_with_ 0.0s

What's next:
View a summary of image vulnerabilities and recommendations → docker scout quickview
コンテナーを作成中…
コンテナー ID: 96992bb508c5b354f45259df749ca84e41df251c3558e49d1e17fdf5cc1dc647
コンテナー名: '/elastic_herschel'
コンテナー '/elastic_herschel' を起動中
Dev Container 内に必要な依存関係が見つかりません: ps

GitHub Copilotに原因を訪ねたところ、コンテナ起動時にコンテナ内へpsというコマンドをインストールする必要性があるようだった。
Amazon CorrettoのDocker公式イメージはCentOSをベースにビルドされているため、yumコマンドによりコンテナをアップデート(?)するようにDockerfileを変更した。

FROM amazoncorretto:17
WORKDIR /usr/src/app
RUN yum update -y && yum install -y procps
CMD [ "java --version" ]
SHELL [ "/bin/bash", "-c" ]

その結果として前述の通りDev Containerとの接続ができた。

感想

Dockerって難しい。積極的に活用しながら体で覚えていきたいと思った。
また、GitHub Copilotの信用度がちょっとだけ上がった。
(小学生並みの感想ですみません。)

今後の展望

GitHub経由で大学のLinuxに書いたコードを共有することで、スムーズに指定環境でテストができるようにする。

割と誰でも知っている情報

JetbrainsのIDEとGitHub Copilotは多くの教育機関に属する学生には無償で提供されているので学生の皆さんはぜひとも使っていきましょう。

参考文献

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0