w , , ,

FajneFajne

Docker – budowa obrazu dla aplikacji w Spring Boot

Docker od podstaw

Docker umożliwia uruchomienie aplikacji w środowisku izolowanym – kontenerze. W przeciwieństwie do wirtualizacji jest to proces lekkim który nie zużywający dużej ilości zasobów sprzętowych. W rezultacie umożliwia Ci to stworzenie środowiska pracy, które daje Ci gwarancje, że zadziała tak samo na każdej maszynie.

Docker – przykład zastosowania

Na przykład załóżmy, że tworzysz aplikacje w Spring Boot, która wymaga do uruchomienia JRE. Dlatego osoba, która będzie próbowała uruchomić Twoja aplikację na komputerze bez JRE zakończy swoją próbę na niepowodzeniu.

Innymi słowy Docker daje Ci możliwość zdefiniowania wszystkich niezbędnych elementów w ramach obrazu a Ty udostępniając ten obraz masz pewność, że całość zostanie uruchomiona w pełni poprawnie bez konieczności instalowania dodatkowego oprogramowania np. JRE.

Oczywiście to jest prosty przykład bo aplikacja może wymagać JRE, Node, bazy danych i wielu innych zależności, które Ty możesz spakować do jednego kontenera i w łatwy sposób dystrybuować.

Jeśli chcesz lepiej uporządkować widzę związaną z konteneryzacją, wirtualizacją i podobnymi zagadnieniami to odsyłam Cię do mojego artykułu Docker – konteneryzacja, wirtualizacja, emulacja i symulacja. Natomiast teraz przystąpmy do realizacji przykładu.

Docker – budowa obrazu

Podzielmy pracę na następujące etapy:

  1. Utworzenie pliku Dokerfile, który zawiera instrukcje niezbędne do zbudowania obrazu;
  2. Zbudowanie obrazu na podstawie Dockerfile;
  3. Uruchomienie obrazu z aplikacją.

Pamiętaj, że zanim zaczniesz pracę, to musisz mieć zainstalowane na na swoim komputerze oprogramowanie Docker Desktop.

Pliku Dockerfile – opis obrazu

Dockerfile to najczęstsza nazwa dokumentu, na podstawie którego tworzony jest obraz. Nazwa może być dowolna. Najlepiej umieścić go w katalogu głównym aplikacji Spring Boot.

Jego budowa może być następująca:

FROM openjdk:8u191-jdk-alpine3.9
ADD target/springboot-docker-0.0.1-SNAPSHOT.jar .
EXPOSE 8000
CMD java -jar springboot-docker-0.0.1-SNAPSHOT.jar --envname=prod

W pierwszej kolejności podajemy narzędzia/środowiska (więc inne obrazy) jakie mają znajdować się w kontenerze. Ponieważ Spring Boot wymaga środowiska Java, dlatego dodajemy OpenJDK.

Obrazy jakie można umieść w kontenerze są dostępne na stronie:
https://hub.docker.com

W drugiej linii pliku Dockerfile definiujemy elementy jakie mają zostać zawarte wewnątrz kontenera. Dla aplikacji Spring Boot będzie to plik z rozszerzeniem .jar znajdujący się w katalogu target.

W trzeciej linii określamy port kontenera jaki ma zostać wystawiony na zewnątrz. Jest to port przez który dokonywana będzie komunikacja.

Ostatnią linią są parametry uruchomieniowe.

Budowanie obrazu

Aby zbudować obraz należy przejść do katalogu, w którym znajduję się Dockerfile a następnie z poziomu linii komend wykonać polecenie posiadającą następującą składnie:

docker build -f Dockerfile -t : .
  • docker build – komenda do budowy obrazu.
  • -f Dockerfile – wskazanie na plik, na podstawie którego ma zostać zbudowany obraz.
  • -t <nazwa>:<tag> . – ustalenie nazwy oraz tagu dla obrazu. Domyślny tag to latest. Kropka oznacza katalog bieżący

Przykładowo polecenie może wyglądać w następujący sposób:

docker build -f Dockerfile -t springboot-app .

Uruchomienie obrazu

Po zbudowaniu obrazu dostaniesz informacje na temat jego IMAGE_ID. Jest to klucz identyfikujący dany obraz. Aby uruchomić obraz należy wykonać komendę:

docker build -f Dockerfile -t springboot-app .

np:

docker run -p 8000:8080 b0fc

W powyższej składni pojawia się zapis -p 8000:8080. Informuje ona, że port wystawiony przez aplikacje (8080) ma być przekierowany na port kontenera (8000). Wówczas cała komunikacja z aplikacją za pośrednictwem kontenera odbywa się na porcie 8000.

Kurs Docker

Na moim kanale YouTube prezentuje obrazowo od podstaw czym jest Docker oraz jak zacząć z nim pracować. Zapraszam do oglądania i komentowania wideo 🙂

Pod rozwinięcie tematu Dockera zapraszam Cię do mojego artykułu na temat Docker Compose, gdzie pokazuje jak uruchomić sieć kontenerów.

Napisane przez Przemysław Bykowski

Aktywny programista i energiczny trener. Specjalizuje się w Spring Boot i uczę go w ramach AkademiaSpring.pl. Po godzinach udzielam się na YouTubach. Więcej o mnie.

Dodaj komentarz

Ładowanie…

jwt

JSON Web Token w Spring Boot

Continuous Integration i Continuous Delivery

Continuous Integration i Continuous Delivery