web-dev-qa-db-ja.com

Dockerコンテナでの開発中にIDEを使用する

dockerコンテナの使用中にアプリケーションを開発すると、取得できないものがあります。

Javaアプリケーションを開発しており、jdk 8ベースイメージでJavaコンテナを設定しているとしましょう。ローカルにJava 8 jdkをインストールする必要があります開発マシン。これは、使用するIDEが、Dockerコンテナではなくローカルマシン上のランタイムライブラリを検索するためです。

これは正しいですか、何か不足していますか?データベースの設定など、ドッカーコンテナで完全にできることもありますが、ローカル開発マシンで行う必要があることもあります。たとえば、Javaまたはpython。

36

更新:


元の投稿:

Dockerコンテナを使用しているときにアプリケーションを開発するときに得られないものがあります。

大丈夫、これは些細なことではありません。全体像を確認してください。用語を使用したい場合は、開発パイプライン(またはCI/CDパイプラインを作成することです。 継続的統合/継続的配信)。

enter image description here

上記の画像は[2]からのものです

ローカル開発環境をセットアップする際の制限

Javaアプリケーションを開発していて、jdk 8ベースイメージでJavaコンテナをセットアップするとしますが、Java 8 jdkをインストールする必要がありますローカル開発マシン。使用するIDEは、Dockerコンテナではなく、ローカルマシン上のランタイムライブラリを検索するためです。

これは、既に述べた問題を引き起こす可能性のあるオプションです:ローカルdev環境で動作し、ライブラリ、依存関係、注意を払わずに追加したことを念頭に置いて行ったマイナーな変更を忘れたため、他の場所で失敗する可能性がありますドッカー環境に。

開発中はドッカーに固執することができます

上記の問題を解決するアプローチは、Dockerに依存することです[3]、使用する環境をセットアップするため。つまり、何かを変更するたびに、docker build新しいイメージとdocker runこのイメージに基づいた新しいコンテナが必要になります。他の人が述べたように、画像の構築方法を定義するには、Dockerfilesを使用する必要があります。また、アプリケーションに異なる相互接続されたコンテナがある場合、docker-compose.ymlファイル内でこれらすべて(ネットワーク、リンク、依存関係)を定義する必要があります。ビルドと実行の反復プロセスは、IDEの仕事になります...

IDEおよびプラグイン/アドオン

[1]から:

IDE

Dockerバージョンは、Dockerで開発するためのネイティブIDEを提供しません。主なインターフェイスはコマンドラインAPIです。ただし、ほとんどの主要なIDE(NetBeans、Eclipse、IntelliJ、Visual Studio)は、プラグインまたはアドオンを介してDockerをある程度サポートしています。

たとえば、[2]から:

enter image description here

Docker Labs-開発者向けツールのチュートリアル

ケース(IDE、言語...)に応じていくつかのガイドラインを見つけることができます:

共有ボリューム|ホットリロード|ファイル変更の「監視」

このアプローチは、「ドッカーコンテナーでの開発」というタイトルと一致すると思います。コード(IDEを使用)では、これはコンテナに直接影響します。たぶんこれはケースで機能し、他のいくつかのケースでは制限があります。あなたの評価を行い、あなたの道を選択するのはあなた次第です。

私の情報源は次のとおりです。

15
tgogos

IDEをdockerコンテナとして実行するオプションもあるため、マシンに何もインストールする必要はありません。

そのためには、次のものが必要です。
-ドッカー
-X11
-選択したIDE。

Java8を実行し、IntelliJ IDE内でgradleするこのJavaプロジェクトを見てください。

https://github.com/marioluan/Java-data-structures

セットアップは非常に簡単です。

Dockerfile

FROM openjdk:8-jdk-Alpine

# ttf-dejavu is required to render GUI under X11: https://github.com/docker-library/openjdk/issues/73
RUN apk --update add --no-cache ttf-dejavu

# install intellij
RUN wget -O /tmp/idea.tar.gz https://download-cf.jetbrains.com/idea/ideaIC-2017.3.4.tar.gz \
    && mkdir -p /usr/share/intellij \
    && tar -xf /tmp/idea.tar.gz --strip-components=1 -C /usr/share/intellij \
    && rm /tmp/idea.tar.gz

docker-compose.yml

version: '3'
services:
  intellij:
    build: .
    environment:
      - DISPLAY=$DISPLAY
    volumes:
      - /tmp/.X11-unix:/tmp/.X11-unix
      - /your/workspace:/tmp/your/workspace
      - idea_cache:/root/.IdeaIC2017.3
      - Java_cache:/root/.Java
    working_dir: $APP_ROOT
    command: /usr/share/intellij/bin/idea.sh
volumes:
  idea_cache:
  Java_cache:
14
Mario Souza

あなたの痛みを感じることができます。複数のライブラリ依存関係を持つプロジェクトを開発すると、変更が行われるたびに、ビルドプロセスの時間が非常に長くなります。これはイライラする可能性があります。

幸いなことに、maven-docker-pluginhttps://github.com/spotify/docker-maven-plugin を使用してDockerFileを記述することで、この問題を修正できます。

これにより、ホストで使用可能なライブラリの依存関係が既に保存されます。

例として、ここでオープンソースリポジトリでプルリクエストを開いています: https://github.com/iotaledger/iri/pull/481/files

1
Ahab