Docker – podstawy

Docker pozwala na konteneryzację (zamknięcie w hermetycznym pudełku) wszystkich rzeczy potrzebnych do uruchomienia aplikacji.

Dockerfile

Wszystko zaczyna się od pliku Dockerfile w którym to jest definiowany obraz (Docker image). Podstawowe opcje jakie można zdefiniować to:

FROM – pozwala na zdefiniowanie rozszerzanego obrazu (Docker image). Przykładowo FROM eclipse-temurin
WORKDIR – pozwala na zdefiniowanie ścieżki w której będzie się wszystko odbywało. Przykładowo WORKDIR /myAppInContainer
COPY – pozwala na skopiowanie plików z lokalnego środowiska do obrazu (Docker image). Przykładowo COPY ./localFile ./myAppInContainer/
RUN – pozwala na uruchomienie komendy w trakcie budowania obrazu (Docker image). Przykładowo RUN javac Main.java czy npm install.
CMD – pozwala na zdefiniowanie komendy egzekwowanej przy uruchamianiu kontenera (Docker container). Przykładowo CMD java Main czy node app.js.

Docker image – obraz

Posiadając już gotowy plik Dockerfile, można zbudować obraz, czyli coś co zawiera już najczęściej system operacyjny, interpreter kodu/kompilator, środowisko uruchomieniowe, kod aplikacji i inne. Może (i często tak jest) ważyć prawie 1 GB. Aby zbudować obraz należy przejść do katalogu zawierającego plik Dockerfile i użyć polecenia:

docker build -t myImageName:myTagName .

Docker container – kontener

Posiadając już zbudowany obraz, można uruchomić dowolną ilość kontenerów – będą to całkowicie odrębne systemy. Aby uruchomić nowy kontener należy użyć polecenia run:

docker run myImageName:myTagName --name containerName

Aby zatrzymać kontener:

Aby uruchomić już istniejący kontener należy użyć polecenia start:

docker start containerName

Przydatne parametry – docker run

-d

uruchamia kontener w trybie detached mode (uruchomienie w tle) – czyli kontener zostaje uruchomiony ale nie powoduje to zablokowania konsoli (tak jak to działa domyślnie) – możliwe jest dalsze z niej korzystanie

–rm

dzięki temu parametrowi uruchomiony kontener zostanie automatycznie usunięty po jego zatrzymaniu

-p localport:containerport

pozwala na upublicznienie portów kontenera

-it

daje możliwość interaktywności z kontenerem (przykładowo możliwe będzie wprowadzanie wartości z poziomu konsoli). W rzeczy samej są to dwa oddzielne parametry -i oraz -t. -i zapewnia interaktywność a -t daje wsparcie dla konsoli.

Sprawdzanie istniejących już obrazów

Aby sprawdzić dostępne (zbudowane lub pobrane) obrazu należy użyć polecenia:

Sprawdzanie kontenerów

Aby sprawdzić jakie mamy uruchomione kontenery należy skorzystać z polecenia:

Aby sprawdzić wszystkie dostępne kontenery (również te zatrzymane należy dodać parametr a:

Nazwa i tag obrazu

Każdy obraz posiada zarówno nazwę jak i tag:

imageName:imageTag

nazwa będzie wskazywała na obraz a tag na wersję. Przykładowo jdk od firmy eclipse posiada nazwę eclipse-temurin, a jedne z dostępnych tagów to: 11.0.21_9-jre-centos7, 11-jre-centos7 11.0.21_9-jre-ubi9-minimal, 11-jre-ubi9-minimal

Co jeśli nie określimy tagu?

Jeśli nie określimy tagu to automatycznie będzie pobrany/przypisany tag o nazwie latest.

Pobieranie gotowego obrazu

Czasami chcemy skorzystać z już istniejącego obrazu (na przykład z https://hub.docker.com/). Aby pobrać taki obraz używamy polecenia docker pull:

docker pull imageName:imageTag

przykładowo:

docker pull eclipse-temurin:17-alpine

Czyszczenie

Kontenerów

Aby usunąć kontener musi on być uprzednio zatrzymany. I można użyć do tego użyć następującego polecenia:

Aby usunąć wszystkie zatrzymane kontenery:

Obrazów

Aby usunąć obraz wszystkie powiązane z nim kontenery muszą zostać usunięte. Aby usunąć obraz należy użyć polecenia:

docker rmi imageName:imageTag

Aby usunąć wszystkie (możliwe do usunięcia) obrazy należy użyć polecenia:

Warto zajrzeć

1. https://docs.docker.com/

Pozostaw komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *