Obraz Dockera to szablon, który służy jako podstawa do tworzenia kontenerów.
Zawiera wszystko, co potrzebne do uruchomienia aplikacji: kod,
środowisko uruchomieniowe, biblioteki, zmienne środowiskowe i pliki konfiguracyjne.
Docker Hub dostarcza wiele gotowych obrazów, lecz to budowanie własnych obrazów zapewnia pełną kontrolę nad środowiskiem operacyjnym aplikacji. W procesie tworzenia spersonalizowanych obrazów Dockera często wykorzystuje się predefiniowane
obrazy bazowe, które mogą zawierać na przykład zainstalowaną Javę lub serwer HTTP. Dzięki temu można
skutecznie dostosować i skonfigurować środowisko, aby idealnie pasowało do unikalnych wymagań i potrzeb konkretnej
aplikacji.
Jeśli zamierzasz stworzyć mikroserwis, naturalnym krokiem będzie chęć uruchomienia wielu jego
instancji. Aby to osiągnąć, niezbędne jest zbudowanie obrazu Dockera dla tego mikroserwisu. Taki
obraz powinien być oparty na Javie oraz frameworku Spring Boot, co zapewni elastyczność oraz
łatwość w skalowaniu. Wykorzystanie Dockera w tym kontekście pozwala na łatwe replikowanie
środowiska mikroserwisu i jego niezależne uruchamianie w różnych środowiskach - od
deweloperskiego po produkcyjne. W rezultacie, Docker staje się kluczowym narzędziem w procesie
wdrażania nowoczesnych architektur mikroserwisowych.
Dockerfile w projekcie Spring Boot
Załóżmy, że masz projekt Java, który jest aplikacją webową wykorzystujacą Spring Boot-a.
Na przykład tworzysz aplikację do zarządzania zdarzeniami sportowymi:
sporting-events
(nazwa robocza
spring-boot-3-web).
Chcąc uruchomić taką aplikację w kontenerze Docker, musisz najpierw przygotować obraz, który będzie działał na Javie.
Załóżmy, że odpowiednia wydaje Ci się Java 21, co oznacza, że potrzebujesz obrazu bazowego z SDK Java 21.
W celu przygotowania własnego obrazu tworzysz w projekcie plik
Dockerfile,
który aby spełniał Twoje założenia, powinien na samym początku określać oficjalny obraz Docker, który będący
obrazem bazowym:
Oto co znajduje się w naszym
Dockerfile:
-
FROM eclipse-temurin:21.0.1_12-jdk — Rozpoczyna budowanie obrazu od
pobrania i użycia oficjalnego obrazu Java, konkretnie używa wersji eclipse-temurin z JDK (Java Development Kit) w wersji
21.0.1_12. Jest to obraz bazowy zawierający wszystko, co potrzebne do uruchomienia aplikacji Java.
-
WORKDIR /app — Ustawia /app jako katalog roboczy w kontenerze. Oznacza
to, że wszystkie późniejsze komendy będą wykonywane z tego katalogu, a także to, że będzie to domyślny
katalog, w którym będą znajdować się wszystkie pliki skopiowane do kontenera.
-
COPY ./target/spring-boot-3-web-0.0.1-SNAPSHOT.jar /app — Kopiuje plik
spring-boot-3-web-0.0.1-SNAPSHOT.jar z lokalnego katalogu target (czyli tego, w którym znadują się skompilowane źródła)
do katalogu /app w kontenerze. Ten plik JAR zawiera skompilowaną aplikację Java,
gotową do uruchomienia.
-
CMD ["java", "-jar", "spring-boot-3-web-0.0.1-SNAPSHOT.jar"] —
Określa polecenie, które zostanie wykonane, gdy kontener zostanie uruchomiony. W tym przypadku jest to polecenie
uruchamiające aplikację Java, używając pliku JAR skopiowanego w poprzednim kroku.
Innymi słowy, zaraz po starcie kontenera, uruchomi się aplikacja Spring Boot.
Podsumowując, ten
Dockerfile tworzy obraz kontenera, który bazuje na oficjalnym obrazie Java z JDK,
ustawia katalog roboczy, kopiuje skompilowany plik JAR aplikacji do tego katalogu i określa polecenie do uruchomienia tej aplikacji
w kontenerze.
Budowanie obrazu aplikacji
W celu zbudowania nowego obrazu Dockera o nazwie
sporting-events w oparciu o instrukcje z pliku
Dockerfile
znajdującego się w bieżącym katalogu, używa się polecenia
docker build.
Polecenie to inicjuje proces tworzenia obrazu, gdzie
-t sporting-events nadaje obrazowi nazwę, a kropka
.
wskazuje Dockerowi, że ma użyć bieżącego katalogu jako kontekstu budowania. Zauważ, że katalogiem tym jest główny katalog Twojego projektu.
Przygotowanie obrazu może trwać kilka sekund, ale czas ten w dużym stopniu zależy od dostępnych zasobów Twojego
systemu. Jeżeli nie dysponujesz około 1 GB wolnej pamięci, proces ten może zakończyć się zawieszeniem. W takim
przypadku zaleca się zwolnienie pamięci, ponowne uruchomienie Docker Desktop i zbudowanie obrazu jeszcze raz.
Po wykonaniu procesu budowania, przejdź do sekcji "Images" w Docker Desktop. Powinieneś tam zobaczyć swój nowo utworzony obraz:
Zwróć uwagę, że status obrazu jest ustawiony na
Unused, co oznacza,
że nie uruchomiłeś jeszcze żadnego kontenera na jego bazie. Zauważ też, że rozmiar obrazu to blisko 500 MB, co jest spowodowane głównie tym,
że oprócz okrojonej wersji Linuxa, znajduje się tam również SDK Javy.
Pamiętaj, że możesz otrzymać te same informacje, uruchamiając z konsoli komendę
docker images:
Appa Notka.
To ważne, aby umieć korzystać z komend Dockera w konsoli, nawet jeśli na co dzień używasz Docker Desktop. Prędzej
czy później, podczas swojej pracy z Dockerem, będziesz musiał zarządzać obrazami w zdalnym środowisku unixowym,
gdzie nie będzie dostępnego interfejsu graficznego.
Kod projektu
spring-boot-3-web znajdziesz na naszym GitHubie —
javappa-coding/coding-lab
Appa Notka.
Analizujemy kolejne kursy na Udemy, wykorzystując nasze doświadczenie zawodowe do oceny ich efektywności i
popularności wśród uczestników. Z dużym zaangażowaniem selekcjonujemy te, które naszym zdaniem są najbardziej
efektywne i jednocześnie cieszą się uznaniem uczestników.
Kurs
Docker & Kubernetes: The Practical Guide [2023 Edition] jest efektem tej
głębokiej analizy i prezentuje idealne połączenie wysokiej jakości edukacyjnej z aktualnymi trendami i
wymaganiami rynkowymi.
Autor: Jarek Klimas
Data: 04 stycznia 2024
Labele: Backend, Poziom średniozaawansowany, Java
Czy informacje, które otrzymałeś, były pomocne?
Jeśli tak, zapraszam Cię do podarowania mi kawy.
Topowe Materiały
Docker: Home Page
Docker: Downlaoad and install
Docker: Get Started with Docker
Docker: Kickstart Your Spring Boot Application Development
Spring IO: Container Images
Spring IO: Spring Boot Docker
Baeldung: Docker Guide
Baeldung: Creating Docker Images with Spring Boot
Baeldung: Introduction to Docker Compose
Baeldung: Docker Compose Support in Spring Boot 3
Udemy: Docker od podstaw - dla programistów i nie tylko
Udemy: Docker & Kubernetes: The Practical Guide [2023 Edition]