ssh-key-forwarding
на ваших docker nodesdocker node ls
мають бути доступні за іменами через ssh, тобто. визначити їх у:/etc/hosts or
.ssh/config
dockernodeps
- повертає docker node-id
та container-id
у форматі NODE-ID:CONTAINER-ID
Приклади команд:
Docker5:~$ dockernodeps wikijs_db
Docker5:c36bbfcd0a67
або
manager1# dockernodeps -a base_dnsmasq
manager1:b83fa2105cbf
worker1:29ff6539d824
worker2:489d1cb42f1e
dockerserviceexec
- запуск завдання у працюючому сервісі docker swarm. (uses dockernodeps in PATH as a dependency)
Приклади команд де wikijs_db
ім'я сервісу в стеку:
Docker5:~$ dockerserviceexec wikijs_db date
+ ssh -t Docker5 docker exec -it c36bbfcd0a67 date
Mon Jul 25 01:50:42 EEST 2022
Connection to docker5 closed.
або
Docker5:~$ dockerserviceexec wikijs_db ls
+ ssh -t Docker5 docker exec -it c36bbfcd0a67 ls
bin docker-entrypoint-initdb.d lib libx32 opt run sys usr
boot etc lib32 media proc sbin test var
dev home lib64 mnt root srv tmp
Connection to docker5 closed.
Services including the given in their names will also be displayed with dockernodeps. Це стосується факту, що 'docker service ps --filter "name="' працює як .
Тільки tested для containers with status ``Running'`.
Цей проект взято від [сюди] (https://github.com/rdxmb/docker_swarm_helpers)
Клонуємо проект:
git clone https://github.com/rdxmb/docker_swarm_helpers.git
Кластер складався з 6 нід. docker node ls
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS ENGINE VERSION
k0k4jel9viu6bddcnvpuslda1 Docker1 Ready Active 20.10.16
cgb294gjp02w9bqumzrzzga1d Docker2 Ready Active 20.10.16
nm8ykjji2ej5mux73um72h69t Docker3 Ready Active 20.10.16
xfu4prs6auptuv392zqou90rt Docker4 Ready Active Reachable 20.10.16
f6n6yd6gnx60rzpdoyqqvelg8 * Docker5 Ready Active Leader 20.10.16
itw8nvgwraiqccwepfewqtzk0 Docker6 Ready Active Reachable 20.10.16
Ноди повинні бути доступні на ім'я
Користувач від якого ви працюєте з кластером потрібно додати до групи docker
sudo usermod -aG docker $USER
Генеруємо ssh ключі на manager node (docker5), через яку будемо підключатися.
ssh-keygen -t rsa -b 4096
На пропозицію ввести парольну фразу вбиваємо Enter
В результаті в папці .ssh
користувача отримуємо файли
id_rsa
- приватний ключ
id_rsa.pub
- публічний ключ
Копіюємо id_rsa.pub
в authorized_keys
Переносимо публічний ключ на всі ноди (docker1-4,6) командою
ssh-copy-id -i ~/.ssh/id_rsa.pub you_user@docker1
На Docker5 створюємо файл ~/.ssh/config
наступного вмісту
Host docker1
ForwardAgent yes
Host docker2
ForwardAgent yes
Host docker3
ForwardAgent yes
Host docker4
ForwardAgent yes
Host docker6
ForwardAgent yes
Host docker5
ForwardAgent yes
Копіюємо файлики dockerserviceexec
, dockernodeps
із склонованого проекту у /usr/local/bin
, даємо права на виконання chmod+x
, а також створюємо
симлінки.
sudo ln -s /usr/local/bin/dockernodeps /usr/bin/dockernodeps`
sudo ln -s /usr/local/bin/dockerserviceexec /usr/bin/dockerserviceexec
Запуск ssh-agent
у фоні
eval "$(ssh-agent -s)"
Додаємо SSH key
в ssh-agent
ssh-add ~/.ssh/id_rsa
Після цього можемо використовувати команди dockerserviceexec
, dockernodeps
.
Команди працюватимуть у поточній сесії
ssh
Приклад виконання команди у скрипті:
#!/usr/bin/bash
# start ssh-agent in the background
eval "$(ssh-agent -s)"
#Add SSH key to ssh-agent
ssh-add ~/.ssh/id_rsa
#Search container
#/usr/local/bin/dockernodeps wikijs_db
#Dump database in container
/usr/local/bin/dockerserviceexec wikijs_db ./docker-entrypoint-initdb.d/dump.sh