強力なDockerイメージビルダー

11101 ワード

導入


ジブは何ですか.ジブはDockerなしでJavaプロジェクトのDockerイメージを生成するのを助けるためにGoogleによって作成されたライブラリです.
それはどういう意味ですか.

グローバルプレゼンテーション


古典的な方法では、JavaプロジェクトにDockerFileを持たなければなりません.コマンドラインでDockerイメージをビルドし、レジストリにプッシュします.このようにして、ローカルにDockerを持ってイメージを構築することができ、Dockerに関する知識やDockerFileを構築する方法があります.
Googleによって提案された新しい方法はずっと簡素化されている.ここでは、エントリ要素(プロジェクト)とプロセス内の1ステップ(ビルド)があります.我々はもはやローカルチェッカーを必要としない.そして、DEVSは我々が欲しいイメージを構築するためにいくつかの要素を構成しなければなりません.

技術発表


ジブを使用するには、次の3つの方法があります.
  • Mavenプラグイン付きjib-maven-plugin )
  • Gradleプラグインでjib-gradle-plugin )
  • コアライブラリ(jib-core )
  • 最初の話についてもう少しお話します.

    Mavenプラグイン


    最も簡単な形式では、Mavenプラグインの実装はこのようになります.
    <project>
      ...
      <build>
        <plugins>
          ...
          <plugin>
            <groupId>com.google.cloud.tools</groupId>
            <artifactId>jib-maven-plugin</artifactId>
            <version>2.5.2</version>
          </plugin>
          ...
        </plugins>
      </build>
      ...
    </project>
    
    これは単純なビルドセクションの宣言です.しかし、これにより、ローカルを生成することができます.tarファイル.
    mvn compile jib:buildTar
    
    DockerImageを作成し、この設定でレジストリにプッシュしようとすると、より多くのパラメータが必要になることがわかります.
    > mvn compile jib:build
    ...
    [ERROR] Failes to execute goal com.google.cloud.tools:jib-maven-plugin:2.5.2:build (default-cli) on project jib-demo: Missing target image parameter.
    
    ドキュメントを使用すると、必要なデータを2つ指定できます.
  • コマンドパラメータで
  • POM設定で
  • ここでは、Dockerイメージを生成し、コマンドmvnコンパイルjib : buildでライブラリにプッシュする最小限の設定です.
    <build>
        <plugins>
            <plugin>
                <groupId>com.google.cloud.tools</groupId>
                <artifactId>jib-maven-plugin</artifactId>
                <version>2.5.2</version>
                <configuration>
                    <to>
                        <image>docker.io/my-docker-id/my-app</image>
                    </to>
                </configuration>
            </plugin>
        </plugins>
    </build>
    
    あなたが個人的な倉庫にDockerイメージを押したいならば、それも次のオプションで可能です.この場所では、タグのような他の設定を追加できます.
    <to>
        <image>docker.io/my-docker-id/my-app</image>
        <auth>
            <username>dockerRegistry_username</username>
            <password>dockerRegistry_password</password>
        </auth>
    </to>
    

    Mavenプラグイン


    将来のDockerイメージのために多くのものを定義することが可能であるので、あなたはイメージベースのためにいくつかの要素を定義することができます.
    デフォルトではdistoless LinuxとOpenJDKランタイムの最小値だけを含むイメージ.しかし、いくつかの理由から、端末やカールのような他のツールが必要になるかもしれません.これはfromパラメーターの目的です.イメージがプライベートレジストリにある場合は、そのバージョンと資格情報を使用するイメージを定義できます.
    <from>
        <image>openjdk:alpine</image>
    </from>
    
    <from>
        <image>docker.io/my-docker-id/my-app</image>
        <auth>
            <username>dockerRegistry_username</username>
            <password>dockerRegistry_password</password>
        </auth>
    </from>
    
    また、以下のようにイメージを設定するオプションがたくさんあります.

  • イメージにファイルを注入して、イメージの彼らの権利を定義するExtraDirectory
  • <configuration>
      <extraDirectories>
        <paths>
          <!-- Copies from 'src/main/custom-extra-dir' into '/' on the container. -->
          <path>src/main/custom-extra-dir</path>
          <!-- Copies from '/home/user/jib-extras' into '/extras' on the container -->
          <path>
            <from>/home/user/jib-extras</from>
            <into>/extras</into>
          </path>
        </paths>
        <permissions>
          <permission>
            <file>/path/on/container/to/fileA</file>
            <mode>755</mode> <!-- Read/write/execute for owner, read/execute for group/other -->
          </permission>
          <permission>
            <file>/path/to/another/file</file>
            <mode>644</mode> <!-- Read/write for owner, read-only for group/other -->
          </permission>
          <permission>
            <file>/glob/pattern/**/*.sh</file>
            <mode>755</mode>
          </permission>
        </permissions>
      </extraDirectories>
    </configuration>
    

  • JVMフラグを追加するJVMFLAGS
  • <container>
        <jvmFlags>
            <jvmFlag>-Duser.timezone=America/Montreal</jvmFlag>
            <jvmFlag>-XX:MetaspaceSize=96m </jvmFlag>
            <jvmFlag>-XX:MaxMetaspaceSize=256m</jvmFlag>
            <jvmFlag>-Djava.net.preferIPv4Stack=true</jvmFlag>
            <jvmFlag>-Xss228k</jvmFlag>
            <jvmFlag>-XX:+HeapDumpOnOutOfMemoryError</jvmFlag>
            <jvmFlag>-XX:HeapDumpPath=/tmp</jvmFlag>
        </jvmFlags>
    </container>
    

  • どのポートを公開するかを定義するポート
  • <container>
        <ports>
            <port>8080</port>
            <port>9999</port>
        </ports>
    </container>
    

  • 環境変数を定義する環境
  • <container>
      <environment>
          <DB_PASSWORD>pwd</DB_PASSWORD>
          <DB_USERNAME>usr</DB_USERNAME>
      </environment>
    </container>
    
    ...
    詳しい情報があれば、MavenプラグインREADMEをチェックしてください.https://github.com/GoogleContainerTools/jib/tree/master/jib-maven-plugin
    あなたがJava devでないならば、あなたはプロジェクトをチェックすることができますrules_docker 以下のような他の言語でも同じことができます.
  • Python
  • NODEJS
  • ジャバ
  • スカラ
  • グルービー
  • C
  • 試み
  • ディー
    (私はそれを使いませんし、それを試しても、私はそれらについて言及したいと思います.なぜなら、Googleは彼らに言及しており、それは本当に役に立つかもしれません).
  • ソース


    ジブ

  • https://cloud.google.com/java/getting-started/jib
  • https://github.com/GoogleContainerTools/jib

  • https://cloud.google.com/blog/products/gcp/introducing-jib-build-java-docker-images-better
  • https://github.com/GoogleContainerTools/jib/tree/master/jib-maven-plugin#frequently-asked-questions-faq
  • ルールDocker

  • https://github.com/bazelbuild/rules_docker