![](https://habrastorage.org/files/a1d/6ab/e0e/a1d6abe0e88d459cafac028f9c38a7a9.jpg)
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コンテナを起動しました。