API Dockera

Jeżeli chodzi o wszelkiej maści automatyzację, to zawsze preferuję wykorzystywanie API wszędzie gdzie to tylko możliwe. Wydawanie poleceń na urządzeniu i parsowanie wyniku, który normalnie widzisz na ekranie to prosta droga do wywołania awarii w swojej sieci. Wystarczy, że w wyniku zmieni się jeden znak, a już twoje skrypty przestaną poprawnie działać. API działa inaczej, gdyż w operuje ściśle określonymi metodami i strukturami danych w komunikacji między klientem a aplikacją. Dlatego jedną z pierwszych czynności jakie powinniśmy zrobić to podłączenie API Dockera do interfejsów maszyny, na której uruchomiliśmy usługę.

Parametry pracy Dockera

Jeżeli chcemy dokonać zmiany konfiguracji samej usługi Dockera, to możemy to zrobić na dwa sposoby – za pomocą pliku konfiguracyjnego lub zmieniając parametry wywołania demona w systemowej konfiguracji usługi. Jednak nawet jeżeli zdecydujemy się na stworzenie pliku konfiguracyjnego, to aktywując dostęp za pomocą API, w większości dystrybucji będziemy musieli zmodyfikować także systemowy plik konfiguracyjny, ale o tym za chwilę.

W dystrybucjach, w których zarządzanie usługami odbywa się za pośrednictwem systemd, plik z konfiguracją startową usługi to /lib/systemd/system/docker.service. Znajdziemy w nim parametr o nazwie ExecStart. Definiuje on polecenie uruchamiające proces wraz z parametrami, które zostanie wywołane, aby uruchomić usługę. Możemy dopisywać w nim własne parametry, tak jakbyśmy uruchamiali proces samodzielnie z linii poleceń.

Drugim sposobem na konfigurację parametrów pracy usługi jest stworzenie dedykowanego pliku konfiguracyjnego /etc/docker/daemon.json. Zapisane w nim są te same parametry, które wywołamy z linii poleceń. Sam plik ma format struktury JSON.

Włączamy API Dockera

API Dockera jest zawsze włączone. Komunikujesz się za jego pośrednictwem z procesem dockera przez gniazdo (/var/run/docker.sock). Oznacza to, że po instalacji Dockera komunikacja z procesem jest możliwa jedynie z poziomu użytkownika z odpowiednimi uprawnieniami. Aby umożliwić komunikację poprzez sieć, musimy wskazać interfejsy, na których proces ma nasłuchiwać, podając ich adresy IP. Aby uaktywnić API na wszystkich interfejsach urządzenia, jako parametr podajemy 0.0.0.0.

Parametry startowe usługi znajdziemy w /lib/systemd/system/docker.service. W większości systemów Linux zdefiniowane są one w następującej postaci:

ExecStart=/usr/bin/dockerd -H fd://

Parametr -H służy określaniu, gdzie proces ma nasłuchiwać na połączenia. Jego wartość fd:// oznacza lokalne gniazdo. Tej wartości nie usuwajmy, inaczej przestanie nam działać linia poleceń z konsoli. To, co musimy zrobić, to dodać kolejne wywołanie parametru.

ExecStart=/usr/bin/dockerd -H fd:// -H tcp://0.0.0.0:2376

Domyślnym portem działania usługi jest tcp/2376, ale można go dowolnie zmienić. Alternatywnym sposobem, za pomocą którego możemy zmienić parametry wywołania, ale bez konieczności wprowadzania zmian w systemowym pliku usługi jest utworzenie pliku /etc/systemd/system/docker.service.d/startup_options.conf o następującej zawartości.

[Service]
ExecStart=
ExecStart=/usr/bin/dockerd -H fd:// -H tcp://0.0.0.0:2376

Plik konfiguracyjny Dockera

Innym sposobem określania parametrów pracy Dockera jest zapisanie ich w pliku konfiguracyjnym /etc/docker/daemon.json. Jest to wygodniejsza metoda, gdy liczba parametrów, które konfigurujemy, jest znacząca. Plik ten nie jest domyślnie tworzony podczas instalacji, należy to zrobić samodzielnie, zapisując parametry w strukturze typu JSON. Pamiętajmy, że zdefiniowane w nim parametry nie mogą stać w sprzeczności, czy nawet pokrywać się z tymi, które znajdują się w pliku usługi systemowe. W takim przypadku najlepiej wcześniej zmienić konfigurację usługi systemowej usuwając z niej wszystkie domyślne parametry.

Plik konfiguracyjny Dockera w naszym przypadku będzie bardzo prosty:

{
    "ip": "0.0.0.0",
    "hosts": ["tcp://0.0.0.0:2376", "unix://"],
    "tls": false
}

Parametr tls wymusza wyłączenie szyfrowania połączenia z interfejsem API. Pamiętajmy, aby nigdy takiej konfiguracji nie wdrażać poza swoim domowym labem.


Subscribe
Powiadom o
guest

Witryna wykorzystuje Akismet, aby ograniczyć spam. Dowiedz się więcej jak przetwarzane są dane komentarzy.

1 Komentarz
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
trackback
16/03/2020 09:40

[…] artykule „API Dockera” opisywałem dlaczego warto aktywować API na interfejsach sieciowych maszyny, oraz […]

ZdradziĆ Ci sekretY udanego projektu automatyzacji?

(link otwiera się w nowym oknie)