Marcin Lewandowski
Marcin Lewandowski
Programista PHP ( Symfony ), blogger, trener oraz miłośnik kawy. Na co dzień pracuję z Symfony, RabbitMQ, ElasticSearch, Node.js, Redis, Docker, MySQL.

Vagrant i Docker czyli popularne metody wirtualizacji

Vagrant i Docker czyli popularne metody wirtualizacji

Wirtualizacja zawsze kojarzyła mi się z wirtualną maszyną na której testowałem nowe wydanie linux-a lub uruchamiałem Windows-a. W przypadku gdy zarządzamy jakimiś dużym serwerem, wirtualizacja świetnie się sprawdza do stawiania kolejnych wirtualnych maszyn. Wystarczy przygotować wzorcową wirtualkę i ją kopiować dla nowych projektów.

Po co wirtualizacja deweloperom

Wirtualizacja środowisk programistycznych oraz produkcyjnych ma wielu zwolenników oraz przeciwników. Każdy ma swoje racje i często będzie bronił ich do upadłego nie zwracając uwagi na wady i zalety tych rozwiązań. Ja skupię się na plusach tych rozwiązań bowiem chcę was zachęcić do przetestowania ich na własnej skórze co pozwoli wam wyrobić sobie własną opinię, a nie polegać tylko na opinii innych.

Teraz do rzeczy, czyli po co nam w ogóle ta wirtualizacja? Jako że na codzień zajmuję się pisaniem aplikacji webowych to potrzebuję mieć zainstalowane odpowiednie oprogramowanie do pracy: Apache / Nginx, php, node.js, MySQL, PostgreSQL i kilka innych rzeczy. Ładna kolekcja z tego się zrobiła i jeśli miałbym teraz wymienić laptopa na którym pracuję, to jeden dzień z życiorysu trzeba poświęcić na instalację i konfigurację wszystkich tych narzędzi. Podobnie sprawa się ma gdy zmieniamy pracę. Jeśli firma nie dostarczy nam skonfigurowanego sprzętu to zapewne będziemy musieli poświęcić chwilę czasu na instalację i konfigurację oprogramowania używanego w danej firmie.

Należy też wspomnieć o konieczności żonglowania wersjami czy to php, node.js czy też wymianą apache na nginx-a, aby nasze środowisko było jak najbardziej zbliżone do produkcyjnego. Szanse że będzie identyczne raczej są niewielkie 🙁

Powyższe sytuacje wydają Ci się znajome ? Pewnie tak, jeśli nie to jesteś szczęściarzem 😉 Częściowym rozwiązaniem tego problemu jest właśnie wirtualizacja, bowiem o ile wygodniejsze jest posiadanie wirtualnej maszyny, która jest kopią środowiska produkcyjnego. Jednak przechowywanie dziesiątek wirtualnych maszyn pod każdy projekt wydaje się mało optymalne choć nie niemożliwe. Koszty pamięci są dość niskie więc lepiej będzie przechowywać kopie wirtualnych maszyn na jakimś dysku wspólnym niż poświęcić czas nowo zatrudnionego programisty na konfigurację środowiska.

Jednak jest lepsze rozwiązanie tego problemu, nazywa się Vagrant / Docker. Gdyż nie musimy już utrzymywać całych wirtualnych maszyn, a wystarczy specjalny plik który opisuje całą konfigurację. Na bazie takich plików jest budowane całe środowisko uruchomieniowe danego projektu.

Vagrant

Vagrant to narzędzie, które umożliwia na podstawie plików konfiguracyjnych utworzenie i skonfigurowanie maszyny wirtualnej. Jako że mamy do czynienia z wirtualną maszyną np. VirtualBox-em, pozwala to uniezależnić się od środowiska na którym pracujemy. Więc niezależnie czy używasz Windows-a, Linux-a czy OS X to będziesz mógł spokojnie pracować z Vagrant-em.

Korzystanie z Vagranta jest banalnie proste, instalujemy odpowiednią wersję dla naszego systemu operacyjnego. I zasadniczo wykorzystując tylko jeden plik konfiguracyjny możemy zbudować środowisko dedykowane dla danego projektu. Plik konfiguracyjny zawiera w sobie informację o obrazie systemu operacyjnego z jakiego ma skorzystać, jakie pakiety doinstalować, jak skonfigurować sieć i usługi oraz wiele innych parametrów. A do zrobienia tego wszystkiego wystarczy polecenie vagrant up.

Docker

Docker zaczynał podobnie jak Vagrant jednak idea stojąca za tym rozwiązaniem była nieco inna. Bowiem Docker skierował się ku konteneryzacji, czyli zamykaniu w lekkich małych i przenośnych kontenerach tylko tych elementów środowiska które mają być wymienne. Tak więc np. każda wersja php jest zamknięta w osobnym kontenerze dzięki czemu możemy łatwo i szybko je wymieniać lub działać obok siebie niezależnie.

Poniżej film, który pokazuje w prosty sposób zasadę działania Docker-a i ideę konteneryzacji.

Podobnie jak w przypadku Vagrant-a, nie utrzymujemy całych obrazów w projektach a jedynie pliki konfiguracyjne. Na bazie których Docker buduje środowisko i odpowiednio je konfiguruje.

Warto też wspomnieć że w odróżnieniu od Vagrant-a Docker na linuks-ach nie potrzebuje już wirtualnej maszyny. Kontenery Docker-a na linuks-ach są uruchamiane jako procesy dzięki czemu narzut jest minimalny. Zalety konteneryzacji dostrzegł także MS i w Windows 10 oraz Windows Server 2016 mamy wsparcie dla Docker-a.

Następnym razem zajmiemy się uruchomieniem wirtualnej maszyny wykorzystując Vagrant-a.