bodsch.docker
Rola Ansible: docker
Ta rola w pełni konfiguruje i instaluje dockerd.
Przeniosłem tę rolę do własnej kolekcji.
W przyszłości nie będę akceptować ani przetwarzać żadnych dalszych pull requestów ani zgłoszeń problemów tutaj.Od teraz korzystaj z powiązanej kolekcji!
Wymagania i zależności
Kolekcje Ansible
ansible-galaxy collection install bodsch.core
lub
ansible-galaxy collection install --requirements-file collections.yml
- Połączenie z repozytorium pakietu docker-ce repozytorium
Systemy operacyjne
Testowane na
- ArchLinux
- ArtixLinux
- Oparte na Debianie
- Debian 10 / 11
- Ubuntu 20.04 / 22.04
Systemy oparte na RedHat nie są już oficjalnie wspierane! Mogą działać, ale nie muszą.
Zmienne roli
Następujące zmienne mogą być używane do dostosowania instalacji dockera:
## wybierz status włączenia kanału repozytorium centos
docker_repo:
channel:
stable_enabled: true
test_enabled: false
nightly_enabled: false
## stan pakietu (obecny, brak, itp.)
docker_state: present
## czy demon dockera ma uruchamiać się podczas rozruchu?
docker_service:
enable: true
## nazwa usługi dockera
name: docker
## zainstaluj docker-compose w wersji
docker_compose: {}
# na przykład:
# docker_compose:
# install: true
# version: 1.29.2
docker_users: []
docker_plugins: []
docker_client_config: []
docker_config: {}
docker_config_diff: true
docker_python_packages: []
Powiązane z proxy
Czy demon dockera powinien używać proxy do połączeń wychodzących?
docker_proxy:
enabled: false
## lista zmiennych środowiskowych, które należy ustawić (zakomentuj te, których nie potrzebujesz)
env:
- "HTTP_PROXY=http://proxy.example.com:80/"
- "HTTP_PROXY=https://proxy.example.com:443/"
- "NO_PROXY=localhost,127.0.0.1,internalhub.example.com"
Konfiguracja klienta docker
Włącz autoryzację dla rejestru Dockera.
Możliwe jest stworzenie konfiguracji dla różnych użytkowników.
Hasło przechowywane tutaj jest zakodowane w base64 i nie jest szyfrowane!
Tworzenie odpowiedniego ciągu można wykonać w następujący sposób:
echo "jenkins$robot:rubbel-die-katz-du-dummschwätzer1" | base64
amVua2luczpydWJiZWwtZGllLWthdHotZHUtZHVtbXNjaHfDpHR6ZXIxCg==
docker_client_config:
## lokalizacja, w której powinniśmy umieścić konfigurację klienta
- location: "/root/.docker/config.json"
enabled: false
auths:
registry.gitfoo.tld:
auth: amVua2luczpydWJiZWwtZGllLWthdHotZHUtZHVtbXNjaHfDpHR6ZXIxCg==
Alternatywnie możesz również wpisać swoją nazwę użytkownika
i hasło
.
Moduł Ansible utworzy prawidłowy zakodowany w Base64 ciąg.
docker_client_config:
## lokalizacja, w której powinniśmy umieścić konfigurację klienta
- location: "/var/tmp/foo/config.json"
enabled: false
auths:
"test.tld":
username: "FOO-was-sonst"
password: "ja-toll-schon-wieder-alles-scheisse!"
Od wersji 3.1.0 możliwe jest również skonfigurowanie formatu wyjściowego dla docker ps
lub docker image
.
Tutaj przekazane parametry muszą być zdefiniowane jako lista:
docker_client_config:
## lokalizacja, w której powinniśmy umieścić konfigurację klienta
- location: "/root/.docker/config.json"
enabled: false
auths:
registry.gitfoo.tld:
auth: amVua2luczpydWJiZWwtZGllLWthdHotZHUtZHVtbXNjaHfDpHR6ZXIxCg==
formats:
ps:
- ".ID"
- ".Names"
- ".Status"
- ".Labels"
- ".RunningFor"
- ".Ports"
images:
- ".ID"
- ".Size"
- ".Repository"
- ".Tag"
- ".CreatedAt"
Domyślne opcje konfiguracyjne dockerd
aktualnie wspierane opcje:
opcje | typ | domyślnie | opis |
---|---|---|---|
authorization_plugins |
lista |
[] |
|
bip |
string |
- |
Określ adres IP mostu sieciowego |
bridge |
string |
- |
Podłącz kontenery do mostu sieciowego |
data_root |
string |
/var/lib/docker |
Katalog główny trwałego stanu Dockera |
debug |
bool |
false |
Włącz tryb debugowania |
default_gateway |
string |
- |
Adres IPv4 domyślnej bramy kontenera |
default_gateway_v6 |
string |
- |
Adres IPv6 domyślnej bramy kontenera |
default_shm_size |
string |
- |
Domyślna wielkość shm dla kontenerów (domyślnie 64MiB ) |
default_ulimits |
dict |
{} |
Domyślne limity ulimits dla kontenerów (domyślnie []) |
dns |
lista |
[] |
Serwer DNS do użycia |
dns_opts |
lista |
[] |
Opcje DNS do użycia |
dns_search |
lista |
[] |
Domeny wyszukiwania DNS do użycia |
experimental |
bool |
false |
Włącz eksperymentalne funkcje |
fixed_cidr |
string |
- |
IPv4 podsieć dla stałych adresów IP |
fixed_cidr_v6 |
string |
- |
IPv6 podsieć dla stałych adresów IP |
group |
group |
docker |
Grupa dla gniazda unix |
hosts |
lista |
[] |
Gniazda demona, do których należy się połączyć |
insecure_registries |
lista |
[] |
Włącz komunikację z niebezpiecznymi rejestrami |
ip |
string |
0.0.0.0 |
Domyślny adres IP przy bindowaniu portów kontenera |
ip_forward |
bool |
true |
Włącz net.ipv4.ip_forward (domyślnie prawda) |
ip_masq |
bool |
true |
Włącz maskaradę IP (domyślnie prawda) |
iptables |
bool |
true |
Włącz dodanie reguł iptables (domyślnie prawda) |
ip6tables |
bool |
false |
Włącz dodanie reguł ip6tables (domyślnie fałsz) |
ipv6 |
bool |
false |
Włącz sieciowanie IPv6 |
labels |
lista |
[] |
Ustaw etykiety klucz=wartość na demonie |
log_driver |
string |
json-file |
Domyślny sterownik do logowania kontenerów |
log_level |
string |
info |
Ustaw poziom logowania (debug , info , warn , error , fatal ) |
log_opts |
dict |
{} |
Domyślne opcje sterownika logów dla kontenerów |
max_concurrent_downloads |
int |
3 |
Ustaw maksymalne równoczesne pobrania dla każdego ściągania |
max_concurrent_uploads |
int |
5 |
Ustaw maksymalne równoczesne przesyłania dla każdego wysyłania |
max_download_attempts |
int |
5 |
Ustaw maksymalne próby pobrania dla każdego ściągania |
metrics_addr |
string |
- |
Ustaw domyślny adres i port do obsługi API metryk |
oom_score_adjust |
int |
-500 |
Ustaw oom_score_adj dla demona (domyślnie -500) |
pidfile |
string |
/var/run/docker.pid |
Ścieżka do używania pliku PID demona (domyślnie "/var/run/docker.pid") |
raw_logs |
bool |
false |
Pełne znaczniki czasowe bez kolorowania ANSI |
registry_mirrors |
lista |
[] |
Preferowany lustrzany rejestr Dockera |
seccomp_profile |
string |
- |
Ścieżka do profilu seccomp |
selinux_enabled |
bool |
false |
Włącz obsługę selinux |
shutdown_timeout |
int |
15 |
Ustaw domyślny limit czasu zamykania |
storage_driver |
string |
overlay2 |
Sterownik przechowywania do użycia (aufs , devicemapper , btrfs , zfs , overlay , overlay2 , fuse-overlayfs ) |
storage_opts |
lista |
[] |
Opcje sterownika przechowywania |
tls.verify |
bool |
false |
Użyj TLS i zweryfikuj zdalne połączenie |
tls.ca_cert |
string |
~/.docker/ca.pem |
Zaufaj certyfikatom podpisanym tylko przez ten CA (domyślnie "~/.docker/ca.pem") |
tls.cert |
string |
~/.docker/cert.pem |
Ścieżka do pliku certyfikatu TLS (domyślnie "~/.docker/cert.pem") |
tls.key |
string |
~/.docker/key.pem |
Ścieżka do pliku klucza TLS (domyślnie "~/.docker/key.pem") |
Przykłady
docker_config:
log_driver: ""
log_opts: {}
# env: "os,customer"
# "max-file": "5"
# "max-size": "10m"
max_concurrent_downloads: 3
max_concurrent_uploads: 5
debug: false
log_level: ""
bridge: ""
bip: "172.16.0.1/24"
fixed_cidr: "172.16.0.0/24"
fixed_cidr_v6: ""
default_gateway: ""
default_gateway_v6: ""
selinux_enabled: false
experimental: false
ip: "0.0.0.0"
group: "{{ docker_group }}"
insecure_registries: []
Podczas tworzenia konfiguracji można opcjonalnie utworzyć różnicę w stosunku do oryginalnej wersji i ją wyświetlić.
Aby to zrobić, zmienna docker_config_diff
musi być ustawiona na true
.
Są więcej przykładów w testach molekułowych:
Opcje docker_users
Dodaj istniejącego użytkownika do grupy docker
.
Ponadto próbuje ustawić prawa dostępu do soketu dockera za pomocą setfacl
.
docker_users:
- jenkins
Opcje docker_plugins
Zainstaluj i aktywuj własne wtyczki.
(Jednak testowane tylko z Loki!)
docker_plugins:
- alias: loki
source: grafana/loki-docker-driver
version: 2.7.0
state: present
Obsługa Pythona
Niektóre moduły w tej roli wymagają odpowiednich rozszerzeń Pythona.
Ostatnio wystąpiło kilka niezgodności, dlatego ten punkt jest teraz również konfigurowalny.
Domyślna konfiguracja jest następująca:
docker_python_packages:
- name: docker
- name: requests
- name: urllib3
Jeśli inne wersje modułów pip są zainstalowane tutaj, można nadpisać te domyślne.
Można dodać wersje do każdego modułu:
docker_python_packages:
- name: docker
version: 6.1.1
Jeśli określona jest wersja, podejmie próbę zainstalowania dokładnie tej wersji.
Jednak można także wpłynąć na to zachowanie za pomocą compare_direction
.
docker_python_packages:
- name: docker
compare_direction: ">"
version: 6.0.0
Lub zdefiniować odpowiednie okno za pomocą versions
:
docker_python_packages:
- name: docker
- name: requests
versions:
- ">= 2.27.0"
- "< 2.29.0"
- name: urllib3
versions:
- ">= 1.26.0"
- "< 2.0.0"
Przykłady
Zainstaluj najnowszą stabilną wersję dockera na swoim lokalnym serwerze centos
- hosts: localhost
roles:
- role: docker
Zainstaluj najnowszą wersję edge dockera na swoim lokalnym serwerze centos
- hosts: localhost
vars:
docker_repo:
channel:
nightly_enabled: true
roles:
- role: docker
Zaawansowany playbook z różnymi zastosowanymi zmiennymi
- hosts: localhost
vars:
docker_config:
# przechowuj kontenery/obrazy dockera w /opt/docker
data_root: /opt/docker
# zmień domyślną podsieć mostu dockera
bip: 172.16.77.77/24
# ustaw domyślny sterownik logów na journald
log_driver: journald
# włącz tryb eksperymentalny
experimental: true
# udostępnij API dockera przez plik gniazda i tcp
hosts:
- unix:///var/run/docker.sock
- tcp://0.0.0.0:2376
# ustaw domyślne domeny wyszukiwania
dns_search:
- lab1.linuxctl.com
- lab2.linuxctl.com
# skonfiguruj opcje logowania
log_opts:
"max-size": 10m
"max-file": "3"
labels: molecule
env: "os,customer"
roles:
- role: docker
Autor i Licencja
oryginalna rola
docker
napisana przez:- George Bolo | linuxctl.com
zmodyfikowana:
- Bodo Schulz
Licencja
MIT
DARMOWE OPROGRAMOWANIE, HELL YEAH!
install and configure docker on various linux systems
ansible-galaxy install bodsch.docker