W artykule “API Dockera” opisywałem dlaczego warto aktywować API na interfejsach sieciowych maszyny, oraz pokazałem kilka metod jak to zrobić. W różnego rodzaju testach, które przeprowadzam, rozpoczynam je od instalacji systemu operacyjnego. Manualne wprowadzanie za każdym razem zmian w konfiguracji byłoby krótko mówiąc marnowaniem czasu. Pokarzę Ci teraz w jaki sposób zautomatyzować tą pojedynczą czynność za pomocą Ansible.
Automatyczne tworzenie konfiguracji dla API Dockera za pomocą Ansible
Wykorzystując Ansible możemy zautomatyzować wprowadzanie zmian w konfiguracji między innymi systemów operacyjnych i uruchomionych na nich usług.Wielką zaletą tego rozwiązania jest to, że nie jest wymagana instalacja Ansible na urządzeniu, na którym będziemy wprowadzać zmiany. Wystarczy, że zapewniony jest dostęp poprzez SSH. Patrząc na współczesne wydania wszelkich dystrybucji Linuksa wydaje się, że utworzenie konta użytkownika i aktywacja SSH jest.
W naszym playbooku zdefiniujemy trzy zadania:
- Zatrzymanie usługi Dockera jeżeli jest ona uruchomiona
- Utworzenie pliku
/etc/systemd/system/docker.service.d/startup_options.conf
(zgodnie z opisaną w poprzednim artykule metodą) - Ponowne uruchomienie usługi Dockera
Playbook
Playbook pozwalający na skonfigurowanie API Dockera za pomocą Ansible jest bardzo prosty w swojej konstrukcji. Pamiętajmy jednak, że przed wykorzystaniem go w środowiskach produkcyjnych czy testowych należy dodać w nim obsługę błędów.
--- - name: Skonfiguruj API Dockera hosts: all connection: ssh gather_facts: no tasks: - name: Zatrzyaj docker.service systemd: name: docker.service state: stopped enabled: no daemon_reload: yes become: yes become_user: root become_method: sudo - name: Create and upload Docker configuration file from template template: src: templates/daemon.json.j2 dest: /etc/docker/daemon.json owner: root group: root mode: "u=rw,g=r,o=r" become: yes become_user: root become_method: sudo - name: Uruchom docker.service systemd: name: docker.service state: started enabled: yes daemon_reload: yes become: yes become_user: root become_method: sudo
Musimy jeszcze utworzyć szablon pliku, który zostanie wykorzystany w playbooku do utworzenia pliku konfiguracyjnego.
[Service] ExecStart= ExecStart=/usr/bin/dockerd -H fd:// -H tcp://0.0.0.0:2376
Jak to działa?
Nasz przykładowy playbook do konfiguracji API Dockera za pomocą Ansible jest bardzo prosty. Korzystamy w nim z dwóch modułów – systemd
oraz template
. Ich dokładny opis znajdziemy w dokumentacji Ansible. Pierwszy z nich służy do sterowania usługami systemowymi na systemach zarządzanych przez systemd. Wykorzystując parametr state
ustawiamy stan usługi. W pierwszym kroku ją zatrzymujemy, w trzecim zaś uruchamiamy. Parametrem enabled
sterujemy zaś czy usługa ma być uruchamiana przy starcie systemu.
W drugim kroku korzystamy z modułu template
, za pomocą którego wykorzystujemy szablony Jinja2 do tworzenia pliku konfiguracyjnego. Nasz szablon statycznym plikiem, ale Jinja2 pozwala na tworzenie plików bazując na zmiennych czy pętlach. Niezwykle użyteczna funkcjonalność, z którą się na pewno w wielu postach spotkamy. Dla pliku konfiguracyjnego tworzonego na podstawie szablonu ustawiamy też odpowiednie uprawnienia oraz właściciela.
Wykonanie wszystkich trzech zadań wymaga uprawnień root-a. W przedstawionym przykładzie uzyskujemy je poprzez sudo
. Wykonując drobną modyfikację możecie również logować się bezpośrednio na konto root, albo podwyższyć poziom uprawnień przez su
.
[…] artykuł, w którym pokazałem jak skonfigurować API Dockera za pomocą playbooka Ansible zaowocował […]
[…] Osobiście preferuję drugi sposób. Playbook wykonywany jest lokalnie na komputerze, na którym zainstalowany jest Ansible i niezbędne biblioteki. Skrypt łączy się ze zdalnym hostem, na którym uruchomiony jest Docker Engine za pomocą sieci IP. Najlepiej w sposób szyfrowany zabezpieczony protokołem TLS. Taki tryb wymaga oczywiście odpowiedniej konfiguracji Docker Engine na zdalnym systemie by nasłuchiwał nie tylko na lokalnym gnieździe (ang. socket), ale też wskazanym porcie i adresie IP. […]