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の拡張プロトコルサポートを提供するために注目に値します。 心を探求するために:



Habréのgroovy-grape-aetherに関する記事


私にとって、これは私がよく使う便利なツールです。 例として、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コンテナを起動しました。



All Articles