Potrzebuję opisać ten proces, ponieważ chcę w przyszłości trochę wiecej naprodukować wpisów o chmurze. Bardzo często będę w tych postach korzystał z aplikacji opartej o spring-boota, ponieważ jest to technologia w której czuje się najpewniej. 🙂
Zacznijmy od zbudowania zwykłej, prostej aplikacji za pomocą Spring Initializr. Na nasze aktualne potrzeby wystarczy nam dorzucić zależność Web, aby później sprawdzić czy rzeczywiście wszystko dobrze śmiga.
Pełny kod znajdziecie w repozytorium pod adresem https://github.com/mtszpater/Spring-boot-in-Docker

Stwórzmy jakiś prosty Controller i sprawdźmy, że rzeczywiście wszystko działa poprawnie.
package com.example.demo.controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class HomeController {
@GetMapping("/hello")
public String helloWorld(){
return "Hello from HomeController!";
}
}
Wejdźmy na stronę localhost:8080/hello.

Tworzenie obrazu Dockerowego
Przyda nam się najprostrzy przepis na nasz obraz tzw. Dockerfile. Wygląda on tak:
FROM openjdk:8-jre-alpine
VOLUME /tmp
COPY ./target/app.jar app.jar
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
Do uruchomienia naszej aplikacji potrzebujemy tak na prawdę tylko najprostsze openjdk oraz przekopiowanie tam naszego app.jar.
Aby przy budowaniu nasza aplikacja tworzyła plik o takiej nazwie w pom.xml w sekcji <build></build> musimy dodać linijkę:
<finalName>app</finalName>
Teraz już z górki. Zbudujmy aplikację.
mvn clean install
Stwórzmy obraz dockerowy i nazwijmy go.
sudo docker build -t my-example-app .
Uruchamiamy go ustawiając porty wyjściowe, tak aby w momencie gdy wejdziemy u nas pod port 8080 nasz kontener wiedział, że dobijamy się do niego.
sudo docker run -p 8080:8080 my-example-app
Ponownie wejdźmy pod adres localhost:8080/hello. I sprawdźmy czy wszystko jest ok.

Repozytorium obrazów DockerHub
Oooogromna baza gotowych obrazów z których można skorzystać (co w sumie zrobiliśmy przy budowaniu Dockerfile gdy zaciągaliśmy obraz openjdk:8-jre-alpine.
Jeżeli w planach mamy skorzystanie z naszego obrazu w przyszłości – na serwerze, na innym komputerze to możemy nasz obraz też tam dorzucić. Repozytorium dockera jest w pełni darmowe (przynajmniej dla zwykłych śmiertelników). Nawet jest możliwość stworzenia prywatnego repozytorium. 🙂
Konwencja na DockerHubie jest taka, że o ile nie jesteśmy zaufaną organizacją (jak np. dostawcy openjdk) to musimy nasze obrazy tagować nasz_login/nazwa_obrazu:wersja – z czego wersja jest opcjonalna.
Zatem szybko przebudujmy nasz obraz i wypchnijmy go w świat.
sudo docker push mtszpater/my-example-app

I na końcu jesteśmy w domu: https://cloud.docker.com/repository/docker/mtszpater/my-example-app/general