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:
- Utworzenie pliku Dokerfile, który zawiera instrukcje niezbędne do zbudowania obrazu;
- Zbudowanie obrazu na podstawie Dockerfile;
- 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.