Software Development

Docker dla programistów – budowa pierwszego środowiska. Część I

15 grudnia, 2021 3
Podziel się:

Poprzedni artykuł opisuje zalety, jakie niesie za sobą konteneryzacja, w porównaniu do klasycznej wirtualizacji systemów. W pierwszej kolejności zalety te są istotne z punktu widzenia docelowych środowisk uruchomieniowych i cieszą administratorów oraz menedżerów zarządzających finansami projektów. Jednak w codziennej pracy programistów konteneryzacja również przynosi liczne korzyści, z którymi najlepiej zapoznać się w praktyce 😊

Budowa środowiska deweloperskiego

Aby zapoznać się z samym procesem instalacji Dockera, polecam przejrzeć dokumentację, w której ten temat został wyczerpany.

Zbudujemy zatem środowisko deweloperskie dla naszej aplikacji. Na początku ograniczymy się do bazy danych, którą będzie PostgreSQL. Oficjalny obraz kontenera z zainstalowaną bazą można znaleźć w publicznym repozytorium.

Z repozytorium dowiemy się, że jest kilka dostępnych wersji. Najnowsza, stabilna wersja, jest oznaczona tagiem „latest”, dzięki czemu staje się wersją domyślnie używaną. Jeśli chcemy skorzystać z innej, musimy dopisać tag wybranej wersji, pobierając obraz kontenera.

Obraz pobieramy poleceniem:

$ docker pull postgres:latest

a listę pobranych obrazów możemy sprawdzić poleceniem:

$ docker images

Jeśli chcemy uruchomić kontener z bazą, możemy to zrobić od razu, ale musimy pamiętać o tym, że kontener jest uruchamiany każdorazowo z innym adresem IP. Może to być dość niewygodne. Jeśli nie chcemy za każdym razem zmieniać tego adresu, w parametrach połączenia możemy przekierować wskazany port kontenera na port naszej lokalnej maszyny.

Całość wykonujemy poleceniem:

$ docker run -e POSTGRES_PASSWORD=password -d -p 5432:5432 --name psqldb postgres

Oznaczenia paramerów

Kolejne parametry oznaczają:

  • -e – ustawianie zmiennej środowiskowej POSTGRES_PASSWORD,
  • -d – uruchomienie w tle,
  • -p 5432:5432 – przekierowanie portu (port host-a:port kontener-a),
  • –name – nazwę kontenera,
  •  postgres – to nazwa obrazu.

Poniższe polecenie wyświetla wszystkie uruchomione kontenery:

$ docker ps

Zmiana ustawień

Kontener działa już w domyślnej konfiguracji. Pojawia się pytanie, co zrobić w przypadku, gdybyśmy chcieli zmienić pewne ustawienia.

Według dokumentacji jest to możliwe z użyciem zmiennych środowiskowych ustawianych w trakcie uruchamiania kontenera. Przełącznik -e w linii poleceń może posłużyć do ustawienia zmiennej środowiskowej i możemy go użyć wielokrotnie.

Załóżmy, że chcemy uruchomić kontener postgresql z użytkownikiem i bazą danych o nazwie „camunda” oraz identycznym hasłem do bazy. Wówczas pełne polecenie będzie wyglądać następująco:

$ docker run -d -e POSTGRES_PASSWORD=camunda -e POSTGRES_USER=camunda -p 5432:5432 --name psqldb postgres:9.4

Docker Compose

Mamy więc możliwość uruchomienia skonfigurowanego kontenera, przekazując wszystkie parametry w wierszu poleceń. Łatwo jednak dojść do wniosku, że pisanie pełnego polecenia nie jest szczytem ergonomii.

Z pomocą przychodzi kolejne narzędzie – Docker Compose (jego proces instalacyjny znajdziecie tutaj). Umożliwia deklaratywne zdefiniowanie kontenera lub kilku kontenerów w jednym pliku docker-compose.yml i posługiwanie się nim w celu uruchomienia całego środowiska rozwojowego.

Poniżej przykład pliku, zawierający konfigurację odpowiadającą temu, co do tej pory skonfigurowałem w wierszu poleceń (nazwa: docker-compose.yml):

db:

  image: postgres:9.4

  environment:

    - POSTGRES_PASSWORD=camunda

    - POSTGRES_USER=camunda

  ports:

    - "5432:5432"

Oznaczenia parametrów

Pokrótce:

  • db – identyfikator kontenera,
  • image – wskazuje oczekiwany obraz,
  • environment – definiuje zmienne środowiskowe,
  • ports – definiuje mapowanie portów.

Uruchamianie kontenerów

Uruchomienie kontenera z bazą danych wymaga teraz użycia znacznie prostszego polecenia:

$ docker-compose up -d

Oznaczenia:

  • up – oznacza uruchomienie zdefiniowanych kontenerów,
  • parametr -d – uruchamia w tle.

Idąc dalej, możemy dojść do wniosku, że w środowisku rozwojowym baza danych powinna być uruchamiana z zainstalowanym schematem dostarczonym z zewnątrz.

Dodanie skryptów SQL

Oficjalny kontener PostgreSQL pozwala na dodanie w odpowiednim miejscu skryptów SQL, które zostaną wykonane podczas pierwszego startu kontenera.

Aby je dostarczyć do kontenera mamy dwie możliwości:

  • pierwsza polega na zbudowaniu nowego obrazu zawierającego skrypty,
  • druga, wygodniejsza, polega na zamontowaniu do uruchamianego kontenera plików lub katalogu ze skryptami.

W poniższym przykładzie sekcja volumes definiuje wpisy w formacie [ścieżka źródłowa]:[ścieżka docelowa]. Podane ścieżki są tylko przykładem, w jaki można zrealizować montowanie plików do kontenera:

db:

  image: postgres:9.4

  environment:

    - POSTGRES_PASSWORD=camunda

    - POSTGRES_USER=camunda

  ports:

    - "5432:5432"

  volumes:

    - ./src/sql/postgres_engine_7.3.0.sql:/docker-entrypoint-initdb.d/postgres_engine_7.3.0.sql

    - ./src/sql/postgres_identity_7.3.0.sql:/docker-entrypoint-initdb.d/postgres_identity_7.3.0.sql

Kilka słów podsumowania

Plik docker-compose.yml może zostać dodany do repozytorium kodu wraz z projektem i posłużyć każdemu z programistów do odtworzenia identycznego środowiska, jak to, które uruchomiliśmy.

W następnym artykule opiszę sposób na dodanie drugiego kontenera z serwerem aplikacyjnym i powiążę go z kontenerem bazy danych.

Dawid Szulist
Autor: Dawid Szulist
Obecnie pracuje na stanowisku DevOps Engineer. Ma doświadczenie jako programista, administrator i lider. Odpowiada za tworzenie nowej infrastruktury opartej o RedHat OpenShift i Azure. Fan wszechobecnej automatyzacji, rozwiązań GitOps i Get Thing Done. Motywuje go dzielenie się wiedzą z innymi. Cechuje go spokój, szczególnie w trakcie sytuacji kryzysowych :) Prywatnie mąż, ojciec dwójki dzieci. Interesuje się kalisteniką i jest początkującym biegaczem :)

    Imię i nazwisko (wymagane)

    Adres email (wymagane)

    Temat

    Treść wiadomości

    komentarze(3)

    avatar
    Pola
    10 maja 2017 Odpowiedz

    Mądre słowa. No i w sumie temat dość na czasie.

    http://e-neonet.com.pl/znak-ce-atex/

    avatar
    Sebastian
    23 września 2018 Odpowiedz

    Po polsku jednak więcej się rozumie, tak wnioskuję w sytuacji gdzie jest tylko kilkoro wyobrażeń i domysłów na temat czegoś (tj. dockera), no i próbujemy przeczytać coś zwięzłego co zawrze esencję tematu, aby wstępnie stanąć na nogi w tym temacie. Dzięki za art.

    Można spytać w jaki sposób osadziłeś video z asciinemy? Tam normalnie jest osadzenie generowanego PNG będącego linkiem do serwisu asciinema.org.

    avatar
    administrator sklepu
    10 listopada 2018 Odpowiedz

    Właśnie testuję to środowisko, jeszcze kilka lat temu nikomu się o tym nie śniło, a tu wirtualizacja wprowadza wiele nowości i świeżości. to najprawdopodobniej będzie hit tego wieku :-) pozdrawiam administrotor www.top-maluszek.pl

    Zostaw komentarz