Cheat Code - pifou25/docker-jeedom GitHub Wiki
ceci pour inspecter tous les containers, trouver leur nom & adresse IP respectifs:
docker ps -q | xargs -n 1 docker inspect --format '{{ .Name }} {{range .NetworkSettings.Networks}} {{.IPAddress}}{{end}}' | sed 's#^/##';
cela pour inspecter tous les containers, trouver leur labels:
docker ps -q | xargs -n 1 docker inspect -f '{{ printf "%s\n" .Name }} {{ range $k, $v := .Config.Labels -}}{{ printf "\t%s = %s\n" $k $v }}{{end }}'
Et idem pour avoir la liste des variables d'environnement des containers:
docker ps -q | xargs -n 1 docker inspect -f '{{ printf "%s\n" .Name }} {{ range $k, $v := .Config.Env -}}{{ printf "\t%d = %s\n" $k $v }}{{end }}'
Et idem pour la liste des volumes (source & destination)
docker ps -a --format '{{ .ID }}' | xargs -I {} docker inspect -f '{{ .Name }}{{ printf "\n" }}{{ range .Mounts }}{{ printf "\n\t" }}{{ .Type }} {{ if eq .Type "bind" }}{{ .Source }}{{ end }}{{ .Name }} => {{ .Destination }}{{ end }}{{ printf "\n" }}' {}
Get docker logs size:
sudo sh -c "du -ch /var/lib/docker/containers/*/*-json.log"
Utiliser un container docker mosquitto pour générer un fichier password dans mon hôte:
docker run -ti --rm -v $PWD:/tmp eclipse-mosquitto mosquitto_passwd -c /tmp/file_name user_name
Utiliser un container MariaDB (ou MySql) existant pour exécuter du code SQL: avec docker il faut utiliser le nom du conteneur (ici il sera de la forme nginx_db_1, soit [stack]_[service]_1) mais avec compose on n'utilise juste que le nom du service:
docker compose exec -ti db mysql -p
Installer les dépendances PHP - Composer dans notre répertoire courant, sans avoir installé ni PHP ni Composer:
docker run --rm -v $PWD:/app composer install
Créer une bdd et un utilisateur avec tous les droits dessus :
CREATE USER 'dbuser'@'%' IDENTIFIED BY 'mypassword';
CREATE DATABASE IF NOT EXISTS `dbname`;
GRANT ALL PRIVILEGES ON `dbname`.* TO 'dbuser'@'%';
flush privileges;
Change password :
ALTER USER 'userName'@'localhost' IDENTIFIED BY 'New-Password-Here';
Je souhaite importer un fichier volumineux dans une db mariadb qui tourne déjà. Je ne veux donc pas directement copier le fichier dans le container mariadb. A la place, je vais lancer un 2e container mariadb lié au 1er sur le même réseau, et avec un volume partagé contenant le fichier.
// go to dir
cd /tmp/wher/is/my/backup
// launch mariadb with same network <docker-network_default> and host volume share
docker run -ti --rm -v "$PWD:/data" --network docker-network_default mariadb bash
// goto data into container
cd /data
// import data sql file into <docker_mariadb-1> where other container name is the hostname
mariadb --host docker-mariadb-1 --user root -p --skip-ssl --database mydatabase < myfile.sql
Executer une commande SQL (ici créer un utilisateur) avec l'option -e
mysql --host=${MYSQL_HOST} --user=${MYSQL_USER} --password=${MYSQL_PASSWORD} -e "CREATE USER 'tst'@'localhost' IDENTIFIED BY 'tst';"
Exporter une bdd dans un fichier SQL
mysqldump --host=db --port=3306 --user=jeedom --password='jeedom' --databases jeedom > /var/www/html/DB_backup.sql
Utilitaire pour générer le fichier d'authentification pour le broquer MQTT (le fichier contient le login:mot de passe crypté)
https://mosquitto.org/man/mosquitto_passwd-1.html
Syntaxe pour générer le fichier passtest
pour l'utilisateur jeedom
: l'utilitaire demandera alors d'entrer le mot de passe (2 fois pour confirmation) et génèrera le fichier passtest dans le répertoire courant.
mosquitto_passwd -c passtest jeedom
tar = copier des fichiers dans une seule archive ( 1 fichier ); gz = compression du fichier archive. Regrouper les 2 opérations: on peut ajouter une liste de fichiers / répertoires à exclure de la sauvegarde.
tar czf my_archive.tar.gz --exclude={"logs","docker-compose","*.log","*.log.gz"} data_to_save
Opération inverse:
tar -xvf -C destination file
Pour MySQL - ou autre outil de sauvegarde - on peut enchainer les 2 commandes, mysqldump + gzip:
mysqldump -h localhost -u username -ppassword -d dbname | gzip -c > /tmp/archive.sql.gz
(attention, pour mysql, pas d'espace entre -p et la valeur du mot de passe. Simples quotes pour se protéger des caractères spéciaux.)
Opération inverse: gunzip + import du fichier SQL dans la bdd
gunzip < /tmp/archive.sql.gz | mysql -h localhost -u username -ppassword -d dbname
Affichage d'une 'progress-bar' avec pv
lors de l'export / import : après pv il faut estimer la taille finale (non zippée)
mysqldump -h hostname -u username -p'clear_password' \
--single-transaction --quick --hex-blob --routines --triggers --no-create-db --compress database_name | pv -W -s 10g | gzip -c > /tmp/archive.prod.sql.gz
gunzip < archive.prod.sql.gz | pv -W -s 10g | mysql -h hostname -u username -p'clear password' database_name
recursive tree
view (require perl):
ls -aR | grep ":$" | perl -pe 's/:$//;s/[^-][^\/]*\// /g;s/^ (\S)/└── \1/;s/(^ | (?= ))/│ /g;s/ (\S)/└── \1/'
Ce fichier présent dans le répertoire "home/" contient les alias de commandes personnalisées. Ajouter celle-ci, pour créer la commande logs
à la place de docker logs -n 10
:
alias logs='/usr/bin/docker logs -n 10 '
Windows trick to get rid off the +x bit of binary / executable files: https://stackoverflow.com/questions/6476513/git-file-permissions-on-windows
git config core.filemode false