Aplikacja Spring Boot w Docker przy użyciu wtyczki Spotify Dockerfile Maven

Aplikacja Spring Boot w Docker przy użyciu wtyczki Spotify Dockerfile Maven
Photo by Anisur Rahman on Unsplash

W tym poście przedstawię Ci w jaki sposób możesz wykorzstać wtyczkę Spotify Dockerfile Maven w celu zbudowania obrazu, a następnie uruchomienia kontenera na jago podstawie.

Projekt

Wykorzystamy gotowy już projekt, który powstał w tym poście: Spring Initializer i prosta aplikacja Web Spring Boot. Jeśli nie widziałeś go wcześniej to proponuję przejść do tego postu i najpierw stworzyć sobię tą aplikację testową. Dzięki temu uzyskasz wkład do dalszej cześci w tym poście.

Dodawanie wtyczki

Najpierw musimy dodać wtyczkę oraz ją odpowiednio skonfigurować w pliku pom.xml. W tym celu wystarczy w sekcji <build><plugins> dodać poniższą konfigurację:

<plugin>
	<groupId>com.spotify</groupId>
	<artifactId>dockerfile-maven-plugin</artifactId>
	<version>1.4.13</version>
	<executions>
		<execution>
			<id>default</id>
			<goals>
				<goal>build</goal>
				<goal>push</goal>
			</goals>
		</execution>
	</executions>
	<configuration>
		<repository>bigdataetl/webdemo-api</repository>
		<tag>latest</tag>
		<buildArgs>
			<JAR_FILE>${project.build.finalName}.jar</JAR_FILE>
		</buildArgs>
	</configuration>
</plugin>

Plik Dockerfile

Kolejno w katalogu głównym projektu stwórz plik Dockerfile.

FROM openjdk:jre-alpine
MAINTAINER Pawel Cieśla <bigdataetlcom@gmail.com>
ENTRYPOINT ["java", "-jar", "/usr/webdemo-api.jar"]
ARG JAR_FILE
ADD target/${JAR_FILE} /usr/webdemo-api.jar

Tworzenie obrazu

Gdy mamy gotową konfigurację wtyczki oraz plik Dockerfile wystarczy, że uruchomisz komendę poniżej, która zbuduję paczkę, która zostania umieszona w obrazie Docker’owym oraz utworzy ten obraz.

mvn clean package

Po chwili zobaczysz logi, w których widzimy, że wtyczka Spotify została uruchomiona a obraz Docker’owy został zbudowany.

[INFO] --- dockerfile-maven-plugin:1.4.13:build (default) @ webdemo ---
[INFO] dockerfile: null
[INFO] contextDirectory: /home/pawel/Desktop/Blog/webdemo
[INFO] Building Docker context /home/pawel/Desktop/Blog/webdemo
[INFO] Path(dockerfile): null
[INFO] Path(contextDirectory): /home/pawel/Desktop/Blog/webdemo
[INFO] 
[INFO] Image will be built as bigdataetl/webdemo-api:latest
[INFO] 
[INFO] Step 1/5 : FROM openjdk:jre-alpine
[INFO] 
[INFO] Pulling from library/openjdk
[INFO] Digest: sha256:1bed44170948277881d88481ecbd07317eb7bae385560a9dd597bbfe02782766
[INFO] Status: Image is up to date for openjdk:jre-alpine
[INFO]  ---> ccfb0c83b2fe
[INFO] Step 2/5 : MAINTAINER Pawel Cieśla <bigdataetlcom@gmail.com>
[INFO] 
[INFO]  ---> Using cache
[INFO]  ---> b9bec1cb33fb
[INFO] Step 3/5 : ENTRYPOINT ["java", "-jar", "/usr/webdemo-api.jar"]
[INFO] 
[INFO]  ---> Using cache
[INFO]  ---> 64f9521f8f9e
[INFO] Step 4/5 : ARG JAR_FILE
[INFO] 
[INFO]  ---> Using cache
[INFO]  ---> 48b7a34304cc
[INFO] Step 5/5 : ADD target/${JAR_FILE} /usr/webdemo-api.jar
[INFO] 
[INFO]  ---> 132eae60f938
[INFO] Successfully built 132eae60f938
[INFO] Successfully tagged bigdataetl/webdemo-api:latest
[INFO] 
[INFO] Detected build of image with id 132eae60f938
[INFO] Building jar: /home/pawel/Desktop/Blog/webdemo/target/webdemo-0.0.1-SNAPSHOT-docker-info.jar
[INFO] Successfully built bigdataetl/webdemo-api:latest
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS

Uruchomienie

Sprawdźmy dla pewności czy nasz obraz jest widoczny:

pawel@pawel:~/Desktop/Blog/webdemo$ docker images
REPOSITORY                                         TAG                 IMAGE ID            CREATED             SIZE
bigdataetl/webdemo-api                             latest              132eae60f938        3 minutes ago       101MB

A następnie uruchomimy kontener:

 docker run -p 8080:8080 bigdataetl/webdemo-api

Teraz możemy zobaczyć logi, że aplikacja jest uruchomiona, a następnie uruchomić w przeglądarce URL: http://localhost:8080/hello w celu sprawdzenia.

pawel@pawel:~/Desktop/Blog/webdemo$ docker run -p 8080:8080 bigdataetl/webdemo-api

  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::        (v2.2.5.RELEASE)

2020-03-02 20:28:55.722  INFO 1 --- [           main] c.bigdataetl.webdemo.WebdemoApplication  : Starting WebdemoApplication v0.0.1-SNAPSHOT on 820e45ae4378 with PID 1 (/usr/webdemo-api.jar started by root in /)
2020-03-02 20:28:55.726  INFO 1 --- [           main] c.bigdataetl.webdemo.WebdemoApplication  : No active profile set, falling back to default profiles: default
2020-03-02 20:28:56.912  INFO 1 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat initialized with port(s): 8080 (http)
2020-03-02 20:28:56.930  INFO 1 --- [           main] o.apache.catalina.core.StandardService   : Starting service [Tomcat]
2020-03-02 20:28:56.930  INFO 1 --- [           main] org.apache.catalina.core.StandardEngine  : Starting Servlet engine: [Apache Tomcat/9.0.31]
2020-03-02 20:28:57.008  INFO 1 --- [           main] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring embedded WebApplicationContext
2020-03-02 20:28:57.009  INFO 1 --- [           main] o.s.web.context.ContextLoader            : Root WebApplicationContext: initialization completed in 1210 ms
2020-03-02 20:28:57.199  INFO 1 --- [           main] o.s.s.concurrent.ThreadPoolTaskExecutor  : Initializing ExecutorService 'applicationTaskExecutor'
2020-03-02 20:28:57.400  INFO 1 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port(s): 8080 (http) with context path ''
2020-03-02 20:28:57.404  INFO 1 --- [           main] c.bigdataetl.webdemo.WebdemoApplication  : Started WebdemoApplication in 2.206 seconds (JVM running for 2.999)
2020-03-02 20:29:50.608  INFO 1 --- [nio-8080-exec-2] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring DispatcherServlet 'dispatcherServlet'
2020-03-02 20:29:50.608  INFO 1 --- [nio-8080-exec-2] o.s.web.servlet.DispatcherServlet        : Initializing Servlet 'dispatcherServlet'
2020-03-02 20:29:50.613  INFO 1 --- [nio-8080-exec-2] o.s.web.servlet.DispatcherServlet        : Completed initialization in 5 ms

Jeśli spodobał Ci się ten post to zostaw proszę komentarz poniżej oraz udostępnij ten post na swoim Facebook’u, Twitter’ze, LinkedIn lub innej stronie z mediami społecznościowymi.
Dzięki!

0 0 vote
Article Rating
Subscribe
Powiadom o
guest
0 komentarzy
Inline Feedbacks
View all comments