Azure Container Registry + Jib + Java でアプリを開発する


Microsoft Azure では「プライベートで使えるDocker Container Registry (Docker Hubみたいなもの)」として Azure Container Registry というサービスが提供されています。

本記事ではマイクロソフトが提供する「Azure Container Registry」と、Googleが提供する「Jib」を組み合わせて「Javaアプリ」の環境を構築し、利用する設定をご紹介したいと思います。

設定ファイルを丸ごと用意してありますので穴埋め形式でご利用いただけます。

# フォルダ構成

コンテナにて利用したいスクリプトが src/main/jib/ においてあるものとします。

```
src/main/jib/app.sh
```

# 設定ファイル

```xml
<!-- pom.xml -->
<project xmlns="http://maven.apache.org/POM/4.0.0"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<groupId>your_groupid_here</groupId>
	<artifactId>hello-jib</artifactId>
	<packaging>jar</packaging>
	<version>1.0.0.0</version>
	<!-- 文字コードとJavaのバージョンの設定 -->
	<properties>
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
		<java.version>1.8</java.version>
		<encoding>UTF-8</encoding>
		<!-- https://docs.microsoft.com/ja-jp/azure/container-registry/container-registry-java-quickstart -->
		<docker.image.prefix>your_container_registry_here.azurecr.io</docker.image.prefix>
		<jib-maven-plugin.version>3.1.4</jib-maven-plugin.version>
	</properties>
	<build>
		<!-- https://docs.microsoft.com/ja-jp/azure/app-service/app-service-web-get-started-java -->
		<plugins>
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-compiler-plugin</artifactId>
				<version>3.8.1</version>
				<configuration>
					<!-- ここでJavaのバージョンを設定する -->
					<source>1.8</source>
					<target>1.8</target>
				</configuration>
			</plugin>
			<!-- mvn compile jib:dockerBuild -->
			<!-- https://cloud.google.com/java/getting-started/jib -->
			<!-- https://mvnrepository.com/artifact/com.google.cloud.tools/jib-maven-plugin -->
			<plugin>
				<groupId>com.google.cloud.tools</groupId>
				<artifactId>jib-maven-plugin</artifactId>
				<version>3.1.4</version>
				<configuration>
					<container>
						<!-- mainClass>pkg.YourMain</mainClass -->
						<!-- entrypoint>docker/entrypoint.sh</entrypoint -->
						<entrypoint>
							<arg>/bin/sh</arg>
							<!-- create and edit src/main/jib/my-entrypoint.sh -->
							<!-- arg>/my-entrypoint.sh</arg -->
							<arg>app.sh</arg>
						</entrypoint>
						<!-- https://github.com/GoogleContainerTools/jib/blob/v2.1.0-maven/docs/faq.md#why-is-my-image-created-48-years-ago -->
						<creationTime>2021-11-01T09:00:00+09:00</creationTime>
						<!-- creationTime>USE_CURRENT_TIMESTAMP</creationTime -->
						<environment>
							<!-- KEY=VALUE -->
							<!-- KEY>VALUE</KEY -->
							<LANG>C.UTF-8</LANG>
							<LANGUAGE>en_US</LANGUAGE>
							<YOUR_ENV_HERE>your_env_value_here</YOUR_ENV_HERE>
						</environment>
					</container>
					<extraDirectories>
						<permissions>
							<permission>
								<file>app.sh</file>
								<mode>755</mode>
							</permission>
						</permissions>
						<paths>
							<path>
								<from>your_from_dir_here</from>
								<into>your_to_dir_here</into>
							</path>
							<path>
								<from>src/main/jib</from>
								<into>/</into>
							</path>
						</paths>
					</extraDirectories>
					<!-- ports -->
					<!-- port>8080</port -->
					<!-- /ports -->
					<environment>
						<application.title>your_app_title_here</application.title>
						<application.version>1.0.0.0</application.version>
						<!-- KEY=VALUE -->
						<!-- KEY>VALUE</KEY -->
						<LANG>C.UTF-8</LANG>
						<LANGUAGE>en_US</LANGUAGE>
					</environment>
					<!-- jvmFlags -->
					<!-- jvmFlag>-javaagent:/usr/local/newrelic/newrelic.jar</jvmFlag -->
					<!-- /jvmFlags -->
					<from>
						<image>mcr.microsoft.com/java/jre:8-zulu-ubuntu</image>
						<!-- image>mcr.microsoft.com/java/jre:11-zulu-ubuntu</image -->
						<!-- image>mcr.microsoft.com/java/jdk:8-zulu-alpine</image -->
						<!-- image>openjdk:8-alpine</image -->
						<!-- image>ubuntu</image -->
						<!-- image>openjdk</image -->
						<!-- image>gcr.io/distroless/java:debug</image -->
					</from>
					<to>
						<image>${docker.image.prefix}/your_team_here/${project.artifactId}</image>
					</to>
				</configuration>
			</plugin>
		</plugins>
	</build>
	<dependencies>
		<!-- ... -->
	</dependencies>

</project>

```

# 参考

### クイックスタート - Maven と Jib を使用して Java コンテナー イメージを作成し Azure Container Registry にプッシュする - Azure Container Registry | Microsoft Docs
https://docs.microsoft.com/ja-jp/azure/container-registry/container-registry-java-quickstart


### クイック スタート:Azure App Service で Java アプリを作成する - Azure App Service | Microsoft Docs
https://docs.microsoft.com/ja-jp/azure/app-service/quickstart-java?tabs=javase&pivots=platform-linux

### Google Cloud - Jib を使用して Java コンテナを構築する
https://cloud.google.com/java/getting-started/jib

### Jib - A Maven plugin for building container images for your Java applications.
https://mvnrepository.com/artifact/com.google.cloud.tools/jib-maven-plugin


### jib - Frequently Asked Questions (FAQ) - Why is my image created 48+ years ago?
https://github.com/GoogleContainerTools/jib/blob/v2.1.0-maven/docs/faq.md#why-is-my-image-created-48-years-ago





以上。