docker_rootless

Rola Ansible do Docker bez roota

Rola Ansible do zainstalowania i skonfigurowania demonów Docker uruchamianych jako użytkownik bez roota.

Nie używaj tego bez wcześniejszego przetestowania w środowisku, które nie jest operacyjne.

Tryb bez roota pozwala na uruchamianie demona Docker i kontenerów jako użytkownik bez roota, aby ograniczyć potencjalne podatności w demonie i w czasie wykonywania kontenerów. (docker)

Uwaga Istnieje artefakt SLSA w ramach workflow akcji slsa do weryfikacji.

Wymagania

---
roles:
  - name: konstruktoid.docker_rootless
    version: v0.53.0
    src: https://github.com/konstruktoid/ansible-role-docker-rootless.git
    scm: git

Przykład Playbooka

---
- hosts: all
  any_errors_fatal: true
  tasks:
    - name: Włącz rolę konstruktoid.docker_rootless
      ansible.builtin.import_role:
        name: konstruktoid.docker_rootless

Zmienne roli z domyślnymi wartościami

---
docker_add_alias: true
docker_allow_ping: false
docker_allow_privileged_ports: false
docker_compose: false
docker_compose_arch: x86_64
docker_compose_release: v2.29.2
docker_compose_release_shasum: d037bd4937bf18fba67cff4366e084ee125a3e15c25657ee1aeceff8db3672b4
docker_compose_url: https://github.com/docker/compose/releases/download
docker_daemon_json_template: daemon.json.j2
docker_driver_network: slirp4netns
docker_driver_port: builtin
docker_release: 27.1.2
docker_release_rootless_shasum: 5565502b4fab26266327f5a018185f5a98cc1714c975b943dcb7c4365cdcdb25
docker_release_shasum: a7fff574037af22bd0239e7e5601c312d9fe9c55e2b9cf5ddea86d5499a4de88
docker_repository_template: docker.repo.j2
docker_rootful_enabled: false
docker_rootful: false
docker_rootful_opts: false
docker_rootful_service_template: docker_rootful.service.j2
docker_rootless_script_template: docker_rootless.sh.j2
docker_rootless_service_template: docker_rootless.service.j2
docker_service_restart: true
docker_url: https://download.docker.com/linux/static/stable/x86_64
docker_user_bashrc: false
docker_user: dockeruser

Zanim użyjesz tej roli, musisz zdecydować, czy chcesz zainstalować Docker za pomocą pakietów dostępnych w dystrybucji, znanych jako instalacja "rootful", ponieważ wymaga uprawnień root i instaluje główny demon Docker, czy chcesz pobrać statyczne pliki binarne i dokonać ręcznej instalacji.

Jeśli ustawisz docker_rootful: false, pobierzesz statyczne pliki binarne i dokonasz ręcznej instalacji, nie wymagając żadnych uprawnień root.

Jeśli docker_rootful: true, to docker_rootful_enabled zdecyduje, czy demon powinien być włączony jako usługa.

docker_service_restart zrestartuje usługę rootless po wydobyciu plików binarnych Docker. Może to wpłynąć na działające kontenery.

Użycie docker_rootful: true i docker_rootful_enabled: true spowoduje standardową instalację Docker, z dodatkowym demonem Docker, działającym jako użytkownik bez roota.

Zauważ, że Debian 10 i wcześniejsze wersje wymagają docker_rootful: false z powodu brakujących zależności.

Zmienne docker_url, docker_release, docker_compose_url i docker_compose_release określają, gdzie znaleźć odpowiednie pliki binarne i którą wersję powinieneś użyć podczas ręcznej instalacji.

Definiujesz nazwę użytkownika Docker, który będzie tworzony za pomocą zmiennej docker_user. Użytkownik ten pobierze i zainstaluje pliki binarne, jeśli docker_rootful: false, w przeciwnym razie użytkownik będzie ten, który uruchomi skrypt instalacji rootless i uruchomi izolowany demon.

Zauważ, że jedynym celem docker_user jest uruchamianie demona Docker oraz powiązanych kontenerów, a nie do administracji systemem lub jako zwykły użytkownik.

docker_release_shasum, docker_release_rootless_shasum i docker_compose_release_shasum służą do weryfikacji plików po ich pobraniu przy użyciu modułu get_url. docker_release_shasum jest używany dla pliku Docker .tgz, a docker_release_rootless_shasum dla pakietu docker-ce-rootless-extras.

docker_rootful_opts to opcje, które mają być zastosowane do demona Docker, jeśli działa w trybie rootful, jeśli nie ustawione, zostaną użyte ustawienia w docker_rootful_service_template.

Jeśli docker_add_alias: true, to alias docker zostanie dodany do .bashrc lub .bash_aliases użytkownika Ansible. Jeśli false, skrypt powłoki o nazwie docker_rootless.sh zostanie utworzony w katalogu domowym użytkownika Ansible. Działa to jako zamiennik polecenia docker, aby użytkownik Ansible mógł wykonać instalację rootless Docker z użytkownika docker_user.

Jeśli docker_compose: true, plugin Docker compose lub docker-compose zostanie zainstalowany. docker_compose_arch jest używane do określenia architektury pliku binarnego docker-compose.

Jeśli docker_user_bashrc: true, do katalogu domowego docker_user zostanie umieszczona .bashrc z autouzupełnianiem dla poleceń docker i docker compose.

Zmienna docker_allow_privileged_ports konfiguruje, czy dozwolone jest wykorzystywanie portów uprzywilejowanych (< 1024).

Zmienna docker_allow_ping konfiguruje, czy użytkownicy nieuprzywilejowani mogą otwierać gniazdka ICMP echo. W niektórych dystrybucjach nie jest to dozwolone, przez co kontenery nie mogą pingować na zewnątrz.

Zmienne docker_driver_network i docker_driver_port konfigurują sterownik sieciowy RootlessKit lub sterownik portów RootlessKit, odpowiednio. Jest to przydatne do optymalizacji wydajności sieci i konieczne, jeśli propagacja adresów IP źródłowych jest wymagana. Domyślnie, wbudowany sterownik portów nie ujawnia rzeczywistego adresu IP źródłowego; zamiast tego, wszystkie połączenia wydają się pochodzić od bramy Docker (np. 172.19.0.1). Ustaw docker_driver_port: slirp4netns, aby włączyć propagację adresów IP źródłowych.

Zmienne nazwane *_template to lokalizacje t szablonów, aby ułatwić ich zastąpienie własnymi.

Najważniejszym szablonem jest prawdopodobnie docker_daemon_json_template: daemon.json.j2, który jest lokalizacją szablonu pliku konfiguracyjnego Docker daemon.json.

Zarządzanie kontenerami

Kontener samodzielny

Uruchamianie kontenerów nie różni się zbytnio od używania demona Docker w trybie rootful, ale nadal musisz przejść do nieuprzywilejowanego użytkownika i dostosować wszelkie ścieżki do folderów roboczych tego użytkownika.

Jeśli używasz docker_add_alias: true, polecenie docker będzie dostępne jak zwykle dla użytkownika Ansible. Wpisz alias w powłoce, aby zobaczyć skonfigurowane aliasy.

- name: Zarejestruj informacje o użytkowniku Docker
  become: true
  ansible.builtin.user:
    name: "{{ docker_user }}"
  check_mode: true
  register: docker_user_info

- name: Przykład bloku kontenera
  environment:
    XDG_RUNTIME_DIR: "/run/user/{{ docker_user_info.uid }}"
    PATH: "{{ docker_user_info.home }}/bin:{{ ansible_env.PATH }}"
    DOCKER_HOST: "unix:///run/user/{{ docker_user_info.uid }}/docker.sock"
  block:
    - name: Kontener Nginx
      become: true
      become_user: "{{ docker_user }}"
      community.docker.docker_container:
        name: nginx
        image: konstruktoid/nginx
        state: started
        cap_drop: all
        capabilities:
          - chown
          - dac_override
          - net_bind_service
          - setgid
          - setuid
        pull: true
        hostname: "{{ ansible_nodename }}"
        container_default_behavior: compatibility

Usługa Docker Compose

- name: Zarejestruj informacje o użytkowniku Docker
  become: true
  ansible.builtin.user:
    name: "{{ docker_user }}"
  check_mode: true
  register: docker_user_info

- name: Przykład bloku Docker Compose
  become: true
  become_user: "{{ docker_user }}"
  environment:
    XDG_RUNTIME_DIR: /run/user/{{ docker_user_info.uid }}
    PATH: "{{ docker_user_info.home }}/bin:{{ ansible_env.PATH }}"
    DOCKER_HOST: "unix:///run/user/{{ docker_user_info.uid }}/docker.sock"
  block:
    - name: Zainstaluj zależności pip
      ansible.builtin.pip:
        name:
          - docker<7 # https://github.com/docker/docker-py/issues/3194
          - docker-compose

    - name: Utwórz i uruchom usługi
      community.docker.docker_compose:
        project_src: /var/tmp/
        files: "{{ docker_user }}-docker-compose.yml"
      register: compose_output

Testowanie z molekułami

Jeśli Ansible Molecule z wtyczką vagrant i powiązanym oprogramowaniem jest zainstalowane, można uruchomić molecule test.

tox -l wyświetli wszystkie dostępne środowiska testowe tox.

Wkład

Chcesz wnieść swój wkład? Świetnie! Wkłady są zawsze mile widziane, bez względu na to, jak duże lub małe. Jeśli znalazłeś coś niepokojącego, śmiało zgłoś problem, popraw kod, otwierając pull request, lub wsparcie tego projektu.

Licencja

Wersja 2.0 licencji Apache

Informacje o autorach

https://github.com/konstruktoid

O projekcie

Docker daemon installation, with rootless support

Zainstaluj
ansible-galaxy install docker_rootless
Licencja
apache-2.0
Pobrania
7.5k
Właściciel