Oprogramowanie, Test

Docker UI, kontenery i korzyści, różnice z VAGRAT, przykład użycia z python i ubuntu


Przy tworzeniu środowiska deweloperskiego na potrzeby kolejnego projektu bardzo pomocny okazuje się VAGRANT, co możesz zyskać korzystając z Docker'a?

Poniżej więcej informacji odnośnie różnic z Vagrant'em, korzyści ze stosowania kontenerów Docker wraz z przykładem użycia projektu python na ubuntu

Korzyści ze stosowania Docker'a

  • łatwość tworzenia środowisk deweloperskich
  • uproszczenie procesów dostarczania gotowych aplikacji na docelowe środowiska.

VAGRANT vs Kontenery Docker

Jeśli już używasz Vagrant'a, korzystasz ze swojego komputera oraz oprogramowania, jak:

  • system operacyjny
  • wiele różnych usług, jak baz danych etc.

Utrzymanie kilku środowisk dla wielu projektów bywa kłopotliwe w utrzymaniu i konfiguracji. Vagrant w pewien sposób rozwiązuje ten problem przez tworzenie wirtualnego środowiska instalowanego za pomocą odpowiednich skryptów definiujące wszystkie zależności, potrzebny jest mocny sprzęt żeby dla środowiska w trybie wirtualizacji. Kilka takich środowisk na laptopie obciąża zauważalnie zasoby CPU, RAM, SSD

Kontenery mają przewagę gdy na serwerze masz różne aplikacje wymagające różnych wersji np. bazy danych itp

O czym należy pamiętać, kontenery

  • każdy kontener powinien mieć jeden proces, np tylko serwis bazy danych: mysql, postgresql
  • nie powinno się logować do kontenera i cokolwiek w nim instalować, wystarczy stworzyć Dockerfile i w nim umieścić instalacje rzeczy których potrzebujesz, w przeciwnym wypadku każdorazowe postawienie kontenera, czy przeniesienie go, będzie wymagało reinstalacji tego wszystkiego na nowo, jak i wszystko będzie w różnych wersjach
  • aby kontener zatrzymał sie po wystartowaniu, musi mieć ustawiony CMD lub ENTRYPOINT
  • jeden proces na kontener

Przykład użycia, ubuntu

Docker sam w sobie działa jak upstart z ubuntu

sudo service php5-fpm restart

jak postawisz więcej usług, nie będziesz w łatwy sposób wiedział co działa, a co nie, musisz się zalogować do kontenera

docker exec -it nazwa_kontenera bash

oraz wykonywać komendy wewnątrz niego.

Gdyby to wszystko było rozdzielone wystarczyło by wykonać

 docker ps -a

i już byś wiedział co ci działa a co nie i jaki jest exit code.

Dodatkowo Docker do tego jednego procesu przekazuje odpowiedni exit code, podczas zatrzymywania, dzięki czemu usługi zatrzymują się w sposób kontrolowany, a nie poprzez zabijanie procesu. Docker czeka 10 sekund na odpowiedź procesu z kontenera, a potem wszystko wewnątrz zabija.

Dlatego można "łączyć" kontenery między sobą, między sieciami, między hostami. Kontenery możesz zbindować pod ip/port lokalnie, eg 127.0.0.1:80:80 w rezultacie da ci dostęp poprzez localhost do twojego kontenera, jakiekolwiek będzie miał IP po restarcie.
Gdy usługi są rozdzielone na osobne kontenery, można skalować system API Docker'a (docker scale).

Do zarządzania więcej niż jednym kontenerem służy docker-compose

Docker z python i django

Składnia pliku fig.yml opisana jest na stronie projektu. Pozwala m.in. zamontować nasz lokalny kod za pomocą komendy volume - wtedy nie trzeba budować nowego obrazu dla kolejnych zmian. Na stronie fig'a jest też przewodnik dla Django, w którym wykorzystano standardową konfigurację bazy danych kierując ją na domyślnie działający obraz bazy postgres.

Integracje

Warte wspomnienia jest też otwarcie się usługodawców na takie rozwiązania:
https://www.plesk.com/extensions/docker/

Instalacja z kreatorem

After ...

Niewystarczajca ilość pamięci podczas startu Docker’a?

2GB RAM są dostępne

po ...

Następny problem z brakiem pamięci:

po ...

po ...

po

Instalacja kontenera

Stworzenie nowego projektu dla Docker: Phunc

Wnioski

Powyżej przedstawiłem projekt z Docker UI, kontenery i korzyści, różnice z VAGRAT, przykład użycia z python i ubuntu, mam nadzieję, że informacje okazały się pomocne, w przyszłości zamieszczę więcej informacji o innych korzyściach.

Tom
Tagi: , , ,