このチュートリアルでは、JibとそれがどのようにJavaアプリケーションのコンテナー化を単純化するかを見ていきます。

簡単なSpring Bootアプリケーションを使い、Jibを使ってDockerイメージを作成します。そして、その画像をリモートレジストリに公開します。



dockerfile

とd

__ocker

__ツールを使用したアプリケーションの起動

に関するチュートリアルも参照してください。




Jib

は、JavaアプリケーションのDockerイメージを構築するためにGoogleが管理しているオープンソースのJavaツールです。 ** ドッカーファイルを書く必要がないので、コンテナ化が簡単になります。

そして実際には、自分でdockerイメージを作成して公開するために

docker

をインストールする必要はありません** 。

GoogleはJibをMavenとGradleの両方のプラグインとして公開しています。これは、ビルドするたびにJibがアプリケーションに加えた変更をすべてキャッチすることを意味するので、素晴らしいことです。これにより、別のdocker build/pushコマンドが節約され、これをCIパイプラインに追加するのが簡単になります。

Spotifyのhttps://github.com/spotify/docker-maven-plugin[docker-maven-plugin]やhttps://github.com/spotify/dockerfile-mavenのように、他にもいくつかのツールがあります。[dockerfile-maven]プラグイン。前者は現在非推奨であり、後者は

dockerfile

を必要とします。



簡単なスプリングブートアプリケーションを取り、それをJibを使ってドッキングしましょう。

簡単なGETエンドポイントを公開します。

http://localhost:8080/greeting

これはSpring MVCコントローラを使って簡単に実行できます。

@RestController
public class GreetingController {

    private static final String template = "Hello Docker, %s!";
    private final AtomicLong counter = new AtomicLong();

    @GetMapping("/greeting")
    public Greeting greeting(@RequestParam(value="name",
        defaultValue="World") String name) {

        return new Greeting(counter.incrementAndGet(),
          String.format(template, name));
    }
}



また、デプロイ先のDockerリポジトリで認証を受けるようにローカルに設定する必要もあります。

この例では、DockerHubの認証情報を

.m2/settings.xml

** に渡します。

<servers>
    <server>
        <id>registry.hub.docker.com</id>
        <username><DockerHub Username></username>
        <password><DockerHub Password></password>
    </server>
</servers>

資格情報を提供する方法は他にもあります。

Googleが推奨する方法は、ファイルシステムに暗号化形式で資格情報を保存できるヘルパーツールを使用することです。この例では、プレーンテキストの認証情報を

settings.xml

に格納する代わりにhttps://github.com/docker/docker-credential-helpers#available-programs[docker-credential-helpers]

を使用することもできます。このチュートリアルの範囲外ですが、より安全です。



これで、

jib-maven-plugin

、またはhttps://github.com/GoogleContainerTools/jib/tree/master/jib-gradle-plugin[Gradle相当]を使用して、簡単なコマンドでアプリケーションをコンテナ化することができます。 ** :

mvn compile com.google.cloud.tools:jib-maven-plugin:0.9.10:build -Dimage=$IMAGE__PATH

ここで、IMAGE__PATHはコンテナレジストリ内のターゲットパスです。

たとえば、

baeldungjib/spring-jib-app

という画像を

DockerHub

にアップロードするには、次のようにします。

export IMAGE__PATH=registry.hub.docker.com/baeldungjib/spring-jib-app

以上です!これにより、アプリケーションのdockerイメージが構築され、それが

DockerHub

にプッシュされます。

リンク:/uploads/JibDocker-1-1024×640-100×63.jpg%20100w[]

  • もちろん、



    Google Container Registry

    またはhttps://aws.amazon.com/ecr/[Amazon Elastic Container Registryに画像をアップロードできます]似たような方法で** 。


6. Mavenコマンドの単純化

また、他のMavenプラグインと同様に、

pom

にプラグインを設定することで初期コマンドを短縮することもできます。

<project>
    ...
    <build>
        <plugins>
            ...
            <plugin>
                <groupId>com.google.cloud.tools</groupId>
                <artifactId>jib-maven-plugin</artifactId>
                <version>0.9.10</version>
                <configuration>
                    <to>
                        <image>${image.path}</image>
                    </to>
                </configuration>
            </plugin>
            ...
        </plugins>
    </build>
    ...
</project>

この変更により、mavenコマンドを単純化できます。

mvn compile jib:build

……
……



デフォルトでは、

JibはFROMやENTRYPOINTのように、欲しいものについて

妥当な推測をいくつか行います。

私たちのアプリケーションにいくつかの変更を加えましょう。

まず、Spring Bootはデフォルトでポート8080を公開しています。

ただし、アプリケーションをポート8082で実行し、コンテナを通して公開できるようにしたいとします。

もちろん、Bootで適切な変更を加えます。そしてその後、Jibを使用して画像内でそれを露出可能にすることができます。

<configuration>
    ...
    <container>
        <ports>
            <port>8082</port>
        </ports>
    </container>
</configuration>

あるいは、別のFROMが必要だとしましょう。

デフォルトでは、Jibはhttps://github.com/GoogleContainerTools/distroless/tree/master/java[distro-less java image]

を使用します。


alpine-java

のように、別の基本イメージでアプリケーションを実行したい場合は、同様に設定できます。

<configuration>
    ...
    <from>
        <image>openjdk:alpine</image>
    </from>
    ...
</configuration>

タグ、ボリューム、https://github.com/GoogleContainerTools/jib/tree/master/jib-maven-plugin#extended-usage[その他のDockerディレクティブ]も同じように設定します。


8 Javaアスペクトのカスタマイズ

そして関連付けにより、Jibは多数のJavaランタイム設定もサポートします。


  • __jvmFlags

    __は、どの起動フラグをJVMに渡すかを示します。

  • ____mainClass – メインクラスを示すためのものです。

デフォルトで自動的に推測しようとします。



args

は、渡されるプログラム引数を指定する場所です。


__メイン

__メソッド

もちろん、すべてのhttps://github.com/GoogleContainerTools/jib/tree/master/jib-maven-plugin[configuration available available]を参照するには、Jibのドキュメントをチェックしてください。



このチュートリアルでは、Mavenを介してdockerディレクティブとJavaランタイム設定にアクセスする方法を含む、GoogleのJibを使用してdockerイメージを作成して公開する方法を見ました。

いつものように、この例のソースコードはhttps://github.com/eugenp/tutorials/tree/master/jib[over on Github]から入手できます。