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