docker_rootless

Rôle Ansible Docker sans privilèges

Un rôle Ansible pour installer et configurer un démon Docker fonctionnant sans privilèges root.

N'utilisez rien de cela sans d'abord tester dans un environnement non opérationnel.

Le mode sans privilèges permet de faire fonctionner le démon Docker et les conteneurs en tant qu'utilisateur non root pour réduire les potentielles vulnérabilités dans le démon et l'exécution des conteneurs. (docker)

Remarque Il y a un artefact SLSA présent sous le flux de travail d'action slsa pour vérification.

Exigences

---
rôles:
  - nom: konstruktoid.docker_rootless
    version: v0.53.0
    src: https://github.com/konstruktoid/ansible-role-docker-rootless.git
    scm: git

Exemple de playbook

---
- hôtes: tous
  any_errors_fatal: vrai
  tâches:
    - nom: Inclure le rôle konstruktoid.docker_rootless
      ansible.builtin.import_role:
        nom: konstruktoid.docker_rootless

Variables de rôle avec valeurs par défaut

---
docker_add_alias: vrai
docker_allow_ping: faux
docker_allow_privileged_ports: faux
docker_compose: faux
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: faux
docker_rootful: faux
docker_rootful_opts: faux
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: vrai
docker_url: https://download.docker.com/linux/static/stable/x86_64
docker_user_bashrc: faux
docker_user: dockeruser

Avant d'utiliser ce rôle, vous devez d'abord décider si vous voulez installer Docker en utilisant les paquets disponibles pour la distribution, également connu sous le nom d'installation "avec privilèges", car cela nécessite des permissions root et installe le démon Docker en amont, ou si vous voulez télécharger les binaires statiques et faire une installation manuelle.

Si vous définissez docker_rootful: faux, vous téléchargerez les binaires statiques et ferez une installation manuelle, sans nécessiter de permissions root.

Si docker_rootful: vrai, alors docker_rootful_enabled décidera si le démon doit être activé en tant que service ou non.

docker_service_restart redémarrera le service sans privilèges après que les binaires Docker aient été extraits. Cela peut affecter les conteneurs en cours d'exécution.

Utiliser docker_rootful: vrai et docker_rootful_enabled: vrai donnera lieu à une installation Docker standard, avec un démon Docker supplémentaire fonctionnant en tant qu'utilisateur non root.

Notez que Debian 10 et les versions antérieures nécessitent docker_rootful: faux en raison de dépendances manquantes.

Les variables docker_url, docker_release, docker_compose_url et docker_compose_release définissent où trouver les binaires pertinents et quelle version utiliser pour une installation manuelle.

Vous définissez le nom de l'utilisateur Docker qui sera créé avec la variable docker_user. Cet utilisateur téléchargera et installera les binaires si docker_rootful: faux, sinon l'utilisateur sera celui qui exécutera le script d'installation sans privilèges et démarrera un démon isolé.

Notez que le seul but de docker_user est de faire fonctionner le démon Docker et les conteneurs associés, et non pour l'administration système ou utilisé comme un utilisateur régulier.

docker_release_shasum, docker_release_rootless_shasum et docker_compose_release_shasum sont utilisés pour vérifier les fichiers lors du téléchargement avec le module get_url. Le docker_release_shasum est utilisé pour le fichier Docker .tgz et docker_release_rootless_shasum pour le paquet docker-ce-rootless-extras.

docker_rootful_opts définit les options à appliquer au démon Docker s'il fonctionne en mode avec privilèges ; si non défini, les paramètres dans docker_rootful_service_template seront utilisés.

Si docker_add_alias: vrai, un alias docker sera ajouté au fichier .bashrc ou .bash_aliases de l'utilisateur Ansible. Si faux, un script shell nommé docker_rootless.sh sera créé dans le répertoire personnel de l'utilisateur Ansible. Cela fonctionne comme un substitut à la commande docker afin que l'utilisateur Ansible puisse exécuter l'installation Docker sans privilèges depuis docker_user.

Si docker_compose: vrai, le plugin Docker compose ou docker-compose sera installé. docker_compose_arch est utilisé pour définir l'architecture du binaire docker-compose.

Si docker_user_bashrc: vrai, un fichier .bashrc avec complétion pour les commandes docker et docker compose sera placé dans le répertoire personnel de docker_user.

La variable docker_allow_privileged_ports configure si l'exposition de ports privilégiés (< 1024) est autorisée.

La variable docker_allow_ping configure si les utilisateurs non privilégiés peuvent ouvrir des sockets ICMP echo. Dans certaines distributions, cela n'est pas autorisé, et par conséquent, les conteneurs ne peuvent pas faire de ping à l'extérieur.

Les variables docker_driver_network et docker_driver_port configurent respectivement le driver réseau ou le driver de port de RootlessKit. C'est utile pour optimiser les performances réseau et nécessaire si la propagation de l'IP source est requise. Par défaut, le driver de port builtin n'expose pas l'IP source réelle ; toutes les connexions apparaissent comme provenant de la passerelle Docker (par exemple, 172.19.0.1). Réglez docker_driver_port: slirp4netns pour activer la propagation de l'IP source.

Les variables nommées *_template désignent les emplacements des modèles utilisés, ceci pour faciliter leur remplacement par des modèles personnalisés.

Le modèle le plus important est probablement docker_daemon_json_template: daemon.json.j2, qui est l'emplacement du fichier de configuration Docker daemon.json.

Gestion des conteneurs

Conteneur autonome

Exécuter des conteneurs n'est pas très différent de l'utilisation d'un démon Docker avec privilèges, mais vous devez toujours passer à l'utilisateur non privilégié et adapter tous les chemins aux répertoires de travail de l'utilisateur.

Si docker_add_alias: vrai est utilisé, la commande docker sera disponible comme d'habitude pour l'utilisateur Ansible. Tapez alias dans le shell pour voir la configuration des mots clés.

- nom: Enregistrer les informations utilisateur Docker
  devenir: vrai
  ansible.builtin.user:
    nom: "{{ docker_user }}"
  mode_de_vérification: vrai
  enregistrer: docker_user_info

- nom: Exemple de bloc de conteneur
  environnement:
    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"
  bloc:
    - nom: Conteneur Nginx
      devenir: vrai
      devenir_utilisateur: "{{ docker_user }}"
      community.docker.docker_container:
        nom: nginx
        image: konstruktoid/nginx
        état: démarré
        cap_drop: tous
        capacités:
          - chown
          - dac_override
          - net_bind_service
          - setgid
          - setuid
        pull: vrai
        hostname: "{{ ansible_nodename }}"
        container_default_behavior: compatibilité

Service Docker Compose

- nom: Enregistrer les informations utilisateur Docker
  devenir: vrai
  ansible.builtin.user:
    nom: "{{ docker_user }}"
  mode_de_vérification: vrai
  enregistrer: docker_user_info

- nom: Exemple de bloc Docker Compose
  devenir: vrai
  devenir_utilisateur: "{{ docker_user }}"
  environnement:
    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"
  bloc:
    - nom: Installer les dépendances pip
      ansible.builtin.pip:
        nom:
          - docker<7 # https://github.com/docker/docker-py/issues/3194
          - docker-compose

    - nom: Créer et démarrer des services
      community.docker.docker_compose:
        project_src: /var/tmp/
        fichiers: "{{ docker_user }}-docker-compose.yml"
      enregistrer: compose_output

Tests avec Molecule

Si Molecule Ansible avec le plugin vagrant et logiciels associés est installé, l'exécution de molecule test est supportée.

tox -l listera tous les environnements de test tox disponibles.

Contribuer

Vous voulez contribuer ? Super ! Les contributions sont toujours les bienvenues, peu importe leur taille. Si vous trouvez quelque chose d'étrange, n'hésitez pas à soumettre un problème, améliorer le code en créant une demande de tirage, ou en sponsorisant ce projet.

Licence

Version 2.0 de la licence Apache

Informations sur l'auteur

https://github.com/konstruktoid

À propos du projet

Docker daemon installation, with rootless support

Installer
ansible-galaxy install docker_rootless
Licence
apache-2.0
Téléchargements
7.5k
Propriétaire