Docker i docker-compose: wprowadzenie, instalacja

Z Dockerem mam do艣wiadczenie z dw贸ch stron. Pierwsza to u偶ytkownik du偶ych, komercyjnych system贸w zarz膮dzanych przy pomocy tej platformy. Pracuj膮c w sprzeda偶y, odpowiadam za zarz膮dzanie swoimi 艣rodowiskami demonstracyjnymi, w tym ich inicjalizacj臋, aktualizacj臋 i monitorowanie za pomoc膮 Docker’a. Z drugiej strony sam pisz臋 rozmaite aplikacje – amatorskie, niekomercyjne, pracuj膮c w pojedynk臋. Chc臋 w prosty spos贸b zarz膮dza膰 艣rodowiskiem, integracjami i interfejsami, wykorzystaniem zasob贸w sprz臋towych/chmurowych czy stagingiem. W tym wpisie znajdziesz kr贸tkie wprowadzenie do Dockera. Mam nadziej臋 偶e pozwoli Ci ono zdoby膰 pewne intuicyjne zrozumienie tej technologii, a konkretnie polece艅 docker i docker-compose. Napisz臋 te偶 kilka uwag na temat procesu instalacji obu narz臋dzi pod Linuxem.

Wprowadzenie

Czym jest Docker?

Docker to platforma s艂u偶膮ca do konteneryzacji. Kontenery s膮 uruchomion膮 instancj膮 obrazu zawieraj膮cego Twoj膮 (lub cudz膮) aplikacj臋 wraz ze wszystkimi zale偶no艣ciami. Ja przypisuj臋 kontenerom nast臋puj膮ce cechy, wynikaj膮 one z mojego, dosy膰 powierzchownego, zrozumienia tej technologii, ale przydaj膮 si臋 w rozmowach z bardziej technicznymi kole偶ankami i kolegami czy zrozumieniu tutoriali, dokumentacji i cudzego kodu. Kontenery Docker’a s膮:

  • szczelne – a wi臋c jasno definiujesz ich wej艣cia i wyj艣cia (np. wolumeny, czyli pami臋膰, lub porty sieciowe). Wszystko co jest na zewn膮trz kontenera, w tym inne kontenery z tej samej aplikacji, musz膮 z nich korzysta膰 w komunikacji. Docker posiada mocn膮 izolacj臋 (ju偶 przy domy艣lnych ustawieniach), co pozwala, w prosty spos贸b, na uzyskanie bezpiecznego i przejrzystego 艣rodowiska.
  • samowystarczalne – zawieraj膮 system operacyjny i wszystkie niezb臋dne do uruchomienia Twojej aplikacji zale偶no艣ci (cho膰 w przeciwie艅stwie do maszyn wirtualnych Docker korzysta z j膮dra systemu operacyjnego maszyny na kt贸rej jest uruchomiony).
  • zarz膮dzalne – mo偶esz je uruchamia膰, zatrzymywa膰, kasowa膰 i przenosi膰 obrazy kontener贸w. Oznacza to m.in. proste tworzenie, aktualizowanie i nadz贸r nad 艣rodowiskami. Docker 艣wietnie nadaje si臋 do stagingu oraz test贸w.
  • nietrwa艂e – o ile o to odpowiednio nie zadbasz, kontenery nie b臋d膮 persystowa艂y 偶adnych danych. W tym celu musisz skorzysta膰 z wolumen贸w danych lub odr臋bnej bazy danych, kolejki czy innej metody persystencji. Warto wspomnie膰 偶e taka np. baza danych, je偶eli r贸wnie偶 uruchomisz j膮 w kontenerze, b臋dzie i tak musia艂a polega膰 na wolumenach aby persystowa膰 dane. Tutaj ma艂a uwaga na marginesie: nie uruchamiaj produkcyjnych baz danych na Dockerze!

Aby zbudowa膰 obraz kt贸ry p贸藕niej mo偶emy uruchomi膰, tworz膮c z niego kontener (zaznacz臋 to jeszcze raz, kontener to uruchomiona instancja, je偶eli co艣 „le偶y” to jest to obraz) mo偶esz skorzysta膰 z pliku Dockerfile. Wi臋cej o tym pliku p贸藕niej. Tutaj, lub w innym wpisie.

Jedno zadanie

Z wymienionych powy偶ej wzgl臋d贸w kontener Dockera zazwyczaj tworzymy w taki spos贸b, aby realizowa艂 jedno, podstawowe zadania. Wtedy maksymalnie wykorzystujemy zalety tej technologii. Oznacza to natomiast, 偶e nasza aplikacja zazwyczaj posiada wiele kontener贸w. Jeden na back-end, jeden na baz臋 danych (ponownie, raczej nie produkcyjn膮), jeden na InfluxDB, jeden na Grafan臋 etc.. Proces podzia艂u aplikacji na kontenery odpowiedzialne za jedno, jasno okre艣lone zadanie okre艣lane jest jako decouplingu (oddzielenia). W rezultacie, poza stworzeniem obrazu kontenera, zbudowaniem go oraz uruchomieniem b臋dziemy musieli zarz膮dza膰 tak偶e ustawieniami wielu innych kontener贸w tworz膮cych aplikacj臋 Dockerow膮. Do tego s艂u偶y w艂a艣nie Docker Compose.

Czym jest Docker Compose?

Docker Compose to narz臋dzie pozwalaj膮ce w prosty spos贸b zarz膮dza膰 aplikacjami wymagaj膮cymi wielu kontener贸w. Ma dwa najwa偶niejsze elementy.

Pierwszy z nich to komenda docker-compose. Pozwala ona zarz膮dza膰 stanem aplikacji Dockera – a wi臋c zestawem wszystkich kontener贸w opisanych w pliku z definicj膮. Tym poleceniem startujemy, zatrzymujemy czy sprawdzamy stan aplikacji, analogicznie do polecenia docker dla pojedynczego kontenera.

Drugi element to plik docker-compose.yml kt贸ry definiuje wszystkie us艂ugi oraz ich konfiguracj臋 w ramach jednej aplikacji Dockera. W zasadzie jego nazwa mo偶e by膰 dowolna, natomiast je艣li u偶yjesz w艂a艣nie docker-compose.yml to b臋dziesz j膮 m贸g艂 pomija膰 korzystaj膮c z polecenia docker-compose co jest 1) wygodne 2) nie powoduje konflikt贸w, gdy偶 w folderze nadrz臋dnym aplikacji i tak zazwyczaj chcemy mie膰 tylko jeden plik z ustawieniami Docker Compose. Plik ten (co podpowiada nam rozszerzenie) u偶ywa notacji YAML. Ciekawostka – YAML jest rekursywnym akronimem frazy „YAML Ain’t Markup Language”.

Je偶eli nie znasz notacji YAML, polecam po prostu poszuka膰 przyk艂adowych plik贸w docker-compose.yml. Zobaczysz, 偶e notacja jest dosy膰 prosta – wa偶ne s膮 indentacje (czyli wci臋cia kodu, a’la Python), sk艂adnia jest intuicyjna, listy dzia艂aj膮 tak jak w JSON. Sp贸jrzmy na przyk艂adowy plik docker-compose.yml zawarty w dokumentacji:

version: '2.0'
services:
  web:
    build: .
    ports:
    - "5000:5000"
    volumes:
    - .:/code
    - logvolume01:/var/log
    links:
    - redis
  redis:
    image: redis
volumes:
  logvolume01: {}

Oto kilka wniosk贸w kt贸re mo偶na wyci膮gn膮膰 z jego lektury.

  • Mamy trzy sekcje: versions (obowi膮zkowo w ka偶dym docker-compose), services (mi臋so), volumes (persystencja danych).
  • Mamy dwie us艂ugi, a wi臋c w rezultacie uruchomienia tego pliku powstan膮 dwa kontenery: web, a wi臋c zapewne jaka艣 aplikacja webowa oraz redis, czyli baza danych u偶ywaj膮ca modelu klucz-warto艣膰.
  • Us艂uga web bazuje na budowanym obrazie. Atrybut build ma warto艣膰 . (folder bie偶膮cy), oznacza to 偶e w folderze z plikiem docker-compose.yml znajduje si臋 r贸wnie偶 plik Dockerfile przy pomocy kt贸rego ten obraz zbudujemy.
  • Us艂uga redis posiada tylko wskazany obraz (image: redis). Co to oznacza? Je偶eli nie posiadamy zbudowanego obrazu o nazwie redis, Docker wyszuka tak膮 nazw臋 w serwisie Docker Hub (o kt贸rym kilka s艂贸w poni偶ej). W tym konkretnie przypadku pobierze prawdopodobnie oficjalny obraz bazy danych Redis.
  • Oba kontenery s膮 ze sob膮 po艂膮czone, natomiast tutaj istotna uwaga. Mechanizm, z kt贸rego tu skorzystano, oparty jest na atrybucie links. Ten atrybut jest deprecjonowany, czyli przestanie by膰 wspierany przez kt贸r膮艣 z kolejnych wersji Dockera. Docker zaleca korzystanie z user-defined networks, czyli w skr贸cie polegamy na portach wystawianych przez poszczeg贸lne us艂ugi oraz, je艣li to konieczne, odr臋bnych, nazwanych sieciach wirtualnych.

Poza deprecjonowanym atrybutem uwag臋 zwraca te偶 Dockerfile us艂ugi web zlokalizowany w folderze nadrz臋dnym (na tym samym poziomie co docker-compose.yml). Nie jest to miejsce na analiz臋 struktury aplikacji ale w moich projektach Dockerfile jest zawsze w podfolderze nazwanym tak samo jak us艂uga. W tym przyk艂adzie mia艂by 艣cie偶k臋 ~/web/Dockerfile a parametr build us艂ugi web wygl膮da艂by tak: build: ./web.

Docker Hub

Kilka s艂贸w na temat wspomnianego Docker Hub, bo moim zdaniem warto t膮 platform臋 pozna膰. Jest to platforma kt贸ra dostarcza gotowe obrazy Dockera oraz pozwala je przechowywa膰. Mo偶na go por贸wna膰 do GitHuba dla obraz贸w Dockera – r贸wnie偶 sk艂adania polece艅 jest taka sama (docker pull <nazwa obrazu>, docker push <nazwa obrazu>). Dzi臋ki du偶ej liczbie dost臋pnych obraz贸w pozwala na budowanie 艣rodowiska naszej aplikacji, uruchamianie dodatkowych us艂ug czy serwis贸w (np. diagnostycznych) czy po prostu realizacj臋 szybkich projekt贸w. Obrazy mo偶esz tak偶e uruchamia膰 z polecenia docker, tworz膮c samodzielne kontenery z danego obrazu. Nie przestaje mnie to zaskakiwa膰 – wystarczy jeden wiersz w pliku compose aby, jak w przyk艂adzie z dokumentacji, zainstalowa膰 i uruchomi膰 Redis’a wraz z wszystkimi niezb臋dnymi zale偶no艣ciami i ustawieniami. Co wi臋cej, wiele dost臋pnych obraz贸w posiada przyst臋pnie wystawione zmienne 艣rodowiskowe za pomoc膮 kt贸rych mo偶esz je dok艂adnie dostosowa膰 do swoich zastosowa艅. Osobnym zagadnieniem, o kt贸rym by膰 mo偶e kiedy艣 napisz臋, jest zarz膮dzanie zmiennymi 艣rodowiskowymi w Dockerze, np. za pomoc膮 plik贸w .env – w moich projektach znacz膮co usprawniaj膮 one prac臋.

Wracaj膮c do Docker Hub – polecam Tobie zapoznanie si臋 z list膮 dost臋pnych obraz贸w chocia偶by na tej stronie i wykorzystywanie ich w swoich aplikacjach Dockera.

Instalacja

docker

W skr贸cie – aby zainstalowa膰 Dockera polecam skorzysta膰 z bardzo intuicyjnej i zrozumia艂ej instrukcji zawartej w dokumentacji Dockera. Ja cz臋sto do niej wracam, opisuje jasno procedur臋 dla wielu system贸w operacyjnych. Czego dok艂adnie szuka膰? Chocia偶by tego artyku艂u: Install Docker Engine on Ubuntu, przynajmniej je艣li tak jak ja pracujesz na Linuxie Mint (czyli dystrybucji bazuj膮cej na Ubuntu). Zwr贸膰 uwag臋 偶e chcemy zainstalowa膰 Docker Engine – czyli mechanizm pozwalaj膮cy korzysta膰 z technologii Docker. Odbywa si臋 to za pomoc膮 deamon鈥歛 dockerd czyli pracuj膮cego „w tle” procesu obs艂uguj膮cego rozmaite zadania – te od Ciebie i innych aplikacji wykorzystuj膮cych Dockera. Z demonem dockerd komunikujemy si臋 poprzez API oraz CLI.

Dla Windowsa oraz macOS Docker Engine dost臋pny jest w pakiecie Docker Desktop, wcze艣niej znanego jako Docker for Windows i Docker for Mac. Moje do艣wiadczenia z Docker Desktop s膮 kiepskie, chocia偶 dawno ju偶 nie musia艂em z tego rozwi膮zania korzysta膰. Je偶eli nie masz Linuxa polecam odpalenie wirtualnej maszyny w chmurze Google Cloud Platform, Microsoft Azure czy Amazon Web Services. O chmurze Amazona pisa艂em dwukrotnie, w temacie prywatnego, darmowego serwera VPN oraz zdalnego repozytorium GIT. W obu wpisach znajdziesz informacje jak stworzy膰 i po艂膮czy膰 si臋 z instancj膮 EC2 na chmurze Amazona.

Problem z dystrybucj膮 Linuxa

Kiedy instalujesz Dockera na Linuxie jest jedno zastrze偶enie. Dodaj膮c repozytorium Docker’a (Set up the repository, krok 3 z instrukcji powy偶ej) masz wywo艂a膰 nast臋puj膮ce polecenie:

$ sudo add-apt-repository 
  "deb [arch=amd64] https://download.docker.com/linux/ubuntu 
  (lsb_release -cs) 
  stable

To polecenie doda dwa wiersze do pliku /etc/apt/sources.list.d/additional-repositories.list zawieraj膮cego list臋 dodatkowych repozytori贸w. U mnie ten plik wygl膮da tak:

kuba@local:~$ cat /etc/apt/sources.list.d/additional-repositories.list
deb [arch=amd64] https://download.docker.com/linux/ubuntu bionic stable
deb [arch=amd64] https://download.docker.com/linux/ubuntu bionic test

W obu wierszach musia艂em r臋cznie zmieni膰 codename dystrybucji (tutaj warto艣膰 poprawna – bionic). W moim Linuxie Mint rezultat polecenia lsb_release -cs podaj膮cego tzw. kr贸tki codename dystrybucji to tricia. Dla tej dystrybucji Docker nie przygotowa艂 wydania, dlatego nale偶y odszuka膰 w艂a艣ciwy codename dla dystrybucji nadrz臋dnej (Ubuntu). Je偶eli tak jak ja korzystasz z Mint – sprawd藕 tutaj na jakim distro Ubuntu bazuje Twoja wersja. Je偶eli chcesz zobaczy膰 dla jakich dystrybucji wydawany jest docker wejd藕 tutaj).

docker-compose

Instalacja Docker Compose jest prostsza i r贸wnie偶 polecam zapoznanie si臋 z w艂a艣ciw膮 instrukcj膮 na stronie oficjalnej dokumentacji. Polecenie curl kt贸ra pobiera w艂a艣ciwy plik binarny na Twoj膮 maszyn臋 korzysta z komend uname -s i uname -m kt贸re zwracaj膮 odpowiednio nazw臋 kernela (u mnie Linux) oraz architektury (x86_64). A wi臋c nie ma wspomnianego problemu z dystrybucjami.

Po instalacji

Je偶eli pracujesz na Linuxie i nie chcesz dodawa膰 sudo dla ka偶dego wywo艂ania komendy docker i docker-compose to powiniene艣 zadba膰 o mo偶liwo艣膰 wykonywania Dockera przez zwyk艂ego u偶ytkownika (nie root鈥歛). Tutaj r贸wnie偶 oficjalna dokumentacja jest bardzo pomocna. Wystarczy 偶e zrobisz to dla samego Dockera, Docker Compose domy艣lnie nie wymaga uprawnie艅 root鈥歛.

Zweryfikuj 偶e Docker jest zainstalowany poprawnie uruchamiaj膮c obraz „hello-world” :

kuba@local:~$ docker run hello-world
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
0e03bdcc26d7: Pull complete 
Digest: sha256:4cf9c47f86df71d48364001ede3a4fcd85ae80ce02ebad74156906caff5378bc
Status: Downloaded newer image for hello-world:latest

Hello from Docker!
This message shows that your installation appears to be working correctly.
(...)

Teraz przetestujmy jeszcze Docker Compose. Stw贸rz nowy folder oraz dodaj w nim nast臋puj膮cy plik docker-compose.yml:

version: '2.0'
services:
  hello:
    image: hello-world

Jak widzisz ma on bardzo prost膮 struktur臋, z jedn膮 us艂ug膮 (a w zasadzie aplikacj膮) – opart膮 r贸wnie偶 na obrazie testowym hello-world. Teraz mo偶emy wywo艂a膰 komend臋 docker-compose up (pomijamy zazwyczaj wykorzystywany parametr -d, poniewa偶 1) chcemy na bie偶膮co zobaczy膰 output kontenera hello a 2) po wydrukowaniu powitalnego tekstu aplikacja si臋 zatrzyma):

kuba@local:~/test$ docker-compose up
Creating network "test2_default" with the default driver
Creating test2_hello_1 ... done
Attaching to test2_hello_1
hello_1  | 
hello_1  | Hello from Docker!
hello_1  | This message shows that your installation appears to be working correctly.
(...)
hello_1  | For more examples and ideas, visit:
hello_1  |  https://docs.docker.com/get-started/
hello_1  | 
test2_hello_1 exited with code 0
kuba@local:~/test$ cat docker-compose.yml 

Je偶eli u Ciebie wygl膮da to podobnie to gratulacje! 馃帀 Wiem 偶e jest to nieco powierzchowne wprowadzenie ale mam nadziej臋 znalaz艂e艣 tu co艣 pomocnego.

Co dalej?

Dockerfile

Dockerfile o kt贸rym ju偶 wcze艣niej wspomina艂em jest sposobem na tworzenie w艂asnych obraz贸w, a w zasadzie pisanie instrukcji ich tworzenia. Naturalne skojarzenie z Makefile (je艣li kiedy艣 mia艂e艣 t膮 przyjemno艣膰) jest zatem jak najbardziej trafne. W oparciu o instrukcj臋 zawart膮 w Dockerfile polecenie docker build zbuduje Tw贸j obraz kt贸ry po uruchomieniu stanie si臋 kontenerem. Nie jest to artyku艂 o Dockerfile natomiast wspomn臋 tu o dw贸ch jego najwa偶niejszych aspektach – strukturze i optymalizacji.

Struktura Dockerfile

Dockerfile to instrukcja wykonania, krok-po-kroku. Sp贸jrzmy na przyk艂adowy plik (na marginesie, wyj臋ty z moje w艂asnego projektu wi臋c nie jest to state-of-the-art):

# pull official base image
FROM python:3.8.3-alpine

# set work directory
WORKDIR /projekt

ADD ./requirements.txt /projekt/requirements.txt
RUN apk --update add --virtual  build-dependencies libffi-dev openssl-dev python3-dev py-pip build-base
RUN pip install -r requirements.txt
ADD . /projekt

# set environment variables
ENV PYTHONDONTWRITEBYTECODE 1
ENV PYTHONUNBUFFERED 1

CMD ["gunicorn", "-c", "gunicorn_config.py", "run:app"]

Ka偶da linia to jedna instrukcja kt贸r膮 Docker zrealizuje w trakcie budowania. Ca艂y plik opisuje proces od skopiowania obrazu python:alpine (a wi臋c popularnego, generycznego obrazu z minimaln膮 dystrybucj膮 Linuxa i Pythonem) do uruchomienia mojej w艂asnej aplikacji na serwerze Gunicorn.

Je偶eli interesuje Ci臋 tworzenie obraz贸w z aplikacjami Pythona to warto 艣wiadomie podej艣膰 do wyboru obrazu bazowego. Alpine jest bardzo chudy, co ma swoje zalety (o czym za chwil臋) ale ma te偶 wiele wad. Niekt贸rzy wr臋cz wprost odradzaj膮 u偶ycie Alpine do tworzenia obraz贸w w Pythonie.

Optymalizacja i multi-stage build

W Dockerze wa偶na jest optymalizacja rozmiaru obrazu (w rezultacie r贸wnie偶 czasu jego budowania). Ka偶da instrukcja tworzy warstw臋 (layer) w obrazie. Je偶eli w folderze z aplikacj膮 wprowadzimy drobn膮 zmian臋, a folder ten skopiowali艣my w instrukcji nr 3 z 15, to pomimo braku zale偶no艣ci pomi臋dzy t膮 zmian膮 i kolejnymi instrukcjami Docker i tak przebuduje 12 nast臋pnych warstw. Dlatego kiedy piszemy Dockerfile warto wczyta膰 si臋 w zagadnienie optymalizacji i wieloetapowego budowania (multi-stage build) dzi臋ki kt贸rym oszcz臋dzimy sobie wiele czasu i zasob贸w. W moim przyk艂adowym pliku mam prost膮, zdawa艂oby si臋 oczywist膮, optymalizacj臋. Obecnie fragment instrukcji realizuje nast臋puj膮c膮 sekwencj臋:

  1. Skopiuj plik requirements.txt (wymagane biblioteki kt贸rych u偶y艂em) z folderu aplikacji
  2. Doinstaluj to i owo ze wzgl臋du na ubogie wyposa偶enie Linuxa Alpine (nieistotne, nie wchod藕my tu w szczeg贸艂y 馃う馃徎鈥嶁檪锔)
  3. Pobierz i zainstaluje biblioteki z pliku requirements.txt
  4. Skopiuj reszt臋 folderu aplikacji, ustaw zmienne 艣rodowiskowe, uruchom serwer Gunicorn.

Oznacz to 偶e je偶eli zmieni臋 kod aplikacji (nie zmieniaj膮c u偶ytych modu艂贸w) to przy budowaniu obrazu (a wi臋c przeniesieniu wprowadzonych zmian na aplikacj臋 Dockera) zostanie wykonany tylko krok 4. Nie musz臋 chyba pisa膰 偶e te 3 wcze艣niejsze trwaj膮 zdecydowanie d艂u偶ej. M贸j proces przed t膮 zmian膮 wygl膮da艂 tak:

  1. Skopiuj ca艂y folder aplikacji (w tym requirements.txt)
  2. Doinstaluj, pobierz, zainstaluj etc..
  3. Ustaw zmienne i uruchom serwer Gunicorn

Jak si臋 艂atwo domy艣li膰 – najdrobniejsza zmiana w kodzie powodowa艂a przebudowanie ca艂ego obrazu „od zera”, ponowne pobranie dziesi膮tek bibliotek itd.. Zmiana pozwoli艂a mi to skr贸ci膰 czas z kilku minut do kilku sekund.

Multi-stage z kolei, to proces w kt贸rym, w du偶ym skr贸cie, nasz Dockerfile wielokrotnie u偶ywa s艂owa kluczowego FROM. A wi臋c tworzymy obraz w wersji full tylko po to aby np. zbudowa膰 w nim aplikacj臋 i skopiowa膰 j膮 do drugiego, odchudzonego obrazu. Mo偶emy w ten spos贸b pozby膰 si臋 wielu artefakt贸w. Gdybym przepisa艂 sw贸j w艂asny plik zgodnie z podej艣ciem multi-stage, m贸g艂bym np. wyeliminowa膰 wszystkie zale偶no艣ci kt贸rych u偶y艂em do zbudowania bibliotek z finalnego obrazu. Ale to chyba zagadnienie na inny artyku艂… 馃檯馃徎鈥嶁檪锔

Orkiestracja

Tematem kt贸rego w tym wpisie nie poruszy艂em jest tzw. orkiestracja (orchestration). Tak jak Docker Compose pozwala nam zarz膮dza膰 aplikacjami z艂o偶onymi z wielu kontener贸w uruchomionych na jednej maszynie (lub, aby by膰 bardziej precyzyjnym, na jednym Docker Engine), tak orkiestracja jest technologi膮 pozwalaj膮c膮 na zarz膮dzanie aplikacjami Docker dzia艂aj膮cymi na wielu maszynach, w rozproszonych 艣rodowiskach. Jest ona wi臋c kluczowa do osi膮gni臋cia skalowalno艣ci i wysokiej dost臋pno艣ci Twojej aplikacji. W zwi膮zku z tym ten temat ma znacznie je偶eli Twoje aplikacje s膮 ju偶 „na produkcji”.

Najpopularniejszymi narz臋dziami s艂u偶膮cymi do orkiestracji s膮 Docker Swarm (a wi臋c kolejny system autorstwa Dockera) oraz Kubernetes (w skr贸cie – K8s). Kubernetes wywodzi si臋 ze stajni Google, natomiast obecnie jest zarz膮dzany przez Linux Foundation.

Kubernetes posiada opinie systemu bardzo z艂o偶onego i raczej trudnego w opanowaniu, zw艂aszcza bez wcze艣niejszej wiedzy z dziedziny wirtualizacji, konteneryzacji czy w艂a艣nie orkiestracji. Docker Swarm, przynajmniej s膮dz膮c po lekturze dokumentacji, posiada nieco mniejsz膮 barier臋 wej艣cia.

Na koniec wspomn臋 偶e je偶eli jeste艣 u偶ytkownikiem chmury, to ka偶dy z wi臋kszych dostawc贸w posiada swoje w艂asne narz臋dzia do zarz膮dzania orkiestracj膮 kontener贸w:

  • Amazon Elastic Container Service (Amazon ECS )
  • Google Kubernetes Engine (GKI)
  • Azure Container Instances, Azure Container Services czy Azure Kubernetes Services (ACI, ACS, AKS) – tutaj, jak to bywa z Azure, ba艂agan 馃槈

Oczywi艣cie pod mask膮 (co jest ewidentne patrz膮c na ich nazwy) te us艂ugi korzystaj膮 cz臋sto z Swarm lub K8s, natomiast ich przewag膮 jest ergonomia, integracja oraz jednolity, w odniesieniu do pozosta艂ych modu艂贸w chmury, interfejs u偶ytkownika.

TL;DR?

  • Naucz si臋 podstaw komend docker i docker-compose, je艣li chcesz i艣膰 dalej i budowa膰 w艂asne obrazy to szukaj w google o plikach Dockerfile
  • Czytaj oficjaln膮 dokumentacj臋 Dockera – jest premium 猸愨瓙猸愨瓙猸
  • Eksperymentuj z Docker Hub. B臋dziesz zaskoczony jak szybko mo偶na zbudowa膰 z艂o偶one aplikacje dzi臋ki dost臋pnym tam obrazom i odrobin膮 znajomo艣ci docker-compose
  • Sprawdzaj list臋 najpopularniejszych repozytori贸w na GitHubie. Mo偶esz j膮 filtrowa膰 po j臋zyku – zar贸wno programistycznym jak i tym m贸wionym. Jest to o tyle wa偶ne 偶e ostatnio spora cz臋艣膰 czo艂贸wki to pliki w j臋zyku chi艅skim.

Na koniec warto wspomnie膰 o repozytorium awesome-docker na GitHubie w kt贸rym znajdziesz ca艂膮 mas臋 produkt贸w, obraz贸w, 藕r贸de艂, zasob贸w itd. przydatnych w pracy i nauce Dockera. W tej chwili repozytorium posiada ponad 18000 猸 wi臋c z pewno艣ci膮 jest tam wiele cennych informacji.

P.S.

Zdj臋cie tytu艂owe zrobi艂em aparatem Nikon D200 gdzie艣 w ko艂o 2010 roku, w okolicach Alamosa w Kolorado, USA 鉂わ笍 馃嚭馃嚫

Avatar

Autor: kuba

Pracuj臋 w IT, sprzedaj膮c oprogramowanie klasy APS/MES firmom produkcyjnym. Nie jestem software developerem ale odk膮d zacz膮艂em w Turbo Pascalu zawsze co艣 pisz臋 - ostatnio w Pythonie. Lubi臋 technologie, mocn膮 kaw臋 i dobre zdj臋cia 馃

Dodaj komentarz

Tw贸j adres email nie zostanie opublikowany. Pola, kt贸rych wype艂nienie jest wymagane, s膮 oznaczone symbolem *