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