Docker – pierwsze kroki – część 1/2

Czym jest Docker, jak działają kontenery i jak zainstalować go na swoim systemie. Na te wszystkie pytania odpowiadam w pierwszej części o Dockerze.

Docker is the world’s leading software container platform. Developers use Docker to eliminate “works on my machine” problems when collaborating on code with co-workers. Operators use Docker to run and manage apps side-by-side in isolated containers to get better compute density. Enterprises use Docker to build agile software delivery pipelines to ship new features faster, more securely and with confidence for both Linux and Windows Server apps.

Czym jest Docker?

Ok, mamy suchą definicję bezpośrednio ze strony Dockera. Co jeśli ktoś nadal nie rozumie tej definicji? Jeśli chcielibyśmy opisać to własnymi słowami – Docker to narzędzie, które pozwala nam przede wszystkim na odizolowanie środowiska developerskiego od naszego systemu. Nie musimy zaśmiecać sobie naszej maszyny niepotrzebnymi bibliotekami, aby coś przetestować. Podstawowym elementem Dockera są kontenery, które stanowią całkowicie odrębne i niezależne środowiska. Takie podejście pozwala na uruchomienie wielu izolowanych aplikacji na jednym fizycznym serwerze. Dodatkowo, jeśli pracujemy w zespole, unikniemy sytuacji braku kompatybilności pomiędzy systemami jakich używają nasi współpracownicy. W chwili, gdy jeden z programistów doinstaluje nową bibliotekę, nie będzie musiał przygotowywać 10-cio stronicowego dokumenty „How to install” dla pozostałych członków zespołu.

Dodatkowo wyobraźmy sobie, że prowadzimy równolegle dwa projekty. Jeden nowoczesny, oparty na Symfony3, w którym używamy PHP 7.x i całego innego dobra jakiego chcemy. I drugi – zapomniany przez świat, dziecko niczyje, którego autor wstydzi się do dziś dnia, używający funkcji, których nie pamiętają już najstarsi górale i który – co najważniejsze – nie jest kompatybilny z PHP 7.x. Możemy bawić się z instalacją dwóch maszyn wirtualnych, konfigurowaniem Vagranta lub zainstalowaniem sobie obu wersji PHP i odpowiednim skonfigurowaniem NGINX. Tylko pytanie: po co? Tutaj również z pomocą przychodzi nam Docker, którego możemy dostosować dla każdego z projektów osobno. Docker pozwala również na uruchomienie aplikacji w dwóch różnych środowiskach.

Zalety używania Dockera

Przede wszystkim bezpieczeństwo. Architektura Dockera sprawia, że kontenery są od siebie odizolowane. Pomimo, że działają w obszarze tego samego systemu, są całkowicie niezależne. Zmiany wprowadzone w jednym, nie będą miały żadnego wpływu na pozostałe. Kiedy awarii  ulegnie jeden z kontenerów – np. wystąpi problem podczas instalacji nowej biblioteki – pozostałe aplikacje będą w stanie nienaruszonym.

Kolejną istotną cechą Dockera jest przenośność infrastruktury. Uruchomienie kontenera na kolejnym środowisku (np. po przymusowej reinstalacji systemu 🙂  lub gdy do zespołu dołączy kolejna osoba i musi postawić projekt na swojej maszynie) jest bardzo proste i nie wymaga długich godzin konfigurowania.

Instalacja Dockera – Linux (Ubuntu)

Docker dostępny jest w oficjalnym repozytorium Ubuntu 16.04, lecz należy pamiętać, że może nie być to najnowsza wersja. Zalecana jest aktualizacja z oficjalnego repozytorium Dockera.

Standardowo zaczynamy od aktualizacji bazy pakietów.

sudo apt-get update

Następnie dodajemy klucz GPG oficjalnego repozytorium Dockera do naszego systemu:

sudo apt-key adv --keyserver hkp://p80.pool.sks-keyservers.net:80 --recv-keys 58118E89F3A912897C070ADBF76221572C52609D

Dodajemy repozytorium Dockera do źródeł:

sudo apt-add-repository 'deb https://apt.dockerproject.org/repo ubuntu-xenial main'

Ponownie aktualizujemy bazę pakietów:

sudo apt-get update

Teraz musimy upewnić się, że instalacja odbędzie się z repozytorium Dockera, a nie domyślnego Ubuntu. Aby to sprawdzić używamy polecenia:

apt-cache policy docker-engine

Na naszym ekranie powinien pojawić się następujący komunikat:

docker-engine:
   Zainstalowana: (brak)
   Kandydująca: 17.04.0~ce-0~ubuntu-xenial
   Tabela wersji:
      17.04.0~ce-0~ubuntu-xenial 500
         500 https://apt.dockerproject.org/repo ubuntu-xenial/main amd64 Packages
      17.03.1~ce-0~ubuntu-xenial 500
         500 https://apt.dockerproject.org/repo ubuntu-xenial/main amd64 Packages

W tym przypadku kandydatem do instalacji jest wersja 17.04.0~ce-0~ubuntu-xenial, która pobrana zostanie z oficjalnego repozytorium Dockera (https://apt.dockerproject.org/repo). W takim razie, mamy już wszystko, co jest nam potrzebne do procesu instalacji.

sudo apt-get install -y docker-engine

Voila! Docker jest zainstalowany, daemon powinien wystartować, a proces będzie uruchamiany wraz z systemem. Możemy to sprawdzić poleceniem:

sudo systemctl status docker
● docker.service - Docker Application Container Engine
   Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled)
   Active: active (running) since sob 2017-04-29 10:37:43 CEST; 1h 34min ago
     Docs: https://docs.docker.com
 Main PID: 2263 (dockerd)

Composer – przydatne narzędzie, które warto mieć

Composer to przydatne narzędzie, które pozwala na definiowanie i uruchamianie wielokontenerowych aplikacji Dockera. W łatwy sposób możemy ustawić wszystkie potrzebne parametry, volumeny oraz relacje pomiędzy poszczególnymi kontenerami naszej aplikacji. Następnie przy użyciu jednej komendy uruchomimy wszystkie serwisy, które zdefiniowaliśmy w pliku konfiguracyjnym. Instalacja Composera dla Ubuntu jest bardzo prosta. Wystarczy nam jedna komenda:

sudo curl -L "https://github.com/docker/compose/releases/download/1.25.4/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

Przed rozpoczęciem pracy, należy jeszcze dodać odpowiednie prawa do wykonywania dla Composera:

sudo chmod +x /usr/local/bin/docker-compose

I oto jest. Zainstalowany i gotowy do pracy docker-compose.

Co należy wiedzieć przed rozpoczęciem

Każde narzędzie jakiego używamy wymaga od nas pewnego minimum wiedzy. W przypadku Dockera, musimy nauczyć się, czym jest kontener, volumen, obraz i zmienne środowiskowe.

  • obraz (image) – to nic innego, jak lekki i samodzielny pakiet potrzebnych do uruchomienia oprogramowania bibliotek, zmiennych, kodu oraz plików konfiguracyjnych. Przykładem, może być tutaj „phpdockerio/nginx:latest”, który posiada wszystko, co jest niezbędne do uruchomienia Nginxa,
  • kontener (container) – jest to uruchomiona instancja obrazu. Działa on całkowicie niezależnie od środowiska hosta, mając dostęp jedynie do plików oraz portów,
  • volumen (volume) – służy do współdzielenia plików pomiędzy hostem a kontenerem (oraz pomiędzy kontenerami). Używa się go także do trzymania poza kontenerem, w momencie jego usuwania,
  • zmienne środowiskowe (environment) – są to zmienne, jakie przekazujemy do kontenera w momencie jego budowy np. ustawienie danych do bazy danych MySQL

Mając te podstawowe informacje, bez problemu możesz przystąpić do uruchomienia swojej pierwszej aplikacji używającej Dockera.

Dodaj komentarz

avatar
  Subscribe  
Powiadom o