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
Contents
- ł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.