Dockerイメージでのjvmアプリケーションのパッキング

アプリケーション用のdockerのすべての利点、Habréで既に何度も説明されていること、およびそのアーキテクチャ。

jvmアプリケーションのパッケージングの実際的な問題を解決し、hub.docker.comで公開し、どこでも実行できるミニチュアLinux、JDK、およびアプリケーションを含むコンテナーを取得します。

ソースアプリケーション


jvmアプリケーションが複数のファイルで構成されており、定期的/自動的にイメージを生成する必要がある場合、 com.spotifyプラグインdocker-maven-pluginを使用してビルドプロセスをmavenに統合できます 。 Gradleを使用する場合、 se.transmode.gradle:gradle-dockerは、 Dockerイメージの作成に役立ちます。 githubに投稿されたmavenの例。

この出版物では、中央のMavenリポジトリーの jarを使用しています 。 これは独自のグルーブアセンブリです。これは、パッケージ化されたエーテルがGrapeの依存関係を解決し、java.net.URLの拡張プロトコルサポートを提供するために注目に値します。 心を探求するために:


私にとって、これは私がよく使う便利なツールです。 例として、jvmエージェントを実行中のJVMにロードし、crate.ioのインストーラーサイトパーサーの例...

groovy-grape-aetherがdocker suhorukov / docker-groovyイメージでも利用できるようになりました。 同様のイメージで、jvmアプリケーションをパッケージ化できます。

Dockerfile


既存のイメージに基づいて、およびどのコマンドを使用して新しいイメージを形成するかについて説明します。

frolvlad / alpine-oraclejdk8という画像を使用します。frolのおかげです。 このイメージは、Alpine Linuxイメージ+ glibcおよびOracle JDK 8u102.14に基づいています。 debian / ubuntuベースの画像に比べて十分にコンパクトです。 別の方法として、人気のあるanapsix / alpine-javaイメージが可能です。

FROM frolvlad/alpine-oraclejdk8 EXPOSE 8080 ENV GROOVY_VERSION=2.4.5.4 RUN mkdir "/usr/lib/groovy" && \ wget "http://repo1.maven.org/maven2/com/github/igor-suhorukov/groovy-grape-aether/$GROOVY_VERSION/groovy-grape-aether-$GROOVY_VERSION.jar" -O /usr/lib/groovy/groovy-grape-aether.jar ENTRYPOINT ["java","-jar","/usr/lib/groovy/groovy-grape-aether.jar"] CMD ["--help"] 

ここでは、ポート8080がコンテナ内のアプリケーションをリッスンすることを示しました。 コンテナの起動時に、-Pパラメータを指定してホストマシンの動的ポートにバインドするか、または-pパラメータを指定して、コンテナポートに対応するホストポートを指定できます。

ENTRYPOINTは、コンテナの起動時に起動するパラメータ付きコマンドを決定します。 コマンドがCMDを使用してデフォルトのパラメーターを指定することは可能です。

画像をローカルで収集します


Dockerfileコマンドがある同じディレクトリで実行します

 docker build -t docker-groovy . 

hub.docker.comに公開する


オープンソースプロジェクトがなく、画像を全世界と共有する必要がない場合は、このセクションをスキップできます。

githubでDockerfileを公開する


githubアカウントで、New Repositoryを選択し、準備されたDockerfileをそこに配置します。 この例では、 docker-groovyリポジトリーを使用します。

hub.docker.comでアセンブリを構成します


hub.docker メインページフォームに必要事項入力し、[サインアップ]をクリックして、無料アカウントを作成します。 必ずメールでアクティベートしてください。

アカウント設定で、「リンクされたアカウントとサービス」タブに移動し、githubアカウントで「Link Github」を設定します(別のオプションはBitbucketアカウントです)。

ページ上部のメニューで、[作成]-> [自動ビルドの作成]を選択し、[自動ビルドGithubの作成]をクリックして、リポジトリを選択し、Dockerfileリポジトリの場所を指定します。 次回githubリポジトリにプッシュすると、ビルドが自動的に開始されます。 アセンブリを手動で開始することもできます。

上記のすべてのアクションの結果、 hub.docker.comにそのようなプロジェクトができました

コンテナのロードと使用


使用する前に、hub.dockerから画像を取得します。

 docker pull suhorukov/docker-groovy 

そして、gitblit.groovyスクリプトパラメーターを使用してコンテナーを実行します。

 docker run -d -p 8080:8080 suhorukov/docker-groovy https://raw.githubusercontent.com/igor-suhorukov/git-configuration/master/gitblit.groovy 

アプリケーションがファイルシステム内のコンテナの外部リソース(ホストマシンディレクトリ、NFS、分散ファイルシステム)にアクセスする必要がある場合、DockerfileのVOLUMEセクションでイメージを作成するときにマウントポイントを指定する必要があります。 コンテナの分散実行と調整が必要な場合-Kubernetes / Mesos / Swarm / fabric8.io / Rancherは、これに適した、Dockerで動作するテクノロジーです。

jvmアプリケーションの例を使用して、hub.docker.comでミニチュアイメージを作成して公開し、その後、アプリケーションパラメータを使用してdockerコンテナを起動しました。

Source: https://habr.com/ru/post/J310530/


All Articles