ぼくのかんがえたさいきょうのJib
現時点で考えたさいきょうのJib設定をメモしておきます。1週間の勉強での結論なのですぐに変わりそうですが 😑
コード内の、どうすっかなーみたいなコメントでお察しください。
Jibの記事は一旦これで終了にする予定です。
いままでの記事と同じく、multi-project構成のSpring Boot Applicationを対象とします。前回、前々回を参照ください。JibのVersionは2.0.0を対象としています。
// build.gradle.kts plugins { id("org.springframework.boot") version "2.3.0.M1" apply false id("io.spring.dependency-management") version "1.0.9.RELEASE" id("java") kotlin("jvm") version "1.3.61" kotlin("plugin.spring") version "1.3.61" // rootにはapply falseをつけて、main classがあるsubProjectに再度設定する id("com.google.cloud.tools.jib") version "2.0.0" apply false } // web/build.gradle.kts import org.springframework.boot.gradle.tasks.bundling.BootJar plugins { id("org.springframework.boot") id("io.spring.dependency-management") id("com.google.cloud.tools.jib") } dependencies { implementation(project(":docker-app-env")) implementation("org.springframework.boot:spring-boot-starter-webflux:2.3.0.M1") } tasks.getByName<BootJar>("bootJar") { mainClassName = "com.example.dockerapp.DockerAppApplicationKt" } jib { from { image = imageFrom() } to { image = imageTo() } // multi-projectの場合はFat Jarを利用する containerizingMode = "packaged" container { mainClass = "com.example.dockerapp.DockerAppApplicationKt" // どの環境でも設定する汎用的なpropertyはjvmFlagsに追加する // https://qiita.com/dmikurube/items/15899ec9de643e91497c を参考にAsia/Tokyoをセット jvmFlags = listOf("-Dfile.encoding=UTF-8", "-Duser.timezone=Asia/Tokyo") ports = listOf("8080") // userを指定しない場合rootで動くので必ず指定する。uid:gid以外のセットでも指定できる。docker run 時の設定でもOK user = "1000:1000" // OCI formatで作成する format = com.google.cloud.tools.jib.api.ImageFormat.OCI // Setting image creation time to current time; your image may not be reproducible. // がメッセージとして出るので、creationTimeを設定するかは環境次第で決める creationTime = "USE_CURRENT_TIMESTAMP" // image作成時に追加でdirectoryを用意したい場合に設定 // volumes = listOf("/var/log/dockerapp") } } // https://github.com/GoogleContainerTools/distroless/issues/214 // https://console.cloud.google.com/gcr/images/distroless/GLOBAL/java?gcrImageListsize=30 // Using base image with digest fun imageFrom(): String { val profile = if (hasProperty("profile")) getProperty("profile") else "" return if ("development" == profile) // java:11-debug "gcr.io/distroless/java@sha256:e91e23383a8843a3f0bb00bdf99b9b7bed8c7ce25ed929acbe0eedec70fa91f9" else // java:11 "gcr.io/distroless/java@sha256:0ce06c40e99e0dce26bdbcec30afe7a890a57bbd250777bd31ff2d1b798c7809" } fun imageTo() = getProperty("registry") + "/" + getProperty("artifactid") + ":" + getProperty("version") fun getProperty(value: String) = findProperty(value) as String
// debug imageを使う場合developmentを指定する $ ./gradlew jibDockerBuild -Pprofile=development // jvmFlagsが設定されている 😊 Container entrypoint set to [java, -Dfile.encoding=UTF-8, -Duser.timezone=Asia/Tokyo, -cp, /app/classpath/*:/app/libs/*, com.example.dockerapp.DockerAppApplicationKt] // 実行環境によって異なるpropertyはJAVA_TOOL_OPTIONSで設定する $ docker run -p 8080:8080 -e "JAVA_TOOL_OPTIONS=-Dspring.profiles.active=development -Xms1G -Xmx1G" --rm jib/dockerapp:0.0.1-SNAPSHOT // JAVA_TOOL_OPTIONSをひろってくれる (Logをだしてくれる。親切 😊) Picked up JAVA_TOOL_OPTIONS: -Dspring.profiles.active=development -Xms1G -Xmx1G
あとはApplicationの必要に応じてenvironmentやargsを設定する感じになります。
運用がガラッと変わったらまた記事にします。さよならバイバイ(^_^)/~