docker
コンテナの使用中にアプリケーションを開発すると、取得できないものがあります。
Javaアプリケーションを開発しており、jdk 8ベースイメージでJavaコンテナを設定しているとしましょう。ローカルにJava 8 jdkをインストールする必要があります開発マシン。これは、使用するIDEが、Dockerコンテナではなくローカルマシン上のランタイムライブラリを検索するためです。
これは正しいですか、何か不足していますか?データベースの設定など、ドッカーコンテナで完全にできることもありますが、ローカル開発マシンで行う必要があることもあります。たとえば、Javaまたはpython。
Dockerコンテナを使用しているときにアプリケーションを開発するときに得られないものがあります。
大丈夫、これは些細なことではありません。全体像を確認してください。用語を使用したい場合は、開発パイプライン(またはCI/CDパイプラインを作成することです。 継続的統合/継続的配信)。
上記の画像は[2]
からのものです
Javaアプリケーションを開発していて、jdk 8ベースイメージでJavaコンテナをセットアップするとしますが、Java 8 jdkをインストールする必要がありますローカル開発マシン。使用するIDEは、Dockerコンテナではなく、ローカルマシン上のランタイムライブラリを検索するためです。
これは、既に述べた問題を引き起こす可能性のあるオプションです:ローカルdev環境で動作し、ライブラリ、依存関係、注意を払わずに追加したことを念頭に置いて行ったマイナーな変更を忘れたため、他の場所で失敗する可能性がありますドッカー環境に。
上記の問題を解決するアプローチは、Dockerに依存することです[3]、使用する環境をセットアップするため。つまり、何かを変更するたびに、docker build
新しいイメージとdocker run
このイメージに基づいた新しいコンテナが必要になります。他の人が述べたように、画像の構築方法を定義するには、Dockerfiles
を使用する必要があります。また、アプリケーションに異なる相互接続されたコンテナがある場合、docker-compose.yml
ファイル内でこれらすべて(ネットワーク、リンク、依存関係)を定義する必要があります。ビルドと実行の反復プロセスは、IDEの仕事になります...
[1]
から:
IDE
Dockerバージョンは、Dockerで開発するためのネイティブIDEを提供しません。主なインターフェイスはコマンドラインAPIです。ただし、ほとんどの主要なIDE(NetBeans、Eclipse、IntelliJ、Visual Studio)は、プラグインまたはアドオンを介してDockerをある程度サポートしています。
たとえば、[2]
から:
ケース(IDE、言語...)に応じていくつかのガイドラインを見つけることができます:
このアプローチは、「ドッカーコンテナーでの開発」というタイトルと一致すると思います。コード(IDEを使用)では、これはコンテナに直接影響します。たぶんこれはケースで機能し、他のいくつかのケースでは制限があります。あなたの評価を行い、あなたの道を選択するのはあなた次第です。
私の情報源は次のとおりです。
[1]
Dockerリファレンスアーキテクチャ:Docker EEを使用した開発パイプラインのベストプラクティス[2]
CI/CDでのDockerの探索[3]
コンテナとは? VMware Cloud-Nativeのビデオ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:
あなたの痛みを感じることができます。複数のライブラリ依存関係を持つプロジェクトを開発すると、変更が行われるたびに、ビルドプロセスの時間が非常に長くなります。これはイライラする可能性があります。
幸いなことに、maven-docker-plugin
https://github.com/spotify/docker-maven-plugin を使用してDockerFile
を記述することで、この問題を修正できます。
これにより、ホストで使用可能なライブラリの依存関係が既に保存されます。
例として、ここでオープンソースリポジトリでプルリクエストを開いています: https://github.com/iotaledger/iri/pull/481/files