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
Docker daemon installation, with rootless support
ansible-galaxy install docker_rootless