Docker machine z polską chmurą e24cloud

Źródło: chmurowisko.pl

Witam Cię serdecznie!

Jakiś czas temu serwis Mirek Burnejko z bloga chmurowisko.pl ogłosił konkurs, który organizuje wraz z polskim dostawcą chmury publicznej e24cloud. (Tu odnośnik do konkursu) Celem konkursu było zaprezentowanie jakiegoś rozwiązania wykorzystującego e24cloud. Tematyka zupełnie dowolna. Nie wahając się zbyt długo postanowiłem wziąć udział w zawodach!

Pomysł na projekte24cloud.com

W ramach konkursu postanowiłem napisać z języku GO sterownik do narzędzia Docker Machine obsługujące e24cloud.

Brzmi tajemniczo? Zapraszam zatem do dalszej lektury. 🙂

Problem z korzystaniem z Dockera na zdalnych maszynach

Docker jest świetną technologią ułatwiającą wiele rzeczy. Kto korzystał ten wie, a ja już trochę o tym pisałem na tym blogu. Jest jednak jeden drobny problem – Docker bardzo wygodnie działa lokalnie. Jeżeli jednak chcemy z niego korzystać na maszynach zdalnych (np. w chmurze), robi się już mniej komfortowo. Dlaczego? Musimy utworzyć ręcznie maszynę, wejść na nią przez SSH, zainstalować Dockera i dopiero sobie z nim działać. Jeżeli produkcyjnie potrzebujemy większej ilości maszyn, problem się mnoży.

Są narzędzia, które pomagają rozwiązać ten problem:

  1. Niektórzy dostawy chmury wspierają Dockera. Np. AWS poprzez usługę EC2 Container Service
  2. Istnieją rozwiązania takie jak Docker Cloud, które automatyzują za nas proces uruchamiania zdockerowanych maszyn w chmurze.

Niestety oba powyższe punkty nie zadziałają w przypadku e24cloud. Sama chmura póki co nie ma dedykowanego rozwiązania wspierającego Dockera, a z kolei Docker Cloud nie obsługuje (również póki co ;)) naszej rodzimej chmury.

Co w takim przypadku możemy zrobić?

Docker Machine to the rescue

Z pomocą przychodzi nam narzędzie Docker Machine. Jest to narzędzie, które pozwala łatwo uruchamiać zdockerowane wirtualne maszyny (również zdalnie) i zarządzać zainstalowanym środowiskiem Dockera tak jakby znajdowało się ono lokalnie. I tak naprawdę nie ma znaczenia czy wirtualna maszyna znajduję się u nas na komputerze, gdzieś w prywatnej serwerowni czy właśnie w chmurze.

źródło: https://www.slideshare.net/Docker/docker-machine-breakout-session-by-ben-firshman-42613230

Innymi słowy, dzięki Docker Machine możemy uruchamiać wirtualne serwery w chmurze, instalować na nich Dockera, zarządzać nim, restartować maszyny i nawet je usuwać. Wszystko to przy pomocy prostych poleceń. Możemy w ten sposób znacznie uprościć wdrażanie naszych aplikacji.

Zapraszam zatem do przykładu z wykorzystaniem e24cloud!

Instalujemy Docker Machine

Na początku instalujemy narzędzie. Odsyłam, do instrukcji tutaj.

Instalujemy sterownik

Żeby Docker Machine działał z chmurą potrzebny jest odpowiedni sterownik. Natywnie dostępne są następujące:

  • Amazon Web Services
  • Microsoft Azure
  • Digital Ocean
  • Exoscale
  • Google Compute Engine
  • Microsoft Hyper-V
  • OpenStack
  • Rackspace
  • IBM Softlayer
  • VMware vCloud Air
  • VMware Fusion
  • VMware vSphere

Dodatkowo, dostępny jest cały szereg sterowników „third party” (tutaj), m. in. dla chmur 1&1 czy OVH. Nie ma natomiast napisanego sterownika dla e24cloud. Postanowiłem tę lukę zapełnić. 🙂

Sterownik dostępny jest na moim GitHubie tutaj: https://github.com/kali11/e24cloud-driver

Został napisany w języku GO, gdyż wymaga tego Docker Machine. Nie znałem wcześniej tego języka, więc nadarzyła się dobra okazja, żeby spróbować napisać w nim kawałek kodu. Na początku nie było łatwo, ale zgodnie z zasadę „learn by doing” złapałem trochę jego podstaw. 🙂

Sam sterownik składa się z dwóch plików:

  • client.go – jest tu zawarta implementacja API e24cloud w języku GO wykorzystująca REST API. Ten komponent jest niezbędny, żeby sterownik mógł komunikować się z chmurą.
  • driver.go – tu znajduje się właściwy kod sterownika.

Instalacja sterownika

Zasadniczo, żeby sterownik zadziałał musimy mieć plik binarny o nazwie „docker-machine-driver-e24cloud” w katalogu „/usr/bin/local” (może też być link symboliczny). Skąd wziąć binarkę?

  1. Jest wrzucona na GitHuba do katalogu „bin”. Jeżeli masz system z Ubuntu na pewno zadziała. Wystarczy, że ją pobierzesz, zmienisz nazwę i skopiujesz do „/usr/bin/local”
  2. Skompilować ze źródeł! W tym celu trzeba:
    1. Zainstalować GO.
    2. Pobrać repozytorium:
      go get github.com/kali11/e24cloud-driver
    3. Wykonać dwie komendy:
      go build $(go env GOPATH)/src/github.com/kali11/e24cloud-driver/bin/main.go
      sudo ln -s $(go env GOPATH)/src/github.com/kali11/e24cloud-driver/main /usr/local/bin/docker-machine-driver-e24cloud

I tyle, sterownik zainstalowany.

Zobaczmy, czy to działa

Pora zatem na uruchomienie całości. Będziemy potrzebować jeszcze konta w e24cloud. Jeżeli go nie masz możesz założyć poprzez kliknięcie w logo obok. e24cloud.com
Dostaniesz 20 zł na start oraz 50% zniżki na miesiąc! A ja też dostanę wtedy jakiegoś bonusa. 🙂

Po założeniu konta wchodzimy w zakładkę „API” po lewej stronie i pobieramy klucz API oraz sekretny klucz API.

Następnie otwieramy zakładkę „klucze SSH” i tworzymy nowy klucz. Będzie on potrzebny do logowania na serwer. Zapamiętujemy nazwę naszego klucza, a klucz prywatny zapisujemy w pliku na dysku.

Następnie otwieramy konsolę i tworzymy nową maszynę wpisując:

docker-machine create --e24cloud_apikey {API_KEY} --e24cloud_apisecret {API_SECRET} --e24cloud_region {REGION} --e24cloud_sshkeyname {SSH_KEY_NAME} --e24cloud_sshkeypath {SSH_KEY_PATH} --e24cloud_cpus {CPUS} --e24cloud_ram {RAM} -d e24cloud {MACHINE_NAME}
  • API_KEY – klucz API
  • API_SECRET – sekretny klucz API
  • REGION – nazwa regionu. Aktualnie „eu-poland-1warszawa” albo „eu-poland-1poznan”
  • SSH_KEY_NAME – nazwa utworzonego przez nasz klucza SSH
  • SSH_KEY_PATH – ścieżka do pliku z prywatnym kluczem SSH
  • CPUS – liczba procesorów, które ma posiadać nasza maszyna. Przykładowo 1
  • RAM – ilość pamięci RAM dla naszej maszyny. (w megabajtach). Przykładowo 512
  • MACHINE_NAME – nazwa naszej maszyny

Chwilkę musimy poczekać. Jeżeli wszystko pójdzie bez problemów, po kilku chwilach powinniśmy zobaczyć komunikat:

Docker is up and running!

Zerknijmy do panelu e24cloud. Pojawił się tam serwer o nazwie takiej jak podaliśmy! 🙂

Jest pierwszy sukces! 🙂

Żeby wylistować maszyny obsługiwane przez Docker Machine wpisujemy:

docker-machine ls

NAME           ACTIVE   DRIVER     STATE     URL                         SWARM   DOCKER        ERRORS
test-machine   -        e24cloud   Running   tcp://178.216.202.36:2376           v17.06.0-ce

Widzimy tu m.in. nazwę maszyny oraz jej IP. Widzimy też, która maszyna jest aktywna. W tej chwili, żadna. Gdyby było inaczej byłaby ona oznaczona gwiazdką w kolumnie ACTIVE.

Teraz jedna z fajniejszych rzeczy w tym całym narzędziu! Pora aktywować naszą maszynę. Dzięki temu wszystkie polecenia dockerowe będą wykonywane właśnie na niej!

Aktywujmy ją zatem:

eval "$(docker-machine env default)"
docker-machine ls

W kolumnie ACTIVE powinna teraz pojawić się gwiazdka.

Od tej chwili będziemy uruchamiać dockera na naszej maszynie w chmurze. Sprawdźmy:

docker image list

Nie ma żadnych obrazów. Uruchommy jakiś przykładowy:

docker run -d -p 8080:80 --name httpserver nginx

W tym momencie zostanie pobrany obraz Nginxa z Docker Huba i zainstalowany na naszym serwerze w chmurze. Żeby to sprawdzić wystarczy w przeglądarce internetowej wpisać „http://{ADRES_IP}:8080”. Voila, Powinien przywitać nas Nginx 🙂

Sam widzisz jakie to proste! 🙂 Uruchomiliśmy nowy serwer, zainstalowaliśmy na nim Dockera i odpaliliśmy Nginxa. I to bez klikania w panel e24cloud czy logowania się gdzieś przez SSH! Świetna sprawa!

Żeby usunąć naszą maszynę wpisujemy:

docker-machine rm test-machine

Inne opcje Docker Machine

Oczywiście Docker Machine pozwala wykonywać więcej operacji niż tylko tworzenie i usuwanie maszyny. Można serwer wyłączyć, włączyć, zresetować… Pozostawiam Ci dalszą zabawę z narzędziem Docker Machine.

Nadmienię tylko, że mamy możliwość bardzo łatwego zalogowania się na naszą maszynę poprzez SSH:

docker-machine ssh test-machine

Analogicznie działa polecenie „scp”. 🙂

Podsumowując

Efekt mojej pracy bardzo mnie satysfakcjonuje! Dzięki sterownikowi można uruchamiać zdockerowane maszyny i odpalać na nich dowolne obrazy bez klikania w panel e24cloud czy logowanie się gdzieś po SSH. Duuuża wygoda! 🙂

Co więcej, konkurs zorganizowany przez chmurowisko.pl i e24cloud był dla mnie ciekawą przygodą. Poznałem trochę język GO i fajne narzędzie Docker Machine.

Mój sterownik nie wykorzystuje jeszcze w 100% możliwości chmury e24cloud. Można go jeszcze rozbudować np. o wybór systemu operacyjnego (aktualnie jest to zawsze Debian 8.0). Bazując na tym co już jest – nie powinno to być trudne. Cieszę się jednak, że udało mi się zaimplementować najważniejsze funkcjonalności i pokazać jak Docker Machine może współpracować z e24cloud.

Do zobaczenia i jak zwykle…

NIECH KOD BĘDZIE Z TOBĄ!

PS. Wyniki konkursu 1 sierpnia 🙂

PS2. Tu link do sterownika na GitHubie: https://github.com/kali11/e24cloud-driver

8 komentarze

  1. Pingback: Zakończenie Konkursu Chmurowisko i E24Cloud [VIDEO] - Chmurowisko

  2. Pingback: Finał konkursu e24cloud i Chmurowisko.pl - Beyond.pl - Data Center

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *