Uruchamiamy API Dockera za pomocą Ansible

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:

  1. Zatrzymanie usługi Dockera jeżeli jest ona uruchomiona
  2. Utworzenie pliku /etc/systemd/system/docker.service.d/startup_options.conf (zgodnie z opisaną w poprzednim artykule metodą)
  3. 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.


Subscribe
Powiadom o
guest

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

2 komentarzy
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
trackback
19/03/2020 11:21

[…] artykuł, w którym pokazałem jak skonfigurować API Dockera za pomocą playbooka Ansible zaowocował […]

trackback
08/01/2021 09:43

[…] 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. […]

ZdradziĆ Ci sekretY udanego projektu automatyzacji?

(link otwiera się w nowym oknie)