Wyślij zapytanie Dołącz do Sii

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.

Ocena:
Autor
Avatar
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 :)

Komentarze

  • 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.

  • 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 http://www.top-maluszek.pl

Twój adres e-mail nie zostanie opublikowany.

Może Cię również zainteresować

Pokaż więcej postów

Bądź na bieżąco

Zapisz się do naszego newslettera i otrzymuj najświeższe informacje ze świata Sii.

Otrzymaj ofertę

Jeśli chcesz dowiedzieć się więcej na temat oferty Sii, skontaktuj się z nami.

Wyślij zapytanie Wyślij zapytanie

Get an offer

Natalia Competency Center Director

Dołącz do Sii

Znajdź idealną pracę – zapoznaj się z naszą ofertą rekrutacyjną i aplikuj.

APLIKUJ APLIKUJ

Join Sii

Paweł Process Owner

ZATWIERDŹ

This content is available only in one language version.
You will be redirected to home page.

Are you sure you want to leave this page?