<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="fr">
		<id>https://wiki.tonioc.ovh/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Toine</id>
		<title>TechWik - Contributions de l’utilisateur [fr]</title>
		<link rel="self" type="application/atom+xml" href="https://wiki.tonioc.ovh/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Toine"/>
		<link rel="alternate" type="text/html" href="https://wiki.tonioc.ovh/index.php/Sp%C3%A9cial:Contributions/Toine"/>
		<updated>2026-04-17T13:14:27Z</updated>
		<subtitle>Contributions de l’utilisateur</subtitle>
		<generator>MediaWiki 1.30.0</generator>

	<entry>
		<id>https://wiki.tonioc.ovh/index.php?title=Accueil&amp;diff=443</id>
		<title>Accueil</title>
		<link rel="alternate" type="text/html" href="https://wiki.tonioc.ovh/index.php?title=Accueil&amp;diff=443"/>
				<updated>2025-12-29T08:53:08Z</updated>
		
		<summary type="html">&lt;p&gt;Toine : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;strong&amp;gt;Le wiki techno d'antonio...&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ce site collecte mes recettes liées à l'usage des technos informatiques - principalement autour des variantes Linux type 'redhat' (rhel, fedora, centos), un peu Windows (quoique de moins en moins...). &lt;br /&gt;
&lt;br /&gt;
Voir la [[Spécial:Categories|liste des catégories]].&lt;br /&gt;
&lt;br /&gt;
== Sommaire ==&lt;br /&gt;
# Linux en général&lt;br /&gt;
## [[Bash: trucs et astuces]]&lt;br /&gt;
## [[Linux: divers trucs et astuces]]&lt;br /&gt;
## [[Bash: journaliser l'historique de commandes dans syslog]]&lt;br /&gt;
## [[Linux: Diagnostic hardware]]&lt;br /&gt;
## [[Rpmbuild avec modifications (ajout de patch)]]&lt;br /&gt;
## [[USB boot creation]]&lt;br /&gt;
## [[Linux: Outils de monitoring/performances]]&lt;br /&gt;
## [[Linux: Conversions de fichiers]]&lt;br /&gt;
## [[Linux: transfert et synchronisation de fichiers ]]&lt;br /&gt;
## [[Linux: heure, timezone, etc]]&lt;br /&gt;
## [[YUM,DNF,RPM : installer des packages]]&lt;br /&gt;
## [[nmcli: NetworkManager CLI]]&lt;br /&gt;
## [[Linux: outils réseau, test connexion, SSL...]]&lt;br /&gt;
## [[Linux: recettes bonding]]&lt;br /&gt;
## [[SSH: accélerer les connexions avec ControlMaster]]&lt;br /&gt;
## [[SSH: rebond et tunnels]]&lt;br /&gt;
## [[Stockage partagé avec SSHFS]]&lt;br /&gt;
## [[xml en ligne de commande]]&lt;br /&gt;
## [[pdf en ligne de commande]]&lt;br /&gt;
## [[Systemd]]&lt;br /&gt;
## [[tmux: multiplexer un terminal en ligne de commande]]&lt;br /&gt;
## [[SELinux créer un module d'exception]]&lt;br /&gt;
# [[Firefox: astuces et trucs divers]]&lt;br /&gt;
# Sécurité&lt;br /&gt;
## [[Encrypter/Protéger ses données]]&lt;br /&gt;
## [[Exemples avec iptables/ipset]]&lt;br /&gt;
## [[Openscap pour scaner les vulnérabilités actives]]&lt;br /&gt;
# Redhat/Centos 8&lt;br /&gt;
## [[Rhel/Centos 8 : installation xfce, xrdp ]]&lt;br /&gt;
# Redhat/Centos 7&lt;br /&gt;
## [[Rhel/Centos 7 : commandes réglages système divers]]&lt;br /&gt;
## [[Centos 7 wifi avec kde et nmcli]]&lt;br /&gt;
## [[GRUB2 save entry]]&lt;br /&gt;
## [[Centos 7 divers astuces et resolutions de problèmes]]&lt;br /&gt;
## [[Centos 7 : Installer son serveur OpenVPN]]&lt;br /&gt;
## [[Centos 7 : Client OpenVPN (CLI et NetworkManager avec KDE et Gnome3)]]&lt;br /&gt;
# Virtualisation&lt;br /&gt;
## [[KVM-Qemu]]&lt;br /&gt;
# Conteneurs&lt;br /&gt;
## [[Docker]]&lt;br /&gt;
## [[podman (centos/rhel8) ]]&lt;br /&gt;
# [[KDE]]&lt;br /&gt;
# [[Gnome3]]&lt;br /&gt;
# Redhat/Centos 6&lt;br /&gt;
## [[HP proliant sous rhel6]]&lt;br /&gt;
## [[Redhat el6 configuration système]]&lt;br /&gt;
# Cygwin&lt;br /&gt;
## [[Cygwin, Trucs et astuces]]&lt;br /&gt;
# WSL (Windows Subsystem for Linux)&lt;br /&gt;
## [[WSL, Installation, Trucs et astuces]]&lt;br /&gt;
#Perl&lt;br /&gt;
## [[Perl: trucs généraux]]&lt;br /&gt;
## [[Perl-Tk code snippets divers]]&lt;br /&gt;
## [[Perl: telnet dans un script perl]]&lt;br /&gt;
## [[Perl: exemple SSH avec Expect]]&lt;br /&gt;
## [[Perl: afficher les transitions heures été/hiver sur la timezone]]&lt;br /&gt;
# MariaDB/MySQL&lt;br /&gt;
## [[MariaDB]]&lt;br /&gt;
# Flatpak&lt;br /&gt;
## [[Flatpak: Install et utilisation]]&lt;br /&gt;
# [[Aide mediawiki]]&lt;/div&gt;</summary>
		<author><name>Toine</name></author>	</entry>

	<entry>
		<id>https://wiki.tonioc.ovh/index.php?title=Flatpak:_Install_et_utilisation&amp;diff=442</id>
		<title>Flatpak: Install et utilisation</title>
		<link rel="alternate" type="text/html" href="https://wiki.tonioc.ovh/index.php?title=Flatpak:_Install_et_utilisation&amp;diff=442"/>
				<updated>2025-12-29T08:47:37Z</updated>
		
		<summary type="html">&lt;p&gt;Toine : Page créée avec « Flatpak: Install et utilisation  == Commandes usuelles==  * installation de dépôt, exemple Flathub   $ sudo flatpak remote-add --if-not-exists flathub https://flathub.or... »&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Flatpak: Install et utilisation&lt;br /&gt;
&lt;br /&gt;
== Commandes usuelles==&lt;br /&gt;
&lt;br /&gt;
* installation de dépôt, exemple Flathub&lt;br /&gt;
  $ sudo flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo&lt;br /&gt;
* lister paks installés&lt;br /&gt;
  $ flatpak list&lt;br /&gt;
* désinstaller / réparer &lt;br /&gt;
  $ flatpak uninstall --unused -y&lt;br /&gt;
  $ flatpak remove --delete-data --unused -y&lt;br /&gt;
  $ flatpak repair -y&lt;br /&gt;
&lt;br /&gt;
== Nettoyage manuel des dépôts d'objets ==&lt;br /&gt;
Les répertoires /var/lib/flatpak/repo/objects et ~/.local/share/flatpak/repo/objects peuvent contenir des données d'applications désinstallées. Après avoir confirmé que vous avez désinstallé toutes les applications non nécessaires, vous pouvez supprimer ces répertoires entièrement :&lt;br /&gt;
&lt;br /&gt;
  $ sudo rm -rf /var/lib/flatpak/repo/objects&lt;br /&gt;
  $ rm -rf ~/.local/share/flatpak/repo/objects&lt;br /&gt;
&lt;br /&gt;
Flatpak recréera ces répertoires si nécessaire.&lt;br /&gt;
&lt;br /&gt;
== Wattage: surveillance de batterie==&lt;br /&gt;
(https://github.com/v81d/wattage)&lt;br /&gt;
&lt;br /&gt;
  $ sudo flatpak install flathub io.github.v81d. Wattage&lt;br /&gt;
  $ flatpak run io.github.v81d. Wattage&lt;/div&gt;</summary>
		<author><name>Toine</name></author>	</entry>

	<entry>
		<id>https://wiki.tonioc.ovh/index.php?title=Accueil&amp;diff=441</id>
		<title>Accueil</title>
		<link rel="alternate" type="text/html" href="https://wiki.tonioc.ovh/index.php?title=Accueil&amp;diff=441"/>
				<updated>2025-12-29T08:30:38Z</updated>
		
		<summary type="html">&lt;p&gt;Toine : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;strong&amp;gt;Le wiki techno d'antonio...&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ce site collecte mes recettes liées à l'usage des technos informatiques - principalement autour des variantes Linux type 'redhat' (rhel, fedora, centos), un peu Windows (quoique de moins en moins...). &lt;br /&gt;
&lt;br /&gt;
Voir la [[Spécial:Categories|liste des catégories]].&lt;br /&gt;
&lt;br /&gt;
== Sommaire ==&lt;br /&gt;
# Linux en général&lt;br /&gt;
## [[Bash: trucs et astuces]]&lt;br /&gt;
## [[Linux: divers trucs et astuces]]&lt;br /&gt;
## [[Bash: journaliser l'historique de commandes dans syslog]]&lt;br /&gt;
## [[Linux: Diagnostic hardware]]&lt;br /&gt;
## [[Rpmbuild avec modifications (ajout de patch)]]&lt;br /&gt;
## [[USB boot creation]]&lt;br /&gt;
## [[Linux: Outils de monitoring/performances]]&lt;br /&gt;
## [[Linux: Conversions de fichiers]]&lt;br /&gt;
## [[Linux: transfert et synchronisation de fichiers ]]&lt;br /&gt;
## [[Linux: heure, timezone, etc]]&lt;br /&gt;
## [[YUM,DNF,RPM : installer des packages]]&lt;br /&gt;
## [[nmcli: NetworkManager CLI]]&lt;br /&gt;
## [[Linux: outils réseau, test connexion, SSL...]]&lt;br /&gt;
## [[Linux: recettes bonding]]&lt;br /&gt;
## [[SSH: accélerer les connexions avec ControlMaster]]&lt;br /&gt;
## [[SSH: rebond et tunnels]]&lt;br /&gt;
## [[Stockage partagé avec SSHFS]]&lt;br /&gt;
## [[xml en ligne de commande]]&lt;br /&gt;
## [[pdf en ligne de commande]]&lt;br /&gt;
## [[Systemd]]&lt;br /&gt;
## [[tmux: multiplexer un terminal en ligne de commande]]&lt;br /&gt;
## [[SELinux créer un module d'exception]]&lt;br /&gt;
# [[Firefox: astuces et trucs divers]]&lt;br /&gt;
# Sécurité&lt;br /&gt;
## [[Encrypter/Protéger ses données]]&lt;br /&gt;
## [[Exemples avec iptables/ipset]]&lt;br /&gt;
## [[Openscap pour scaner les vulnérabilités actives]]&lt;br /&gt;
# Redhat/Centos 8&lt;br /&gt;
## [[Rhel/Centos 8 : installation xfce, xrdp ]]&lt;br /&gt;
# Redhat/Centos 7&lt;br /&gt;
## [[Rhel/Centos 7 : commandes réglages système divers]]&lt;br /&gt;
## [[Centos 7 wifi avec kde et nmcli]]&lt;br /&gt;
## [[GRUB2 save entry]]&lt;br /&gt;
## [[Centos 7 divers astuces et resolutions de problèmes]]&lt;br /&gt;
## [[Centos 7 : Installer son serveur OpenVPN]]&lt;br /&gt;
## [[Centos 7 : Client OpenVPN (CLI et NetworkManager avec KDE et Gnome3)]]&lt;br /&gt;
# Virtualisation&lt;br /&gt;
## [[KVM-Qemu]]&lt;br /&gt;
# Conteneurs&lt;br /&gt;
## [[Docker]]&lt;br /&gt;
## [[podman (centos/rhel8) ]]&lt;br /&gt;
# [[KDE]]&lt;br /&gt;
# [[Gnome3]]&lt;br /&gt;
# Redhat/Centos 6&lt;br /&gt;
## [[HP proliant sous rhel6]]&lt;br /&gt;
## [[Redhat el6 configuration système]]&lt;br /&gt;
# Cygwin&lt;br /&gt;
## [[Cygwin, Trucs et astuces]]&lt;br /&gt;
# WSL (Windows Subsystem for Linux)&lt;br /&gt;
## [[WSL, Installation, Trucs et astuces]]&lt;br /&gt;
#Perl&lt;br /&gt;
## [[Perl: trucs généraux]]&lt;br /&gt;
## [[Perl-Tk code snippets divers]]&lt;br /&gt;
## [[Perl: telnet dans un script perl]]&lt;br /&gt;
## [[Perl: exemple SSH avec Expect]]&lt;br /&gt;
## [[Perl: afficher les transitions heures été/hiver sur la timezone]]&lt;br /&gt;
# MariaDB/MySQL&lt;br /&gt;
## [[MariaDB]]&lt;br /&gt;
# Flatpak&lt;br /&gt;
## Flatpak: Install et utilisation&lt;br /&gt;
# [[Aide mediawiki]]&lt;/div&gt;</summary>
		<author><name>Toine</name></author>	</entry>

	<entry>
		<id>https://wiki.tonioc.ovh/index.php?title=Accueil&amp;diff=440</id>
		<title>Accueil</title>
		<link rel="alternate" type="text/html" href="https://wiki.tonioc.ovh/index.php?title=Accueil&amp;diff=440"/>
				<updated>2025-12-29T08:28:49Z</updated>
		
		<summary type="html">&lt;p&gt;Toine : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;strong&amp;gt;Le wiki techno d'antonio...&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ce site collecte mes recettes liées à l'usage des technos informatiques - principalement autour des variantes Linux type 'redhat' (rhel, fedora, centos), un peu Windows (quoique de moins en moins...). &lt;br /&gt;
&lt;br /&gt;
Voir la [[Spécial:Categories|liste des catégories]].&lt;br /&gt;
&lt;br /&gt;
== Sommaire ==&lt;br /&gt;
# Linux en général&lt;br /&gt;
## [[Bash: trucs et astuces]]&lt;br /&gt;
## [[Linux: divers trucs et astuces]]&lt;br /&gt;
## [[Bash: journaliser l'historique de commandes dans syslog]]&lt;br /&gt;
## [[Linux: Diagnostic hardware]]&lt;br /&gt;
## [[Rpmbuild avec modifications (ajout de patch)]]&lt;br /&gt;
## [[USB boot creation]]&lt;br /&gt;
## [[Linux: Outils de monitoring/performances]]&lt;br /&gt;
## [[Linux: Conversions de fichiers]]&lt;br /&gt;
## [[Linux: transfert et synchronisation de fichiers ]]&lt;br /&gt;
## [[Linux: heure, timezone, etc]]&lt;br /&gt;
## [[YUM,DNF,RPM : installer des packages]]&lt;br /&gt;
## [[nmcli: NetworkManager CLI]]&lt;br /&gt;
## [[Linux: outils réseau, test connexion, SSL...]]&lt;br /&gt;
## [[Linux: recettes bonding]]&lt;br /&gt;
## [[SSH: accélerer les connexions avec ControlMaster]]&lt;br /&gt;
## [[SSH: rebond et tunnels]]&lt;br /&gt;
## [[Stockage partagé avec SSHFS]]&lt;br /&gt;
## [[xml en ligne de commande]]&lt;br /&gt;
## [[pdf en ligne de commande]]&lt;br /&gt;
## [[Systemd]]&lt;br /&gt;
## [[tmux: multiplexer un terminal en ligne de commande]]&lt;br /&gt;
## [[SELinux créer un module d'exception]]&lt;br /&gt;
# [[Firefox: astuces et trucs divers]]&lt;br /&gt;
# Sécurité&lt;br /&gt;
## [[Encrypter/Protéger ses données]]&lt;br /&gt;
## [[Exemples avec iptables/ipset]]&lt;br /&gt;
## [[Openscap pour scaner les vulnérabilités actives]]&lt;br /&gt;
# Redhat/Centos 8&lt;br /&gt;
## [[Rhel/Centos 8 : installation xfce, xrdp ]]&lt;br /&gt;
# Redhat/Centos 7&lt;br /&gt;
## [[Rhel/Centos 7 : commandes réglages système divers]]&lt;br /&gt;
## [[Centos 7 wifi avec kde et nmcli]]&lt;br /&gt;
## [[GRUB2 save entry]]&lt;br /&gt;
## [[Centos 7 divers astuces et resolutions de problèmes]]&lt;br /&gt;
## [[Centos 7 : Installer son serveur OpenVPN]]&lt;br /&gt;
## [[Centos 7 : Client OpenVPN (CLI et NetworkManager avec KDE et Gnome3)]]&lt;br /&gt;
# Virtualisation&lt;br /&gt;
## [[KVM-Qemu]]&lt;br /&gt;
# Conteneurs&lt;br /&gt;
## [[Docker]]&lt;br /&gt;
## [[podman (centos/rhel8) ]]&lt;br /&gt;
# [[KDE]]&lt;br /&gt;
# [[Gnome3]]&lt;br /&gt;
# Redhat/Centos 6&lt;br /&gt;
## [[HP proliant sous rhel6]]&lt;br /&gt;
## [[Redhat el6 configuration système]]&lt;br /&gt;
# Cygwin&lt;br /&gt;
## [[Cygwin, Trucs et astuces]]&lt;br /&gt;
# WSL (Windows Subsystem for Linux)&lt;br /&gt;
## [[WSL, Installation, Trucs et astuces]]&lt;br /&gt;
#Perl&lt;br /&gt;
## [[Perl: trucs généraux]]&lt;br /&gt;
## [[Perl-Tk code snippets divers]]&lt;br /&gt;
## [[Perl: telnet dans un script perl]]&lt;br /&gt;
## [[Perl: exemple SSH avec Expect]]&lt;br /&gt;
## [[Perl: afficher les transitions heures été/hiver sur la timezone]]&lt;br /&gt;
# MariaDB/MySQL&lt;br /&gt;
## [[MariaDB]]&lt;br /&gt;
# Flatpak&lt;br /&gt;
## Install et utilisation&lt;br /&gt;
# [[Aide mediawiki]]&lt;/div&gt;</summary>
		<author><name>Toine</name></author>	</entry>

	<entry>
		<id>https://wiki.tonioc.ovh/index.php?title=YUM,DNF,RPM_:_installer_des_packages&amp;diff=439</id>
		<title>YUM,DNF,RPM : installer des packages</title>
		<link rel="alternate" type="text/html" href="https://wiki.tonioc.ovh/index.php?title=YUM,DNF,RPM_:_installer_des_packages&amp;diff=439"/>
				<updated>2025-12-25T08:48:39Z</updated>
		
		<summary type="html">&lt;p&gt;Toine : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Dépôt local sur image iso=&lt;br /&gt;
On veut installer des packages présents dans l'image iso d'une distribution.&lt;br /&gt;
* créer le descripteur dans /etc/yum.repos.d, par exemple &lt;br /&gt;
  # vi /etc/yum.repos.d/iso.repo&lt;br /&gt;
  [isorepo]&lt;br /&gt;
  name=Local repo&lt;br /&gt;
  baseurl=file:///mnt/iso/&lt;br /&gt;
  enabled=0&lt;br /&gt;
  gpgcheck=0&lt;br /&gt;
On a mis enabled=0 de sorte que lorsque le montage n'est pas actif, ce dépôt ne pose pas problème.&lt;br /&gt;
* monter l'image sur /mnt/iso (on doit trouver le repodata à la racine du disque dans cet exemple, sinon adapter le chemin).&lt;br /&gt;
* sinon, on peut aussi créer un dépôt dans un répertoire quelconque contenant les rpms. Dans ce cas utiliser createrepo et adapter le chemin.		&lt;br /&gt;
* installer à partir du dépôt local &lt;br /&gt;
  # yum --noplugins --disablerepo=&amp;quot;*&amp;quot; --enablerepo=&amp;quot;isorepo&amp;quot; install myrpmname&lt;br /&gt;
&lt;br /&gt;
=Extraire le contenu d'un RPM sans l'installer= &lt;br /&gt;
  $ mkdir tmppath; cd  tmppath &lt;br /&gt;
  $ rpm2cpio ../openssl-devel-0.9.8e-22.el5.i386.rpm | cpio -idmv  &lt;br /&gt;
  $ find .&lt;br /&gt;
&lt;br /&gt;
= yum history = &lt;br /&gt;
Voir https://wbag.tonioc.ovh/?view=view&amp;amp;id=69 .&lt;br /&gt;
&lt;br /&gt;
= installer des packages alternatifs = &lt;br /&gt;
== IUS : des versions plus récentes sans conflits de nommage == &lt;br /&gt;
Le projet IUS (https://ius.io/) propose des version plus récentes de certains produits (ex: php) par rapport aux dépôts officiels, avec des nommages différents permettant d'éviter les conflits avec les packages officiels éventuellement installés. Cela permet également d'avoir plusieurs versions en parallèle.&lt;br /&gt;
  &lt;br /&gt;
= nettoyer les vieux packages de kernel = &lt;br /&gt;
Outre le yum remove/erase direct:&lt;br /&gt;
  $ sudo package-cleanup --oldkernels --count=2&lt;br /&gt;
&lt;br /&gt;
= Synchro distrib avec les repo =&lt;br /&gt;
  $ sudo dnf distro-sync --refresh&lt;br /&gt;
&lt;br /&gt;
= Solutions a problèmes divers =&lt;br /&gt;
* pb d'accès aux repositiories à cause de IPv6 (erreur 404 sur tous les miroirs par exemple)&lt;br /&gt;
  # /etc/yum.conf : ajouter&lt;br /&gt;
  ip_resolve=4&lt;br /&gt;
[[Category:Linux]]&lt;br /&gt;
[[Category:RPM]]&lt;/div&gt;</summary>
		<author><name>Toine</name></author>	</entry>

	<entry>
		<id>https://wiki.tonioc.ovh/index.php?title=YUM,DNF,RPM_:_installer_des_packages&amp;diff=438</id>
		<title>YUM,DNF,RPM : installer des packages</title>
		<link rel="alternate" type="text/html" href="https://wiki.tonioc.ovh/index.php?title=YUM,DNF,RPM_:_installer_des_packages&amp;diff=438"/>
				<updated>2025-12-25T08:48:11Z</updated>
		
		<summary type="html">&lt;p&gt;Toine : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Dépôt local sur image iso=&lt;br /&gt;
On veut installer des packages présents dans l'image iso d'une distribution.&lt;br /&gt;
* créer le descripteur dans /etc/yum.repos.d, par exemple &lt;br /&gt;
  # vi /etc/yum.repos.d/iso.repo&lt;br /&gt;
  [isorepo]&lt;br /&gt;
  name=Local repo&lt;br /&gt;
  baseurl=file:///mnt/iso/&lt;br /&gt;
  enabled=0&lt;br /&gt;
  gpgcheck=0&lt;br /&gt;
On a mis enabled=0 de sorte que lorsque le montage n'est pas actif, ce dépôt ne pose pas problème.&lt;br /&gt;
* monter l'image sur /mnt/iso (on doit trouver le repodata à la racine du disque dans cet exemple, sinon adapter le chemin).&lt;br /&gt;
* sinon, on peut aussi créer un dépôt dans un répertoire quelconque contenant les rpms. Dans ce cas utiliser createrepo et adapter le chemin.		&lt;br /&gt;
* installer à partir du dépôt local &lt;br /&gt;
  # yum --noplugins --disablerepo=&amp;quot;*&amp;quot; --enablerepo=&amp;quot;isorepo&amp;quot; install myrpmname&lt;br /&gt;
&lt;br /&gt;
=Extraire le contenu d'un RPM sans l'installer= &lt;br /&gt;
  $ mkdir tmppath; cd  tmppath &lt;br /&gt;
  $ rpm2cpio ../openssl-devel-0.9.8e-22.el5.i386.rpm | cpio -idmv  &lt;br /&gt;
  $ find .&lt;br /&gt;
&lt;br /&gt;
= yum history = &lt;br /&gt;
Voir https://wbag.tonioc.ovh/?view=view&amp;amp;id=69 .&lt;br /&gt;
&lt;br /&gt;
= installer des packages alternatifs = &lt;br /&gt;
== IUS : des versions plus récentes sans conflits de nommage == &lt;br /&gt;
Le projet IUS (https://ius.io/) propose des version plus récentes de certains produits (ex: php) par rapport aux dépôts officiels, avec des nommages différents permettant d'éviter les conflits avec les packages officiels éventuellement installés. Cela permet également d'avoir plusieurs versions en parallèle.&lt;br /&gt;
  &lt;br /&gt;
= nettoyer les vieux packages de kernel = &lt;br /&gt;
Outre le yum remove/erase direct:&lt;br /&gt;
  $ sudo package-cleanup --oldkernels --count=2&lt;br /&gt;
&lt;br /&gt;
= Synchro distrib avec les repo =&lt;br /&gt;
sudo dnf distro-sync --refresh&lt;br /&gt;
&lt;br /&gt;
= Solutions a problèmes divers =&lt;br /&gt;
* pb d'accès aux repositiories à cause de IPv6 (erreur 404 sur tous les miroirs par exemple)&lt;br /&gt;
  # /etc/yum.conf : ajouter&lt;br /&gt;
  ip_resolve=4&lt;br /&gt;
[[Category:Linux]]&lt;br /&gt;
[[Category:RPM]]&lt;/div&gt;</summary>
		<author><name>Toine</name></author>	</entry>

	<entry>
		<id>https://wiki.tonioc.ovh/index.php?title=Pdf_en_ligne_de_commande&amp;diff=436</id>
		<title>Pdf en ligne de commande</title>
		<link rel="alternate" type="text/html" href="https://wiki.tonioc.ovh/index.php?title=Pdf_en_ligne_de_commande&amp;diff=436"/>
				<updated>2023-12-23T15:04:37Z</updated>
		
		<summary type="html">&lt;p&gt;Toine : Page créée avec « = conversion d'un répertoire d'images en un fichier pdf = Utilitaire convert du rpm ImageMagick:   Exemple: fichiers .jpg du dossier courant dans un fichier album.pdf ave... »&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= conversion d'un répertoire d'images en un fichier pdf =&lt;br /&gt;
Utilitaire convert du rpm ImageMagick: &lt;br /&gt;
&lt;br /&gt;
Exemple: fichiers .jpg du dossier courant dans un fichier album.pdf avec orientation auto des pages: &lt;br /&gt;
&lt;br /&gt;
  $ convert *.jpg -auto-orient album.pdf&lt;/div&gt;</summary>
		<author><name>Toine</name></author>	</entry>

	<entry>
		<id>https://wiki.tonioc.ovh/index.php?title=Accueil&amp;diff=435</id>
		<title>Accueil</title>
		<link rel="alternate" type="text/html" href="https://wiki.tonioc.ovh/index.php?title=Accueil&amp;diff=435"/>
				<updated>2023-12-23T15:00:35Z</updated>
		
		<summary type="html">&lt;p&gt;Toine : /* Sommaire */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;strong&amp;gt;Le wiki techno d'antonio...&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ce site collecte mes recettes liées à l'usage des technos informatiques - principalement autour des variantes Linux type 'redhat' (rhel, fedora, centos), un peu Windows (quoique de moins en moins...). &lt;br /&gt;
&lt;br /&gt;
Voir la [[Spécial:Categories|liste des catégories]].&lt;br /&gt;
&lt;br /&gt;
== Sommaire ==&lt;br /&gt;
# Linux en général&lt;br /&gt;
## [[Bash: trucs et astuces]]&lt;br /&gt;
## [[Linux: divers trucs et astuces]]&lt;br /&gt;
## [[Bash: journaliser l'historique de commandes dans syslog]]&lt;br /&gt;
## [[Linux: Diagnostic hardware]]&lt;br /&gt;
## [[Rpmbuild avec modifications (ajout de patch)]]&lt;br /&gt;
## [[USB boot creation]]&lt;br /&gt;
## [[Linux: Outils de monitoring/performances]]&lt;br /&gt;
## [[Linux: Conversions de fichiers]]&lt;br /&gt;
## [[Linux: transfert et synchronisation de fichiers ]]&lt;br /&gt;
## [[Linux: heure, timezone, etc]]&lt;br /&gt;
## [[YUM,DNF,RPM : installer des packages]]&lt;br /&gt;
## [[nmcli: NetworkManager CLI]]&lt;br /&gt;
## [[Linux: outils réseau, test connexion, SSL...]]&lt;br /&gt;
## [[Linux: recettes bonding]]&lt;br /&gt;
## [[SSH: accélerer les connexions avec ControlMaster]]&lt;br /&gt;
## [[SSH: rebond et tunnels]]&lt;br /&gt;
## [[Stockage partagé avec SSHFS]]&lt;br /&gt;
## [[xml en ligne de commande]]&lt;br /&gt;
## [[pdf en ligne de commande]]&lt;br /&gt;
## [[Systemd]]&lt;br /&gt;
## [[tmux: multiplexer un terminal en ligne de commande]]&lt;br /&gt;
## [[SELinux créer un module d'exception]]&lt;br /&gt;
# [[Firefox: astuces et trucs divers]]&lt;br /&gt;
# Sécurité&lt;br /&gt;
## [[Encrypter/Protéger ses données]]&lt;br /&gt;
## [[Exemples avec iptables/ipset]]&lt;br /&gt;
## [[Openscap pour scaner les vulnérabilités actives]]&lt;br /&gt;
# Redhat/Centos 8&lt;br /&gt;
## [[Rhel/Centos 8 : installation xfce, xrdp ]]&lt;br /&gt;
# Redhat/Centos 7&lt;br /&gt;
## [[Rhel/Centos 7 : commandes réglages système divers]]&lt;br /&gt;
## [[Centos 7 wifi avec kde et nmcli]]&lt;br /&gt;
## [[GRUB2 save entry]]&lt;br /&gt;
## [[Centos 7 divers astuces et resolutions de problèmes]]&lt;br /&gt;
## [[Centos 7 : Installer son serveur OpenVPN]]&lt;br /&gt;
## [[Centos 7 : Client OpenVPN (CLI et NetworkManager avec KDE et Gnome3)]]&lt;br /&gt;
# Virtualisation&lt;br /&gt;
## [[KVM-Qemu]]&lt;br /&gt;
# Conteneurs&lt;br /&gt;
## [[Docker]]&lt;br /&gt;
## [[podman (centos/rhel8) ]]&lt;br /&gt;
# [[KDE]]&lt;br /&gt;
# [[Gnome3]]&lt;br /&gt;
# Redhat/Centos 6&lt;br /&gt;
## [[HP proliant sous rhel6]]&lt;br /&gt;
## [[Redhat el6 configuration système]]&lt;br /&gt;
# Cygwin&lt;br /&gt;
## [[Cygwin, Trucs et astuces]]&lt;br /&gt;
# WSL (Windows Subsystem for Linux)&lt;br /&gt;
## [[WSL, Installation, Trucs et astuces]]&lt;br /&gt;
#Perl&lt;br /&gt;
## [[Perl: trucs généraux]]&lt;br /&gt;
## [[Perl-Tk code snippets divers]]&lt;br /&gt;
## [[Perl: telnet dans un script perl]]&lt;br /&gt;
## [[Perl: exemple SSH avec Expect]]&lt;br /&gt;
## [[Perl: afficher les transitions heures été/hiver sur la timezone]]&lt;br /&gt;
# MariaDB/MySQL&lt;br /&gt;
## [[MariaDB]]&lt;br /&gt;
# [[Aide mediawiki]]&lt;/div&gt;</summary>
		<author><name>Toine</name></author>	</entry>

	<entry>
		<id>https://wiki.tonioc.ovh/index.php?title=GRUB2_save_entry&amp;diff=434</id>
		<title>GRUB2 save entry</title>
		<link rel="alternate" type="text/html" href="https://wiki.tonioc.ovh/index.php?title=GRUB2_save_entry&amp;diff=434"/>
				<updated>2023-08-27T14:26:23Z</updated>
		
		<summary type="html">&lt;p&gt;Toine : /* /etc/default/grub */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= /etc/default/grub = &lt;br /&gt;
doit contenir:&lt;br /&gt;
&lt;br /&gt;
  GRUB_DEFAULT=saved&lt;br /&gt;
  GRUB_SAVEDEFAULT=true&lt;br /&gt;
  GRUB_ENABLE_BLSCFG=false&lt;br /&gt;
&lt;br /&gt;
Pris en compte par un commande telle que&lt;br /&gt;
  # grub2-mkconfig -o /boot/efi/EFI/centos/grub.cfg&lt;br /&gt;
  # grub2-mkconfig -o /etc/grub2-efi.cfg&lt;br /&gt;
&lt;br /&gt;
NB: ceci fait apparaître des lignes &amp;quot;savedefault&amp;quot; dans les entrées générées. Si certaines entrées sont récupérées en dur par un fichier /etc/grub.d/xx_custom_yy, penser à y ajouter manuellement le 'savedefault' avant de faire le grub2-mkconfig.&lt;br /&gt;
&lt;br /&gt;
NB: si GRUB_ENABLE_BLSCFG=true, grub.cfg n'est pas utilisé et SAVEDEFAUKT pas pris en compte&lt;br /&gt;
Commentaires de redhat sur le sujet: &lt;br /&gt;
&lt;br /&gt;
&amp;quot;With GRUB_ENABLE_BLSCFG=true in /etc/default/grub, GRUB2 uses blscfg files and entries in /boot/loader instead of menuentry entries in grub.cfg. It's the standard configuration since RHEL 8.&amp;lt;br&amp;gt;&lt;br /&gt;
On RHEL 8, if GRUB_ENABLE_BLSCFG is removed or set to &amp;quot;false&amp;quot;, grub.cfg generated by grub2-mkconfig will define the menu entries just as RHEL 7.&amp;lt;br&amp;gt;&lt;br /&gt;
The default value of GRUB_ENABLE_BLSCFG is &amp;quot;true&amp;quot; on RHEL 9. Deleting GRUB_ENABLE_BLSCFG=true from /etc/default/grub won't disable BLS. User has to set GRUB_ENABLE_BLSCFG=false to disable BLS.&amp;lt;br&amp;gt;&lt;br /&gt;
'''Note On RHEL 8, grub2-mkconfig is never run on kernel upgrade''' even if GRUB_ENABLE_BLSCFG=false, user has to run grub2-mkconfig after upgrading kernel. The issue is fixed in RHSA-2022:2110&amp;quot;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Linux]]&lt;br /&gt;
[[Category:GRUB]]&lt;/div&gt;</summary>
		<author><name>Toine</name></author>	</entry>

	<entry>
		<id>https://wiki.tonioc.ovh/index.php?title=GRUB2_save_entry&amp;diff=433</id>
		<title>GRUB2 save entry</title>
		<link rel="alternate" type="text/html" href="https://wiki.tonioc.ovh/index.php?title=GRUB2_save_entry&amp;diff=433"/>
				<updated>2023-08-27T14:25:59Z</updated>
		
		<summary type="html">&lt;p&gt;Toine : /* /etc/default/grub */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= /etc/default/grub = &lt;br /&gt;
doit contenir:&lt;br /&gt;
&lt;br /&gt;
  GRUB_DEFAULT=saved&lt;br /&gt;
  GRUB_SAVEDEFAULT=true&lt;br /&gt;
  GRUB_ENABLE_BLSCFG=false&lt;br /&gt;
&lt;br /&gt;
Pris en compte par un commande telle que&lt;br /&gt;
  # grub2-mkconfig -o /boot/efi/EFI/centos/grub.cfg&lt;br /&gt;
  # grub2-mkconfig -o /etc/grub2-efi.cfg&lt;br /&gt;
&lt;br /&gt;
NB: ceci fait apparaître des lignes &amp;quot;savedefault&amp;quot; dans les entrées générées. Si certaines entrées sont récupérées en dur par un fichier /etc/grub.d/xx_custom_yy, penser à y ajouter manuellement le 'savedefault' avant de faire le grub2-mkconfig.&lt;br /&gt;
&lt;br /&gt;
NB: si GRUB_ENABLE_BLSCFG=true, grub.cfg n'est pas utilisé et SAVEDEFAUKT pas pris en compte&lt;br /&gt;
Commentaires de redhat sur le sujet: &lt;br /&gt;
&lt;br /&gt;
&amp;quot;With GRUB_ENABLE_BLSCFG=true in /etc/default/grub, GRUB2 uses blscfg files and entries in /boot/loader instead of menuentry entries in grub.cfg. It's the standard configuration since RHEL 8.&amp;lt;br&amp;gt;&lt;br /&gt;
On RHEL 8, if GRUB_ENABLE_BLSCFG is removed or set to &amp;quot;false&amp;quot;, grub.cfg generated by grub2-mkconfig will define the menu entries just as RHEL 7.&amp;lt;br&amp;gt;&lt;br /&gt;
The default value of GRUB_ENABLE_BLSCFG is &amp;quot;true&amp;quot; on RHEL 9. Deleting GRUB_ENABLE_BLSCFG=true from /etc/default/grub won't disable BLS. User has to set GRUB_ENABLE_BLSCFG=false to disable BLS.&amp;lt;br&amp;gt;&lt;br /&gt;
'''Note On RHEL 8, grub2-mkconfig is never run on kernel upgrade''' even if GRUB_ENABLE_BLSCFG=false, user has to run grub2-mkconfig after upgrading kernel. The issue is fixed in RHSA-2022:2110&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Linux]]&lt;br /&gt;
[[Category:GRUB]]&lt;/div&gt;</summary>
		<author><name>Toine</name></author>	</entry>

	<entry>
		<id>https://wiki.tonioc.ovh/index.php?title=Bash:_trucs_et_astuces&amp;diff=432</id>
		<title>Bash: trucs et astuces</title>
		<link rel="alternate" type="text/html" href="https://wiki.tonioc.ovh/index.php?title=Bash:_trucs_et_astuces&amp;diff=432"/>
				<updated>2022-02-01T14:02:10Z</updated>
		
		<summary type="html">&lt;p&gt;Toine : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Fonctions utiles =&lt;br /&gt;
==Conversions ==&lt;br /&gt;
&lt;br /&gt;
=== conversions de base hexa, décimal, binaire, octal avec bc  ===&lt;br /&gt;
Les variables speciales obase et ibase de bc définissent les bases de conversion des données d'entrée et sortie (par défaut base 10 pour les 2).&lt;br /&gt;
&lt;br /&gt;
Par exemple, conversion décimale=&amp;gt;hexa: &lt;br /&gt;
  $ echo &amp;quot;obase=16;12345&amp;quot;|bc &lt;br /&gt;
  3039&lt;br /&gt;
  $ echo &amp;quot;ibase=16;A039&amp;quot;|bc &lt;br /&gt;
  41017&lt;br /&gt;
&lt;br /&gt;
ou exemple dans un script: &lt;br /&gt;
  $ for conv in 10101010:2:16 AA00:16:10 10101010:10:16; do \&lt;br /&gt;
      IFS=: cc=($conv) \&lt;br /&gt;
      out=$(echo &amp;quot;obase=${cc[2]};ibase=${cc[1]};${cc[0]}&amp;quot;|bc) \&lt;br /&gt;
      echo &amp;quot;convert ${cc[0]} from base${cc[1]} -&amp;gt; base${cc[2]} =&amp;gt; $out&amp;quot; \&lt;br /&gt;
    done&lt;br /&gt;
  ==&amp;gt; produit:&lt;br /&gt;
  convert 10101010 from base2 -&amp;gt; base16 =&amp;gt; AA&lt;br /&gt;
  convert AA00 from base16 -&amp;gt; base10 =&amp;gt; 43520&lt;br /&gt;
  convert 10101010 from base10 -&amp;gt; base16 =&amp;gt; 9A2112&lt;br /&gt;
&lt;br /&gt;
Attention: pour la conversion hexa =&amp;gt; decimal, il faut utiliser des majuscules (sinon resultat=0)!! &lt;br /&gt;
&lt;br /&gt;
=== conversion netmask =&amp;gt; cidr ===&lt;br /&gt;
Exemple: mask2cidr 255.255.128.0 --&amp;gt; 17&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line='line'&amp;gt;&lt;br /&gt;
  # suppose qu'il n'y a plus de &amp;quot;255.&amp;quot; après un octet non-255&lt;br /&gt;
  mask2cidr ()&lt;br /&gt;
  {&lt;br /&gt;
    local x=${1##*255.}&lt;br /&gt;
    set -- 0^^^128^192^224^240^248^252^254^ $(( (${#1} - ${#x})*2 )) ${x%%.*}&lt;br /&gt;
    x=${1%%$3*}&lt;br /&gt;
    echo $(( $2 + (${#x}/4) ))&lt;br /&gt;
  }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
=== conversion cidr =&amp;gt; netmask  ===&lt;br /&gt;
Exemple: cidr2mask 17 --&amp;gt; 255.255.128.0&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line='line'&amp;gt;&lt;br /&gt;
  cidr2mask ()&lt;br /&gt;
  {&lt;br /&gt;
    set -- $(( 5 - ($1 / 8) )) 255 255 255 255 $(( (255 &amp;lt;&amp;lt; (8 - ($1 % 8))) &amp;amp; 255 )) 0 0 0&lt;br /&gt;
    [ $1 -gt 1 ] &amp;amp;&amp;amp; shift $1 || shift&lt;br /&gt;
    echo ${1-0}.${2-0}.${3-0}.${4-0}&lt;br /&gt;
  }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== expansion IPv6 ===&lt;br /&gt;
Exemple: expand_ip6 fe80::68c8:c7b1:3199:f4b  --&amp;gt; fe80:0000:0000:0000:68c8:c7b1:3199:0f4b&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line='line'&amp;gt;&lt;br /&gt;
  expand_ip6() {&lt;br /&gt;
    ip6=$1&lt;br /&gt;
    IFS=: ff=($ip6); unset IFS&lt;br /&gt;
    res=&amp;quot;&amp;quot;&lt;br /&gt;
    let ix=0&lt;br /&gt;
    nf=${#ff[*]}&lt;br /&gt;
    while [ $ix -lt $nf ]; do &lt;br /&gt;
      it=${ff[ix]}&lt;br /&gt;
      if [ ${#it} -gt 0 ]; then &lt;br /&gt;
        let n=4-${#it}; &lt;br /&gt;
        while [ $n -gt 0 ]; do it=&amp;quot;0${it}&amp;quot;; let n=n-1;done ; &lt;br /&gt;
      else &lt;br /&gt;
        let n=8-$nf; &lt;br /&gt;
        it=&amp;quot;0000&amp;quot;; &lt;br /&gt;
        while [ $n -gt 0 ]; do it=&amp;quot;${it}:0000&amp;quot;; let n=n-1;done ; &lt;br /&gt;
      fi; &lt;br /&gt;
      if [ -z &amp;quot;$res&amp;quot; ];then &lt;br /&gt;
        res=$it; &lt;br /&gt;
      else &lt;br /&gt;
        res=&amp;quot;${res}:${it}&amp;quot;;&lt;br /&gt;
      fi&lt;br /&gt;
      let ix=ix+1 &lt;br /&gt;
    done&lt;br /&gt;
    echo $res&lt;br /&gt;
  }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== compression IPv6 ===&lt;br /&gt;
Exemple: compress_ip6 fe80:0000:0000:0000:68c8:c7b1:3199:0f4b  --&amp;gt; fe80::68c8:c7b1:3199:f4b  &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line='line'&amp;gt;&lt;br /&gt;
  compress_ip6() {&lt;br /&gt;
    echo $1 | sed -r -e 's/:(0+:){2,6}/::/' -e 's/:0+([1-9a-fA-F])/:\1/g'&lt;br /&gt;
  }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== manipuler des chaines de caractères ==&lt;br /&gt;
=== split chaine de caracteres: ===&lt;br /&gt;
1)IFS:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line='line'&amp;gt;&lt;br /&gt;
    OIFS=$IFS&lt;br /&gt;
    string=&amp;quot;ABCDE-123456&amp;quot;&lt;br /&gt;
    IFS=- # use &amp;quot;local IFS=-&amp;quot; inside the function&lt;br /&gt;
    set $string&lt;br /&gt;
    echo $1 # &amp;gt;&amp;gt;&amp;gt; ABCDE&lt;br /&gt;
    echo $2 # &amp;gt;&amp;gt;&amp;gt; 123456&lt;br /&gt;
    IFS=$OIFS     # restituer le séparateur originel&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2) récupérer le début ou la fin (ici separateur = ' ' )&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line='line'&amp;gt;&lt;br /&gt;
    line=&amp;quot;myhost 192.168.1.145 abcdefg 123456&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    # enlever le dernier champ&lt;br /&gt;
    echo ${line% *}&lt;br /&gt;
    # -&amp;gt; myhost 192.168.1.145 abcdefg&lt;br /&gt;
&lt;br /&gt;
    # conserver le premier champ&lt;br /&gt;
    echo ${line%% *}&lt;br /&gt;
    # -&amp;gt; myhost&lt;br /&gt;
&lt;br /&gt;
    # enlever le premier champ&lt;br /&gt;
    echo ${line#* }&lt;br /&gt;
    # -&amp;gt; 192.168.1.145 abcdefg 123456&lt;br /&gt;
&lt;br /&gt;
    # conserver le dernier champ&lt;br /&gt;
    echo ${line##* }&lt;br /&gt;
    # -&amp;gt; 123456&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3) affecter les différents termes d'une ligne (cf IFS) à un tableau&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line='line'&amp;gt;&lt;br /&gt;
    line=&amp;quot;myhost 192.168.1.145 is a good host&amp;quot;&lt;br /&gt;
    termes=($line)&lt;br /&gt;
    echo ${termes[0]}&lt;br /&gt;
    # -&amp;gt; myhost&lt;br /&gt;
    echo ${termes[4]}&lt;br /&gt;
    # -&amp;gt; good&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== substring ===&lt;br /&gt;
&lt;br /&gt;
Utiliser ${variable:offset:length} Par exemple:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line='line'&amp;gt;&lt;br /&gt;
   date=2017-01-12&lt;br /&gt;
   echo ${date:5:2}&lt;br /&gt;
  # -&amp;gt; 01&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== substitution dans une chaîne ===&lt;br /&gt;
&lt;br /&gt;
Utiliser ${main_string/search_term/replace_term}. &lt;br /&gt;
Par exemple pour échapper le caractère $ dans une variable&lt;br /&gt;
   myvar=&amp;quot;${myvar/$/\\$}&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Utiliser les expressions régulières directement dans le shell ==&lt;br /&gt;
&lt;br /&gt;
Avec l'opérateur =~ , par exemple:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line='line'&amp;gt;&lt;br /&gt;
  regex=&amp;quot;([0-9]+)[[:space:]](.*)&amp;quot;&lt;br /&gt;
  file=&amp;quot;02 Rumour Has It.wma&amp;quot;&lt;br /&gt;
  [[ $file =~ $regex ]] &amp;amp;&amp;amp; echo &amp;quot;matched:(${BASH_REMATCH[1]}) -&amp;gt; ${BASH_REMATCH[2]}&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
donne:&lt;br /&gt;
  matched:(02) -&amp;gt; Rumour Has It.wma&lt;br /&gt;
&lt;br /&gt;
== récupérer le resultat d'une commande dans un tableau, ligne à ligne ==&lt;br /&gt;
&lt;br /&gt;
1) IFS:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line='line'&amp;gt;&lt;br /&gt;
    IFS=$'\r\n' aa=($(grep blabla /pathtofile))&lt;br /&gt;
    unset IFS&lt;br /&gt;
    echo ${aa[0]}&lt;br /&gt;
    # -&amp;gt; ici ma premiere ligne. &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
    manipuler le tableau:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line='line'&amp;gt;&lt;br /&gt;
    for str in &amp;quot;${aa[@]}&amp;quot;;do &lt;br /&gt;
      echo $str&lt;br /&gt;
    done&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2) read: il faut passer par un fichier intermédiaire&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line='line'&amp;gt;&lt;br /&gt;
    grep blabla /pathtofile &amp;gt; /tmp/out&lt;br /&gt;
    while read str; do &lt;br /&gt;
      echo $str&lt;br /&gt;
    done &amp;lt; /tmp/out&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== manipuler des variables ==&lt;br /&gt;
* Valeur par defaut&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line='line'&amp;gt;&lt;br /&gt;
    if [ ${var:=n} = &amp;quot;y&amp;quot; ]; then ... &lt;br /&gt;
    # =&amp;gt; affecte 'n' par défaut à $var.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== manipuler les lignes d'un fichier: exemple conversion d'un dossier mp3 =&amp;gt; wav ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line='line'&amp;gt;&lt;br /&gt;
  # chercher lister les fichiers mp3 &lt;br /&gt;
  find . -name &amp;quot;*.mp3&amp;quot;  &amp;gt; /tmp/lst&lt;br /&gt;
  # lire la liste dans un tableau (1 enregistrement par ligne)&lt;br /&gt;
  IFS=$'\n' read -d '' -r -a files &amp;lt; /tmp/lst&lt;br /&gt;
  while [ $i -lt ${#files[@]} ]; do&lt;br /&gt;
    fout=` echo ${files[$i]} | sed &amp;quot;s/.mp3/.wav/&amp;quot;`; &lt;br /&gt;
    lame --decode &amp;quot;${files[$i]}&amp;quot; &amp;quot;../wav/$fout&amp;quot;;&lt;br /&gt;
    let i=i+1;&lt;br /&gt;
  done&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Autres built-in du shell ==&lt;br /&gt;
=== printf ===&lt;br /&gt;
Syntaxe similaire à celle du C: &lt;br /&gt;
&lt;br /&gt;
    # printf &amp;quot;%s is: %08x&amp;quot; hex 124&lt;br /&gt;
    hex is: 0000007c&lt;br /&gt;
&lt;br /&gt;
= Modifier quelques comportements avec shopt =&lt;br /&gt;
== SSH et les alias ==&lt;br /&gt;
Les alias ne sont développés qu'avec les shells interactifs sauf si l'option expand_aliases du shell est activée par la commande shopt. &lt;br /&gt;
Pour utiliser des alias distants en SSH, ajouter dans .bashrc de l'utilisateur distant: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line='line'&amp;gt;&lt;br /&gt;
  if [ -z &amp;quot;$PS1&amp;quot; ]; then&lt;br /&gt;
    shopt -s expand_aliases&lt;br /&gt;
  fi&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== avec cdable_vars interpréter les variables pour la commande 'cd' ==&lt;br /&gt;
Si  cette  option est active, un argument de la commande interne cd qui n'est pas un répertoire est supposé être un nom de variable dont la valeur est le répertoire visé. Exemple:&lt;br /&gt;
&lt;br /&gt;
  $ shopt -s cdable_vars  &lt;br /&gt;
  $ vms=/home/VMimages&lt;br /&gt;
  $ cd vms&lt;br /&gt;
  /home/VMimages&lt;br /&gt;
&lt;br /&gt;
== avec nocaseglob ignorer la casse pour développer les noms de fichiers ==&lt;br /&gt;
Si cette option est active, bash traite les noms de fichiers sans différences minuscules/majuscules lors du développement des noms de fichiers&lt;br /&gt;
&lt;br /&gt;
  $ shopt -s nocaseglob  &lt;br /&gt;
  $ ls cis*&lt;br /&gt;
  CIS_Red_Hat_Enterprise_Linux_6_Benchmark_v1.4.0-oval.xml  CIS_Red_Hat_Enterprise_Linux_6_Benchmark_v1.4.0-xccdf.xml&lt;br /&gt;
&lt;br /&gt;
= Comportement / syntaxe bash =&lt;br /&gt;
== Grouper des commandes ==&lt;br /&gt;
* avec () les commandes placées dans la liste entre parenthèses sont exécutées dans un sous-shell. Il n'y a pas persistence dans le shell courant des variables manipulées dans ces commandes.&lt;br /&gt;
&lt;br /&gt;
* avec {} les commandes placées entre accolades sont exécutées dans le contexte de shell courant. Le point virgule séparant les commandes est obligatoire sur la dernière, ainsi que les espaces autour de début et fin de bloc. D'éventuelles redirections peuvent être appliquées au bloc de commandes. Par exemple, lire un fichier dans une variable, et éviter les messages d'erreur:&lt;br /&gt;
&lt;br /&gt;
  { var=$(&amp;lt;&amp;quot;$file&amp;quot;); } 2&amp;gt;/dev/null;&lt;br /&gt;
&lt;br /&gt;
= Manipuler l'historique  =&lt;br /&gt;
* Répéter la dernière commande : !!&lt;br /&gt;
* Répéter la dernière commande commançant par un motif:&lt;br /&gt;
    $ !echo&lt;br /&gt;
    echo Bash Shortcuts&lt;br /&gt;
    Bash Shortcuts&lt;br /&gt;
et avec &amp;quot;:p&amp;quot; afficher la dernière commande commançant par un motif sans l'exécuter (mais l'exécuter ensuite avec !!):&lt;br /&gt;
    $ echo Bash Shortcuts&lt;br /&gt;
    Bash Shortcuts&lt;br /&gt;
    $ wc -m /etc/bash_completion&lt;br /&gt;
    45 /etc/bash_completion&lt;br /&gt;
    $ !echo:p&lt;br /&gt;
    echo Bash Shortcuts&lt;br /&gt;
    $ !!&lt;br /&gt;
    echo Bash Shortcuts&lt;br /&gt;
    Bash Shortcuts&lt;br /&gt;
* Rappeler les arguments de la dernière commande (tous : !* , le premier: !^ , le dernier: !$ ). &lt;br /&gt;
    $ echo First Bash Shortcuts arg is not last&lt;br /&gt;
    First Bash Shortcuts arg is not last&lt;br /&gt;
    $ touch !*&lt;br /&gt;
    touch First Bash Shortcuts arg is not last&lt;br /&gt;
    $ ls&lt;br /&gt;
    First Bash Shortcuts arg is not last ... &lt;br /&gt;
    $ rm First Bash Shortcuts arg is not last&lt;br /&gt;
    $ echo !^&lt;br /&gt;
    First&lt;br /&gt;
    $ echo First Bash Shortcuts arg is not last&lt;br /&gt;
    $ touch !*&lt;br /&gt;
    touch last&lt;br /&gt;
* Rappeler la dernière commande avec substitution d'une partie&lt;br /&gt;
    $ echo this is our args&lt;br /&gt;
    this is our args&lt;br /&gt;
    $ ^our args^my last word^&lt;br /&gt;
    echo this is my last word &lt;br /&gt;
    this is my last word&lt;br /&gt;
* Rappeler une commande  avec substitution &lt;br /&gt;
    $ localectl list-keymaps |grep &amp;quot;^fr&amp;quot;&lt;br /&gt;
    ...&lt;br /&gt;
    $ ls&lt;br /&gt;
    ... &lt;br /&gt;
    $ !locale:s/fr/us/&lt;br /&gt;
    localectl list-keymaps |grep &amp;quot;^us&amp;quot;&lt;br /&gt;
    us&lt;br /&gt;
    us-acentos&lt;br /&gt;
    ... &lt;br /&gt;
* Rappeler des commandes avec leur position dans l'historique&lt;br /&gt;
    $ history&lt;br /&gt;
    1018  find /usr/share/doc/ -name bonding.txt&lt;br /&gt;
    1019  echo this is my last word &lt;br /&gt;
    1020  localectl list-keymaps |grep &amp;quot;^us&amp;quot;&lt;br /&gt;
    1021  history&lt;br /&gt;
    $ !-3&lt;br /&gt;
    echo this is my last word &lt;br /&gt;
    this is my last word&lt;br /&gt;
    $ !1018&lt;br /&gt;
    find /usr/share/doc/ -name bonding.txt&lt;br /&gt;
    /usr/share/doc/kernel-doc-3.10.0/Documentation/networking/bonding.txt&lt;br /&gt;
&lt;br /&gt;
= Vérfication de qualité du code shell =&lt;br /&gt;
https://www.shellcheck.net/&lt;br /&gt;
&lt;br /&gt;
[[Category:Bash]]&lt;br /&gt;
[[Category:Tips&amp;amp;Tricks]]&lt;/div&gt;</summary>
		<author><name>Toine</name></author>	</entry>

	<entry>
		<id>https://wiki.tonioc.ovh/index.php?title=Encrypter/Prot%C3%A9ger_ses_donn%C3%A9es&amp;diff=431</id>
		<title>Encrypter/Protéger ses données</title>
		<link rel="alternate" type="text/html" href="https://wiki.tonioc.ovh/index.php?title=Encrypter/Prot%C3%A9ger_ses_donn%C3%A9es&amp;diff=431"/>
				<updated>2022-01-23T12:24:50Z</updated>
		
		<summary type="html">&lt;p&gt;Toine : /* openssl : cryptage direct de fichier */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Les distributions Linux récentes et divers autres OS proposent d'activer l'encryption des partitions complètes lors de l'installation (ou après). &lt;br /&gt;
&lt;br /&gt;
Si on n'opte pas pour cette solution, on peut néanmoins protéger ses données sensibles en créant des conteneurs chiffrés. C'est le choix préférentiel pour moi par rapport à l'utilisation de disques chiffrés, car permet de distinguer différents types de conteneurs, et également de les maintenir fermés la plupart du temps. &lt;br /&gt;
&lt;br /&gt;
Cet [https://en.wikipedia.org/wiki/Comparison_of_disk_encryption_software article wikipedia] donne des éléments de comparaison sur un ensemble de solutions de chiffrement. &lt;br /&gt;
&lt;br /&gt;
== Encrypter: Solutions utilisables sous Linux ==&lt;br /&gt;
=== Conteneurs avec accès à sudo ===&lt;br /&gt;
==== cryptsetup : conteneurs luks, trueCrypt... ====&lt;br /&gt;
cryptsetup permet notamment d'exploiter des conteneurs précédemment créés avec TrueCrypt, par exemple:&lt;br /&gt;
  $ sudo cryptsetup --type tcrypt open ~/misc.tc tcmisc&lt;br /&gt;
  $ sudo mount -o rw,dmask=0000,fmask=0000 /dev/mapper/tcmisc /mnt/misc&lt;br /&gt;
et pour démonter:&lt;br /&gt;
  $ sudo umount /mnt/misc&lt;br /&gt;
  $ sudo cryptsetup close tcmisc&lt;br /&gt;
&lt;br /&gt;
On peut bien sûr créer ses conteneurs directement avec cryptsetup aussi. Par exemple, un conteneur de type luks:&lt;br /&gt;
&lt;br /&gt;
1. créer le fichier support du conteneur (ex: 512Mb ici):&lt;br /&gt;
    $ dd if=/dev/zero of=/tmp/test.bin count=1000k&lt;br /&gt;
&lt;br /&gt;
2. créer une partition dans ce fichier (on commence ici par identifier le 1er loop-device disponible et y associer notre fichier)&lt;br /&gt;
    $ losetup -f&lt;br /&gt;
    /dev/loop0&lt;br /&gt;
    $ sudo losetup /dev/loop0 /tmp/test.bin&lt;br /&gt;
    $ sudo fdisk /dev/loop0&lt;br /&gt;
       n ==&amp;gt; new partition &lt;br /&gt;
       p ==&amp;gt; primaire&lt;br /&gt;
       accepter les autres valeurs par défaut.&lt;br /&gt;
       q ==&amp;gt; quitter.&lt;br /&gt;
&lt;br /&gt;
3. Initialiser le cryptage du pseudo-device, ici au format luks  &lt;br /&gt;
    $ sudo cryptsetup --verbose --verify-passphrase luksFormat /dev/loop0&lt;br /&gt;
     =&amp;gt; répondre aux questions&lt;br /&gt;
    $ sudo losetup -d /dev/loop0 &lt;br /&gt;
&lt;br /&gt;
4. Commencer à utiliser le conteneur: On l'ouvre, puis comme c'est le premier accès, il faut y créer un système de fichiers, puis le monter. Par la suite on n'aura qu'a le monter.&lt;br /&gt;
    $ sudo cryptsetup --type luks open /tmp/test.bin test&lt;br /&gt;
    $ sudo mkfs.ext2 /dev/mapper/test&lt;br /&gt;
    $ sudo mount /dev/mapper/test /mnt/tcvp/&lt;br /&gt;
&lt;br /&gt;
5. Utiliser le conteneur, et quand on veut le fermer:&lt;br /&gt;
    $ sudo umount /mnt/tcvp/&lt;br /&gt;
    $ sudo cryptsetup close test&lt;br /&gt;
&lt;br /&gt;
NB: en utilisant &amp;quot;cryptsetup --type luks open ... &amp;quot; et &amp;quot;cryptsetup close ...&amp;quot;, les operations losetup sont encapsulées.&lt;br /&gt;
&lt;br /&gt;
==== Autres moyens d'accès aux conteneurs truecrypt ====&lt;br /&gt;
===== tcplay : conteneurs trueCrypt =====&lt;br /&gt;
(Essayé pour la première fois avec Fedora 17). Tcplay est une implémentation de TrueCrypt sous license BSD. Voir [https://github.com/bwalex/tc-play projet github ici].&lt;br /&gt;
Avec tcplay, monter un conteneur 'truecrypt':&lt;br /&gt;
  $ sudo losetup /dev/loop1 $HOME/my-tc-file&lt;br /&gt;
  $ sudo tcplay -m tcvol -d /dev/loop1&lt;br /&gt;
    =&amp;gt; entrer passphrase. &lt;br /&gt;
  $ sudo mount /dev/mapper/tcvol /mnt/tcvol&lt;br /&gt;
&lt;br /&gt;
Et pour démonter:&lt;br /&gt;
  $ sudo umount /mnt/tcvol&lt;br /&gt;
  $ sudo cryptsetup remove tcvol&lt;br /&gt;
  $ sudo losetup -d /dev/loop1&lt;br /&gt;
&lt;br /&gt;
=== Sans accès à sudo ===&lt;br /&gt;
==== encFS : arborescence encryptés ====&lt;br /&gt;
Pour un utilisateur qui n'a pas accès à sudo, encFS (Package: fuse-encfs, voir man encfs) permet de créer et monter des pseudo systèmes de fichier encryptés. &lt;br /&gt;
&lt;br /&gt;
Contrairement à cryptsetup, encFS ne crée pas vraiment de système de fichier dans un conteneur, mais s'appuie sur le système de fichiers sous-jacent pour stocker les données chiffrées. Lors de la création de la zone chiffrée, on passe 2 noms de dossiers: un chiffré, l'autre non chiffré. Ensuite, les fichiers déposés dans la zone non-chiffrée sont automatiquement copiés chiffrés dans l'autre répertoire (noms de fichiers/sous-répertoires également).&lt;br /&gt;
&lt;br /&gt;
Ensuite, lorsque l'on démonte la zone chiffrée, les fichiers sont supprimés de la partie non-chiffrée, mais toujours visibles (chiffrés) dans l'autre. Petit incovénient donc, on masque moins de choses qu'avec un vrai conteneur.&lt;br /&gt;
&lt;br /&gt;
Exemple de création/montage de dossier chiffré avec encFS (répertoire chiffré ~/.bdata, répertoire en clair: ~/cdata): &lt;br /&gt;
&lt;br /&gt;
  $ encfs ~/.bdata ~/cdata&lt;br /&gt;
    =&amp;gt; la première fois, le encfs pose quelques questions pour la configuration de la zone (dont le mot de passe).&lt;br /&gt;
       les fois suivantes, il ne s'agit que du montage: seul le mot de passe est demandé.&lt;br /&gt;
&lt;br /&gt;
A ce stade, la zone est montée. df montre bien une ligne pour cet espace, mais les infos de taille et occupation correspondent au FS sous-jacent (/home dans cet exemple): &lt;br /&gt;
  $ df&lt;br /&gt;
    encfs           10475520   5200528    5274992  50% /home/toine/cdata&lt;br /&gt;
&lt;br /&gt;
==== openssl : cryptage direct de fichier ====&lt;br /&gt;
Documentation détaillée : man enc&lt;br /&gt;
&lt;br /&gt;
Exemples:&lt;br /&gt;
  $ echo test | openssl enc  -aes-256-cbc -pbkdf2 -iter 1000 -a -k 'absnfjtyrufjdngjvhfgksdfrtifghkv'&lt;br /&gt;
    U2FsdGVkX18cc9vgYPbfl74Q8dq/VyL4XyjvyEEo0LU=&lt;br /&gt;
  $ echo &amp;quot;U2FsdGVkX18cc9vgYPbfl74Q8dq/VyL4XyjvyEEo0LU=&amp;quot; | openssl enc -d -aes-256-cbc -a -pbkdf2 -iter 1000 -k 'absnfjtyrufjdngjvhfgksdfrtifghkv'&lt;br /&gt;
    test&lt;br /&gt;
  $ openssl enc -aes-256-cbc -d -a -pbkdf2 -iter 1000 -in /cygdrive/d/tmp/toine.bin | grep -i launch&lt;br /&gt;
&lt;br /&gt;
Compatibilité avec versions &amp;lt; openssl 1.1, l'algo de hash par défaut était md5:&lt;br /&gt;
  $ openssl enc -aes-256-cbc -d -a -md md5 -in /cygdrive/d/tmp/toine.bin | grep -i launch&lt;br /&gt;
&lt;br /&gt;
==== openssl dans vi : décryptage du fichier à l'ouverture et cryptage à la sauvegarde ====&lt;br /&gt;
Cette méthode est intéressante car ne requiert pas de fichier temporaire en clair. &lt;br /&gt;
Les données en mémoire sont en clair donc sensibles à un dump mémoire. &lt;br /&gt;
&lt;br /&gt;
Les commandes suivantes sont à insérer dans directement dans ~/.vimrc  ou équivalent (par exemple dans un fichier .vim/plugin/aes.vim). Il faut avoir openssl dans son path pour que le plugin fonctionne. &lt;br /&gt;
&lt;br /&gt;
  &amp;quot; OpenSSL encrypted files.&lt;br /&gt;
  &amp;quot; PBKDF v1.5 (salted) aes-256-cbc encrypted file.  (File magic &amp;quot;Salted__&amp;quot;)&lt;br /&gt;
  augroup aes&lt;br /&gt;
  autocmd!&lt;br /&gt;
  autocmd  BufReadPre,FileReadPre     *.aes set binary&lt;br /&gt;
  autocmd  BufReadPre,FileReadPre     *.aes set backup&lt;br /&gt;
  autocmd  BufReadPre,FileReadPre     *.aes set history=0 cmdheight=3 viminfo=&lt;br /&gt;
  autocmd  BufReadPre,FileReadPre     *.aes set noswapfile nowritebackup&lt;br /&gt;
  autocmd  BufReadPost,FileReadPost   *.aes set shell=/bin/sh shellredir=&amp;gt;&lt;br /&gt;
  autocmd  BufReadPost,FileReadPost   *.aes '[,']!openssl aes-256-cbc -d -salt&lt;br /&gt;
  autocmd  BufReadPost,FileReadPost   *.aes set nobinary cmdheight&amp;amp; shell&amp;amp;&lt;br /&gt;
  autocmd  BufReadPost,FileReadPost   *.aes let b:encflag=1&lt;br /&gt;
  autocmd  BufReadPost,FileReadPost   *.aes exe &amp;quot;doau BufReadPost &amp;quot; . expand(&amp;quot;%:r&amp;quot;)&lt;br /&gt;
  autocmd  BufReadPost,FileReadPost   *.aes redraw!&lt;br /&gt;
  autocmd  BufWritePre,FileWritePre   *.aes mark z&lt;br /&gt;
  autocmd  BufWritePre,FileWritePre   *.aes set binary cmdheight=3 shell=/bin/sh&lt;br /&gt;
  autocmd  BufWritePre,FileWritePre   *.aes '[,']!openssl aes-256-cbc -salt &lt;br /&gt;
  autocmd  BufWritePost,FileWritePost *.aes undo&lt;br /&gt;
  autocmd  BufWritePost,FileWritePost *.aes set nobinary cmdheight&amp;amp; shell&amp;amp;&lt;br /&gt;
  autocmd  BufWritePost,FileWritePost *.aes 'z&lt;br /&gt;
  augroup END&lt;br /&gt;
&lt;br /&gt;
Ensuite, il suffit d'utiliser l'extension .aes (ou autre à condition d'adapter le code) pour activer le mode crypté. &lt;br /&gt;
Le mot de passe est demandé une fois à l'ouverture et 2 fois à l'écriture.&lt;br /&gt;
&lt;br /&gt;
'''Attention:''' ici, on a positionné la variable &amp;quot;backup&amp;quot;. C'est préférable car an cas de problème de confirmation du mot de passe, le fichier est écrasé...&lt;br /&gt;
&lt;br /&gt;
'''Note:''' le plugin [https://www.vim.org/scripts/script.php?script_id=2012 openssl.vim] effectue le même type de fonction avec un panel plus large d'algorithmes, et une tempo de sortie automatique de vi.&lt;br /&gt;
&lt;br /&gt;
== Encrypter: Solutions utilisables sous Android ==&lt;br /&gt;
=== Conteneurs sans nécessité de rooter ===&lt;br /&gt;
* application EDS (ou EDS lite): compatible avec des conteneurs au format Truecrypt, VeraCrypt, LUKS, EncFs&lt;br /&gt;
=== Conteneurs avec nécessité de rooter ===&lt;br /&gt;
* application LUKSmanager&lt;br /&gt;
&lt;br /&gt;
== Encrypter: Solutions utilisables sous Windows ==&lt;br /&gt;
Le système propose de base BitLocker dans certaines versions (notamment entreprise) depuis Vista. &lt;br /&gt;
&lt;br /&gt;
Depuis l'arrêt de TrueCrypt, il est possible d'utiliser [https://veracrypt.codeplex.com/ VeraCrypt] (son clone). Pour un usage personnel, et assurer la confidentialité de ses données dans les cas d'usage courants (perte/vol d'un PC par exemple), c'est tout à fait suffisant. L'ergonomie et intégration à Windows (au moins XP, 7 ) est correcte.&lt;br /&gt;
&lt;br /&gt;
Egalement: FreeOTFE (si install sous winXP), dont le support a été arrété, est maintenant suivi sous le projet [https://github.com/t-d-k/LibreCrypt LibreCrypt]. Cet outil est compatible LUKS =&amp;gt; possibilité donc de partager des conteneurs avec le monde Android ou Linux.&lt;br /&gt;
&lt;br /&gt;
WinZIP et autres utilitaires permettent aussi de créer des archives protégées par mot de passe. &lt;br /&gt;
&lt;br /&gt;
Openssl pour windows (ou dans cygwin) permet de (dé)crypter directement un fichier.&lt;br /&gt;
&lt;br /&gt;
La méthode vi+openssl présentée pour Linux est fonctionnelle avec cygwin moyennant l'installation des packages adéquats. &lt;br /&gt;
&lt;br /&gt;
== Effacer le contenu des fichiers sensibles ==&lt;br /&gt;
* shred (pkg coreutils) permet d'écraser le contenu d'un fichier et optionnellement le supprimer. A noter: les blocs constituant le fichier ont pu être déplacés au cours de sa vie (redimensionnement, ...) donc pas une garantie absolue... Exemple: nettoyage et suppression du fichier /tmp/myfile.txt&lt;br /&gt;
&lt;br /&gt;
  $ shred -u /tmp/myfile.txt&lt;br /&gt;
&lt;br /&gt;
[[Category:Sécurité]]&lt;br /&gt;
[[Category:Cryptage]]&lt;br /&gt;
[[Category:Linux]]&lt;br /&gt;
[[Category:Windows]]&lt;br /&gt;
[[Category:Openssl]]&lt;/div&gt;</summary>
		<author><name>Toine</name></author>	</entry>

	<entry>
		<id>https://wiki.tonioc.ovh/index.php?title=Rhel/Centos_8_:_installation_xfce,_xrdp&amp;diff=430</id>
		<title>Rhel/Centos 8 : installation xfce, xrdp</title>
		<link rel="alternate" type="text/html" href="https://wiki.tonioc.ovh/index.php?title=Rhel/Centos_8_:_installation_xfce,_xrdp&amp;diff=430"/>
				<updated>2022-01-16T18:21:56Z</updated>
		
		<summary type="html">&lt;p&gt;Toine : /* Lancement de session avec des paramètres */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Installation de xrdp sur Centos 8 = &lt;br /&gt;
&lt;br /&gt;
Déclarer le dépôt EPEL si besoin:&lt;br /&gt;
  $ sudo dnf install epel-release&lt;br /&gt;
Installer et démarrer xrdp&lt;br /&gt;
  $ sudo dnf install xrdp&lt;br /&gt;
  $ sudo systemctl enable xrdp --now&lt;br /&gt;
Si le type de session par défaut doit être outrepassé, créer un fichier ~/startwm.sh avec le binaire du bureau, par ex pour démarrer xfce au lieu de gnome:&lt;br /&gt;
  $ cat startwm.sh &lt;br /&gt;
  /usr/bin/xfce4-session&lt;br /&gt;
&lt;br /&gt;
Déclarer le port au firewall si besoin, avec une zone dédiée aux machines du LAN par exemple:&lt;br /&gt;
  $ sudo firewall-cmd --new-zone=xrdp --permanent&lt;br /&gt;
  $ sudo firewall-cmd --zone=xrdp --add-port=3389/tcp --permanent&lt;br /&gt;
  $ sudo firewall-cmd --zone=xrdp --add-source=192.168.1.0/24 --permanent&lt;br /&gt;
  $ sudo firewall-cmd --reload&lt;br /&gt;
&lt;br /&gt;
A ce stade on peut se connecter via l'appli windows &amp;quot;Remote Desktop&amp;quot;, ou depuis un autre poste linux avec &amp;quot;rdesktop&amp;quot;. &lt;br /&gt;
&lt;br /&gt;
= Lancement de session avec des paramètres = &lt;br /&gt;
&lt;br /&gt;
Par exemple pour forcer un type de bureau gnome (classique ou gnome3), utiliser le script $HOME/startwm.sh, &lt;br /&gt;
par exemple: &lt;br /&gt;
&lt;br /&gt;
  #!/bin/bash --login&lt;br /&gt;
  gnome-session --session=gnome &amp;gt;&amp;gt; /tmp/startwn.out 2&amp;gt;&amp;amp;1&lt;br /&gt;
&lt;br /&gt;
NB: nécessaire d'utiliser --login pour avoir la bonne définition de langage au niveau des menus gnome, sinon c'est en anglais.&lt;br /&gt;
&lt;br /&gt;
= Installation de xfce sur Centos 8 = &lt;br /&gt;
Déclarer le dépôt EPEL si besoin:&lt;br /&gt;
  $ sudo dnf install epel-release&lt;br /&gt;
Installer le bureau xfce&lt;br /&gt;
  $ groupinstall xfce&lt;br /&gt;
Si gdm est installé, rebooter, la session xfce sera proposée. Pour lancer la session xfce via xinitrc/startx&lt;br /&gt;
  $ echo &amp;quot;exec /usr/bin/xfce4-session&amp;quot; &amp;gt;&amp;gt; ~/.xinitrc&lt;br /&gt;
  $ startx&lt;/div&gt;</summary>
		<author><name>Toine</name></author>	</entry>

	<entry>
		<id>https://wiki.tonioc.ovh/index.php?title=Rhel/Centos_8_:_installation_xfce,_xrdp&amp;diff=429</id>
		<title>Rhel/Centos 8 : installation xfce, xrdp</title>
		<link rel="alternate" type="text/html" href="https://wiki.tonioc.ovh/index.php?title=Rhel/Centos_8_:_installation_xfce,_xrdp&amp;diff=429"/>
				<updated>2022-01-16T18:12:18Z</updated>
		
		<summary type="html">&lt;p&gt;Toine : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Installation de xrdp sur Centos 8 = &lt;br /&gt;
&lt;br /&gt;
Déclarer le dépôt EPEL si besoin:&lt;br /&gt;
  $ sudo dnf install epel-release&lt;br /&gt;
Installer et démarrer xrdp&lt;br /&gt;
  $ sudo dnf install xrdp&lt;br /&gt;
  $ sudo systemctl enable xrdp --now&lt;br /&gt;
Si le type de session par défaut doit être outrepassé, créer un fichier ~/startwm.sh avec le binaire du bureau, par ex pour démarrer xfce au lieu de gnome:&lt;br /&gt;
  $ cat startwm.sh &lt;br /&gt;
  /usr/bin/xfce4-session&lt;br /&gt;
&lt;br /&gt;
Déclarer le port au firewall si besoin, avec une zone dédiée aux machines du LAN par exemple:&lt;br /&gt;
  $ sudo firewall-cmd --new-zone=xrdp --permanent&lt;br /&gt;
  $ sudo firewall-cmd --zone=xrdp --add-port=3389/tcp --permanent&lt;br /&gt;
  $ sudo firewall-cmd --zone=xrdp --add-source=192.168.1.0/24 --permanent&lt;br /&gt;
  $ sudo firewall-cmd --reload&lt;br /&gt;
&lt;br /&gt;
A ce stade on peut se connecter via l'appli windows &amp;quot;Remote Desktop&amp;quot;, ou depuis un autre poste linux avec &amp;quot;rdesktop&amp;quot;. &lt;br /&gt;
&lt;br /&gt;
= Lancement de session avec des paramètres = &lt;br /&gt;
&lt;br /&gt;
Par exemple pour forcer un type de bureau gnome (classique ou gnome3), utiliser le script $HOME/startwm.sh, &lt;br /&gt;
par exemple: &lt;br /&gt;
&lt;br /&gt;
  #!/bin/bash --login&lt;br /&gt;
  #source .bash_profile&lt;br /&gt;
  env &amp;gt; /tmp/startwn.out&lt;br /&gt;
  gnome-session --session=gnome &amp;gt;&amp;gt; /tmp/startwn.out 2&amp;gt;&amp;amp;1&lt;br /&gt;
&lt;br /&gt;
= Installation de xfce sur Centos 8 = &lt;br /&gt;
Déclarer le dépôt EPEL si besoin:&lt;br /&gt;
  $ sudo dnf install epel-release&lt;br /&gt;
Installer le bureau xfce&lt;br /&gt;
  $ groupinstall xfce&lt;br /&gt;
Si gdm est installé, rebooter, la session xfce sera proposée. Pour lancer la session xfce via xinitrc/startx&lt;br /&gt;
  $ echo &amp;quot;exec /usr/bin/xfce4-session&amp;quot; &amp;gt;&amp;gt; ~/.xinitrc&lt;br /&gt;
  $ startx&lt;/div&gt;</summary>
		<author><name>Toine</name></author>	</entry>

	<entry>
		<id>https://wiki.tonioc.ovh/index.php?title=USB_boot_creation&amp;diff=428</id>
		<title>USB boot creation</title>
		<link rel="alternate" type="text/html" href="https://wiki.tonioc.ovh/index.php?title=USB_boot_creation&amp;diff=428"/>
				<updated>2021-08-08T16:17:32Z</updated>
		
		<summary type="html">&lt;p&gt;Toine : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== YUMI ==&lt;br /&gt;
[http://www.pendrivelinux.com/yumi-multiboot-usb-creator/ YUMI] (Your Universal Multiboot Integrator), is the successor to our MultibootISOs. It can be used to create a Multiboot USB Flash Drive containing multiple operating systems, antivirus utilities, disc cloning, diagnostic tools, and more. Contrary to MultiBootISOs which used grub to boot ISO files directly from USB, YUMI uses syslinux to boot extracted distributions stored on the USB device, and reverts to using grub to Boot Multiple ISO files from USB, if necessary.&lt;br /&gt;
&lt;br /&gt;
== Creation / reinitialisation d'une clef bootable à partir d'une image iso sous Windows ==&lt;br /&gt;
Utiliser [https://github.com/FedoraQt/MediaWriter/releases FedoraMediaWriter], qui fait bien le boulot... &lt;br /&gt;
&lt;br /&gt;
== Creation / reinitialisation d'une clef bootable à partir d'une image iso sous Linux ==&lt;br /&gt;
Pour images iso créées avec [https://wiki.syslinux.org/wiki/index.php?title=Isohybrid isohybrid] (dont centos, rhel) on créé la cle USB bootable directement à partir de l'image iso avec une copie dd, par exemple:&lt;br /&gt;
  # dd if=rhel-server-7.8-x86_64-dvd.iso of=/dev/sdx bs=512k status=progress&lt;br /&gt;
Ensuite, une fois l'installation effectuée, on réinitialisera la clef avec les étapes:&lt;br /&gt;
  # fdisk -l /dev/sdx&lt;br /&gt;
  Disk /dev/sdx: 7736 MB, 7736072192 bytes, 15109516 sectors&lt;br /&gt;
  Units = sectors of 1 * 512 = 512 bytes&lt;br /&gt;
  Sector size (logical/physical): 512 bytes / 512 bytes&lt;br /&gt;
  I/O size (minimum/optimal): 512 bytes / 512 bytes&lt;br /&gt;
  Disk label type: dos&lt;br /&gt;
  Disk identifier: 0x34588513&lt;br /&gt;
  Device     Boot  Start   End    Blocks  Id  System&lt;br /&gt;
  /dev/sdx1   *     0    3655679 1827840  0   Empty&lt;br /&gt;
  /dev/sdx2        1036  18711    8838    ef  EFI (FAT-12/16/32)&lt;br /&gt;
&lt;br /&gt;
Ici, on va supprimer les partitions sdx1, sdx2 et en recréer une avec fdisk:&lt;br /&gt;
  # fdisk /dev/sdx&lt;br /&gt;
  Welcome to fdisk (util-linux 2.23.2).&lt;br /&gt;
  Changes will remain in memory only, until you decide to write them.&lt;br /&gt;
  Be careful before using the write command.&lt;br /&gt;
  Command (m for help): &amp;lt;u&amp;gt;'''d'''&amp;lt;/u&amp;gt;&lt;br /&gt;
  Partition number (1,2, default 2):&lt;br /&gt;
  Partition 2 is deleted&lt;br /&gt;
  Command (m for help): &amp;lt;u&amp;gt;'''d'''&amp;lt;/u&amp;gt;&lt;br /&gt;
  Selected partition 1&lt;br /&gt;
  Partition 1 is deleted&lt;br /&gt;
  Command (m for help): &amp;lt;u&amp;gt;'''n'''&amp;lt;/u&amp;gt;&lt;br /&gt;
  Partition type: &lt;br /&gt;
    p primary (0 primary, 0 extended, 4 free)&lt;br /&gt;
    e extended&lt;br /&gt;
  Select (default p):&lt;br /&gt;
  Using default response p&lt;br /&gt;
  Partition number (1-4, default 1):&lt;br /&gt;
  First sector (2048-15109515, default 2048):&lt;br /&gt;
  Using default value 2048&lt;br /&gt;
  Last sector, +sectors or +size{K,M,G} (2048-15109515, default 15109515):&lt;br /&gt;
  Using default value 15109515&lt;br /&gt;
  Partition 1 of type Linux and of size 7.2 GiB is set&lt;br /&gt;
  Command (m for help): &amp;lt;u&amp;gt;'''t'''&amp;lt;/u&amp;gt;&lt;br /&gt;
  Selected partition 1&lt;br /&gt;
  Hex code (type L to list all codes): &amp;lt;u&amp;gt;'''L'''&amp;lt;/u&amp;gt;&lt;br /&gt;
  0  Empty          24 NEC DOS           81 Minix / old Lin bf Solaris&lt;br /&gt;
  ...etc...&lt;br /&gt;
  b W95 FAT32       51 OnTrack DM6 Aux   9f BSD/OS          e4 SpeedStor&lt;br /&gt;
  c W95 FAT32 (LBA) 52 CP/M              a0 IBM Thinkpad hi eb BeOS fs&lt;br /&gt;
  ...etc...&lt;br /&gt;
  Hex code (type L to list all codes): &amp;lt;u&amp;gt;'''c'''&amp;lt;/u&amp;gt;&lt;br /&gt;
  WARNING: If you have created or modified any DOS 6.xpartitions, please see the fdisk&lt;br /&gt;
  manual page for additionalinformation.&lt;br /&gt;
  Changed type of partition 'Linux' to 'W95 FAT32 (LBA)'&lt;br /&gt;
  Command (m for help): &amp;lt;u&amp;gt;'''w'''&amp;lt;/u&amp;gt;&lt;br /&gt;
  The partition table has been altered!&lt;br /&gt;
  Calling ioctl() to re-read partition table.&lt;br /&gt;
  Syncing disks.&lt;br /&gt;
Puis formatter en vfat:&lt;br /&gt;
  # mkfs.vfat /dev/sdx1&lt;br /&gt;
  mkfs.fat 3.0.20 (12 Jun 2013)&lt;/div&gt;</summary>
		<author><name>Toine</name></author>	</entry>

	<entry>
		<id>https://wiki.tonioc.ovh/index.php?title=Accueil&amp;diff=427</id>
		<title>Accueil</title>
		<link rel="alternate" type="text/html" href="https://wiki.tonioc.ovh/index.php?title=Accueil&amp;diff=427"/>
				<updated>2021-06-11T09:50:25Z</updated>
		
		<summary type="html">&lt;p&gt;Toine : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;strong&amp;gt;Le wiki techno d'antonio...&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ce site collecte mes recettes liées à l'usage des technos informatiques - principalement autour des variantes Linux type 'redhat' (rhel, fedora, centos), un peu Windows (quoique de moins en moins...). &lt;br /&gt;
&lt;br /&gt;
Voir la [[Spécial:Categories|liste des catégories]].&lt;br /&gt;
&lt;br /&gt;
== Sommaire ==&lt;br /&gt;
# Linux en général&lt;br /&gt;
## [[Bash: trucs et astuces]]&lt;br /&gt;
## [[Linux: divers trucs et astuces]]&lt;br /&gt;
## [[Bash: journaliser l'historique de commandes dans syslog]]&lt;br /&gt;
## [[Linux: Diagnostic hardware]]&lt;br /&gt;
## [[Rpmbuild avec modifications (ajout de patch)]]&lt;br /&gt;
## [[USB boot creation]]&lt;br /&gt;
## [[Linux: Outils de monitoring/performances]]&lt;br /&gt;
## [[Linux: Conversions de fichiers]]&lt;br /&gt;
## [[Linux: transfert et synchronisation de fichiers ]]&lt;br /&gt;
## [[Linux: heure, timezone, etc]]&lt;br /&gt;
## [[YUM,DNF,RPM : installer des packages]]&lt;br /&gt;
## [[nmcli: NetworkManager CLI]]&lt;br /&gt;
## [[Linux: outils réseau, test connexion, SSL...]]&lt;br /&gt;
## [[Linux: recettes bonding]]&lt;br /&gt;
## [[SSH: accélerer les connexions avec ControlMaster]]&lt;br /&gt;
## [[SSH: rebond et tunnels]]&lt;br /&gt;
## [[Stockage partagé avec SSHFS]]&lt;br /&gt;
## [[xml en ligne de commande]]&lt;br /&gt;
## [[Systemd]]&lt;br /&gt;
## [[tmux: multiplexer un terminal en ligne de commande]]&lt;br /&gt;
## [[SELinux créer un module d'exception]]&lt;br /&gt;
# [[Firefox: astuces et trucs divers]]&lt;br /&gt;
# Sécurité&lt;br /&gt;
## [[Encrypter/Protéger ses données]]&lt;br /&gt;
## [[Exemples avec iptables/ipset]]&lt;br /&gt;
## [[Openscap pour scaner les vulnérabilités actives]]&lt;br /&gt;
# Redhat/Centos 8&lt;br /&gt;
## [[Rhel/Centos 8 : installation xfce, xrdp ]]&lt;br /&gt;
# Redhat/Centos 7&lt;br /&gt;
## [[Rhel/Centos 7 : commandes réglages système divers]]&lt;br /&gt;
## [[Centos 7 wifi avec kde et nmcli]]&lt;br /&gt;
## [[GRUB2 save entry]]&lt;br /&gt;
## [[Centos 7 divers astuces et resolutions de problèmes]]&lt;br /&gt;
## [[Centos 7 : Installer son serveur OpenVPN]]&lt;br /&gt;
## [[Centos 7 : Client OpenVPN (CLI et NetworkManager avec KDE et Gnome3)]]&lt;br /&gt;
# Virtualisation&lt;br /&gt;
## [[KVM-Qemu]]&lt;br /&gt;
# Conteneurs&lt;br /&gt;
## [[Docker]]&lt;br /&gt;
## [[podman (centos/rhel8) ]]&lt;br /&gt;
# [[KDE]]&lt;br /&gt;
# [[Gnome3]]&lt;br /&gt;
# Redhat/Centos 6&lt;br /&gt;
## [[HP proliant sous rhel6]]&lt;br /&gt;
## [[Redhat el6 configuration système]]&lt;br /&gt;
# Cygwin&lt;br /&gt;
## [[Cygwin, Trucs et astuces]]&lt;br /&gt;
# WSL (Windows Subsystem for Linux)&lt;br /&gt;
## [[WSL, Installation, Trucs et astuces]]&lt;br /&gt;
#Perl&lt;br /&gt;
## [[Perl: trucs généraux]]&lt;br /&gt;
## [[Perl-Tk code snippets divers]]&lt;br /&gt;
## [[Perl: telnet dans un script perl]]&lt;br /&gt;
## [[Perl: exemple SSH avec Expect]]&lt;br /&gt;
## [[Perl: afficher les transitions heures été/hiver sur la timezone]]&lt;br /&gt;
# MariaDB/MySQL&lt;br /&gt;
## [[MariaDB]]&lt;br /&gt;
# [[Aide mediawiki]]&lt;/div&gt;</summary>
		<author><name>Toine</name></author>	</entry>

	<entry>
		<id>https://wiki.tonioc.ovh/index.php?title=Linux:_outils_r%C3%A9seau,_test_connexion,_SSL...&amp;diff=426</id>
		<title>Linux: outils réseau, test connexion, SSL...</title>
		<link rel="alternate" type="text/html" href="https://wiki.tonioc.ovh/index.php?title=Linux:_outils_r%C3%A9seau,_test_connexion,_SSL...&amp;diff=426"/>
				<updated>2021-06-11T09:49:55Z</updated>
		
		<summary type="html">&lt;p&gt;Toine : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Lister les ports ouverts =&lt;br /&gt;
&lt;br /&gt;
  $ ss -ltu&lt;br /&gt;
  $ netstat -ltu&lt;br /&gt;
  $ lsof -i &lt;br /&gt;
&lt;br /&gt;
= ncat : test de connexion, envoi/réception de données du réseau =&lt;br /&gt;
Fourni sur Centos par nmap-ncat, &lt;br /&gt;
== test de connexion sortante ==&lt;br /&gt;
  &lt;br /&gt;
  $ ncat myhost 22&lt;br /&gt;
  $ ncat --ssl myhost 443&lt;br /&gt;
&lt;br /&gt;
== test de connexion entrante et réception de données ==&lt;br /&gt;
  &lt;br /&gt;
Sur le serveur qui reçoit, on se place en attente de connexion (ici en mode SSL):&lt;br /&gt;
&lt;br /&gt;
  $ ncat --ssl -v -l 4445&lt;br /&gt;
  Ncat: Version 6.40 ( http://nmap.org/ncat )&lt;br /&gt;
  Ncat: Generating a temporary 1024-bit RSA key. Use --ssl-key and --ssl-cert to use a permanent one.&lt;br /&gt;
  Ncat: SHA-1 fingerprint: 6F47 CD91 DB33 F55F D049 AFF6 7CD1 7857 DBFD C6D3&lt;br /&gt;
  Ncat: Listening on :::4445&lt;br /&gt;
  Ncat: Listening on 0.0.0.0:4445&lt;br /&gt;
  &lt;br /&gt;
Sur le serveur distant, on se connecte (en SSL aussi) et on envoie les données :&lt;br /&gt;
&lt;br /&gt;
  $ echo &amp;quot;Hello, voici des données&amp;quot; |nc --ssl localhost 4445&lt;br /&gt;
&lt;br /&gt;
Sur le premier serveur on voit la connexion et les données:&lt;br /&gt;
  Ncat: Connection from ::1:53030.&lt;br /&gt;
  Hello, voici des données&lt;br /&gt;
&lt;br /&gt;
= trouver le MTU entre 2 points = &lt;br /&gt;
&lt;br /&gt;
* tracepath(6) pour déterminer le MTU minimum , ex: &lt;br /&gt;
  &lt;br /&gt;
  Host$ tracepath -n 192.168.1.2&lt;br /&gt;
   1:  192.168.0.2       0.097ms pmtu 1500&lt;br /&gt;
   1:  192.168.0.1       0.535ms &lt;br /&gt;
   2:  192.168.0.1       0.430ms pmtu 1400&lt;br /&gt;
   2:  192.168.1.2       0.763ms reached&lt;br /&gt;
      Resume: pmtu 1400 &lt;br /&gt;
&lt;br /&gt;
  explication détaillée: http://packetlife.net/blog/2008/aug/18/path-mtu-discovery/ &lt;br /&gt;
= openssl s_client : client de test / diagnostic SSL =&lt;br /&gt;
&lt;br /&gt;
s_client fournit plein d'options pour tester un serveur SSL, voir les certificats, ... Exemple:&lt;br /&gt;
&lt;br /&gt;
  $ openssl s_client -connect www.google.com:443 2&amp;gt;/dev/null&lt;br /&gt;
  ---&lt;br /&gt;
  Certificate chain&lt;br /&gt;
  0 s:/C=US/ST=California/L=Mountain View/O=Google Inc/CN=www.google.com&lt;br /&gt;
    i:/C=US/O=Google Inc/CN=Google Internet Authority G2&lt;br /&gt;
  1 s:/C=US/O=Google Inc/CN=Google Internet Authority G2&lt;br /&gt;
    i:/C=US/O=GeoTrust Inc./CN=GeoTrust Global CA&lt;br /&gt;
  2 s:/C=US/O=GeoTrust Inc./CN=GeoTrust Global CA&lt;br /&gt;
    i:/C=US/O=Equifax/OU=Equifax Secure Certificate Authority&lt;br /&gt;
  ---&lt;br /&gt;
  Server certificate&lt;br /&gt;
  -----BEGIN CERTIFICATE-----&lt;br /&gt;
  MIIEdjCCA16gAwIBAgIINVv6FyMmk6wwDQYJKoZIhvcNAQELBQAwSTELMAkGA1UE&lt;br /&gt;
  BhMCVVMxEzARBgNVBAoTCkdvb2dsZSBJbmMxJTAjBgNVBAMTHEdvb2dsZSBJbnRl&lt;br /&gt;
  ... &lt;br /&gt;
  Pn4b442EIh8rmoJkNgfD17nigYOHfOMGHCmBDu7+cdK+2muYYR4sjCmi&lt;br /&gt;
  -----END CERTIFICATE-----&lt;br /&gt;
  subject=/C=US/ST=California/L=Mountain View/O=Google Inc/CN=www.google.com&lt;br /&gt;
  issuer=/C=US/O=Google Inc/CN=Google Internet Authority G2&lt;br /&gt;
  ---&lt;br /&gt;
  No client certificate CA names sent&lt;br /&gt;
  Peer signing digest: SHA256&lt;br /&gt;
  Server Temp Key: ECDH, P-256, 256 bits&lt;br /&gt;
  ---&lt;br /&gt;
  SSL handshake has read 3822 bytes and written 415 bytes&lt;br /&gt;
  ---&lt;br /&gt;
  New, TLSv1/SSLv3, Cipher is ECDHE-RSA-AES128-GCM-SHA256&lt;br /&gt;
  Server public key is 2048 bit&lt;br /&gt;
  Secure Renegotiation IS supported&lt;br /&gt;
  Compression: NONE&lt;br /&gt;
  Expansion: NONE&lt;br /&gt;
  No ALPN negotiated&lt;br /&gt;
  SSL-Session:&lt;br /&gt;
    Protocol  : TLSv1.2&lt;br /&gt;
    Cipher    : ECDHE-RSA-AES128-GCM-SHA256&lt;br /&gt;
    Session-ID: B1B565306CB0FDFAA38C779E2ACF729178933C32FBBD59E67F3313E485E0101A&lt;br /&gt;
    Session-ID-ctx: &lt;br /&gt;
    Master-Key: 169CEDECADCFA3CA8701115DDCD928E2630E54EDC4F025C681E4EAB10B5CDC831E969ED25A916E7B285CE2CB6D8EAA9C&lt;br /&gt;
    Key-Arg   : None&lt;br /&gt;
    Krb5 Principal: None&lt;br /&gt;
    PSK identity: None&lt;br /&gt;
    PSK identity hint: None&lt;br /&gt;
    TLS session ticket lifetime hint: 100800 (seconds)&lt;br /&gt;
    TLS session ticket:&lt;br /&gt;
    0000 - 00 cb 68 cc a1 06 67 48-a0 2c f2 12 a2 aa 12 0e   ..h...gH.,......&lt;br /&gt;
    0010 - 8d 39 d5 3d 11 e1 03 3a-ac bb f6 7b 02 b8 b9 c6   .9.=...:...{....&lt;br /&gt;
    ...&lt;br /&gt;
    00d0 - 56 15 80 15 bd                                    V....&lt;br /&gt;
    Start Time: 1518364548&lt;br /&gt;
    Timeout   : 300 (sec)&lt;br /&gt;
    Verify return code: 0 (ok)&lt;br /&gt;
  ---&lt;br /&gt;
&lt;br /&gt;
et pour plus de détails sur les certificats:&lt;br /&gt;
&lt;br /&gt;
  $ openssl s_client -connect google.com:443 | openssl x509 -noout -text &lt;br /&gt;
&lt;br /&gt;
= ngrep: analyseur/recherche de paquets réseau =&lt;br /&gt;
Paquet disponible dans le dépôt EPEL pour centos/rhel, &lt;br /&gt;
&lt;br /&gt;
Voir les examples https://github.com/jpr5/ngrep/blob/master/EXAMPLES.md &lt;br /&gt;
&lt;br /&gt;
= SSH : utiliser l'entrée std, pour effectuer un tar à travers le réseau =&lt;br /&gt;
&lt;br /&gt;
  tar zcf - /SRC | ssh user@domain.tld dd of=/remote/server/path/file.tgz&lt;br /&gt;
&lt;br /&gt;
= socat : redirection de ports, conversion IPv4-v6, ...=&lt;br /&gt;
&lt;br /&gt;
Voir http://www.dest-unreach.org/socat/doc/socat.html &lt;br /&gt;
&lt;br /&gt;
Autre exemple : un récepteur TCP qui poubellise le contenu reçu (réception de flux unidirectionnels)&lt;br /&gt;
&lt;br /&gt;
  socat /dev/null,ignoreeof tcp-listen:2003,fork,reuseaddr&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Linux]]&lt;br /&gt;
[[Category:Network]]&lt;br /&gt;
[[Category:Debug]]&lt;/div&gt;</summary>
		<author><name>Toine</name></author>	</entry>

	<entry>
		<id>https://wiki.tonioc.ovh/index.php?title=Accueil&amp;diff=425</id>
		<title>Accueil</title>
		<link rel="alternate" type="text/html" href="https://wiki.tonioc.ovh/index.php?title=Accueil&amp;diff=425"/>
				<updated>2021-06-11T09:04:48Z</updated>
		
		<summary type="html">&lt;p&gt;Toine : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;strong&amp;gt;Le wiki techno d'antonio...&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ce site collecte mes recettes liées à l'usage des technos informatiques - principalement autour des variantes Linux type 'redhat' (rhel, fedora, centos), un peu Windows (quoique de moins en moins...). &lt;br /&gt;
&lt;br /&gt;
Voir la [[Spécial:Categories|liste des catégories]].&lt;br /&gt;
&lt;br /&gt;
== Sommaire ==&lt;br /&gt;
# Linux en général&lt;br /&gt;
## [[Bash: trucs et astuces]]&lt;br /&gt;
## [[Linux: divers trucs et astuces]]&lt;br /&gt;
## [[Bash: journaliser l'historique de commandes dans syslog]]&lt;br /&gt;
## [[Linux: Diagnostic hardware]]&lt;br /&gt;
## [[Rpmbuild avec modifications (ajout de patch)]]&lt;br /&gt;
## [[USB boot creation]]&lt;br /&gt;
## [[Linux: Outils de monitoring/performances]]&lt;br /&gt;
## [[Linux: Conversions de fichiers]]&lt;br /&gt;
## [[Linux: transfert et synchronisation de fichiers ]]&lt;br /&gt;
## [[Linux: heure, timezone, etc]]&lt;br /&gt;
## [[YUM,DNF,RPM : installer des packages]]&lt;br /&gt;
## [[nmcli: NetworkManager CLI]]&lt;br /&gt;
## [[Linux: outils réseau, test connexion, SSL...]]&lt;br /&gt;
## [[Linux: recettes bonding]]&lt;br /&gt;
## [[SSH: entrée/sortie standard à travers le réseau]]&lt;br /&gt;
## [[SSH: accélerer les connexions avec ControlMaster]]&lt;br /&gt;
## [[SSH: rebond et tunnels]]&lt;br /&gt;
## [[Stockage partagé avec SSHFS]]&lt;br /&gt;
## [[xml en ligne de commande]]&lt;br /&gt;
## [[Systemd]]&lt;br /&gt;
## [[tmux: multiplexer un terminal en ligne de commande]]&lt;br /&gt;
## [[SELinux créer un module d'exception]]&lt;br /&gt;
# [[Firefox: astuces et trucs divers]]&lt;br /&gt;
# Sécurité&lt;br /&gt;
## [[Encrypter/Protéger ses données]]&lt;br /&gt;
## [[Exemples avec iptables/ipset]]&lt;br /&gt;
## [[Openscap pour scaner les vulnérabilités actives]]&lt;br /&gt;
# Redhat/Centos 8&lt;br /&gt;
## [[Rhel/Centos 8 : installation xfce, xrdp ]]&lt;br /&gt;
# Redhat/Centos 7&lt;br /&gt;
## [[Rhel/Centos 7 : commandes réglages système divers]]&lt;br /&gt;
## [[Centos 7 wifi avec kde et nmcli]]&lt;br /&gt;
## [[GRUB2 save entry]]&lt;br /&gt;
## [[Centos 7 divers astuces et resolutions de problèmes]]&lt;br /&gt;
## [[Centos 7 : Installer son serveur OpenVPN]]&lt;br /&gt;
## [[Centos 7 : Client OpenVPN (CLI et NetworkManager avec KDE et Gnome3)]]&lt;br /&gt;
# Virtualisation&lt;br /&gt;
## [[KVM-Qemu]]&lt;br /&gt;
# Conteneurs&lt;br /&gt;
## [[Docker]]&lt;br /&gt;
## [[podman (centos/rhel8) ]]&lt;br /&gt;
# [[KDE]]&lt;br /&gt;
# [[Gnome3]]&lt;br /&gt;
# Redhat/Centos 6&lt;br /&gt;
## [[HP proliant sous rhel6]]&lt;br /&gt;
## [[Redhat el6 configuration système]]&lt;br /&gt;
# Cygwin&lt;br /&gt;
## [[Cygwin, Trucs et astuces]]&lt;br /&gt;
# WSL (Windows Subsystem for Linux)&lt;br /&gt;
## [[WSL, Installation, Trucs et astuces]]&lt;br /&gt;
#Perl&lt;br /&gt;
## [[Perl: trucs généraux]]&lt;br /&gt;
## [[Perl-Tk code snippets divers]]&lt;br /&gt;
## [[Perl: telnet dans un script perl]]&lt;br /&gt;
## [[Perl: exemple SSH avec Expect]]&lt;br /&gt;
## [[Perl: afficher les transitions heures été/hiver sur la timezone]]&lt;br /&gt;
# MariaDB/MySQL&lt;br /&gt;
## [[MariaDB]]&lt;br /&gt;
# [[Aide mediawiki]]&lt;/div&gt;</summary>
		<author><name>Toine</name></author>	</entry>

	<entry>
		<id>https://wiki.tonioc.ovh/index.php?title=Linux:_outils_r%C3%A9seau,_test_connexion,_SSL...&amp;diff=423</id>
		<title>Linux: outils réseau, test connexion, SSL...</title>
		<link rel="alternate" type="text/html" href="https://wiki.tonioc.ovh/index.php?title=Linux:_outils_r%C3%A9seau,_test_connexion,_SSL...&amp;diff=423"/>
				<updated>2021-06-11T09:04:17Z</updated>
		
		<summary type="html">&lt;p&gt;Toine : Toine a déplacé la page Linux: outils de debug réseau, test connexion, SSL... vers Linux: outils réseau, test connexion, SSL...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Lister les ports ouverts =&lt;br /&gt;
&lt;br /&gt;
  $ ss -ltu&lt;br /&gt;
  $ netstat -ltu&lt;br /&gt;
  $ lsof -i &lt;br /&gt;
&lt;br /&gt;
= ncat : test de connexion, envoi/réception de données du réseau =&lt;br /&gt;
Fourni sur Centos par nmap-ncat, &lt;br /&gt;
== test de connexion sortante ==&lt;br /&gt;
  &lt;br /&gt;
  $ ncat myhost 22&lt;br /&gt;
  $ ncat --ssl myhost 443&lt;br /&gt;
&lt;br /&gt;
== test de connexion entrante et réception de données ==&lt;br /&gt;
  &lt;br /&gt;
Sur le serveur qui reçoit, on se place en attente de connexion (ici en mode SSL):&lt;br /&gt;
&lt;br /&gt;
  $ ncat --ssl -v -l 4445&lt;br /&gt;
  Ncat: Version 6.40 ( http://nmap.org/ncat )&lt;br /&gt;
  Ncat: Generating a temporary 1024-bit RSA key. Use --ssl-key and --ssl-cert to use a permanent one.&lt;br /&gt;
  Ncat: SHA-1 fingerprint: 6F47 CD91 DB33 F55F D049 AFF6 7CD1 7857 DBFD C6D3&lt;br /&gt;
  Ncat: Listening on :::4445&lt;br /&gt;
  Ncat: Listening on 0.0.0.0:4445&lt;br /&gt;
  &lt;br /&gt;
Sur le serveur distant, on se connecte (en SSL aussi) et on envoie les données :&lt;br /&gt;
&lt;br /&gt;
  $ echo &amp;quot;Hello, voici des données&amp;quot; |nc --ssl localhost 4445&lt;br /&gt;
&lt;br /&gt;
Sur le premier serveur on voit la connexion et les données:&lt;br /&gt;
  Ncat: Connection from ::1:53030.&lt;br /&gt;
  Hello, voici des données&lt;br /&gt;
&lt;br /&gt;
= trouver le MTU entre 2 points = &lt;br /&gt;
&lt;br /&gt;
* tracepath(6) pour déterminer le MTU minimum , ex: &lt;br /&gt;
  &lt;br /&gt;
  Host$ tracepath -n 192.168.1.2&lt;br /&gt;
   1:  192.168.0.2       0.097ms pmtu 1500&lt;br /&gt;
   1:  192.168.0.1       0.535ms &lt;br /&gt;
   2:  192.168.0.1       0.430ms pmtu 1400&lt;br /&gt;
   2:  192.168.1.2       0.763ms reached&lt;br /&gt;
      Resume: pmtu 1400 &lt;br /&gt;
&lt;br /&gt;
  explication détaillée: http://packetlife.net/blog/2008/aug/18/path-mtu-discovery/ &lt;br /&gt;
= openssl s_client : client de test / diagnostic SSL =&lt;br /&gt;
&lt;br /&gt;
s_client fournit plein d'options pour tester un serveur SSL, voir les certificats, ... Exemple:&lt;br /&gt;
&lt;br /&gt;
  $ openssl s_client -connect www.google.com:443 2&amp;gt;/dev/null&lt;br /&gt;
  ---&lt;br /&gt;
  Certificate chain&lt;br /&gt;
  0 s:/C=US/ST=California/L=Mountain View/O=Google Inc/CN=www.google.com&lt;br /&gt;
    i:/C=US/O=Google Inc/CN=Google Internet Authority G2&lt;br /&gt;
  1 s:/C=US/O=Google Inc/CN=Google Internet Authority G2&lt;br /&gt;
    i:/C=US/O=GeoTrust Inc./CN=GeoTrust Global CA&lt;br /&gt;
  2 s:/C=US/O=GeoTrust Inc./CN=GeoTrust Global CA&lt;br /&gt;
    i:/C=US/O=Equifax/OU=Equifax Secure Certificate Authority&lt;br /&gt;
  ---&lt;br /&gt;
  Server certificate&lt;br /&gt;
  -----BEGIN CERTIFICATE-----&lt;br /&gt;
  MIIEdjCCA16gAwIBAgIINVv6FyMmk6wwDQYJKoZIhvcNAQELBQAwSTELMAkGA1UE&lt;br /&gt;
  BhMCVVMxEzARBgNVBAoTCkdvb2dsZSBJbmMxJTAjBgNVBAMTHEdvb2dsZSBJbnRl&lt;br /&gt;
  ... &lt;br /&gt;
  Pn4b442EIh8rmoJkNgfD17nigYOHfOMGHCmBDu7+cdK+2muYYR4sjCmi&lt;br /&gt;
  -----END CERTIFICATE-----&lt;br /&gt;
  subject=/C=US/ST=California/L=Mountain View/O=Google Inc/CN=www.google.com&lt;br /&gt;
  issuer=/C=US/O=Google Inc/CN=Google Internet Authority G2&lt;br /&gt;
  ---&lt;br /&gt;
  No client certificate CA names sent&lt;br /&gt;
  Peer signing digest: SHA256&lt;br /&gt;
  Server Temp Key: ECDH, P-256, 256 bits&lt;br /&gt;
  ---&lt;br /&gt;
  SSL handshake has read 3822 bytes and written 415 bytes&lt;br /&gt;
  ---&lt;br /&gt;
  New, TLSv1/SSLv3, Cipher is ECDHE-RSA-AES128-GCM-SHA256&lt;br /&gt;
  Server public key is 2048 bit&lt;br /&gt;
  Secure Renegotiation IS supported&lt;br /&gt;
  Compression: NONE&lt;br /&gt;
  Expansion: NONE&lt;br /&gt;
  No ALPN negotiated&lt;br /&gt;
  SSL-Session:&lt;br /&gt;
    Protocol  : TLSv1.2&lt;br /&gt;
    Cipher    : ECDHE-RSA-AES128-GCM-SHA256&lt;br /&gt;
    Session-ID: B1B565306CB0FDFAA38C779E2ACF729178933C32FBBD59E67F3313E485E0101A&lt;br /&gt;
    Session-ID-ctx: &lt;br /&gt;
    Master-Key: 169CEDECADCFA3CA8701115DDCD928E2630E54EDC4F025C681E4EAB10B5CDC831E969ED25A916E7B285CE2CB6D8EAA9C&lt;br /&gt;
    Key-Arg   : None&lt;br /&gt;
    Krb5 Principal: None&lt;br /&gt;
    PSK identity: None&lt;br /&gt;
    PSK identity hint: None&lt;br /&gt;
    TLS session ticket lifetime hint: 100800 (seconds)&lt;br /&gt;
    TLS session ticket:&lt;br /&gt;
    0000 - 00 cb 68 cc a1 06 67 48-a0 2c f2 12 a2 aa 12 0e   ..h...gH.,......&lt;br /&gt;
    0010 - 8d 39 d5 3d 11 e1 03 3a-ac bb f6 7b 02 b8 b9 c6   .9.=...:...{....&lt;br /&gt;
    ...&lt;br /&gt;
    00d0 - 56 15 80 15 bd                                    V....&lt;br /&gt;
    Start Time: 1518364548&lt;br /&gt;
    Timeout   : 300 (sec)&lt;br /&gt;
    Verify return code: 0 (ok)&lt;br /&gt;
  ---&lt;br /&gt;
&lt;br /&gt;
et pour plus de détails sur les certificats:&lt;br /&gt;
&lt;br /&gt;
  $ openssl s_client -connect google.com:443 | openssl x509 -noout -text &lt;br /&gt;
&lt;br /&gt;
= ngrep: analyseur/recherche de paquets réseau =&lt;br /&gt;
Paquet disponible dans le dépôt EPEL pour centos/rhel, &lt;br /&gt;
&lt;br /&gt;
Voir les examples https://github.com/jpr5/ngrep/blob/master/EXAMPLES.md &lt;br /&gt;
&lt;br /&gt;
[[Category:Linux]]&lt;br /&gt;
[[Category:Network]]&lt;br /&gt;
[[Category:Debug]]&lt;/div&gt;</summary>
		<author><name>Toine</name></author>	</entry>

	<entry>
		<id>https://wiki.tonioc.ovh/index.php?title=Linux:_outils_de_debug_r%C3%A9seau,_test_connexion,_SSL...&amp;diff=424</id>
		<title>Linux: outils de debug réseau, test connexion, SSL...</title>
		<link rel="alternate" type="text/html" href="https://wiki.tonioc.ovh/index.php?title=Linux:_outils_de_debug_r%C3%A9seau,_test_connexion,_SSL...&amp;diff=424"/>
				<updated>2021-06-11T09:04:17Z</updated>
		
		<summary type="html">&lt;p&gt;Toine : Toine a déplacé la page Linux: outils de debug réseau, test connexion, SSL... vers Linux: outils réseau, test connexion, SSL...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECTION [[Linux: outils réseau, test connexion, SSL...]]&lt;/div&gt;</summary>
		<author><name>Toine</name></author>	</entry>

	<entry>
		<id>https://wiki.tonioc.ovh/index.php?title=USB_boot_creation&amp;diff=422</id>
		<title>USB boot creation</title>
		<link rel="alternate" type="text/html" href="https://wiki.tonioc.ovh/index.php?title=USB_boot_creation&amp;diff=422"/>
				<updated>2021-04-25T08:29:23Z</updated>
		
		<summary type="html">&lt;p&gt;Toine : /* Creation / reinitialisation d'une clef bootable à partir d'une image iso sous Linux */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== YUMI ==&lt;br /&gt;
[http://www.pendrivelinux.com/yumi-multiboot-usb-creator/ YUMI] (Your Universal Multiboot Integrator), is the successor to our MultibootISOs. It can be used to create a Multiboot USB Flash Drive containing multiple operating systems, antivirus utilities, disc cloning, diagnostic tools, and more. Contrary to MultiBootISOs which used grub to boot ISO files directly from USB, YUMI uses syslinux to boot extracted distributions stored on the USB device, and reverts to using grub to Boot Multiple ISO files from USB, if necessary.&lt;br /&gt;
&lt;br /&gt;
== Creation / reinitialisation d'une clef bootable à partir d'une image iso sous Windows ==&lt;br /&gt;
Utiliser [https://github.com/FedoraQt/MediaWriter/releases FedoraMediaWriter], qui fait bien le boulot... &lt;br /&gt;
&lt;br /&gt;
== Creation / reinitialisation d'une clef bootable à partir d'une image iso sous Linux ==&lt;br /&gt;
Pour images iso créées avec [https://wiki.syslinux.org/wiki/index.php?title=Isohybrid isohybrid] (dont centos, rhel) on créé la cle USB bootable directement à partir de l'image iso avec une copie dd, par exemple:&lt;br /&gt;
  # dd if=rhel-server-7.8-x86_64-dvd.iso of=/dev/sdx bs=512k&lt;br /&gt;
Ensuite, une fois l'installation effectuée, on réinitialisera la clef avec les étapes:&lt;br /&gt;
  # fdisk -l /dev/sdx&lt;br /&gt;
  Disk /dev/sdx: 7736 MB, 7736072192 bytes, 15109516 sectors&lt;br /&gt;
  Units = sectors of 1 * 512 = 512 bytes&lt;br /&gt;
  Sector size (logical/physical): 512 bytes / 512 bytes&lt;br /&gt;
  I/O size (minimum/optimal): 512 bytes / 512 bytes&lt;br /&gt;
  Disk label type: dos&lt;br /&gt;
  Disk identifier: 0x34588513&lt;br /&gt;
  Device     Boot  Start   End    Blocks  Id  System&lt;br /&gt;
  /dev/sdx1   *     0    3655679 1827840  0   Empty&lt;br /&gt;
  /dev/sdx2        1036  18711    8838    ef  EFI (FAT-12/16/32)&lt;br /&gt;
&lt;br /&gt;
Ici, on va supprimer les partitions sdx1, sdx2 et en recréer une avec fdisk:&lt;br /&gt;
  # fdisk /dev/sdx&lt;br /&gt;
  Welcome to fdisk (util-linux 2.23.2).&lt;br /&gt;
  Changes will remain in memory only, until you decide to write them.&lt;br /&gt;
  Be careful before using the write command.&lt;br /&gt;
  Command (m for help): &amp;lt;u&amp;gt;'''d'''&amp;lt;/u&amp;gt;&lt;br /&gt;
  Partition number (1,2, default 2):&lt;br /&gt;
  Partition 2 is deleted&lt;br /&gt;
  Command (m for help): &amp;lt;u&amp;gt;'''d'''&amp;lt;/u&amp;gt;&lt;br /&gt;
  Selected partition 1&lt;br /&gt;
  Partition 1 is deleted&lt;br /&gt;
  Command (m for help): &amp;lt;u&amp;gt;'''n'''&amp;lt;/u&amp;gt;&lt;br /&gt;
  Partition type: &lt;br /&gt;
    p primary (0 primary, 0 extended, 4 free)&lt;br /&gt;
    e extended&lt;br /&gt;
  Select (default p):&lt;br /&gt;
  Using default response p&lt;br /&gt;
  Partition number (1-4, default 1):&lt;br /&gt;
  First sector (2048-15109515, default 2048):&lt;br /&gt;
  Using default value 2048&lt;br /&gt;
  Last sector, +sectors or +size{K,M,G} (2048-15109515, default 15109515):&lt;br /&gt;
  Using default value 15109515&lt;br /&gt;
  Partition 1 of type Linux and of size 7.2 GiB is set&lt;br /&gt;
  Command (m for help): &amp;lt;u&amp;gt;'''t'''&amp;lt;/u&amp;gt;&lt;br /&gt;
  Selected partition 1&lt;br /&gt;
  Hex code (type L to list all codes): &amp;lt;u&amp;gt;'''L'''&amp;lt;/u&amp;gt;&lt;br /&gt;
  0  Empty          24 NEC DOS           81 Minix / old Lin bf Solaris&lt;br /&gt;
  ...etc...&lt;br /&gt;
  b W95 FAT32       51 OnTrack DM6 Aux   9f BSD/OS          e4 SpeedStor&lt;br /&gt;
  c W95 FAT32 (LBA) 52 CP/M              a0 IBM Thinkpad hi eb BeOS fs&lt;br /&gt;
  ...etc...&lt;br /&gt;
  Hex code (type L to list all codes): &amp;lt;u&amp;gt;'''c'''&amp;lt;/u&amp;gt;&lt;br /&gt;
  WARNING: If you have created or modified any DOS 6.xpartitions, please see the fdisk&lt;br /&gt;
  manual page for additionalinformation.&lt;br /&gt;
  Changed type of partition 'Linux' to 'W95 FAT32 (LBA)'&lt;br /&gt;
  Command (m for help): &amp;lt;u&amp;gt;'''w'''&amp;lt;/u&amp;gt;&lt;br /&gt;
  The partition table has been altered!&lt;br /&gt;
  Calling ioctl() to re-read partition table.&lt;br /&gt;
  Syncing disks.&lt;br /&gt;
Puis formatter en vfat:&lt;br /&gt;
  # mkfs.vfat /dev/sdx1&lt;br /&gt;
  mkfs.fat 3.0.20 (12 Jun 2013)&lt;/div&gt;</summary>
		<author><name>Toine</name></author>	</entry>

	<entry>
		<id>https://wiki.tonioc.ovh/index.php?title=Gnome3&amp;diff=421</id>
		<title>Gnome3</title>
		<link rel="alternate" type="text/html" href="https://wiki.tonioc.ovh/index.php?title=Gnome3&amp;diff=421"/>
				<updated>2021-03-27T18:35:09Z</updated>
		
		<summary type="html">&lt;p&gt;Toine : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Divers configurations =&lt;br /&gt;
* redémarrer gnome-shell pour prendre en compte des modifications de configuration (nouveau lanceur, extension, ...)&lt;br /&gt;
  Alt-F2 puis taper 'r' ou 'restart'&lt;br /&gt;
* Afficher les schémas disponibles pour dans gsettings&lt;br /&gt;
  $ gsettings list-schemas&lt;br /&gt;
* Désactiver la recherche automatique de mises à jour&lt;br /&gt;
  $ gsettings set org.gnome.software download-updates false&lt;br /&gt;
* Pavé numérique: utiliser le point comme séparateur (virgule) dans calc (mais maintenir comme point dans les autres éditeurs). &lt;br /&gt;
** Avec gnome-tweak-tools installé: Applications =&amp;gt; Utilitaires =&amp;gt; Outil de personnalisation : section Saisie, Disposition du pavé numérique : sélectionner &amp;quot;Obsolète&amp;quot;.&lt;br /&gt;
* Applications au démarrage: &lt;br /&gt;
  $ gnome-session-properties&lt;br /&gt;
&lt;br /&gt;
= Lanceurs d'applications =&lt;br /&gt;
Les lanceurs sont dans /usr/share/applications, par exemple &lt;br /&gt;
  $ cat /usr/share/applications/firefox-quantum.desktop &lt;br /&gt;
  [Desktop Entry]&lt;br /&gt;
  Name=Firefox Quantum&lt;br /&gt;
  Exec=/opt/firefox/firefox&lt;br /&gt;
  Type=Application&lt;br /&gt;
  StartupNotify=true&lt;br /&gt;
  Path=/opt/firefox&lt;br /&gt;
  Icon=/opt/firefox/browser/chrome/icons/default/default48.png&lt;br /&gt;
  Name[fr_FR]=Firefox Quantum&lt;br /&gt;
  Categories=Network;WebBrowser;&lt;br /&gt;
&lt;br /&gt;
NB: la liste des catégories est définie ici: https://developer.gnome.org/menu-spec/#main-category-registry&lt;br /&gt;
&lt;br /&gt;
= Installation d'extensions Gnome-Shell =&lt;br /&gt;
== Depuis l'application 'Logiciels' de gnome ==&lt;br /&gt;
Trouver et installer avec l'onglet &amp;quot;Extensions&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Installation manuelle ==&lt;br /&gt;
Télécharger le zip d'extension depuis https://extensions.gnome.org/, puis regarder son uuid dans le fichier metadata.json, par exemple: &lt;br /&gt;
  &amp;quot;uuid&amp;quot;: &amp;quot;dash-to-panel@jderose9.github.com&amp;quot;&lt;br /&gt;
Dézipper dans un dossier portant exactement ce nom sous $HOME/.local/share/gnome-shell/extensions/, par exemple:&lt;br /&gt;
  ~$ ls .local/share/gnome-shell/extensions/dash-to-panel@jderose9.github.com/&lt;br /&gt;
  appIcons.js     extension.js    locale         panel.js         prefs.js      README.md    stylesheet.css   update.js&lt;br /&gt;
  convenience.js  img             metadata.json  panelManager.js  progress.js   schemas      taskbar.js       utils.js&lt;br /&gt;
  COPYING         intellihide.js  overview.js    panelStyle.js    proximity.js  Settings.ui  transparency.js  windowPreview.js&lt;br /&gt;
&lt;br /&gt;
Puis redemarrer gnome-shell (alt-F2 puis r).&lt;br /&gt;
&lt;br /&gt;
== Installation par le navigateur ==&lt;br /&gt;
Avec chrome ou firefox (ne fonctionne pas sous centOS7 avec ce dernier), voir les indications pour l'utilisation de l'extension du navigateur directement depuis https://extensions.gnome.org/ &lt;br /&gt;
Une fois installée correctement, les boutons d'installation/suppression apparaissent directement dans la page WEB de l'extension sous extensions.gnome.org. &lt;br /&gt;
&lt;br /&gt;
= Installation de themes, icones depuis gnome-look.org =&lt;br /&gt;
== Manuellement pour un utilisateur ==&lt;br /&gt;
Dézipper et installer dans le répertoire adéquat: &lt;br /&gt;
* $HOME/.themes&lt;br /&gt;
* $HOME/.icons&lt;br /&gt;
== Manuellement pour tous les utilisateurs ==&lt;br /&gt;
Dézipper le thème dans: &lt;br /&gt;
* /usr/share/themes&lt;br /&gt;
* /usr/share/icons&lt;br /&gt;
&lt;br /&gt;
Puis redemarrer gnome-shell (alt-F2 puis r).&lt;br /&gt;
&lt;br /&gt;
== Directement depuis le navigateur (Centos8) ==&lt;br /&gt;
Après installation de l'extension User Themes, une tentative d'installation depuis firefox indique &amp;quot;Firefox ne sait pas ouvrir cette adresse car l’un des protocoles suivants (ocs) n’est associé à aucun programme ou n’est pas autorisé dans ce contexte.&amp;quot; (cf https://www.linux-apps.com/p/1136805/, https://www.opencode.net/dfn2/ocs-url &lt;br /&gt;
Tentative d'install d'un rpm ocs-url-3.1.0-1.x86_64.rpm : échoue sur nothing provides libQt5Svg5 &amp;gt;= 5.2.0 libqt5-qtquickcontrols &amp;gt;= 5.2.0 needed by ocs-url-3.1.0-1.x86_64&lt;br /&gt;
&lt;br /&gt;
Méthode réussie:&lt;br /&gt;
  $ tar xJf ocs-url-3.1.0-1-x86_64.pkg.tar.xz 2&amp;gt;/dev/null&lt;br /&gt;
puis déplacer vers /usr, on a notamment /usr/bin/ocs-url, auquel il manque des librairies&lt;br /&gt;
  $ ldd usr/bin/ocs-url&lt;br /&gt;
  linux-vdso.so.1 (0x00007ffc82b6f000)&lt;br /&gt;
  libQt5Widgets.so.5 =&amp;gt; not found&lt;br /&gt;
  libQt5Gui.so.5 =&amp;gt; not found&lt;br /&gt;
  libQt5Qml.so.5 =&amp;gt; not found&lt;br /&gt;
  libQt5Network.so.5 =&amp;gt; not found&lt;br /&gt;
  libQt5Core.so.5 =&amp;gt; not found&lt;br /&gt;
  libstdc++.so.6 =&amp;gt; /lib64/libstdc++.so.6 (0x00007fe53c3c6000)&lt;br /&gt;
  $ sudo dnf install qt5-qtbase qt5-qtbase-gui qt5-qtdeclarative&lt;br /&gt;
  Installé: qt5-qtbase-5.11.1-7.el8.x86_64   qt5-qtbase-common-5.11.1-7.el8.noarch      pcre2-utf16-10.32-1.el8.x86_64            &lt;br /&gt;
  qt5-qtbase-gui-5.11.1-7.el8.x86_64         xcb-util-image-0.4.0-9.el8.x86_64          xcb-util-keysyms-0.4.0-7.el8.x86_64         &lt;br /&gt;
  xcb-util-renderutil-0.3.9-10.el8.x86_64    xcb-util-wm-0.4.1-12.el8.x86_64           &lt;br /&gt;
  qt5-qtdeclarative-5.11.1-3.el8.x86_64      qt5-qtxmlpatterns-5.11.1-2.el8.x86_64                               &lt;br /&gt;
&lt;br /&gt;
[[Category:Linux]]&lt;br /&gt;
[[Category:Gnome]]&lt;/div&gt;</summary>
		<author><name>Toine</name></author>	</entry>

	<entry>
		<id>https://wiki.tonioc.ovh/index.php?title=Docker&amp;diff=420</id>
		<title>Docker</title>
		<link rel="alternate" type="text/html" href="https://wiki.tonioc.ovh/index.php?title=Docker&amp;diff=420"/>
				<updated>2021-02-15T18:17:10Z</updated>
		
		<summary type="html">&lt;p&gt;Toine : /* images */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= commandes docker-ce =&lt;br /&gt;
== instances ==&lt;br /&gt;
* démarrer :&lt;br /&gt;
  $ docker run [-ai] [--name myOwnName] &amp;lt;image&amp;gt;&lt;br /&gt;
  $ docker start [-ai] &amp;lt;instance&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* demarrer en interactif avec un shell (ne lance pas l'éventuelle commande CMD). en supprimant l'instance à sa sortie.&lt;br /&gt;
  $ docker run --rm -it &amp;lt;image&amp;gt; sh&lt;br /&gt;
&lt;br /&gt;
* attacher avec un shell a une image active&lt;br /&gt;
  $ docker exec -it &amp;lt;image&amp;gt; sh&lt;br /&gt;
&lt;br /&gt;
* arrêter: &lt;br /&gt;
  $ docker stop &amp;lt;image&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== images ==&lt;br /&gt;
* push/pull :&lt;br /&gt;
  $ docker image ls&lt;br /&gt;
  $ docker images&lt;br /&gt;
* push/pull :&lt;br /&gt;
  $ docker pull &amp;lt;image&amp;gt;&lt;br /&gt;
* renommer une image&lt;br /&gt;
  $ docker image ls&lt;br /&gt;
  REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE&lt;br /&gt;
  c7_dev              latest              744765ef7a95        4 days ago          333MB&lt;br /&gt;
  $ docker image tag c7_dev:1.0 c7_dev:latest &lt;br /&gt;
  $ docker image ls &lt;br /&gt;
  REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE&lt;br /&gt;
  c7_dev              1.0                 744765ef7a95        4 days ago          333MB&lt;br /&gt;
  c7_dev              latest              744765ef7a95        4 days ago          333MB&lt;br /&gt;
* suppression/pull :&lt;br /&gt;
  $ docker image rm &amp;lt;image&amp;gt;...&lt;br /&gt;
  $ docker rmi &amp;lt;image&amp;gt;...&lt;br /&gt;
* supprimer les images inutilisées :&lt;br /&gt;
  $ docker image prune&lt;br /&gt;
* inspecter les images :&lt;br /&gt;
  $ docker image inspect &amp;lt;image&amp;gt;&lt;br /&gt;
* sauver/charge les images hors registry:&lt;br /&gt;
  $ docker image save -o output-file.tar &amp;lt;image:tag&amp;gt;&lt;br /&gt;
  $ docker image load -q -i input-file.tar&lt;br /&gt;
&lt;br /&gt;
== nettoyage ==&lt;br /&gt;
&lt;br /&gt;
* supprimer les ressources inutiles (images et instances stoppées):&lt;br /&gt;
  $ docker system prune&lt;br /&gt;
&lt;br /&gt;
= Fabriquer des images =&lt;br /&gt;
Voir d'abord https://docs.docker.com/develop/ &lt;br /&gt;
== commandes image build ==&lt;br /&gt;
Depuis le répertoire contenant le Dockerfile&lt;br /&gt;
  $ docker build [-t &amp;lt;name&amp;gt;[:&amp;lt;vers&amp;gt;]] .&lt;br /&gt;
&lt;br /&gt;
== stockage docker == &lt;br /&gt;
Voir&lt;br /&gt;
  $ docker image inspect &amp;lt;image&amp;gt;&lt;br /&gt;
  $ docker volume inspect &amp;lt;volume&amp;gt;&lt;br /&gt;
  $ docker inspect &amp;lt;instance&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  $ sudo ls /var/lib/docker &lt;br /&gt;
  builder  buildkit  containers  image  network  overlay2  plugins  runtimes  swarm  tmp  trust  volumes&lt;br /&gt;
  $ sudo ls /var/lib/docker/overlay2&lt;br /&gt;
&lt;br /&gt;
Nettoyage des volumes &lt;br /&gt;
  # un volume précis: &lt;br /&gt;
  $ docker volume rm &amp;lt;volid&amp;gt;&lt;br /&gt;
  # tous les volumes non utilisés (volumes anonymes d'instances arrêtées par ex)&lt;br /&gt;
  $ docker volume&lt;br /&gt;
&lt;br /&gt;
== Dockerfile ==&lt;br /&gt;
&lt;br /&gt;
=== partage de dossiers avec le conteneur : &amp;quot;bind mounts&amp;quot; ===&lt;br /&gt;
Pas de déclaration dans le Dockerfile (c'est pour les volumes anonymes)&lt;br /&gt;
&lt;br /&gt;
A l'execution d'un conteneur:&lt;br /&gt;
  $ docker run -v $(pwd)/logs:/app/logs $(pwd)/ro_data:/app/ro_data:ro  myimg&lt;br /&gt;
  ou équivalent avec la commande mount &lt;br /&gt;
  $ docker run --mount type=bind,source=$(pwd)/logs,target=/app/logs \&lt;br /&gt;
      --mount type=bind,source=$(pwd)/ro_data,target=/app/ro_data,readonly &lt;br /&gt;
L'image voit le contenu du répertoire logs, et les logs écrits dedans donc persistants.&lt;br /&gt;
L'image voit le contenu du répertoire ro_data en lecture seule.&lt;br /&gt;
&lt;br /&gt;
voir https://docs.docker.com/storage/bind-mounts/ ,  https://docs.docker.com/storage/volumes/&lt;br /&gt;
&lt;br /&gt;
= Réseau =&lt;br /&gt;
== créer un réseau == &lt;br /&gt;
Par défaut, réseau créé en mode &amp;quot;bridge&amp;quot; (les conteneurs sont résolus par leur nom à l'intérieur d'un même réseau).&lt;br /&gt;
  $ docker network create [--driver bridge] mynet1&lt;br /&gt;
&lt;br /&gt;
Autres drivers:&lt;br /&gt;
* host: pour des conteneur &amp;quot;standalone&amp;quot; l'isolation avec le système hôte est supprimée, ils partagent le même réseau&lt;br /&gt;
* overlay: Connecter des conteneurs tournant sur plusieurs hôte. Mode &amp;quot;Swarm&amp;quot; seulement, presque obsolète. &lt;br /&gt;
* macvlan: force une adresse MAC au container. bridge sur un port physique. &lt;br /&gt;
* none: pas de réseau.&lt;br /&gt;
* autres 3PP à installer&lt;br /&gt;
&lt;br /&gt;
== associer des conteneurs à un réseau ==&lt;br /&gt;
Au lancement, simplement mentionner le réseau &lt;br /&gt;
  $ docker run -network my-network --name cont1 my-image&lt;br /&gt;
  $ docker run -network my-network --name cont2 my-other-image&lt;br /&gt;
Les 2 conteneurs cont1 et cont2 peuvent communiquer. &lt;br /&gt;
Comme ils sont associés au même réseau, les noms de conteneurs peuvent servir à la résolution d'adresse pour communiquer entre eux sans nécessité de publier les ports utilisés uniquement en interne dans ce réseau. Par exemple cont1 est une base de données sur le port 5432, cont2 est un backend utilisant ce service. L'adresse à utiliser dans cont2 sera donc 'cont1:5432'. &lt;br /&gt;
&lt;br /&gt;
Associer 2 réseaux à un même conteneur:&lt;br /&gt;
* créer d'abord les 2 réseaux mynet1 et mynet2&lt;br /&gt;
  $ docker network create --driver=bridge network1 --subnet=172.19.0.0/24&lt;br /&gt;
  $ docker network create --driver=bridge network2 --subnet=172.19.1.0/24&lt;br /&gt;
* créer l'instance de conteneur et asssocier le 2eme réseau avant de la lancer:&lt;br /&gt;
  $ docker create --network=network1 --name container_name containerimage:latest&lt;br /&gt;
  $ docker network connect network2 container_name&lt;br /&gt;
  $ docker start container_name&lt;br /&gt;
&lt;br /&gt;
== Publier les ports d'un conteneur ==&lt;br /&gt;
Au lancement, simplement mentionner les associations interne/externe pour rendre les ports visibles de l'extérieur du conteneur.&lt;br /&gt;
  $ docker run -p1234:3456 -p 5678:7890 my-cont1 my-image&lt;br /&gt;
&lt;br /&gt;
Rappel: nécessaire seulement pour des ports à visibilité externe (pas les ports utilisés dans un même réseau docker). &lt;br /&gt;
&lt;br /&gt;
Le modification directe des ports dans /var/lib/docker/containers/&amp;lt;container-id&amp;gt;/hostconfig.json  et config.v2.json, même sur un conteneur stoppé est écrasé au start sous rhel8/docker-ce. &lt;br /&gt;
&lt;br /&gt;
Sur un conteneur existant, faire:&lt;br /&gt;
* arrêter le conteneur&lt;br /&gt;
  $ docker stop my-cntid&lt;br /&gt;
* docker commit my-cntid my-new-image-tag&lt;br /&gt;
* docker -p&amp;lt;xxx:yyy&amp;gt;...&lt;br /&gt;
&lt;br /&gt;
= docker-compose =&lt;br /&gt;
== commandes ==&lt;br /&gt;
* '''docker-compose up -d''' vous permettra de démarrer l'ensemble des conteneurs en arrière-plan ;&lt;br /&gt;
* '''docker-compose ps''' vous permettra de voir le status de l'ensemble de votre stack ;&lt;br /&gt;
* '''docker-compose logs -f --tail 5''' vous permettra d'afficher les logs de votre stack ;&lt;br /&gt;
* '''docker-compose stop''' vous permettra d'arrêter l'ensemble des services d'une stack ;&lt;br /&gt;
* '''docker-compose down'''  vous permettra de détruire l'ensemble des ressources d'une stack ;&lt;br /&gt;
* '''docker-compose config''' vous permettra de valider la syntaxe de votre fichier docker-compose.yml.&lt;br /&gt;
&lt;br /&gt;
= Astuces divers points =&lt;br /&gt;
== communication image docker vers un service sur la machine hôte ==&lt;br /&gt;
Pour un serveur sur la machine hôte (pas un autre conteneur), au lieu de localhost, utiliser le pseudo-domaine 'host.docker.internal'.&lt;br /&gt;
&lt;br /&gt;
== associer des ports à un conteneur ==&lt;br /&gt;
Au lancement, simplement mentionner les associations&lt;br /&gt;
  $ docker run -p1234:3456 -p 5678:7890 my-cont1 my-image&lt;br /&gt;
&lt;br /&gt;
Le modification directe des ports dans /var/lib/docker/containers/&amp;lt;container-id&amp;gt;/hostconfig.json  et config.v2.json, même sur un conteneur stoppé est écrasé au start sous rhel8/docker-ce. &lt;br /&gt;
&lt;br /&gt;
Sur un conteneur existant, faire:&lt;br /&gt;
* arrêter le conteneur&lt;br /&gt;
  $ docker stop my-cntid&lt;br /&gt;
* docker commit my-cntid my-new-image-tag&lt;br /&gt;
* docker -p&amp;lt;xxx:yyy&amp;gt;... &lt;br /&gt;
&lt;br /&gt;
== commandes docker sans sudo ==&lt;br /&gt;
Message d'erreur:&lt;br /&gt;
  Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get     &lt;br /&gt;
  http://%2Fvar%2Frun%2Fdocker.sock/v1.40/images/json: dial unix /var/run/docker.sock: connect: permission denied&lt;br /&gt;
  &lt;br /&gt;
  $ ls -l /var/run/docker.sock&lt;br /&gt;
  srw-rw----. 1 root docker 0 Nov 17 14:29 /var/run/docker.sock&lt;br /&gt;
&lt;br /&gt;
Ajouter le groupe docker a l'utilisateur&lt;br /&gt;
  $ sudo usermod -a -G docker myusername&lt;br /&gt;
&lt;br /&gt;
== Trouver les images dépendant d'une image ==&lt;br /&gt;
&lt;br /&gt;
Cas d'usage: supprimer une image retourne l'erreur &amp;quot;image has dependent child images&amp;quot;&lt;br /&gt;
  $ docker image rm 7f6c67ae7dae &lt;br /&gt;
  Error response from daemon: conflict: unable to delete 7f6c67ae7dae (cannot be forced) - image has dependent child images&lt;br /&gt;
&lt;br /&gt;
définir la fonction (ex dans bashrc)&lt;br /&gt;
  docker_image_desc() {&lt;br /&gt;
    for image in $(docker images --quiet --filter &amp;quot;since=${1}&amp;quot;); do&lt;br /&gt;
      if [ $(docker history --quiet ${image} | grep ${1}) ]; then&lt;br /&gt;
        docker_image_desc &amp;quot;${image}&amp;quot;&lt;br /&gt;
      fi&lt;br /&gt;
    done&lt;br /&gt;
    echo &amp;quot;${1}&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
et:&lt;br /&gt;
  $ docker_image_desc 7f6c67ae7dae &lt;br /&gt;
  76b749bf3727&lt;br /&gt;
  7f6c67ae7dae&lt;br /&gt;
&lt;br /&gt;
[[Category:Containers]]&lt;br /&gt;
[[Category:Docker]]&lt;br /&gt;
[[Category:Tips&amp;amp;Tricks]]&lt;/div&gt;</summary>
		<author><name>Toine</name></author>	</entry>

	<entry>
		<id>https://wiki.tonioc.ovh/index.php?title=Docker&amp;diff=419</id>
		<title>Docker</title>
		<link rel="alternate" type="text/html" href="https://wiki.tonioc.ovh/index.php?title=Docker&amp;diff=419"/>
				<updated>2021-02-15T18:15:24Z</updated>
		
		<summary type="html">&lt;p&gt;Toine : /* images */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= commandes docker-ce =&lt;br /&gt;
== instances ==&lt;br /&gt;
* démarrer :&lt;br /&gt;
  $ docker run [-ai] [--name myOwnName] &amp;lt;image&amp;gt;&lt;br /&gt;
  $ docker start [-ai] &amp;lt;instance&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* demarrer en interactif avec un shell (ne lance pas l'éventuelle commande CMD). en supprimant l'instance à sa sortie.&lt;br /&gt;
  $ docker run --rm -it &amp;lt;image&amp;gt; sh&lt;br /&gt;
&lt;br /&gt;
* attacher avec un shell a une image active&lt;br /&gt;
  $ docker exec -it &amp;lt;image&amp;gt; sh&lt;br /&gt;
&lt;br /&gt;
* arrêter: &lt;br /&gt;
  $ docker stop &amp;lt;image&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== images ==&lt;br /&gt;
* push/pull :&lt;br /&gt;
  $ docker image ls&lt;br /&gt;
  $ docker images&lt;br /&gt;
* push/pull :&lt;br /&gt;
  $ docker pull &amp;lt;image&amp;gt;&lt;br /&gt;
* renommer une image&lt;br /&gt;
  $ docker image ls&lt;br /&gt;
  REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE&lt;br /&gt;
  c7_dev              latest              744765ef7a95        4 days ago          333MB&lt;br /&gt;
  $ docker image tag c7_dev:latest c7tools:1.0&lt;br /&gt;
  $ docker image ls &lt;br /&gt;
  REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE&lt;br /&gt;
  c7tools             1.0                 744765ef7a95        4 days ago          333MB&lt;br /&gt;
  c7_dev              latest              744765ef7a95        4 days ago          333MB&lt;br /&gt;
* suppression/pull :&lt;br /&gt;
  $ docker image rm &amp;lt;image&amp;gt;...&lt;br /&gt;
  $ docker rmi &amp;lt;image&amp;gt;...&lt;br /&gt;
* supprimer les images inutilisées :&lt;br /&gt;
  $ docker image prune&lt;br /&gt;
* inspecter les images :&lt;br /&gt;
  $ docker image inspect &amp;lt;image&amp;gt;&lt;br /&gt;
* sauver/charge les images hors registry:&lt;br /&gt;
  $ docker image save -o output-file.tar &amp;lt;image:tag&amp;gt;&lt;br /&gt;
  $ docker image load -q -i input-file.tar&lt;br /&gt;
&lt;br /&gt;
== nettoyage ==&lt;br /&gt;
&lt;br /&gt;
* supprimer les ressources inutiles (images et instances stoppées):&lt;br /&gt;
  $ docker system prune&lt;br /&gt;
&lt;br /&gt;
= Fabriquer des images =&lt;br /&gt;
Voir d'abord https://docs.docker.com/develop/ &lt;br /&gt;
== commandes image build ==&lt;br /&gt;
Depuis le répertoire contenant le Dockerfile&lt;br /&gt;
  $ docker build [-t &amp;lt;name&amp;gt;[:&amp;lt;vers&amp;gt;]] .&lt;br /&gt;
&lt;br /&gt;
== stockage docker == &lt;br /&gt;
Voir&lt;br /&gt;
  $ docker image inspect &amp;lt;image&amp;gt;&lt;br /&gt;
  $ docker volume inspect &amp;lt;volume&amp;gt;&lt;br /&gt;
  $ docker inspect &amp;lt;instance&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  $ sudo ls /var/lib/docker &lt;br /&gt;
  builder  buildkit  containers  image  network  overlay2  plugins  runtimes  swarm  tmp  trust  volumes&lt;br /&gt;
  $ sudo ls /var/lib/docker/overlay2&lt;br /&gt;
&lt;br /&gt;
Nettoyage des volumes &lt;br /&gt;
  # un volume précis: &lt;br /&gt;
  $ docker volume rm &amp;lt;volid&amp;gt;&lt;br /&gt;
  # tous les volumes non utilisés (volumes anonymes d'instances arrêtées par ex)&lt;br /&gt;
  $ docker volume&lt;br /&gt;
&lt;br /&gt;
== Dockerfile ==&lt;br /&gt;
&lt;br /&gt;
=== partage de dossiers avec le conteneur : &amp;quot;bind mounts&amp;quot; ===&lt;br /&gt;
Pas de déclaration dans le Dockerfile (c'est pour les volumes anonymes)&lt;br /&gt;
&lt;br /&gt;
A l'execution d'un conteneur:&lt;br /&gt;
  $ docker run -v $(pwd)/logs:/app/logs $(pwd)/ro_data:/app/ro_data:ro  myimg&lt;br /&gt;
  ou équivalent avec la commande mount &lt;br /&gt;
  $ docker run --mount type=bind,source=$(pwd)/logs,target=/app/logs \&lt;br /&gt;
      --mount type=bind,source=$(pwd)/ro_data,target=/app/ro_data,readonly &lt;br /&gt;
L'image voit le contenu du répertoire logs, et les logs écrits dedans donc persistants.&lt;br /&gt;
L'image voit le contenu du répertoire ro_data en lecture seule.&lt;br /&gt;
&lt;br /&gt;
voir https://docs.docker.com/storage/bind-mounts/ ,  https://docs.docker.com/storage/volumes/&lt;br /&gt;
&lt;br /&gt;
= Réseau =&lt;br /&gt;
== créer un réseau == &lt;br /&gt;
Par défaut, réseau créé en mode &amp;quot;bridge&amp;quot; (les conteneurs sont résolus par leur nom à l'intérieur d'un même réseau).&lt;br /&gt;
  $ docker network create [--driver bridge] mynet1&lt;br /&gt;
&lt;br /&gt;
Autres drivers:&lt;br /&gt;
* host: pour des conteneur &amp;quot;standalone&amp;quot; l'isolation avec le système hôte est supprimée, ils partagent le même réseau&lt;br /&gt;
* overlay: Connecter des conteneurs tournant sur plusieurs hôte. Mode &amp;quot;Swarm&amp;quot; seulement, presque obsolète. &lt;br /&gt;
* macvlan: force une adresse MAC au container. bridge sur un port physique. &lt;br /&gt;
* none: pas de réseau.&lt;br /&gt;
* autres 3PP à installer&lt;br /&gt;
&lt;br /&gt;
== associer des conteneurs à un réseau ==&lt;br /&gt;
Au lancement, simplement mentionner le réseau &lt;br /&gt;
  $ docker run -network my-network --name cont1 my-image&lt;br /&gt;
  $ docker run -network my-network --name cont2 my-other-image&lt;br /&gt;
Les 2 conteneurs cont1 et cont2 peuvent communiquer. &lt;br /&gt;
Comme ils sont associés au même réseau, les noms de conteneurs peuvent servir à la résolution d'adresse pour communiquer entre eux sans nécessité de publier les ports utilisés uniquement en interne dans ce réseau. Par exemple cont1 est une base de données sur le port 5432, cont2 est un backend utilisant ce service. L'adresse à utiliser dans cont2 sera donc 'cont1:5432'. &lt;br /&gt;
&lt;br /&gt;
Associer 2 réseaux à un même conteneur:&lt;br /&gt;
* créer d'abord les 2 réseaux mynet1 et mynet2&lt;br /&gt;
  $ docker network create --driver=bridge network1 --subnet=172.19.0.0/24&lt;br /&gt;
  $ docker network create --driver=bridge network2 --subnet=172.19.1.0/24&lt;br /&gt;
* créer l'instance de conteneur et asssocier le 2eme réseau avant de la lancer:&lt;br /&gt;
  $ docker create --network=network1 --name container_name containerimage:latest&lt;br /&gt;
  $ docker network connect network2 container_name&lt;br /&gt;
  $ docker start container_name&lt;br /&gt;
&lt;br /&gt;
== Publier les ports d'un conteneur ==&lt;br /&gt;
Au lancement, simplement mentionner les associations interne/externe pour rendre les ports visibles de l'extérieur du conteneur.&lt;br /&gt;
  $ docker run -p1234:3456 -p 5678:7890 my-cont1 my-image&lt;br /&gt;
&lt;br /&gt;
Rappel: nécessaire seulement pour des ports à visibilité externe (pas les ports utilisés dans un même réseau docker). &lt;br /&gt;
&lt;br /&gt;
Le modification directe des ports dans /var/lib/docker/containers/&amp;lt;container-id&amp;gt;/hostconfig.json  et config.v2.json, même sur un conteneur stoppé est écrasé au start sous rhel8/docker-ce. &lt;br /&gt;
&lt;br /&gt;
Sur un conteneur existant, faire:&lt;br /&gt;
* arrêter le conteneur&lt;br /&gt;
  $ docker stop my-cntid&lt;br /&gt;
* docker commit my-cntid my-new-image-tag&lt;br /&gt;
* docker -p&amp;lt;xxx:yyy&amp;gt;...&lt;br /&gt;
&lt;br /&gt;
= docker-compose =&lt;br /&gt;
== commandes ==&lt;br /&gt;
* '''docker-compose up -d''' vous permettra de démarrer l'ensemble des conteneurs en arrière-plan ;&lt;br /&gt;
* '''docker-compose ps''' vous permettra de voir le status de l'ensemble de votre stack ;&lt;br /&gt;
* '''docker-compose logs -f --tail 5''' vous permettra d'afficher les logs de votre stack ;&lt;br /&gt;
* '''docker-compose stop''' vous permettra d'arrêter l'ensemble des services d'une stack ;&lt;br /&gt;
* '''docker-compose down'''  vous permettra de détruire l'ensemble des ressources d'une stack ;&lt;br /&gt;
* '''docker-compose config''' vous permettra de valider la syntaxe de votre fichier docker-compose.yml.&lt;br /&gt;
&lt;br /&gt;
= Astuces divers points =&lt;br /&gt;
== communication image docker vers un service sur la machine hôte ==&lt;br /&gt;
Pour un serveur sur la machine hôte (pas un autre conteneur), au lieu de localhost, utiliser le pseudo-domaine 'host.docker.internal'.&lt;br /&gt;
&lt;br /&gt;
== associer des ports à un conteneur ==&lt;br /&gt;
Au lancement, simplement mentionner les associations&lt;br /&gt;
  $ docker run -p1234:3456 -p 5678:7890 my-cont1 my-image&lt;br /&gt;
&lt;br /&gt;
Le modification directe des ports dans /var/lib/docker/containers/&amp;lt;container-id&amp;gt;/hostconfig.json  et config.v2.json, même sur un conteneur stoppé est écrasé au start sous rhel8/docker-ce. &lt;br /&gt;
&lt;br /&gt;
Sur un conteneur existant, faire:&lt;br /&gt;
* arrêter le conteneur&lt;br /&gt;
  $ docker stop my-cntid&lt;br /&gt;
* docker commit my-cntid my-new-image-tag&lt;br /&gt;
* docker -p&amp;lt;xxx:yyy&amp;gt;... &lt;br /&gt;
&lt;br /&gt;
== commandes docker sans sudo ==&lt;br /&gt;
Message d'erreur:&lt;br /&gt;
  Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get     &lt;br /&gt;
  http://%2Fvar%2Frun%2Fdocker.sock/v1.40/images/json: dial unix /var/run/docker.sock: connect: permission denied&lt;br /&gt;
  &lt;br /&gt;
  $ ls -l /var/run/docker.sock&lt;br /&gt;
  srw-rw----. 1 root docker 0 Nov 17 14:29 /var/run/docker.sock&lt;br /&gt;
&lt;br /&gt;
Ajouter le groupe docker a l'utilisateur&lt;br /&gt;
  $ sudo usermod -a -G docker myusername&lt;br /&gt;
&lt;br /&gt;
== Trouver les images dépendant d'une image ==&lt;br /&gt;
&lt;br /&gt;
Cas d'usage: supprimer une image retourne l'erreur &amp;quot;image has dependent child images&amp;quot;&lt;br /&gt;
  $ docker image rm 7f6c67ae7dae &lt;br /&gt;
  Error response from daemon: conflict: unable to delete 7f6c67ae7dae (cannot be forced) - image has dependent child images&lt;br /&gt;
&lt;br /&gt;
définir la fonction (ex dans bashrc)&lt;br /&gt;
  docker_image_desc() {&lt;br /&gt;
    for image in $(docker images --quiet --filter &amp;quot;since=${1}&amp;quot;); do&lt;br /&gt;
      if [ $(docker history --quiet ${image} | grep ${1}) ]; then&lt;br /&gt;
        docker_image_desc &amp;quot;${image}&amp;quot;&lt;br /&gt;
      fi&lt;br /&gt;
    done&lt;br /&gt;
    echo &amp;quot;${1}&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
et:&lt;br /&gt;
  $ docker_image_desc 7f6c67ae7dae &lt;br /&gt;
  76b749bf3727&lt;br /&gt;
  7f6c67ae7dae&lt;br /&gt;
&lt;br /&gt;
[[Category:Containers]]&lt;br /&gt;
[[Category:Docker]]&lt;br /&gt;
[[Category:Tips&amp;amp;Tricks]]&lt;/div&gt;</summary>
		<author><name>Toine</name></author>	</entry>

	<entry>
		<id>https://wiki.tonioc.ovh/index.php?title=Docker&amp;diff=418</id>
		<title>Docker</title>
		<link rel="alternate" type="text/html" href="https://wiki.tonioc.ovh/index.php?title=Docker&amp;diff=418"/>
				<updated>2021-02-11T16:07:29Z</updated>
		
		<summary type="html">&lt;p&gt;Toine : /* images */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= commandes docker-ce =&lt;br /&gt;
== instances ==&lt;br /&gt;
* démarrer :&lt;br /&gt;
  $ docker run [-ai] [--name myOwnName] &amp;lt;image&amp;gt;&lt;br /&gt;
  $ docker start [-ai] &amp;lt;instance&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* demarrer en interactif avec un shell (ne lance pas l'éventuelle commande CMD). en supprimant l'instance à sa sortie.&lt;br /&gt;
  $ docker run --rm -it &amp;lt;image&amp;gt; sh&lt;br /&gt;
&lt;br /&gt;
* attacher avec un shell a une image active&lt;br /&gt;
  $ docker exec -it &amp;lt;image&amp;gt; sh&lt;br /&gt;
&lt;br /&gt;
* arrêter: &lt;br /&gt;
  $ docker stop &amp;lt;image&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== images ==&lt;br /&gt;
* push/pull :&lt;br /&gt;
  $ docker image ls&lt;br /&gt;
  $ docker images&lt;br /&gt;
* push/pull :&lt;br /&gt;
  $ docker pull &amp;lt;image&amp;gt;&lt;br /&gt;
* renommer une image&lt;br /&gt;
  $ docker image ls&lt;br /&gt;
  REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE&lt;br /&gt;
  c7_dev              latest              744765ef7a95        4 days ago          333MB&lt;br /&gt;
  $ docker tag c7_dev:latest c7tools:1.0&lt;br /&gt;
  $ docker image ls &lt;br /&gt;
  REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE&lt;br /&gt;
  c7tools             1.0                 744765ef7a95        4 days ago          333MB&lt;br /&gt;
  c7_dev              latest              744765ef7a95        4 days ago          333MB&lt;br /&gt;
* suppression/pull :&lt;br /&gt;
  $ docker image rm &amp;lt;image&amp;gt;...&lt;br /&gt;
  $ docker rmi &amp;lt;image&amp;gt;...&lt;br /&gt;
* supprimer les images inutilisées :&lt;br /&gt;
  $ docker image prune&lt;br /&gt;
* inspecter les images :&lt;br /&gt;
  $ docker image inspect &amp;lt;image&amp;gt;&lt;br /&gt;
* sauver/charge les images hors registry:&lt;br /&gt;
  $ docker image save -o output-file.tar &amp;lt;image:tag&amp;gt;&lt;br /&gt;
  $ docker image load -q -i input-file.tar&lt;br /&gt;
&lt;br /&gt;
== nettoyage ==&lt;br /&gt;
&lt;br /&gt;
* supprimer les ressources inutiles (images et instances stoppées):&lt;br /&gt;
  $ docker system prune&lt;br /&gt;
&lt;br /&gt;
= Fabriquer des images =&lt;br /&gt;
Voir d'abord https://docs.docker.com/develop/ &lt;br /&gt;
== commandes image build ==&lt;br /&gt;
Depuis le répertoire contenant le Dockerfile&lt;br /&gt;
  $ docker build [-t &amp;lt;name&amp;gt;[:&amp;lt;vers&amp;gt;]] .&lt;br /&gt;
&lt;br /&gt;
== stockage docker == &lt;br /&gt;
Voir&lt;br /&gt;
  $ docker image inspect &amp;lt;image&amp;gt;&lt;br /&gt;
  $ docker volume inspect &amp;lt;volume&amp;gt;&lt;br /&gt;
  $ docker inspect &amp;lt;instance&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  $ sudo ls /var/lib/docker &lt;br /&gt;
  builder  buildkit  containers  image  network  overlay2  plugins  runtimes  swarm  tmp  trust  volumes&lt;br /&gt;
  $ sudo ls /var/lib/docker/overlay2&lt;br /&gt;
&lt;br /&gt;
Nettoyage des volumes &lt;br /&gt;
  # un volume précis: &lt;br /&gt;
  $ docker volume rm &amp;lt;volid&amp;gt;&lt;br /&gt;
  # tous les volumes non utilisés (volumes anonymes d'instances arrêtées par ex)&lt;br /&gt;
  $ docker volume&lt;br /&gt;
&lt;br /&gt;
== Dockerfile ==&lt;br /&gt;
&lt;br /&gt;
=== partage de dossiers avec le conteneur : &amp;quot;bind mounts&amp;quot; ===&lt;br /&gt;
Pas de déclaration dans le Dockerfile (c'est pour les volumes anonymes)&lt;br /&gt;
&lt;br /&gt;
A l'execution d'un conteneur:&lt;br /&gt;
  $ docker run -v $(pwd)/logs:/app/logs $(pwd)/ro_data:/app/ro_data:ro  myimg&lt;br /&gt;
  ou équivalent avec la commande mount &lt;br /&gt;
  $ docker run --mount type=bind,source=$(pwd)/logs,target=/app/logs \&lt;br /&gt;
      --mount type=bind,source=$(pwd)/ro_data,target=/app/ro_data,readonly &lt;br /&gt;
L'image voit le contenu du répertoire logs, et les logs écrits dedans donc persistants.&lt;br /&gt;
L'image voit le contenu du répertoire ro_data en lecture seule.&lt;br /&gt;
&lt;br /&gt;
voir https://docs.docker.com/storage/bind-mounts/ ,  https://docs.docker.com/storage/volumes/&lt;br /&gt;
&lt;br /&gt;
= Réseau =&lt;br /&gt;
== créer un réseau == &lt;br /&gt;
Par défaut, réseau créé en mode &amp;quot;bridge&amp;quot; (les conteneurs sont résolus par leur nom à l'intérieur d'un même réseau).&lt;br /&gt;
  $ docker network create [--driver bridge] mynet1&lt;br /&gt;
&lt;br /&gt;
Autres drivers:&lt;br /&gt;
* host: pour des conteneur &amp;quot;standalone&amp;quot; l'isolation avec le système hôte est supprimée, ils partagent le même réseau&lt;br /&gt;
* overlay: Connecter des conteneurs tournant sur plusieurs hôte. Mode &amp;quot;Swarm&amp;quot; seulement, presque obsolète. &lt;br /&gt;
* macvlan: force une adresse MAC au container. bridge sur un port physique. &lt;br /&gt;
* none: pas de réseau.&lt;br /&gt;
* autres 3PP à installer&lt;br /&gt;
&lt;br /&gt;
== associer des conteneurs à un réseau ==&lt;br /&gt;
Au lancement, simplement mentionner le réseau &lt;br /&gt;
  $ docker run -network my-network --name cont1 my-image&lt;br /&gt;
  $ docker run -network my-network --name cont2 my-other-image&lt;br /&gt;
Les 2 conteneurs cont1 et cont2 peuvent communiquer. &lt;br /&gt;
Comme ils sont associés au même réseau, les noms de conteneurs peuvent servir à la résolution d'adresse pour communiquer entre eux sans nécessité de publier les ports utilisés uniquement en interne dans ce réseau. Par exemple cont1 est une base de données sur le port 5432, cont2 est un backend utilisant ce service. L'adresse à utiliser dans cont2 sera donc 'cont1:5432'. &lt;br /&gt;
&lt;br /&gt;
Associer 2 réseaux à un même conteneur:&lt;br /&gt;
* créer d'abord les 2 réseaux mynet1 et mynet2&lt;br /&gt;
  $ docker network create --driver=bridge network1 --subnet=172.19.0.0/24&lt;br /&gt;
  $ docker network create --driver=bridge network2 --subnet=172.19.1.0/24&lt;br /&gt;
* créer l'instance de conteneur et asssocier le 2eme réseau avant de la lancer:&lt;br /&gt;
  $ docker create --network=network1 --name container_name containerimage:latest&lt;br /&gt;
  $ docker network connect network2 container_name&lt;br /&gt;
  $ docker start container_name&lt;br /&gt;
&lt;br /&gt;
== Publier les ports d'un conteneur ==&lt;br /&gt;
Au lancement, simplement mentionner les associations interne/externe pour rendre les ports visibles de l'extérieur du conteneur.&lt;br /&gt;
  $ docker run -p1234:3456 -p 5678:7890 my-cont1 my-image&lt;br /&gt;
&lt;br /&gt;
Rappel: nécessaire seulement pour des ports à visibilité externe (pas les ports utilisés dans un même réseau docker). &lt;br /&gt;
&lt;br /&gt;
Le modification directe des ports dans /var/lib/docker/containers/&amp;lt;container-id&amp;gt;/hostconfig.json  et config.v2.json, même sur un conteneur stoppé est écrasé au start sous rhel8/docker-ce. &lt;br /&gt;
&lt;br /&gt;
Sur un conteneur existant, faire:&lt;br /&gt;
* arrêter le conteneur&lt;br /&gt;
  $ docker stop my-cntid&lt;br /&gt;
* docker commit my-cntid my-new-image-tag&lt;br /&gt;
* docker -p&amp;lt;xxx:yyy&amp;gt;...&lt;br /&gt;
&lt;br /&gt;
= docker-compose =&lt;br /&gt;
== commandes ==&lt;br /&gt;
* '''docker-compose up -d''' vous permettra de démarrer l'ensemble des conteneurs en arrière-plan ;&lt;br /&gt;
* '''docker-compose ps''' vous permettra de voir le status de l'ensemble de votre stack ;&lt;br /&gt;
* '''docker-compose logs -f --tail 5''' vous permettra d'afficher les logs de votre stack ;&lt;br /&gt;
* '''docker-compose stop''' vous permettra d'arrêter l'ensemble des services d'une stack ;&lt;br /&gt;
* '''docker-compose down'''  vous permettra de détruire l'ensemble des ressources d'une stack ;&lt;br /&gt;
* '''docker-compose config''' vous permettra de valider la syntaxe de votre fichier docker-compose.yml.&lt;br /&gt;
&lt;br /&gt;
= Astuces divers points =&lt;br /&gt;
== communication image docker vers un service sur la machine hôte ==&lt;br /&gt;
Pour un serveur sur la machine hôte (pas un autre conteneur), au lieu de localhost, utiliser le pseudo-domaine 'host.docker.internal'.&lt;br /&gt;
&lt;br /&gt;
== associer des ports à un conteneur ==&lt;br /&gt;
Au lancement, simplement mentionner les associations&lt;br /&gt;
  $ docker run -p1234:3456 -p 5678:7890 my-cont1 my-image&lt;br /&gt;
&lt;br /&gt;
Le modification directe des ports dans /var/lib/docker/containers/&amp;lt;container-id&amp;gt;/hostconfig.json  et config.v2.json, même sur un conteneur stoppé est écrasé au start sous rhel8/docker-ce. &lt;br /&gt;
&lt;br /&gt;
Sur un conteneur existant, faire:&lt;br /&gt;
* arrêter le conteneur&lt;br /&gt;
  $ docker stop my-cntid&lt;br /&gt;
* docker commit my-cntid my-new-image-tag&lt;br /&gt;
* docker -p&amp;lt;xxx:yyy&amp;gt;... &lt;br /&gt;
&lt;br /&gt;
== commandes docker sans sudo ==&lt;br /&gt;
Message d'erreur:&lt;br /&gt;
  Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get     &lt;br /&gt;
  http://%2Fvar%2Frun%2Fdocker.sock/v1.40/images/json: dial unix /var/run/docker.sock: connect: permission denied&lt;br /&gt;
  &lt;br /&gt;
  $ ls -l /var/run/docker.sock&lt;br /&gt;
  srw-rw----. 1 root docker 0 Nov 17 14:29 /var/run/docker.sock&lt;br /&gt;
&lt;br /&gt;
Ajouter le groupe docker a l'utilisateur&lt;br /&gt;
  $ sudo usermod -a -G docker myusername&lt;br /&gt;
&lt;br /&gt;
== Trouver les images dépendant d'une image ==&lt;br /&gt;
&lt;br /&gt;
Cas d'usage: supprimer une image retourne l'erreur &amp;quot;image has dependent child images&amp;quot;&lt;br /&gt;
  $ docker image rm 7f6c67ae7dae &lt;br /&gt;
  Error response from daemon: conflict: unable to delete 7f6c67ae7dae (cannot be forced) - image has dependent child images&lt;br /&gt;
&lt;br /&gt;
définir la fonction (ex dans bashrc)&lt;br /&gt;
  docker_image_desc() {&lt;br /&gt;
    for image in $(docker images --quiet --filter &amp;quot;since=${1}&amp;quot;); do&lt;br /&gt;
      if [ $(docker history --quiet ${image} | grep ${1}) ]; then&lt;br /&gt;
        docker_image_desc &amp;quot;${image}&amp;quot;&lt;br /&gt;
      fi&lt;br /&gt;
    done&lt;br /&gt;
    echo &amp;quot;${1}&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
et:&lt;br /&gt;
  $ docker_image_desc 7f6c67ae7dae &lt;br /&gt;
  76b749bf3727&lt;br /&gt;
  7f6c67ae7dae&lt;br /&gt;
&lt;br /&gt;
[[Category:Containers]]&lt;br /&gt;
[[Category:Docker]]&lt;br /&gt;
[[Category:Tips&amp;amp;Tricks]]&lt;/div&gt;</summary>
		<author><name>Toine</name></author>	</entry>

	<entry>
		<id>https://wiki.tonioc.ovh/index.php?title=Nmcli:_NetworkManager_CLI&amp;diff=417</id>
		<title>Nmcli: NetworkManager CLI</title>
		<link rel="alternate" type="text/html" href="https://wiki.tonioc.ovh/index.php?title=Nmcli:_NetworkManager_CLI&amp;diff=417"/>
				<updated>2021-01-24T10:41:05Z</updated>
		
		<summary type="html">&lt;p&gt;Toine : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Quelques commandes avec nmcli pour gérer les connexions réseau:&lt;br /&gt;
Lister les réseaux wifi disponibles&lt;br /&gt;
  $ nmcli dev wifi list&lt;br /&gt;
  *  SSID                      MODE   CHAN  DÉBIT    SIGNAL  BARS  SÉCURITÉ    &lt;br /&gt;
     Livebox-3WYX              Infra  1     54 Mo/s  65      ▂▄▆_  WPA2        &lt;br /&gt;
     myssid2                   Infra  1     54 Mo/s  64      ▂▄▆_  WPA2        &lt;br /&gt;
Connexion à un réseau &lt;br /&gt;
  $ nmcli --ask dev wifi connect Livebox-3WYX&lt;br /&gt;
  Mot de passe : ...&lt;br /&gt;
  Périphérique « wlo1 » activé avec « 9c234370-5a39-468d-9b62-202cbc56e9fe ».&lt;br /&gt;
:Ceci crée le fichier de clef /etc/sysconfig/network-scripts/keys-myssid&lt;br /&gt;
  $ sudo cat keys-myssid&lt;br /&gt;
  WPA_PSK='mywifikey'&lt;br /&gt;
: et /etc/sysconfig/network-scripts/ifcfg-myssid &lt;br /&gt;
  $ sudo cat ifcfg-XT1072_3339_1&lt;br /&gt;
  HWADDR=6C:88:14:ED:76:74&lt;br /&gt;
  ESSID=&amp;quot;XT1072 3339&amp;quot;&lt;br /&gt;
  MODE=Managed&lt;br /&gt;
  KEY_MGMT=WPA-PSK&lt;br /&gt;
  TYPE=Wireless&lt;br /&gt;
  BOOTPROTO=dhcp&lt;br /&gt;
  ...&lt;br /&gt;
  NAME=&amp;quot;XT1072 3339&amp;quot;&lt;br /&gt;
  ONBOOT=yes&lt;br /&gt;
  SECURITYMODE=open&lt;br /&gt;
  MAC_ADDRESS_RANDOMIZATION=default&lt;br /&gt;
  PEERDNS=yes&lt;br /&gt;
  PEERROUTES=yes&lt;br /&gt;
  IPV6_PEERDNS=yes&lt;br /&gt;
  IPV6_PEERROUTES=yes&lt;br /&gt;
  IPV6_PRIVACY=no&lt;br /&gt;
Pilotage du switch radio&lt;br /&gt;
  $ nmcli radio wifi off&lt;br /&gt;
  $ nmcli radio wifi on&lt;br /&gt;
Pilotage des connexions&lt;br /&gt;
  $ nmcli connection show&lt;br /&gt;
  $ nmcli connection down Livebox-3DA0&lt;br /&gt;
  $ nmcli connection up Livebox-3DA0&lt;br /&gt;
  $ nmcli connection reload&lt;br /&gt;
    (recharge les infos depuis sysconfig/ )&lt;br /&gt;
 &lt;br /&gt;
[[Category:Linux]]&lt;br /&gt;
[[Category:NetworkManager]]&lt;br /&gt;
[[Category:Configuration]]&lt;/div&gt;</summary>
		<author><name>Toine</name></author>	</entry>

	<entry>
		<id>https://wiki.tonioc.ovh/index.php?title=Cat%C3%A9gorie:SELinux&amp;diff=416</id>
		<title>Catégorie:SELinux</title>
		<link rel="alternate" type="text/html" href="https://wiki.tonioc.ovh/index.php?title=Cat%C3%A9gorie:SELinux&amp;diff=416"/>
				<updated>2021-01-22T17:47:31Z</updated>
		
		<summary type="html">&lt;p&gt;Toine : SELinux&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;SELinux&lt;/div&gt;</summary>
		<author><name>Toine</name></author>	</entry>

	<entry>
		<id>https://wiki.tonioc.ovh/index.php?title=SELinux_cr%C3%A9er_un_module_d%27exception&amp;diff=415</id>
		<title>SELinux créer un module d'exception</title>
		<link rel="alternate" type="text/html" href="https://wiki.tonioc.ovh/index.php?title=SELinux_cr%C3%A9er_un_module_d%27exception&amp;diff=415"/>
				<updated>2021-01-22T17:46:59Z</updated>
		
		<summary type="html">&lt;p&gt;Toine : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Objectif: se débarrasser de certaines alertes SELinux qu'on ne peut pas traiter avec restorecon, chcon. &lt;br /&gt;
&lt;br /&gt;
Pour cela il faut les packages policycoreutils et checkpolicy (rhel8).&lt;br /&gt;
On va extraire les alertes SElinux de l'audit log, créer le module texte et le compiler puis l'appliquer.&lt;br /&gt;
&lt;br /&gt;
Extraire les logs (par exemple toutes les alertes): &lt;br /&gt;
  # grep &amp;quot;avc:  denied&amp;quot; /var/log/audit/audit.log &amp;gt; mysemodule.log&lt;br /&gt;
&lt;br /&gt;
Laisser dans ce fichier uniquement les lignes correspondant aux alertes à supprimer, puis générer les règles correspondantes&lt;br /&gt;
  # cat mysemodule.txt | audit2allow -r &amp;gt; mysemodule.te&lt;br /&gt;
&lt;br /&gt;
Ajouter une ligne en tête de fichier définissant le module, par exemple &lt;br /&gt;
  module mysemodule 1.0.0;&lt;br /&gt;
&lt;br /&gt;
Compiler le module:&lt;br /&gt;
  # rm -f mysemodule.mod mysemodule.pp &lt;br /&gt;
  # checkmodule -M -m -o mysemodule.mod mysemodule.te&lt;br /&gt;
  # semodule_package -o mysemodule.pp -m mysemodule.mod&lt;br /&gt;
&lt;br /&gt;
Appliquer le module&lt;br /&gt;
  # semodule -i mysemodule.pp&lt;br /&gt;
&lt;br /&gt;
[[Category:Linux]]&lt;br /&gt;
[[Category:SELinux]]&lt;/div&gt;</summary>
		<author><name>Toine</name></author>	</entry>

	<entry>
		<id>https://wiki.tonioc.ovh/index.php?title=SELinux_cr%C3%A9er_un_module_d%27exception&amp;diff=414</id>
		<title>SELinux créer un module d'exception</title>
		<link rel="alternate" type="text/html" href="https://wiki.tonioc.ovh/index.php?title=SELinux_cr%C3%A9er_un_module_d%27exception&amp;diff=414"/>
				<updated>2021-01-22T17:44:00Z</updated>
		
		<summary type="html">&lt;p&gt;Toine : Page créée avec « Objectif: se débarrasser de certaines alertes SELinux qu'on ne peut pas traiter avec restorecon, chcon.   Pour cela il faut les packages policycoreutils et checkpolicy (r... »&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Objectif: se débarrasser de certaines alertes SELinux qu'on ne peut pas traiter avec restorecon, chcon. &lt;br /&gt;
&lt;br /&gt;
Pour cela il faut les packages policycoreutils et checkpolicy (rhel8).&lt;br /&gt;
On va extraire les alertes SElinux de l'audit log, créer le module texte et le compiler puis l'appliquer.&lt;br /&gt;
&lt;br /&gt;
Extraire les logs (par exemple toutes les alertes): &lt;br /&gt;
  # grep &amp;quot;avc:  denied&amp;quot; /var/log/audit/audit.log &amp;gt; mysemodule.log&lt;br /&gt;
&lt;br /&gt;
Laisser dans ce fichier uniquement les lignes correspondant aux alertes à supprimer, puis générer les règles correspondantes&lt;br /&gt;
  # cat mysemodule.txt | audit2allow -r &amp;gt; mysemodule.te&lt;br /&gt;
&lt;br /&gt;
Ajouter une ligne en tête de fichier définissant le module, par exemple &lt;br /&gt;
  module mysemodule 1.0.0;&lt;br /&gt;
&lt;br /&gt;
Compiler le module:&lt;br /&gt;
  # rm -f mysemodule.mod mysemodule.pp &lt;br /&gt;
  # checkmodule -M -m -o mysemodule.mod mysemodule.te&lt;br /&gt;
  # semodule_package -o mysemodule.pp -m mysemodule.mod&lt;br /&gt;
&lt;br /&gt;
Appliquer le module&lt;br /&gt;
  # semodule -i mysemodule.pp&lt;/div&gt;</summary>
		<author><name>Toine</name></author>	</entry>

	<entry>
		<id>https://wiki.tonioc.ovh/index.php?title=Accueil&amp;diff=413</id>
		<title>Accueil</title>
		<link rel="alternate" type="text/html" href="https://wiki.tonioc.ovh/index.php?title=Accueil&amp;diff=413"/>
				<updated>2021-01-22T17:26:35Z</updated>
		
		<summary type="html">&lt;p&gt;Toine : /* Sommaire */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;strong&amp;gt;Le wiki techno d'antonio...&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ce site collecte mes recettes liées à l'usage des technos informatiques - principalement autour des variantes Linux type 'redhat' (rhel, fedora, centos), un peu Windows (quoique de moins en moins...). &lt;br /&gt;
&lt;br /&gt;
Voir la [[Spécial:Categories|liste des catégories]].&lt;br /&gt;
&lt;br /&gt;
== Sommaire ==&lt;br /&gt;
# Linux en général&lt;br /&gt;
## [[Bash: trucs et astuces]]&lt;br /&gt;
## [[Linux: divers trucs et astuces]]&lt;br /&gt;
## [[Bash: journaliser l'historique de commandes dans syslog]]&lt;br /&gt;
## [[Linux: Diagnostic hardware]]&lt;br /&gt;
## [[Rpmbuild avec modifications (ajout de patch)]]&lt;br /&gt;
## [[USB boot creation]]&lt;br /&gt;
## [[Linux: Outils de monitoring/performances]]&lt;br /&gt;
## [[Linux: Conversions de fichiers]]&lt;br /&gt;
## [[Linux: transfert et synchronisation de fichiers ]]&lt;br /&gt;
## [[Linux: heure, timezone, etc]]&lt;br /&gt;
## [[YUM,DNF,RPM : installer des packages]]&lt;br /&gt;
## [[nmcli: NetworkManager CLI]]&lt;br /&gt;
## [[Linux: outils de debug réseau, test connexion, SSL...]]&lt;br /&gt;
## [[Linux: recettes bonding]]&lt;br /&gt;
## [[SSH: entrée/sortie standard à travers le réseau]]&lt;br /&gt;
## [[SSH: accélerer les connexions avec ControlMaster]]&lt;br /&gt;
## [[SSH: rebond et tunnels]]&lt;br /&gt;
## [[Stockage partagé avec SSHFS]]&lt;br /&gt;
## [[xml en ligne de commande]]&lt;br /&gt;
## [[Systemd]]&lt;br /&gt;
## [[tmux: multiplexer un terminal en ligne de commande]]&lt;br /&gt;
## [[SELinux créer un module d'exception]]&lt;br /&gt;
# [[Firefox: astuces et trucs divers]]&lt;br /&gt;
# Sécurité&lt;br /&gt;
## [[Encrypter/Protéger ses données]]&lt;br /&gt;
## [[Exemples avec iptables/ipset]]&lt;br /&gt;
## [[Openscap pour scaner les vulnérabilités actives]]&lt;br /&gt;
# Redhat/Centos 8&lt;br /&gt;
## [[Rhel/Centos 8 : installation xfce, xrdp ]]&lt;br /&gt;
# Redhat/Centos 7&lt;br /&gt;
## [[Rhel/Centos 7 : commandes réglages système divers]]&lt;br /&gt;
## [[Centos 7 wifi avec kde et nmcli]]&lt;br /&gt;
## [[GRUB2 save entry]]&lt;br /&gt;
## [[Centos 7 divers astuces et resolutions de problèmes]]&lt;br /&gt;
## [[Centos 7 : Installer son serveur OpenVPN]]&lt;br /&gt;
## [[Centos 7 : Client OpenVPN (CLI et NetworkManager avec KDE et Gnome3)]]&lt;br /&gt;
# Virtualisation&lt;br /&gt;
## [[KVM-Qemu]]&lt;br /&gt;
# Conteneurs&lt;br /&gt;
## [[Docker]]&lt;br /&gt;
## [[podman (centos/rhel8) ]]&lt;br /&gt;
# [[KDE]]&lt;br /&gt;
# [[Gnome3]]&lt;br /&gt;
# Redhat/Centos 6&lt;br /&gt;
## [[HP proliant sous rhel6]]&lt;br /&gt;
## [[Redhat el6 configuration système]]&lt;br /&gt;
# Cygwin&lt;br /&gt;
## [[Cygwin, Trucs et astuces]]&lt;br /&gt;
# WSL (Windows Subsystem for Linux)&lt;br /&gt;
## [[WSL, Installation, Trucs et astuces]]&lt;br /&gt;
#Perl&lt;br /&gt;
## [[Perl: trucs généraux]]&lt;br /&gt;
## [[Perl-Tk code snippets divers]]&lt;br /&gt;
## [[Perl: telnet dans un script perl]]&lt;br /&gt;
## [[Perl: exemple SSH avec Expect]]&lt;br /&gt;
## [[Perl: afficher les transitions heures été/hiver sur la timezone]]&lt;br /&gt;
# MariaDB/MySQL&lt;br /&gt;
## [[MariaDB]]&lt;br /&gt;
# [[Aide mediawiki]]&lt;/div&gt;</summary>
		<author><name>Toine</name></author>	</entry>

	<entry>
		<id>https://wiki.tonioc.ovh/index.php?title=Docker&amp;diff=412</id>
		<title>Docker</title>
		<link rel="alternate" type="text/html" href="https://wiki.tonioc.ovh/index.php?title=Docker&amp;diff=412"/>
				<updated>2020-12-18T14:05:25Z</updated>
		
		<summary type="html">&lt;p&gt;Toine : /* Publier les ports d'un conteneur */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= commandes docker-ce =&lt;br /&gt;
== instances ==&lt;br /&gt;
* démarrer :&lt;br /&gt;
  $ docker run [-ai] [--name myOwnName] &amp;lt;image&amp;gt;&lt;br /&gt;
  $ docker start [-ai] &amp;lt;instance&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* demarrer en interactif avec un shell (ne lance pas l'éventuelle commande CMD). en supprimant l'instance à sa sortie.&lt;br /&gt;
  $ docker run --rm -it &amp;lt;image&amp;gt; sh&lt;br /&gt;
&lt;br /&gt;
* attacher avec un shell a une image active&lt;br /&gt;
  $ docker exec -it &amp;lt;image&amp;gt; sh&lt;br /&gt;
&lt;br /&gt;
* arrêter: &lt;br /&gt;
  $ docker stop &amp;lt;image&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== images ==&lt;br /&gt;
* push/pull :&lt;br /&gt;
  $ docker image ls&lt;br /&gt;
  $ docker images&lt;br /&gt;
* push/pull :&lt;br /&gt;
  $ docker pull &amp;lt;image&amp;gt;&lt;br /&gt;
* renommer une image&lt;br /&gt;
  $ docker image ls&lt;br /&gt;
  REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE&lt;br /&gt;
  c7_dev              latest              744765ef7a95        4 days ago          333MB&lt;br /&gt;
  $ docker tag c7_dev:latest c7tools:1.0&lt;br /&gt;
  $ docker image ls &lt;br /&gt;
  REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE&lt;br /&gt;
  c7tools             1.0                 744765ef7a95        4 days ago          333MB&lt;br /&gt;
  c7_dev              latest              744765ef7a95        4 days ago          333MB&lt;br /&gt;
* suppression/pull :&lt;br /&gt;
  $ docker image rm &amp;lt;image&amp;gt;...&lt;br /&gt;
  $ docker rmi &amp;lt;image&amp;gt;...&lt;br /&gt;
* supprimer les images inutilisées :&lt;br /&gt;
  $ docker image prune&lt;br /&gt;
* inspecter les images :&lt;br /&gt;
  $ docker inspect &amp;lt;image&amp;gt;&lt;br /&gt;
* sauver/charge les images hors registry:&lt;br /&gt;
  $ docker save -o output-file.tar &amp;lt;image:tag&amp;gt;&lt;br /&gt;
  $ docker load -q -i input-file.tar&lt;br /&gt;
&lt;br /&gt;
== nettoyage ==&lt;br /&gt;
&lt;br /&gt;
* supprimer les ressources inutiles (images et instances stoppées):&lt;br /&gt;
  $ docker system prune&lt;br /&gt;
&lt;br /&gt;
= Fabriquer des images =&lt;br /&gt;
Voir d'abord https://docs.docker.com/develop/ &lt;br /&gt;
== commandes image build ==&lt;br /&gt;
Depuis le répertoire contenant le Dockerfile&lt;br /&gt;
  $ docker build [-t &amp;lt;name&amp;gt;[:&amp;lt;vers&amp;gt;]] .&lt;br /&gt;
&lt;br /&gt;
== stockage docker == &lt;br /&gt;
Voir&lt;br /&gt;
  $ docker image inspect &amp;lt;image&amp;gt;&lt;br /&gt;
  $ docker volume inspect &amp;lt;volume&amp;gt;&lt;br /&gt;
  $ docker inspect &amp;lt;instance&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  $ sudo ls /var/lib/docker &lt;br /&gt;
  builder  buildkit  containers  image  network  overlay2  plugins  runtimes  swarm  tmp  trust  volumes&lt;br /&gt;
  $ sudo ls /var/lib/docker/overlay2&lt;br /&gt;
&lt;br /&gt;
Nettoyage des volumes &lt;br /&gt;
  # un volume précis: &lt;br /&gt;
  $ docker volume rm &amp;lt;volid&amp;gt;&lt;br /&gt;
  # tous les volumes non utilisés (volumes anonymes d'instances arrêtées par ex)&lt;br /&gt;
  $ docker volume&lt;br /&gt;
&lt;br /&gt;
== Dockerfile ==&lt;br /&gt;
&lt;br /&gt;
=== partage de dossiers avec le conteneur : &amp;quot;bind mounts&amp;quot; ===&lt;br /&gt;
Pas de déclaration dans le Dockerfile (c'est pour les volumes anonymes)&lt;br /&gt;
&lt;br /&gt;
A l'execution d'un conteneur:&lt;br /&gt;
  $ docker run -v $(pwd)/logs:/app/logs $(pwd)/ro_data:/app/ro_data:ro  myimg&lt;br /&gt;
  ou équivalent avec la commande mount &lt;br /&gt;
  $ docker run --mount type=bind,source=$(pwd)/logs,target=/app/logs \&lt;br /&gt;
      --mount type=bind,source=$(pwd)/ro_data,target=/app/ro_data,readonly &lt;br /&gt;
L'image voit le contenu du répertoire logs, et les logs écrits dedans donc persistants.&lt;br /&gt;
L'image voit le contenu du répertoire ro_data en lecture seule.&lt;br /&gt;
&lt;br /&gt;
voir https://docs.docker.com/storage/bind-mounts/ ,  https://docs.docker.com/storage/volumes/&lt;br /&gt;
&lt;br /&gt;
= Réseau =&lt;br /&gt;
== créer un réseau == &lt;br /&gt;
Par défaut, réseau créé en mode &amp;quot;bridge&amp;quot; (les conteneurs sont résolus par leur nom à l'intérieur d'un même réseau).&lt;br /&gt;
  $ docker network create [--driver bridge] mynet1&lt;br /&gt;
&lt;br /&gt;
Autres drivers:&lt;br /&gt;
* host: pour des conteneur &amp;quot;standalone&amp;quot; l'isolation avec le système hôte est supprimée, ils partagent le même réseau&lt;br /&gt;
* overlay: Connecter des conteneurs tournant sur plusieurs hôte. Mode &amp;quot;Swarm&amp;quot; seulement, presque obsolète. &lt;br /&gt;
* macvlan: force une adresse MAC au container. bridge sur un port physique. &lt;br /&gt;
* none: pas de réseau.&lt;br /&gt;
* autres 3PP à installer&lt;br /&gt;
&lt;br /&gt;
== associer des conteneurs à un réseau ==&lt;br /&gt;
Au lancement, simplement mentionner le réseau &lt;br /&gt;
  $ docker run -network my-network --name cont1 my-image&lt;br /&gt;
  $ docker run -network my-network --name cont2 my-other-image&lt;br /&gt;
Les 2 conteneurs cont1 et cont2 peuvent communiquer. &lt;br /&gt;
Comme ils sont associés au même réseau, les noms de conteneurs peuvent servir à la résolution d'adresse pour communiquer entre eux sans nécessité de publier les ports utilisés uniquement en interne dans ce réseau. Par exemple cont1 est une base de données sur le port 5432, cont2 est un backend utilisant ce service. L'adresse à utiliser dans cont2 sera donc 'cont1:5432'. &lt;br /&gt;
&lt;br /&gt;
Associer 2 réseaux à un même conteneur:&lt;br /&gt;
* créer d'abord les 2 réseaux mynet1 et mynet2&lt;br /&gt;
  $ docker network create --driver=bridge network1 --subnet=172.19.0.0/24&lt;br /&gt;
  $ docker network create --driver=bridge network2 --subnet=172.19.1.0/24&lt;br /&gt;
* créer l'instance de conteneur et asssocier le 2eme réseau avant de la lancer:&lt;br /&gt;
  $ docker create --network=network1 --name container_name containerimage:latest&lt;br /&gt;
  $ docker network connect network2 container_name&lt;br /&gt;
  $ docker start container_name&lt;br /&gt;
&lt;br /&gt;
== Publier les ports d'un conteneur ==&lt;br /&gt;
Au lancement, simplement mentionner les associations interne/externe pour rendre les ports visibles de l'extérieur du conteneur.&lt;br /&gt;
  $ docker run -p1234:3456 -p 5678:7890 my-cont1 my-image&lt;br /&gt;
&lt;br /&gt;
Rappel: nécessaire seulement pour des ports à visibilité externe (pas les ports utilisés dans un même réseau docker). &lt;br /&gt;
&lt;br /&gt;
Le modification directe des ports dans /var/lib/docker/containers/&amp;lt;container-id&amp;gt;/hostconfig.json  et config.v2.json, même sur un conteneur stoppé est écrasé au start sous rhel8/docker-ce. &lt;br /&gt;
&lt;br /&gt;
Sur un conteneur existant, faire:&lt;br /&gt;
* arrêter le conteneur&lt;br /&gt;
  $ docker stop my-cntid&lt;br /&gt;
* docker commit my-cntid my-new-image-tag&lt;br /&gt;
* docker -p&amp;lt;xxx:yyy&amp;gt;...&lt;br /&gt;
&lt;br /&gt;
= docker-compose =&lt;br /&gt;
== commandes ==&lt;br /&gt;
* '''docker-compose up -d''' vous permettra de démarrer l'ensemble des conteneurs en arrière-plan ;&lt;br /&gt;
* '''docker-compose ps''' vous permettra de voir le status de l'ensemble de votre stack ;&lt;br /&gt;
* '''docker-compose logs -f --tail 5''' vous permettra d'afficher les logs de votre stack ;&lt;br /&gt;
* '''docker-compose stop''' vous permettra d'arrêter l'ensemble des services d'une stack ;&lt;br /&gt;
* '''docker-compose down'''  vous permettra de détruire l'ensemble des ressources d'une stack ;&lt;br /&gt;
* '''docker-compose config''' vous permettra de valider la syntaxe de votre fichier docker-compose.yml.&lt;br /&gt;
&lt;br /&gt;
= Astuces divers points =&lt;br /&gt;
== communication image docker vers un service sur la machine hôte ==&lt;br /&gt;
Pour un serveur sur la machine hôte (pas un autre conteneur), au lieu de localhost, utiliser le pseudo-domaine 'host.docker.internal'.&lt;br /&gt;
&lt;br /&gt;
== associer des ports à un conteneur ==&lt;br /&gt;
Au lancement, simplement mentionner les associations&lt;br /&gt;
  $ docker run -p1234:3456 -p 5678:7890 my-cont1 my-image&lt;br /&gt;
&lt;br /&gt;
Le modification directe des ports dans /var/lib/docker/containers/&amp;lt;container-id&amp;gt;/hostconfig.json  et config.v2.json, même sur un conteneur stoppé est écrasé au start sous rhel8/docker-ce. &lt;br /&gt;
&lt;br /&gt;
Sur un conteneur existant, faire:&lt;br /&gt;
* arrêter le conteneur&lt;br /&gt;
  $ docker stop my-cntid&lt;br /&gt;
* docker commit my-cntid my-new-image-tag&lt;br /&gt;
* docker -p&amp;lt;xxx:yyy&amp;gt;... &lt;br /&gt;
&lt;br /&gt;
== commandes docker sans sudo ==&lt;br /&gt;
Message d'erreur:&lt;br /&gt;
  Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get     &lt;br /&gt;
  http://%2Fvar%2Frun%2Fdocker.sock/v1.40/images/json: dial unix /var/run/docker.sock: connect: permission denied&lt;br /&gt;
  &lt;br /&gt;
  $ ls -l /var/run/docker.sock&lt;br /&gt;
  srw-rw----. 1 root docker 0 Nov 17 14:29 /var/run/docker.sock&lt;br /&gt;
&lt;br /&gt;
Ajouter le groupe docker a l'utilisateur&lt;br /&gt;
  $ sudo usermod -a -G docker myusername&lt;br /&gt;
&lt;br /&gt;
== Trouver les images dépendant d'une image ==&lt;br /&gt;
&lt;br /&gt;
Cas d'usage: supprimer une image retourne l'erreur &amp;quot;image has dependent child images&amp;quot;&lt;br /&gt;
  $ docker image rm 7f6c67ae7dae &lt;br /&gt;
  Error response from daemon: conflict: unable to delete 7f6c67ae7dae (cannot be forced) - image has dependent child images&lt;br /&gt;
&lt;br /&gt;
définir la fonction (ex dans bashrc)&lt;br /&gt;
  docker_image_desc() {&lt;br /&gt;
    for image in $(docker images --quiet --filter &amp;quot;since=${1}&amp;quot;); do&lt;br /&gt;
      if [ $(docker history --quiet ${image} | grep ${1}) ]; then&lt;br /&gt;
        docker_image_desc &amp;quot;${image}&amp;quot;&lt;br /&gt;
      fi&lt;br /&gt;
    done&lt;br /&gt;
    echo &amp;quot;${1}&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
et:&lt;br /&gt;
  $ docker_image_desc 7f6c67ae7dae &lt;br /&gt;
  76b749bf3727&lt;br /&gt;
  7f6c67ae7dae&lt;br /&gt;
&lt;br /&gt;
[[Category:Containers]]&lt;br /&gt;
[[Category:Docker]]&lt;br /&gt;
[[Category:Tips&amp;amp;Tricks]]&lt;/div&gt;</summary>
		<author><name>Toine</name></author>	</entry>

	<entry>
		<id>https://wiki.tonioc.ovh/index.php?title=Docker&amp;diff=411</id>
		<title>Docker</title>
		<link rel="alternate" type="text/html" href="https://wiki.tonioc.ovh/index.php?title=Docker&amp;diff=411"/>
				<updated>2020-12-18T14:01:16Z</updated>
		
		<summary type="html">&lt;p&gt;Toine : /* associer des ports à un conteneur */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= commandes docker-ce =&lt;br /&gt;
== instances ==&lt;br /&gt;
* démarrer :&lt;br /&gt;
  $ docker run [-ai] [--name myOwnName] &amp;lt;image&amp;gt;&lt;br /&gt;
  $ docker start [-ai] &amp;lt;instance&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* demarrer en interactif avec un shell (ne lance pas l'éventuelle commande CMD). en supprimant l'instance à sa sortie.&lt;br /&gt;
  $ docker run --rm -it &amp;lt;image&amp;gt; sh&lt;br /&gt;
&lt;br /&gt;
* attacher avec un shell a une image active&lt;br /&gt;
  $ docker exec -it &amp;lt;image&amp;gt; sh&lt;br /&gt;
&lt;br /&gt;
* arrêter: &lt;br /&gt;
  $ docker stop &amp;lt;image&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== images ==&lt;br /&gt;
* push/pull :&lt;br /&gt;
  $ docker image ls&lt;br /&gt;
  $ docker images&lt;br /&gt;
* push/pull :&lt;br /&gt;
  $ docker pull &amp;lt;image&amp;gt;&lt;br /&gt;
* renommer une image&lt;br /&gt;
  $ docker image ls&lt;br /&gt;
  REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE&lt;br /&gt;
  c7_dev              latest              744765ef7a95        4 days ago          333MB&lt;br /&gt;
  $ docker tag c7_dev:latest c7tools:1.0&lt;br /&gt;
  $ docker image ls &lt;br /&gt;
  REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE&lt;br /&gt;
  c7tools             1.0                 744765ef7a95        4 days ago          333MB&lt;br /&gt;
  c7_dev              latest              744765ef7a95        4 days ago          333MB&lt;br /&gt;
* suppression/pull :&lt;br /&gt;
  $ docker image rm &amp;lt;image&amp;gt;...&lt;br /&gt;
  $ docker rmi &amp;lt;image&amp;gt;...&lt;br /&gt;
* supprimer les images inutilisées :&lt;br /&gt;
  $ docker image prune&lt;br /&gt;
* inspecter les images :&lt;br /&gt;
  $ docker inspect &amp;lt;image&amp;gt;&lt;br /&gt;
* sauver/charge les images hors registry:&lt;br /&gt;
  $ docker save -o output-file.tar &amp;lt;image:tag&amp;gt;&lt;br /&gt;
  $ docker load -q -i input-file.tar&lt;br /&gt;
&lt;br /&gt;
== nettoyage ==&lt;br /&gt;
&lt;br /&gt;
* supprimer les ressources inutiles (images et instances stoppées):&lt;br /&gt;
  $ docker system prune&lt;br /&gt;
&lt;br /&gt;
= Fabriquer des images =&lt;br /&gt;
Voir d'abord https://docs.docker.com/develop/ &lt;br /&gt;
== commandes image build ==&lt;br /&gt;
Depuis le répertoire contenant le Dockerfile&lt;br /&gt;
  $ docker build [-t &amp;lt;name&amp;gt;[:&amp;lt;vers&amp;gt;]] .&lt;br /&gt;
&lt;br /&gt;
== stockage docker == &lt;br /&gt;
Voir&lt;br /&gt;
  $ docker image inspect &amp;lt;image&amp;gt;&lt;br /&gt;
  $ docker volume inspect &amp;lt;volume&amp;gt;&lt;br /&gt;
  $ docker inspect &amp;lt;instance&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  $ sudo ls /var/lib/docker &lt;br /&gt;
  builder  buildkit  containers  image  network  overlay2  plugins  runtimes  swarm  tmp  trust  volumes&lt;br /&gt;
  $ sudo ls /var/lib/docker/overlay2&lt;br /&gt;
&lt;br /&gt;
Nettoyage des volumes &lt;br /&gt;
  # un volume précis: &lt;br /&gt;
  $ docker volume rm &amp;lt;volid&amp;gt;&lt;br /&gt;
  # tous les volumes non utilisés (volumes anonymes d'instances arrêtées par ex)&lt;br /&gt;
  $ docker volume&lt;br /&gt;
&lt;br /&gt;
== Dockerfile ==&lt;br /&gt;
&lt;br /&gt;
=== partage de dossiers avec le conteneur : &amp;quot;bind mounts&amp;quot; ===&lt;br /&gt;
Pas de déclaration dans le Dockerfile (c'est pour les volumes anonymes)&lt;br /&gt;
&lt;br /&gt;
A l'execution d'un conteneur:&lt;br /&gt;
  $ docker run -v $(pwd)/logs:/app/logs $(pwd)/ro_data:/app/ro_data:ro  myimg&lt;br /&gt;
  ou équivalent avec la commande mount &lt;br /&gt;
  $ docker run --mount type=bind,source=$(pwd)/logs,target=/app/logs \&lt;br /&gt;
      --mount type=bind,source=$(pwd)/ro_data,target=/app/ro_data,readonly &lt;br /&gt;
L'image voit le contenu du répertoire logs, et les logs écrits dedans donc persistants.&lt;br /&gt;
L'image voit le contenu du répertoire ro_data en lecture seule.&lt;br /&gt;
&lt;br /&gt;
voir https://docs.docker.com/storage/bind-mounts/ ,  https://docs.docker.com/storage/volumes/&lt;br /&gt;
&lt;br /&gt;
= Réseau =&lt;br /&gt;
== créer un réseau == &lt;br /&gt;
Par défaut, réseau créé en mode &amp;quot;bridge&amp;quot; (les conteneurs sont résolus par leur nom à l'intérieur d'un même réseau).&lt;br /&gt;
  $ docker network create [--driver bridge] mynet1&lt;br /&gt;
&lt;br /&gt;
Autres drivers:&lt;br /&gt;
* host: pour des conteneur &amp;quot;standalone&amp;quot; l'isolation avec le système hôte est supprimée, ils partagent le même réseau&lt;br /&gt;
* overlay: Connecter des conteneurs tournant sur plusieurs hôte. Mode &amp;quot;Swarm&amp;quot; seulement, presque obsolète. &lt;br /&gt;
* macvlan: force une adresse MAC au container. bridge sur un port physique. &lt;br /&gt;
* none: pas de réseau.&lt;br /&gt;
* autres 3PP à installer&lt;br /&gt;
&lt;br /&gt;
== associer des conteneurs à un réseau ==&lt;br /&gt;
Au lancement, simplement mentionner le réseau &lt;br /&gt;
  $ docker run -network my-network --name cont1 my-image&lt;br /&gt;
  $ docker run -network my-network --name cont2 my-other-image&lt;br /&gt;
Les 2 conteneurs cont1 et cont2 peuvent communiquer. &lt;br /&gt;
Comme ils sont associés au même réseau, les noms de conteneurs peuvent servir à la résolution d'adresse pour communiquer entre eux sans nécessité de publier les ports utilisés uniquement en interne dans ce réseau. Par exemple cont1 est une base de données sur le port 5432, cont2 est un backend utilisant ce service. L'adresse à utiliser dans cont2 sera donc 'cont1:5432'. &lt;br /&gt;
&lt;br /&gt;
Associer 2 réseaux à un même conteneur:&lt;br /&gt;
* créer d'abord les 2 réseaux mynet1 et mynet2&lt;br /&gt;
  $ docker network create --driver=bridge network1 --subnet=172.19.0.0/24&lt;br /&gt;
  $ docker network create --driver=bridge network2 --subnet=172.19.1.0/24&lt;br /&gt;
* créer l'instance de conteneur et asssocier le 2eme réseau avant de la lancer:&lt;br /&gt;
  $ docker create --network=network1 --name container_name containerimage:latest&lt;br /&gt;
  $ docker network connect network2 container_name&lt;br /&gt;
  $ docker start container_name&lt;br /&gt;
&lt;br /&gt;
== Publier les ports d'un conteneur ==&lt;br /&gt;
Au lancement, simplement mentionner les associations interne/externe pour rendre les ports visibles de l'extérieur du conteneur.&lt;br /&gt;
  $ docker run -p1234:3456 -p 5678:7890 my-cont1 my-image&lt;br /&gt;
&lt;br /&gt;
Rappel: pas nécessaire si les conteneurs sont associés au même réseau. &lt;br /&gt;
&lt;br /&gt;
Le modification directe des ports dans /var/lib/docker/containers/&amp;lt;container-id&amp;gt;/hostconfig.json  et config.v2.json, même sur un conteneur stoppé est écrasé au start sous rhel8/docker-ce. &lt;br /&gt;
&lt;br /&gt;
Sur un conteneur existant, faire:&lt;br /&gt;
* arrêter le conteneur&lt;br /&gt;
  $ docker stop my-cntid&lt;br /&gt;
* docker commit my-cntid my-new-image-tag&lt;br /&gt;
* docker -p&amp;lt;xxx:yyy&amp;gt;...&lt;br /&gt;
&lt;br /&gt;
= docker-compose =&lt;br /&gt;
== commandes ==&lt;br /&gt;
* '''docker-compose up -d''' vous permettra de démarrer l'ensemble des conteneurs en arrière-plan ;&lt;br /&gt;
* '''docker-compose ps''' vous permettra de voir le status de l'ensemble de votre stack ;&lt;br /&gt;
* '''docker-compose logs -f --tail 5''' vous permettra d'afficher les logs de votre stack ;&lt;br /&gt;
* '''docker-compose stop''' vous permettra d'arrêter l'ensemble des services d'une stack ;&lt;br /&gt;
* '''docker-compose down'''  vous permettra de détruire l'ensemble des ressources d'une stack ;&lt;br /&gt;
* '''docker-compose config''' vous permettra de valider la syntaxe de votre fichier docker-compose.yml.&lt;br /&gt;
&lt;br /&gt;
= Astuces divers points =&lt;br /&gt;
== communication image docker vers un service sur la machine hôte ==&lt;br /&gt;
Pour un serveur sur la machine hôte (pas un autre conteneur), au lieu de localhost, utiliser le pseudo-domaine 'host.docker.internal'.&lt;br /&gt;
&lt;br /&gt;
== associer des ports à un conteneur ==&lt;br /&gt;
Au lancement, simplement mentionner les associations&lt;br /&gt;
  $ docker run -p1234:3456 -p 5678:7890 my-cont1 my-image&lt;br /&gt;
&lt;br /&gt;
Le modification directe des ports dans /var/lib/docker/containers/&amp;lt;container-id&amp;gt;/hostconfig.json  et config.v2.json, même sur un conteneur stoppé est écrasé au start sous rhel8/docker-ce. &lt;br /&gt;
&lt;br /&gt;
Sur un conteneur existant, faire:&lt;br /&gt;
* arrêter le conteneur&lt;br /&gt;
  $ docker stop my-cntid&lt;br /&gt;
* docker commit my-cntid my-new-image-tag&lt;br /&gt;
* docker -p&amp;lt;xxx:yyy&amp;gt;... &lt;br /&gt;
&lt;br /&gt;
== commandes docker sans sudo ==&lt;br /&gt;
Message d'erreur:&lt;br /&gt;
  Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get     &lt;br /&gt;
  http://%2Fvar%2Frun%2Fdocker.sock/v1.40/images/json: dial unix /var/run/docker.sock: connect: permission denied&lt;br /&gt;
  &lt;br /&gt;
  $ ls -l /var/run/docker.sock&lt;br /&gt;
  srw-rw----. 1 root docker 0 Nov 17 14:29 /var/run/docker.sock&lt;br /&gt;
&lt;br /&gt;
Ajouter le groupe docker a l'utilisateur&lt;br /&gt;
  $ sudo usermod -a -G docker myusername&lt;br /&gt;
&lt;br /&gt;
== Trouver les images dépendant d'une image ==&lt;br /&gt;
&lt;br /&gt;
Cas d'usage: supprimer une image retourne l'erreur &amp;quot;image has dependent child images&amp;quot;&lt;br /&gt;
  $ docker image rm 7f6c67ae7dae &lt;br /&gt;
  Error response from daemon: conflict: unable to delete 7f6c67ae7dae (cannot be forced) - image has dependent child images&lt;br /&gt;
&lt;br /&gt;
définir la fonction (ex dans bashrc)&lt;br /&gt;
  docker_image_desc() {&lt;br /&gt;
    for image in $(docker images --quiet --filter &amp;quot;since=${1}&amp;quot;); do&lt;br /&gt;
      if [ $(docker history --quiet ${image} | grep ${1}) ]; then&lt;br /&gt;
        docker_image_desc &amp;quot;${image}&amp;quot;&lt;br /&gt;
      fi&lt;br /&gt;
    done&lt;br /&gt;
    echo &amp;quot;${1}&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
et:&lt;br /&gt;
  $ docker_image_desc 7f6c67ae7dae &lt;br /&gt;
  76b749bf3727&lt;br /&gt;
  7f6c67ae7dae&lt;br /&gt;
&lt;br /&gt;
[[Category:Containers]]&lt;br /&gt;
[[Category:Docker]]&lt;br /&gt;
[[Category:Tips&amp;amp;Tricks]]&lt;/div&gt;</summary>
		<author><name>Toine</name></author>	</entry>

	<entry>
		<id>https://wiki.tonioc.ovh/index.php?title=Docker&amp;diff=410</id>
		<title>Docker</title>
		<link rel="alternate" type="text/html" href="https://wiki.tonioc.ovh/index.php?title=Docker&amp;diff=410"/>
				<updated>2020-12-18T13:59:20Z</updated>
		
		<summary type="html">&lt;p&gt;Toine : /* associer des conteneurs à un réseau */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= commandes docker-ce =&lt;br /&gt;
== instances ==&lt;br /&gt;
* démarrer :&lt;br /&gt;
  $ docker run [-ai] [--name myOwnName] &amp;lt;image&amp;gt;&lt;br /&gt;
  $ docker start [-ai] &amp;lt;instance&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* demarrer en interactif avec un shell (ne lance pas l'éventuelle commande CMD). en supprimant l'instance à sa sortie.&lt;br /&gt;
  $ docker run --rm -it &amp;lt;image&amp;gt; sh&lt;br /&gt;
&lt;br /&gt;
* attacher avec un shell a une image active&lt;br /&gt;
  $ docker exec -it &amp;lt;image&amp;gt; sh&lt;br /&gt;
&lt;br /&gt;
* arrêter: &lt;br /&gt;
  $ docker stop &amp;lt;image&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== images ==&lt;br /&gt;
* push/pull :&lt;br /&gt;
  $ docker image ls&lt;br /&gt;
  $ docker images&lt;br /&gt;
* push/pull :&lt;br /&gt;
  $ docker pull &amp;lt;image&amp;gt;&lt;br /&gt;
* renommer une image&lt;br /&gt;
  $ docker image ls&lt;br /&gt;
  REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE&lt;br /&gt;
  c7_dev              latest              744765ef7a95        4 days ago          333MB&lt;br /&gt;
  $ docker tag c7_dev:latest c7tools:1.0&lt;br /&gt;
  $ docker image ls &lt;br /&gt;
  REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE&lt;br /&gt;
  c7tools             1.0                 744765ef7a95        4 days ago          333MB&lt;br /&gt;
  c7_dev              latest              744765ef7a95        4 days ago          333MB&lt;br /&gt;
* suppression/pull :&lt;br /&gt;
  $ docker image rm &amp;lt;image&amp;gt;...&lt;br /&gt;
  $ docker rmi &amp;lt;image&amp;gt;...&lt;br /&gt;
* supprimer les images inutilisées :&lt;br /&gt;
  $ docker image prune&lt;br /&gt;
* inspecter les images :&lt;br /&gt;
  $ docker inspect &amp;lt;image&amp;gt;&lt;br /&gt;
* sauver/charge les images hors registry:&lt;br /&gt;
  $ docker save -o output-file.tar &amp;lt;image:tag&amp;gt;&lt;br /&gt;
  $ docker load -q -i input-file.tar&lt;br /&gt;
&lt;br /&gt;
== nettoyage ==&lt;br /&gt;
&lt;br /&gt;
* supprimer les ressources inutiles (images et instances stoppées):&lt;br /&gt;
  $ docker system prune&lt;br /&gt;
&lt;br /&gt;
= Fabriquer des images =&lt;br /&gt;
Voir d'abord https://docs.docker.com/develop/ &lt;br /&gt;
== commandes image build ==&lt;br /&gt;
Depuis le répertoire contenant le Dockerfile&lt;br /&gt;
  $ docker build [-t &amp;lt;name&amp;gt;[:&amp;lt;vers&amp;gt;]] .&lt;br /&gt;
&lt;br /&gt;
== stockage docker == &lt;br /&gt;
Voir&lt;br /&gt;
  $ docker image inspect &amp;lt;image&amp;gt;&lt;br /&gt;
  $ docker volume inspect &amp;lt;volume&amp;gt;&lt;br /&gt;
  $ docker inspect &amp;lt;instance&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  $ sudo ls /var/lib/docker &lt;br /&gt;
  builder  buildkit  containers  image  network  overlay2  plugins  runtimes  swarm  tmp  trust  volumes&lt;br /&gt;
  $ sudo ls /var/lib/docker/overlay2&lt;br /&gt;
&lt;br /&gt;
Nettoyage des volumes &lt;br /&gt;
  # un volume précis: &lt;br /&gt;
  $ docker volume rm &amp;lt;volid&amp;gt;&lt;br /&gt;
  # tous les volumes non utilisés (volumes anonymes d'instances arrêtées par ex)&lt;br /&gt;
  $ docker volume&lt;br /&gt;
&lt;br /&gt;
== Dockerfile ==&lt;br /&gt;
&lt;br /&gt;
=== partage de dossiers avec le conteneur : &amp;quot;bind mounts&amp;quot; ===&lt;br /&gt;
Pas de déclaration dans le Dockerfile (c'est pour les volumes anonymes)&lt;br /&gt;
&lt;br /&gt;
A l'execution d'un conteneur:&lt;br /&gt;
  $ docker run -v $(pwd)/logs:/app/logs $(pwd)/ro_data:/app/ro_data:ro  myimg&lt;br /&gt;
  ou équivalent avec la commande mount &lt;br /&gt;
  $ docker run --mount type=bind,source=$(pwd)/logs,target=/app/logs \&lt;br /&gt;
      --mount type=bind,source=$(pwd)/ro_data,target=/app/ro_data,readonly &lt;br /&gt;
L'image voit le contenu du répertoire logs, et les logs écrits dedans donc persistants.&lt;br /&gt;
L'image voit le contenu du répertoire ro_data en lecture seule.&lt;br /&gt;
&lt;br /&gt;
voir https://docs.docker.com/storage/bind-mounts/ ,  https://docs.docker.com/storage/volumes/&lt;br /&gt;
&lt;br /&gt;
= Réseau =&lt;br /&gt;
== créer un réseau == &lt;br /&gt;
Par défaut, réseau créé en mode &amp;quot;bridge&amp;quot; (les conteneurs sont résolus par leur nom à l'intérieur d'un même réseau).&lt;br /&gt;
  $ docker network create [--driver bridge] mynet1&lt;br /&gt;
&lt;br /&gt;
Autres drivers:&lt;br /&gt;
* host: pour des conteneur &amp;quot;standalone&amp;quot; l'isolation avec le système hôte est supprimée, ils partagent le même réseau&lt;br /&gt;
* overlay: Connecter des conteneurs tournant sur plusieurs hôte. Mode &amp;quot;Swarm&amp;quot; seulement, presque obsolète. &lt;br /&gt;
* macvlan: force une adresse MAC au container. bridge sur un port physique. &lt;br /&gt;
* none: pas de réseau.&lt;br /&gt;
* autres 3PP à installer&lt;br /&gt;
&lt;br /&gt;
== associer des conteneurs à un réseau ==&lt;br /&gt;
Au lancement, simplement mentionner le réseau &lt;br /&gt;
  $ docker run -network my-network --name cont1 my-image&lt;br /&gt;
  $ docker run -network my-network --name cont2 my-other-image&lt;br /&gt;
Les 2 conteneurs cont1 et cont2 peuvent communiquer. &lt;br /&gt;
Comme ils sont associés au même réseau, les noms de conteneurs peuvent servir à la résolution d'adresse pour communiquer entre eux sans nécessité de publier les ports utilisés uniquement en interne dans ce réseau. Par exemple cont1 est une base de données sur le port 5432, cont2 est un backend utilisant ce service. L'adresse à utiliser dans cont2 sera donc 'cont1:5432'. &lt;br /&gt;
&lt;br /&gt;
Associer 2 réseaux à un même conteneur:&lt;br /&gt;
* créer d'abord les 2 réseaux mynet1 et mynet2&lt;br /&gt;
  $ docker network create --driver=bridge network1 --subnet=172.19.0.0/24&lt;br /&gt;
  $ docker network create --driver=bridge network2 --subnet=172.19.1.0/24&lt;br /&gt;
* créer l'instance de conteneur et asssocier le 2eme réseau avant de la lancer:&lt;br /&gt;
  $ docker create --network=network1 --name container_name containerimage:latest&lt;br /&gt;
  $ docker network connect network2 container_name&lt;br /&gt;
  $ docker start container_name&lt;br /&gt;
&lt;br /&gt;
== associer des ports à un conteneur ==&lt;br /&gt;
Au lancement, simplement mentionner les associations&lt;br /&gt;
  $ docker run -p1234:3456 -p 5678:7890 my-cont1 my-image&lt;br /&gt;
&lt;br /&gt;
Le modification directe des ports dans /var/lib/docker/containers/&amp;lt;container-id&amp;gt;/hostconfig.json  et config.v2.json, même sur un conteneur stoppé est écrasé au start sous rhel8/docker-ce. &lt;br /&gt;
&lt;br /&gt;
Sur un conteneur existant, faire:&lt;br /&gt;
* arrêter le conteneur&lt;br /&gt;
  $ docker stop my-cntid&lt;br /&gt;
* docker commit my-cntid my-new-image-tag&lt;br /&gt;
* docker -p&amp;lt;xxx:yyy&amp;gt;...&lt;br /&gt;
&lt;br /&gt;
= docker-compose =&lt;br /&gt;
== commandes ==&lt;br /&gt;
* '''docker-compose up -d''' vous permettra de démarrer l'ensemble des conteneurs en arrière-plan ;&lt;br /&gt;
* '''docker-compose ps''' vous permettra de voir le status de l'ensemble de votre stack ;&lt;br /&gt;
* '''docker-compose logs -f --tail 5''' vous permettra d'afficher les logs de votre stack ;&lt;br /&gt;
* '''docker-compose stop''' vous permettra d'arrêter l'ensemble des services d'une stack ;&lt;br /&gt;
* '''docker-compose down'''  vous permettra de détruire l'ensemble des ressources d'une stack ;&lt;br /&gt;
* '''docker-compose config''' vous permettra de valider la syntaxe de votre fichier docker-compose.yml.&lt;br /&gt;
&lt;br /&gt;
= Astuces divers points =&lt;br /&gt;
== communication image docker vers un service sur la machine hôte ==&lt;br /&gt;
Pour un serveur sur la machine hôte (pas un autre conteneur), au lieu de localhost, utiliser le pseudo-domaine 'host.docker.internal'.&lt;br /&gt;
&lt;br /&gt;
== associer des ports à un conteneur ==&lt;br /&gt;
Au lancement, simplement mentionner les associations&lt;br /&gt;
  $ docker run -p1234:3456 -p 5678:7890 my-cont1 my-image&lt;br /&gt;
&lt;br /&gt;
Le modification directe des ports dans /var/lib/docker/containers/&amp;lt;container-id&amp;gt;/hostconfig.json  et config.v2.json, même sur un conteneur stoppé est écrasé au start sous rhel8/docker-ce. &lt;br /&gt;
&lt;br /&gt;
Sur un conteneur existant, faire:&lt;br /&gt;
* arrêter le conteneur&lt;br /&gt;
  $ docker stop my-cntid&lt;br /&gt;
* docker commit my-cntid my-new-image-tag&lt;br /&gt;
* docker -p&amp;lt;xxx:yyy&amp;gt;... &lt;br /&gt;
&lt;br /&gt;
== commandes docker sans sudo ==&lt;br /&gt;
Message d'erreur:&lt;br /&gt;
  Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get     &lt;br /&gt;
  http://%2Fvar%2Frun%2Fdocker.sock/v1.40/images/json: dial unix /var/run/docker.sock: connect: permission denied&lt;br /&gt;
  &lt;br /&gt;
  $ ls -l /var/run/docker.sock&lt;br /&gt;
  srw-rw----. 1 root docker 0 Nov 17 14:29 /var/run/docker.sock&lt;br /&gt;
&lt;br /&gt;
Ajouter le groupe docker a l'utilisateur&lt;br /&gt;
  $ sudo usermod -a -G docker myusername&lt;br /&gt;
&lt;br /&gt;
== Trouver les images dépendant d'une image ==&lt;br /&gt;
&lt;br /&gt;
Cas d'usage: supprimer une image retourne l'erreur &amp;quot;image has dependent child images&amp;quot;&lt;br /&gt;
  $ docker image rm 7f6c67ae7dae &lt;br /&gt;
  Error response from daemon: conflict: unable to delete 7f6c67ae7dae (cannot be forced) - image has dependent child images&lt;br /&gt;
&lt;br /&gt;
définir la fonction (ex dans bashrc)&lt;br /&gt;
  docker_image_desc() {&lt;br /&gt;
    for image in $(docker images --quiet --filter &amp;quot;since=${1}&amp;quot;); do&lt;br /&gt;
      if [ $(docker history --quiet ${image} | grep ${1}) ]; then&lt;br /&gt;
        docker_image_desc &amp;quot;${image}&amp;quot;&lt;br /&gt;
      fi&lt;br /&gt;
    done&lt;br /&gt;
    echo &amp;quot;${1}&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
et:&lt;br /&gt;
  $ docker_image_desc 7f6c67ae7dae &lt;br /&gt;
  76b749bf3727&lt;br /&gt;
  7f6c67ae7dae&lt;br /&gt;
&lt;br /&gt;
[[Category:Containers]]&lt;br /&gt;
[[Category:Docker]]&lt;br /&gt;
[[Category:Tips&amp;amp;Tricks]]&lt;/div&gt;</summary>
		<author><name>Toine</name></author>	</entry>

	<entry>
		<id>https://wiki.tonioc.ovh/index.php?title=Docker&amp;diff=409</id>
		<title>Docker</title>
		<link rel="alternate" type="text/html" href="https://wiki.tonioc.ovh/index.php?title=Docker&amp;diff=409"/>
				<updated>2020-12-18T13:59:00Z</updated>
		
		<summary type="html">&lt;p&gt;Toine : /* associer des conteneurs à un réseau */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= commandes docker-ce =&lt;br /&gt;
== instances ==&lt;br /&gt;
* démarrer :&lt;br /&gt;
  $ docker run [-ai] [--name myOwnName] &amp;lt;image&amp;gt;&lt;br /&gt;
  $ docker start [-ai] &amp;lt;instance&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* demarrer en interactif avec un shell (ne lance pas l'éventuelle commande CMD). en supprimant l'instance à sa sortie.&lt;br /&gt;
  $ docker run --rm -it &amp;lt;image&amp;gt; sh&lt;br /&gt;
&lt;br /&gt;
* attacher avec un shell a une image active&lt;br /&gt;
  $ docker exec -it &amp;lt;image&amp;gt; sh&lt;br /&gt;
&lt;br /&gt;
* arrêter: &lt;br /&gt;
  $ docker stop &amp;lt;image&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== images ==&lt;br /&gt;
* push/pull :&lt;br /&gt;
  $ docker image ls&lt;br /&gt;
  $ docker images&lt;br /&gt;
* push/pull :&lt;br /&gt;
  $ docker pull &amp;lt;image&amp;gt;&lt;br /&gt;
* renommer une image&lt;br /&gt;
  $ docker image ls&lt;br /&gt;
  REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE&lt;br /&gt;
  c7_dev              latest              744765ef7a95        4 days ago          333MB&lt;br /&gt;
  $ docker tag c7_dev:latest c7tools:1.0&lt;br /&gt;
  $ docker image ls &lt;br /&gt;
  REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE&lt;br /&gt;
  c7tools             1.0                 744765ef7a95        4 days ago          333MB&lt;br /&gt;
  c7_dev              latest              744765ef7a95        4 days ago          333MB&lt;br /&gt;
* suppression/pull :&lt;br /&gt;
  $ docker image rm &amp;lt;image&amp;gt;...&lt;br /&gt;
  $ docker rmi &amp;lt;image&amp;gt;...&lt;br /&gt;
* supprimer les images inutilisées :&lt;br /&gt;
  $ docker image prune&lt;br /&gt;
* inspecter les images :&lt;br /&gt;
  $ docker inspect &amp;lt;image&amp;gt;&lt;br /&gt;
* sauver/charge les images hors registry:&lt;br /&gt;
  $ docker save -o output-file.tar &amp;lt;image:tag&amp;gt;&lt;br /&gt;
  $ docker load -q -i input-file.tar&lt;br /&gt;
&lt;br /&gt;
== nettoyage ==&lt;br /&gt;
&lt;br /&gt;
* supprimer les ressources inutiles (images et instances stoppées):&lt;br /&gt;
  $ docker system prune&lt;br /&gt;
&lt;br /&gt;
= Fabriquer des images =&lt;br /&gt;
Voir d'abord https://docs.docker.com/develop/ &lt;br /&gt;
== commandes image build ==&lt;br /&gt;
Depuis le répertoire contenant le Dockerfile&lt;br /&gt;
  $ docker build [-t &amp;lt;name&amp;gt;[:&amp;lt;vers&amp;gt;]] .&lt;br /&gt;
&lt;br /&gt;
== stockage docker == &lt;br /&gt;
Voir&lt;br /&gt;
  $ docker image inspect &amp;lt;image&amp;gt;&lt;br /&gt;
  $ docker volume inspect &amp;lt;volume&amp;gt;&lt;br /&gt;
  $ docker inspect &amp;lt;instance&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  $ sudo ls /var/lib/docker &lt;br /&gt;
  builder  buildkit  containers  image  network  overlay2  plugins  runtimes  swarm  tmp  trust  volumes&lt;br /&gt;
  $ sudo ls /var/lib/docker/overlay2&lt;br /&gt;
&lt;br /&gt;
Nettoyage des volumes &lt;br /&gt;
  # un volume précis: &lt;br /&gt;
  $ docker volume rm &amp;lt;volid&amp;gt;&lt;br /&gt;
  # tous les volumes non utilisés (volumes anonymes d'instances arrêtées par ex)&lt;br /&gt;
  $ docker volume&lt;br /&gt;
&lt;br /&gt;
== Dockerfile ==&lt;br /&gt;
&lt;br /&gt;
=== partage de dossiers avec le conteneur : &amp;quot;bind mounts&amp;quot; ===&lt;br /&gt;
Pas de déclaration dans le Dockerfile (c'est pour les volumes anonymes)&lt;br /&gt;
&lt;br /&gt;
A l'execution d'un conteneur:&lt;br /&gt;
  $ docker run -v $(pwd)/logs:/app/logs $(pwd)/ro_data:/app/ro_data:ro  myimg&lt;br /&gt;
  ou équivalent avec la commande mount &lt;br /&gt;
  $ docker run --mount type=bind,source=$(pwd)/logs,target=/app/logs \&lt;br /&gt;
      --mount type=bind,source=$(pwd)/ro_data,target=/app/ro_data,readonly &lt;br /&gt;
L'image voit le contenu du répertoire logs, et les logs écrits dedans donc persistants.&lt;br /&gt;
L'image voit le contenu du répertoire ro_data en lecture seule.&lt;br /&gt;
&lt;br /&gt;
voir https://docs.docker.com/storage/bind-mounts/ ,  https://docs.docker.com/storage/volumes/&lt;br /&gt;
&lt;br /&gt;
= Réseau =&lt;br /&gt;
== créer un réseau == &lt;br /&gt;
Par défaut, réseau créé en mode &amp;quot;bridge&amp;quot; (les conteneurs sont résolus par leur nom à l'intérieur d'un même réseau).&lt;br /&gt;
  $ docker network create [--driver bridge] mynet1&lt;br /&gt;
&lt;br /&gt;
Autres drivers:&lt;br /&gt;
* host: pour des conteneur &amp;quot;standalone&amp;quot; l'isolation avec le système hôte est supprimée, ils partagent le même réseau&lt;br /&gt;
* overlay: Connecter des conteneurs tournant sur plusieurs hôte. Mode &amp;quot;Swarm&amp;quot; seulement, presque obsolète. &lt;br /&gt;
* macvlan: force une adresse MAC au container. bridge sur un port physique. &lt;br /&gt;
* none: pas de réseau.&lt;br /&gt;
* autres 3PP à installer&lt;br /&gt;
&lt;br /&gt;
== associer des conteneurs à un réseau ==&lt;br /&gt;
Au lancement, simplement mentionner le réseau &lt;br /&gt;
  $ docker run -network my-network --name cont1 my-image&lt;br /&gt;
  $ docker run -network my-network --name cont2 my-other-image&lt;br /&gt;
Les 2 conteneurs cont1 et cont2 peuvent communiquer. &lt;br /&gt;
Comme ils sont associés au même réseau, les noms de conteneurs peuvent servir à la résolution d'adresse pour communiquer entre eux sans nécessité de publier les ports utilisés uniquement en interne dans ce réseau. Par exemple cont1 est une base de données sur le port 5432, cont2 est un backend utilisant ce service. L'adresse à utiliser dans cont2 sera donc 'cont1:5432'. &lt;br /&gt;
&lt;br /&gt;
Associer 2 réseau à un même conteneur:&lt;br /&gt;
* créer d'abord les 2 réseaux mynet1 et mynet2&lt;br /&gt;
  $ docker network create --driver=bridge network1 --subnet=172.19.0.0/24&lt;br /&gt;
  $ docker network create --driver=bridge network2 --subnet=172.19.1.0/24&lt;br /&gt;
* créer l'instance de conteneur et asssocier le 2eme réseau avant de la lancer:&lt;br /&gt;
  $ docker create --network=network1 --name container_name containerimage:latest&lt;br /&gt;
  $ docker network connect network2 container_name&lt;br /&gt;
  $ docker start container_name&lt;br /&gt;
&lt;br /&gt;
== associer des ports à un conteneur ==&lt;br /&gt;
Au lancement, simplement mentionner les associations&lt;br /&gt;
  $ docker run -p1234:3456 -p 5678:7890 my-cont1 my-image&lt;br /&gt;
&lt;br /&gt;
Le modification directe des ports dans /var/lib/docker/containers/&amp;lt;container-id&amp;gt;/hostconfig.json  et config.v2.json, même sur un conteneur stoppé est écrasé au start sous rhel8/docker-ce. &lt;br /&gt;
&lt;br /&gt;
Sur un conteneur existant, faire:&lt;br /&gt;
* arrêter le conteneur&lt;br /&gt;
  $ docker stop my-cntid&lt;br /&gt;
* docker commit my-cntid my-new-image-tag&lt;br /&gt;
* docker -p&amp;lt;xxx:yyy&amp;gt;...&lt;br /&gt;
&lt;br /&gt;
= docker-compose =&lt;br /&gt;
== commandes ==&lt;br /&gt;
* '''docker-compose up -d''' vous permettra de démarrer l'ensemble des conteneurs en arrière-plan ;&lt;br /&gt;
* '''docker-compose ps''' vous permettra de voir le status de l'ensemble de votre stack ;&lt;br /&gt;
* '''docker-compose logs -f --tail 5''' vous permettra d'afficher les logs de votre stack ;&lt;br /&gt;
* '''docker-compose stop''' vous permettra d'arrêter l'ensemble des services d'une stack ;&lt;br /&gt;
* '''docker-compose down'''  vous permettra de détruire l'ensemble des ressources d'une stack ;&lt;br /&gt;
* '''docker-compose config''' vous permettra de valider la syntaxe de votre fichier docker-compose.yml.&lt;br /&gt;
&lt;br /&gt;
= Astuces divers points =&lt;br /&gt;
== communication image docker vers un service sur la machine hôte ==&lt;br /&gt;
Pour un serveur sur la machine hôte (pas un autre conteneur), au lieu de localhost, utiliser le pseudo-domaine 'host.docker.internal'.&lt;br /&gt;
&lt;br /&gt;
== associer des ports à un conteneur ==&lt;br /&gt;
Au lancement, simplement mentionner les associations&lt;br /&gt;
  $ docker run -p1234:3456 -p 5678:7890 my-cont1 my-image&lt;br /&gt;
&lt;br /&gt;
Le modification directe des ports dans /var/lib/docker/containers/&amp;lt;container-id&amp;gt;/hostconfig.json  et config.v2.json, même sur un conteneur stoppé est écrasé au start sous rhel8/docker-ce. &lt;br /&gt;
&lt;br /&gt;
Sur un conteneur existant, faire:&lt;br /&gt;
* arrêter le conteneur&lt;br /&gt;
  $ docker stop my-cntid&lt;br /&gt;
* docker commit my-cntid my-new-image-tag&lt;br /&gt;
* docker -p&amp;lt;xxx:yyy&amp;gt;... &lt;br /&gt;
&lt;br /&gt;
== commandes docker sans sudo ==&lt;br /&gt;
Message d'erreur:&lt;br /&gt;
  Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get     &lt;br /&gt;
  http://%2Fvar%2Frun%2Fdocker.sock/v1.40/images/json: dial unix /var/run/docker.sock: connect: permission denied&lt;br /&gt;
  &lt;br /&gt;
  $ ls -l /var/run/docker.sock&lt;br /&gt;
  srw-rw----. 1 root docker 0 Nov 17 14:29 /var/run/docker.sock&lt;br /&gt;
&lt;br /&gt;
Ajouter le groupe docker a l'utilisateur&lt;br /&gt;
  $ sudo usermod -a -G docker myusername&lt;br /&gt;
&lt;br /&gt;
== Trouver les images dépendant d'une image ==&lt;br /&gt;
&lt;br /&gt;
Cas d'usage: supprimer une image retourne l'erreur &amp;quot;image has dependent child images&amp;quot;&lt;br /&gt;
  $ docker image rm 7f6c67ae7dae &lt;br /&gt;
  Error response from daemon: conflict: unable to delete 7f6c67ae7dae (cannot be forced) - image has dependent child images&lt;br /&gt;
&lt;br /&gt;
définir la fonction (ex dans bashrc)&lt;br /&gt;
  docker_image_desc() {&lt;br /&gt;
    for image in $(docker images --quiet --filter &amp;quot;since=${1}&amp;quot;); do&lt;br /&gt;
      if [ $(docker history --quiet ${image} | grep ${1}) ]; then&lt;br /&gt;
        docker_image_desc &amp;quot;${image}&amp;quot;&lt;br /&gt;
      fi&lt;br /&gt;
    done&lt;br /&gt;
    echo &amp;quot;${1}&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
et:&lt;br /&gt;
  $ docker_image_desc 7f6c67ae7dae &lt;br /&gt;
  76b749bf3727&lt;br /&gt;
  7f6c67ae7dae&lt;br /&gt;
&lt;br /&gt;
[[Category:Containers]]&lt;br /&gt;
[[Category:Docker]]&lt;br /&gt;
[[Category:Tips&amp;amp;Tricks]]&lt;/div&gt;</summary>
		<author><name>Toine</name></author>	</entry>

	<entry>
		<id>https://wiki.tonioc.ovh/index.php?title=Docker&amp;diff=408</id>
		<title>Docker</title>
		<link rel="alternate" type="text/html" href="https://wiki.tonioc.ovh/index.php?title=Docker&amp;diff=408"/>
				<updated>2020-11-29T17:10:54Z</updated>
		
		<summary type="html">&lt;p&gt;Toine : /* créer un réseau */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= commandes docker-ce =&lt;br /&gt;
== instances ==&lt;br /&gt;
* démarrer :&lt;br /&gt;
  $ docker run [-ai] [--name myOwnName] &amp;lt;image&amp;gt;&lt;br /&gt;
  $ docker start [-ai] &amp;lt;instance&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* demarrer en interactif avec un shell (ne lance pas l'éventuelle commande CMD). en supprimant l'instance à sa sortie.&lt;br /&gt;
  $ docker run --rm -it &amp;lt;image&amp;gt; sh&lt;br /&gt;
&lt;br /&gt;
* attacher avec un shell a une image active&lt;br /&gt;
  $ docker exec -it &amp;lt;image&amp;gt; sh&lt;br /&gt;
&lt;br /&gt;
* arrêter: &lt;br /&gt;
  $ docker stop &amp;lt;image&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== images ==&lt;br /&gt;
* push/pull :&lt;br /&gt;
  $ docker image ls&lt;br /&gt;
  $ docker images&lt;br /&gt;
* push/pull :&lt;br /&gt;
  $ docker pull &amp;lt;image&amp;gt;&lt;br /&gt;
* renommer une image&lt;br /&gt;
  $ docker image ls&lt;br /&gt;
  REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE&lt;br /&gt;
  c7_dev              latest              744765ef7a95        4 days ago          333MB&lt;br /&gt;
  $ docker tag c7_dev:latest c7tools:1.0&lt;br /&gt;
  $ docker image ls &lt;br /&gt;
  REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE&lt;br /&gt;
  c7tools             1.0                 744765ef7a95        4 days ago          333MB&lt;br /&gt;
  c7_dev              latest              744765ef7a95        4 days ago          333MB&lt;br /&gt;
* suppression/pull :&lt;br /&gt;
  $ docker image rm &amp;lt;image&amp;gt;...&lt;br /&gt;
  $ docker rmi &amp;lt;image&amp;gt;...&lt;br /&gt;
* supprimer les images inutilisées :&lt;br /&gt;
  $ docker image prune&lt;br /&gt;
* inspecter les images :&lt;br /&gt;
  $ docker inspect &amp;lt;image&amp;gt;&lt;br /&gt;
* sauver/charge les images hors registry:&lt;br /&gt;
  $ docker save -o output-file.tar &amp;lt;image:tag&amp;gt;&lt;br /&gt;
  $ docker load -q -i input-file.tar&lt;br /&gt;
&lt;br /&gt;
== nettoyage ==&lt;br /&gt;
&lt;br /&gt;
* supprimer les ressources inutiles (images et instances stoppées):&lt;br /&gt;
  $ docker system prune&lt;br /&gt;
&lt;br /&gt;
= Fabriquer des images =&lt;br /&gt;
Voir d'abord https://docs.docker.com/develop/ &lt;br /&gt;
== commandes image build ==&lt;br /&gt;
Depuis le répertoire contenant le Dockerfile&lt;br /&gt;
  $ docker build [-t &amp;lt;name&amp;gt;[:&amp;lt;vers&amp;gt;]] .&lt;br /&gt;
&lt;br /&gt;
== stockage docker == &lt;br /&gt;
Voir&lt;br /&gt;
  $ docker image inspect &amp;lt;image&amp;gt;&lt;br /&gt;
  $ docker volume inspect &amp;lt;volume&amp;gt;&lt;br /&gt;
  $ docker inspect &amp;lt;instance&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  $ sudo ls /var/lib/docker &lt;br /&gt;
  builder  buildkit  containers  image  network  overlay2  plugins  runtimes  swarm  tmp  trust  volumes&lt;br /&gt;
  $ sudo ls /var/lib/docker/overlay2&lt;br /&gt;
&lt;br /&gt;
Nettoyage des volumes &lt;br /&gt;
  # un volume précis: &lt;br /&gt;
  $ docker volume rm &amp;lt;volid&amp;gt;&lt;br /&gt;
  # tous les volumes non utilisés (volumes anonymes d'instances arrêtées par ex)&lt;br /&gt;
  $ docker volume&lt;br /&gt;
&lt;br /&gt;
== Dockerfile ==&lt;br /&gt;
&lt;br /&gt;
=== partage de dossiers avec le conteneur : &amp;quot;bind mounts&amp;quot; ===&lt;br /&gt;
Pas de déclaration dans le Dockerfile (c'est pour les volumes anonymes)&lt;br /&gt;
&lt;br /&gt;
A l'execution d'un conteneur:&lt;br /&gt;
  $ docker run -v $(pwd)/logs:/app/logs $(pwd)/ro_data:/app/ro_data:ro  myimg&lt;br /&gt;
  ou équivalent avec la commande mount &lt;br /&gt;
  $ docker run --mount type=bind,source=$(pwd)/logs,target=/app/logs \&lt;br /&gt;
      --mount type=bind,source=$(pwd)/ro_data,target=/app/ro_data,readonly &lt;br /&gt;
L'image voit le contenu du répertoire logs, et les logs écrits dedans donc persistants.&lt;br /&gt;
L'image voit le contenu du répertoire ro_data en lecture seule.&lt;br /&gt;
&lt;br /&gt;
voir https://docs.docker.com/storage/bind-mounts/ ,  https://docs.docker.com/storage/volumes/&lt;br /&gt;
&lt;br /&gt;
= Réseau =&lt;br /&gt;
== créer un réseau == &lt;br /&gt;
Par défaut, réseau créé en mode &amp;quot;bridge&amp;quot; (les conteneurs sont résolus par leur nom à l'intérieur d'un même réseau).&lt;br /&gt;
  $ docker network create [--driver bridge] mynet1&lt;br /&gt;
&lt;br /&gt;
Autres drivers:&lt;br /&gt;
* host: pour des conteneur &amp;quot;standalone&amp;quot; l'isolation avec le système hôte est supprimée, ils partagent le même réseau&lt;br /&gt;
* overlay: Connecter des conteneurs tournant sur plusieurs hôte. Mode &amp;quot;Swarm&amp;quot; seulement, presque obsolète. &lt;br /&gt;
* macvlan: force une adresse MAC au container. bridge sur un port physique. &lt;br /&gt;
* none: pas de réseau.&lt;br /&gt;
* autres 3PP à installer&lt;br /&gt;
&lt;br /&gt;
== associer des conteneurs à un réseau ==&lt;br /&gt;
Au lancement, simplement mentionner le réseau &lt;br /&gt;
  $ docker run -network my-network --name cont1 my-image&lt;br /&gt;
  $ docker run -network my-network --name cont2 my-other-image&lt;br /&gt;
Les 2 conteneurs cont1 et cont2 peuvent communiquer. &lt;br /&gt;
&lt;br /&gt;
Associer 2 réseau à un même conteneur:&lt;br /&gt;
* créer d'abord les 2 réseaux mynet1 et mynet2&lt;br /&gt;
  $ docker network create --driver=bridge network1 --subnet=172.19.0.0/24&lt;br /&gt;
  $ docker network create --driver=bridge network2 --subnet=172.19.1.0/24&lt;br /&gt;
* créer l'instance de conteneur et asssocier le 2eme réseau avant de la lancer:&lt;br /&gt;
  $ docker create --network=network1 --name container_name containerimage:latest&lt;br /&gt;
  $ docker network connect network2 container_name&lt;br /&gt;
  $ docker start container_name&lt;br /&gt;
&lt;br /&gt;
== associer des ports à un conteneur ==&lt;br /&gt;
Au lancement, simplement mentionner les associations&lt;br /&gt;
  $ docker run -p1234:3456 -p 5678:7890 my-cont1 my-image&lt;br /&gt;
&lt;br /&gt;
Le modification directe des ports dans /var/lib/docker/containers/&amp;lt;container-id&amp;gt;/hostconfig.json  et config.v2.json, même sur un conteneur stoppé est écrasé au start sous rhel8/docker-ce. &lt;br /&gt;
&lt;br /&gt;
Sur un conteneur existant, faire:&lt;br /&gt;
* arrêter le conteneur&lt;br /&gt;
  $ docker stop my-cntid&lt;br /&gt;
* docker commit my-cntid my-new-image-tag&lt;br /&gt;
* docker -p&amp;lt;xxx:yyy&amp;gt;...&lt;br /&gt;
&lt;br /&gt;
= docker-compose =&lt;br /&gt;
== commandes ==&lt;br /&gt;
* '''docker-compose up -d''' vous permettra de démarrer l'ensemble des conteneurs en arrière-plan ;&lt;br /&gt;
* '''docker-compose ps''' vous permettra de voir le status de l'ensemble de votre stack ;&lt;br /&gt;
* '''docker-compose logs -f --tail 5''' vous permettra d'afficher les logs de votre stack ;&lt;br /&gt;
* '''docker-compose stop''' vous permettra d'arrêter l'ensemble des services d'une stack ;&lt;br /&gt;
* '''docker-compose down'''  vous permettra de détruire l'ensemble des ressources d'une stack ;&lt;br /&gt;
* '''docker-compose config''' vous permettra de valider la syntaxe de votre fichier docker-compose.yml.&lt;br /&gt;
&lt;br /&gt;
= Astuces divers points =&lt;br /&gt;
== communication image docker vers un service sur la machine hôte ==&lt;br /&gt;
Pour un serveur sur la machine hôte (pas un autre conteneur), au lieu de localhost, utiliser le pseudo-domaine 'host.docker.internal'.&lt;br /&gt;
&lt;br /&gt;
== associer des ports à un conteneur ==&lt;br /&gt;
Au lancement, simplement mentionner les associations&lt;br /&gt;
  $ docker run -p1234:3456 -p 5678:7890 my-cont1 my-image&lt;br /&gt;
&lt;br /&gt;
Le modification directe des ports dans /var/lib/docker/containers/&amp;lt;container-id&amp;gt;/hostconfig.json  et config.v2.json, même sur un conteneur stoppé est écrasé au start sous rhel8/docker-ce. &lt;br /&gt;
&lt;br /&gt;
Sur un conteneur existant, faire:&lt;br /&gt;
* arrêter le conteneur&lt;br /&gt;
  $ docker stop my-cntid&lt;br /&gt;
* docker commit my-cntid my-new-image-tag&lt;br /&gt;
* docker -p&amp;lt;xxx:yyy&amp;gt;... &lt;br /&gt;
&lt;br /&gt;
== commandes docker sans sudo ==&lt;br /&gt;
Message d'erreur:&lt;br /&gt;
  Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get     &lt;br /&gt;
  http://%2Fvar%2Frun%2Fdocker.sock/v1.40/images/json: dial unix /var/run/docker.sock: connect: permission denied&lt;br /&gt;
  &lt;br /&gt;
  $ ls -l /var/run/docker.sock&lt;br /&gt;
  srw-rw----. 1 root docker 0 Nov 17 14:29 /var/run/docker.sock&lt;br /&gt;
&lt;br /&gt;
Ajouter le groupe docker a l'utilisateur&lt;br /&gt;
  $ sudo usermod -a -G docker myusername&lt;br /&gt;
&lt;br /&gt;
== Trouver les images dépendant d'une image ==&lt;br /&gt;
&lt;br /&gt;
Cas d'usage: supprimer une image retourne l'erreur &amp;quot;image has dependent child images&amp;quot;&lt;br /&gt;
  $ docker image rm 7f6c67ae7dae &lt;br /&gt;
  Error response from daemon: conflict: unable to delete 7f6c67ae7dae (cannot be forced) - image has dependent child images&lt;br /&gt;
&lt;br /&gt;
définir la fonction (ex dans bashrc)&lt;br /&gt;
  docker_image_desc() {&lt;br /&gt;
    for image in $(docker images --quiet --filter &amp;quot;since=${1}&amp;quot;); do&lt;br /&gt;
      if [ $(docker history --quiet ${image} | grep ${1}) ]; then&lt;br /&gt;
        docker_image_desc &amp;quot;${image}&amp;quot;&lt;br /&gt;
      fi&lt;br /&gt;
    done&lt;br /&gt;
    echo &amp;quot;${1}&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
et:&lt;br /&gt;
  $ docker_image_desc 7f6c67ae7dae &lt;br /&gt;
  76b749bf3727&lt;br /&gt;
  7f6c67ae7dae&lt;br /&gt;
&lt;br /&gt;
[[Category:Containers]]&lt;br /&gt;
[[Category:Docker]]&lt;br /&gt;
[[Category:Tips&amp;amp;Tricks]]&lt;/div&gt;</summary>
		<author><name>Toine</name></author>	</entry>

	<entry>
		<id>https://wiki.tonioc.ovh/index.php?title=Docker&amp;diff=407</id>
		<title>Docker</title>
		<link rel="alternate" type="text/html" href="https://wiki.tonioc.ovh/index.php?title=Docker&amp;diff=407"/>
				<updated>2020-11-29T12:05:08Z</updated>
		
		<summary type="html">&lt;p&gt;Toine : /* Réseau */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= commandes docker-ce =&lt;br /&gt;
== instances ==&lt;br /&gt;
* démarrer :&lt;br /&gt;
  $ docker run [-ai] [--name myOwnName] &amp;lt;image&amp;gt;&lt;br /&gt;
  $ docker start [-ai] &amp;lt;instance&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* demarrer en interactif avec un shell (ne lance pas l'éventuelle commande CMD). en supprimant l'instance à sa sortie.&lt;br /&gt;
  $ docker run --rm -it &amp;lt;image&amp;gt; sh&lt;br /&gt;
&lt;br /&gt;
* attacher avec un shell a une image active&lt;br /&gt;
  $ docker exec -it &amp;lt;image&amp;gt; sh&lt;br /&gt;
&lt;br /&gt;
* arrêter: &lt;br /&gt;
  $ docker stop &amp;lt;image&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== images ==&lt;br /&gt;
* push/pull :&lt;br /&gt;
  $ docker image ls&lt;br /&gt;
  $ docker images&lt;br /&gt;
* push/pull :&lt;br /&gt;
  $ docker pull &amp;lt;image&amp;gt;&lt;br /&gt;
* renommer une image&lt;br /&gt;
  $ docker image ls&lt;br /&gt;
  REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE&lt;br /&gt;
  c7_dev              latest              744765ef7a95        4 days ago          333MB&lt;br /&gt;
  $ docker tag c7_dev:latest c7tools:1.0&lt;br /&gt;
  $ docker image ls &lt;br /&gt;
  REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE&lt;br /&gt;
  c7tools             1.0                 744765ef7a95        4 days ago          333MB&lt;br /&gt;
  c7_dev              latest              744765ef7a95        4 days ago          333MB&lt;br /&gt;
* suppression/pull :&lt;br /&gt;
  $ docker image rm &amp;lt;image&amp;gt;...&lt;br /&gt;
  $ docker rmi &amp;lt;image&amp;gt;...&lt;br /&gt;
* supprimer les images inutilisées :&lt;br /&gt;
  $ docker image prune&lt;br /&gt;
* inspecter les images :&lt;br /&gt;
  $ docker inspect &amp;lt;image&amp;gt;&lt;br /&gt;
* sauver/charge les images hors registry:&lt;br /&gt;
  $ docker save -o output-file.tar &amp;lt;image:tag&amp;gt;&lt;br /&gt;
  $ docker load -q -i input-file.tar&lt;br /&gt;
&lt;br /&gt;
== nettoyage ==&lt;br /&gt;
&lt;br /&gt;
* supprimer les ressources inutiles (images et instances stoppées):&lt;br /&gt;
  $ docker system prune&lt;br /&gt;
&lt;br /&gt;
= Fabriquer des images =&lt;br /&gt;
Voir d'abord https://docs.docker.com/develop/ &lt;br /&gt;
== commandes image build ==&lt;br /&gt;
Depuis le répertoire contenant le Dockerfile&lt;br /&gt;
  $ docker build [-t &amp;lt;name&amp;gt;[:&amp;lt;vers&amp;gt;]] .&lt;br /&gt;
&lt;br /&gt;
== stockage docker == &lt;br /&gt;
Voir&lt;br /&gt;
  $ docker image inspect &amp;lt;image&amp;gt;&lt;br /&gt;
  $ docker volume inspect &amp;lt;volume&amp;gt;&lt;br /&gt;
  $ docker inspect &amp;lt;instance&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  $ sudo ls /var/lib/docker &lt;br /&gt;
  builder  buildkit  containers  image  network  overlay2  plugins  runtimes  swarm  tmp  trust  volumes&lt;br /&gt;
  $ sudo ls /var/lib/docker/overlay2&lt;br /&gt;
&lt;br /&gt;
Nettoyage des volumes &lt;br /&gt;
  # un volume précis: &lt;br /&gt;
  $ docker volume rm &amp;lt;volid&amp;gt;&lt;br /&gt;
  # tous les volumes non utilisés (volumes anonymes d'instances arrêtées par ex)&lt;br /&gt;
  $ docker volume&lt;br /&gt;
&lt;br /&gt;
== Dockerfile ==&lt;br /&gt;
&lt;br /&gt;
=== partage de dossiers avec le conteneur : &amp;quot;bind mounts&amp;quot; ===&lt;br /&gt;
Pas de déclaration dans le Dockerfile (c'est pour les volumes anonymes)&lt;br /&gt;
&lt;br /&gt;
A l'execution d'un conteneur:&lt;br /&gt;
  $ docker run -v $(pwd)/logs:/app/logs $(pwd)/ro_data:/app/ro_data:ro  myimg&lt;br /&gt;
  ou équivalent avec la commande mount &lt;br /&gt;
  $ docker run --mount type=bind,source=$(pwd)/logs,target=/app/logs \&lt;br /&gt;
      --mount type=bind,source=$(pwd)/ro_data,target=/app/ro_data,readonly &lt;br /&gt;
L'image voit le contenu du répertoire logs, et les logs écrits dedans donc persistants.&lt;br /&gt;
L'image voit le contenu du répertoire ro_data en lecture seule.&lt;br /&gt;
&lt;br /&gt;
voir https://docs.docker.com/storage/bind-mounts/ ,  https://docs.docker.com/storage/volumes/&lt;br /&gt;
&lt;br /&gt;
= Réseau =&lt;br /&gt;
== créer un réseau == &lt;br /&gt;
Par défaut, réseau créé en mode &amp;quot;bridge&amp;quot; (les conteneurs sont résolus par leur nom à l'intérieur d'un même réseau).&lt;br /&gt;
  $ docker network create [--driver bridge] mynet1&lt;br /&gt;
&lt;br /&gt;
Autres drivers:&lt;br /&gt;
* host: pour des conteneur &amp;quot;standalone&amp;quot; l'isolation avec le système hôte est supprimée, ils partagent le même réseau&lt;br /&gt;
* overlay: Connecter des conteneurs tournant sur plusieurs hôte. Mode &amp;quot;Swarm&amp;quot; seulement, presque obsolète. &lt;br /&gt;
* macvlan: force une adresse MAC au container. &lt;br /&gt;
* none: pas de réseau.&lt;br /&gt;
* autres 3PP à installer&lt;br /&gt;
== associer des conteneurs à un réseau ==&lt;br /&gt;
Au lancement, simplement mentionner le réseau &lt;br /&gt;
  $ docker run -network my-network --name cont1 my-image&lt;br /&gt;
  $ docker run -network my-network --name cont2 my-other-image&lt;br /&gt;
Les 2 conteneurs cont1 et cont2 peuvent communiquer. &lt;br /&gt;
&lt;br /&gt;
Associer 2 réseau à un même conteneur:&lt;br /&gt;
* créer d'abord les 2 réseaux mynet1 et mynet2&lt;br /&gt;
  $ docker network create --driver=bridge network1 --subnet=172.19.0.0/24&lt;br /&gt;
  $ docker network create --driver=bridge network2 --subnet=172.19.1.0/24&lt;br /&gt;
* créer l'instance de conteneur et asssocier le 2eme réseau avant de la lancer:&lt;br /&gt;
  $ docker create --network=network1 --name container_name containerimage:latest&lt;br /&gt;
  $ docker network connect network2 container_name&lt;br /&gt;
  $ docker start container_name&lt;br /&gt;
&lt;br /&gt;
== associer des ports à un conteneur ==&lt;br /&gt;
Au lancement, simplement mentionner les associations&lt;br /&gt;
  $ docker run -p1234:3456 -p 5678:7890 my-cont1 my-image&lt;br /&gt;
&lt;br /&gt;
Le modification directe des ports dans /var/lib/docker/containers/&amp;lt;container-id&amp;gt;/hostconfig.json  et config.v2.json, même sur un conteneur stoppé est écrasé au start sous rhel8/docker-ce. &lt;br /&gt;
&lt;br /&gt;
Sur un conteneur existant, faire:&lt;br /&gt;
* arrêter le conteneur&lt;br /&gt;
  $ docker stop my-cntid&lt;br /&gt;
* docker commit my-cntid my-new-image-tag&lt;br /&gt;
* docker -p&amp;lt;xxx:yyy&amp;gt;...&lt;br /&gt;
&lt;br /&gt;
= docker-compose =&lt;br /&gt;
== commandes ==&lt;br /&gt;
* '''docker-compose up -d''' vous permettra de démarrer l'ensemble des conteneurs en arrière-plan ;&lt;br /&gt;
* '''docker-compose ps''' vous permettra de voir le status de l'ensemble de votre stack ;&lt;br /&gt;
* '''docker-compose logs -f --tail 5''' vous permettra d'afficher les logs de votre stack ;&lt;br /&gt;
* '''docker-compose stop''' vous permettra d'arrêter l'ensemble des services d'une stack ;&lt;br /&gt;
* '''docker-compose down'''  vous permettra de détruire l'ensemble des ressources d'une stack ;&lt;br /&gt;
* '''docker-compose config''' vous permettra de valider la syntaxe de votre fichier docker-compose.yml.&lt;br /&gt;
&lt;br /&gt;
= Astuces divers points =&lt;br /&gt;
== communication image docker vers un service sur la machine hôte ==&lt;br /&gt;
Pour un serveur sur la machine hôte (pas un autre conteneur), au lieu de localhost, utiliser le pseudo-domaine 'host.docker.internal'.&lt;br /&gt;
&lt;br /&gt;
== associer des ports à un conteneur ==&lt;br /&gt;
Au lancement, simplement mentionner les associations&lt;br /&gt;
  $ docker run -p1234:3456 -p 5678:7890 my-cont1 my-image&lt;br /&gt;
&lt;br /&gt;
Le modification directe des ports dans /var/lib/docker/containers/&amp;lt;container-id&amp;gt;/hostconfig.json  et config.v2.json, même sur un conteneur stoppé est écrasé au start sous rhel8/docker-ce. &lt;br /&gt;
&lt;br /&gt;
Sur un conteneur existant, faire:&lt;br /&gt;
* arrêter le conteneur&lt;br /&gt;
  $ docker stop my-cntid&lt;br /&gt;
* docker commit my-cntid my-new-image-tag&lt;br /&gt;
* docker -p&amp;lt;xxx:yyy&amp;gt;... &lt;br /&gt;
&lt;br /&gt;
== commandes docker sans sudo ==&lt;br /&gt;
Message d'erreur:&lt;br /&gt;
  Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get     &lt;br /&gt;
  http://%2Fvar%2Frun%2Fdocker.sock/v1.40/images/json: dial unix /var/run/docker.sock: connect: permission denied&lt;br /&gt;
  &lt;br /&gt;
  $ ls -l /var/run/docker.sock&lt;br /&gt;
  srw-rw----. 1 root docker 0 Nov 17 14:29 /var/run/docker.sock&lt;br /&gt;
&lt;br /&gt;
Ajouter le groupe docker a l'utilisateur&lt;br /&gt;
  $ sudo usermod -a -G docker myusername&lt;br /&gt;
&lt;br /&gt;
== Trouver les images dépendant d'une image ==&lt;br /&gt;
&lt;br /&gt;
Cas d'usage: supprimer une image retourne l'erreur &amp;quot;image has dependent child images&amp;quot;&lt;br /&gt;
  $ docker image rm 7f6c67ae7dae &lt;br /&gt;
  Error response from daemon: conflict: unable to delete 7f6c67ae7dae (cannot be forced) - image has dependent child images&lt;br /&gt;
&lt;br /&gt;
définir la fonction (ex dans bashrc)&lt;br /&gt;
  docker_image_desc() {&lt;br /&gt;
    for image in $(docker images --quiet --filter &amp;quot;since=${1}&amp;quot;); do&lt;br /&gt;
      if [ $(docker history --quiet ${image} | grep ${1}) ]; then&lt;br /&gt;
        docker_image_desc &amp;quot;${image}&amp;quot;&lt;br /&gt;
      fi&lt;br /&gt;
    done&lt;br /&gt;
    echo &amp;quot;${1}&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
et:&lt;br /&gt;
  $ docker_image_desc 7f6c67ae7dae &lt;br /&gt;
  76b749bf3727&lt;br /&gt;
  7f6c67ae7dae&lt;br /&gt;
&lt;br /&gt;
[[Category:Containers]]&lt;br /&gt;
[[Category:Docker]]&lt;br /&gt;
[[Category:Tips&amp;amp;Tricks]]&lt;/div&gt;</summary>
		<author><name>Toine</name></author>	</entry>

	<entry>
		<id>https://wiki.tonioc.ovh/index.php?title=Docker&amp;diff=406</id>
		<title>Docker</title>
		<link rel="alternate" type="text/html" href="https://wiki.tonioc.ovh/index.php?title=Docker&amp;diff=406"/>
				<updated>2020-11-29T12:04:00Z</updated>
		
		<summary type="html">&lt;p&gt;Toine : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= commandes docker-ce =&lt;br /&gt;
== instances ==&lt;br /&gt;
* démarrer :&lt;br /&gt;
  $ docker run [-ai] [--name myOwnName] &amp;lt;image&amp;gt;&lt;br /&gt;
  $ docker start [-ai] &amp;lt;instance&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* demarrer en interactif avec un shell (ne lance pas l'éventuelle commande CMD). en supprimant l'instance à sa sortie.&lt;br /&gt;
  $ docker run --rm -it &amp;lt;image&amp;gt; sh&lt;br /&gt;
&lt;br /&gt;
* attacher avec un shell a une image active&lt;br /&gt;
  $ docker exec -it &amp;lt;image&amp;gt; sh&lt;br /&gt;
&lt;br /&gt;
* arrêter: &lt;br /&gt;
  $ docker stop &amp;lt;image&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== images ==&lt;br /&gt;
* push/pull :&lt;br /&gt;
  $ docker image ls&lt;br /&gt;
  $ docker images&lt;br /&gt;
* push/pull :&lt;br /&gt;
  $ docker pull &amp;lt;image&amp;gt;&lt;br /&gt;
* renommer une image&lt;br /&gt;
  $ docker image ls&lt;br /&gt;
  REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE&lt;br /&gt;
  c7_dev              latest              744765ef7a95        4 days ago          333MB&lt;br /&gt;
  $ docker tag c7_dev:latest c7tools:1.0&lt;br /&gt;
  $ docker image ls &lt;br /&gt;
  REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE&lt;br /&gt;
  c7tools             1.0                 744765ef7a95        4 days ago          333MB&lt;br /&gt;
  c7_dev              latest              744765ef7a95        4 days ago          333MB&lt;br /&gt;
* suppression/pull :&lt;br /&gt;
  $ docker image rm &amp;lt;image&amp;gt;...&lt;br /&gt;
  $ docker rmi &amp;lt;image&amp;gt;...&lt;br /&gt;
* supprimer les images inutilisées :&lt;br /&gt;
  $ docker image prune&lt;br /&gt;
* inspecter les images :&lt;br /&gt;
  $ docker inspect &amp;lt;image&amp;gt;&lt;br /&gt;
* sauver/charge les images hors registry:&lt;br /&gt;
  $ docker save -o output-file.tar &amp;lt;image:tag&amp;gt;&lt;br /&gt;
  $ docker load -q -i input-file.tar&lt;br /&gt;
&lt;br /&gt;
== nettoyage ==&lt;br /&gt;
&lt;br /&gt;
* supprimer les ressources inutiles (images et instances stoppées):&lt;br /&gt;
  $ docker system prune&lt;br /&gt;
&lt;br /&gt;
= Fabriquer des images =&lt;br /&gt;
Voir d'abord https://docs.docker.com/develop/ &lt;br /&gt;
== commandes image build ==&lt;br /&gt;
Depuis le répertoire contenant le Dockerfile&lt;br /&gt;
  $ docker build [-t &amp;lt;name&amp;gt;[:&amp;lt;vers&amp;gt;]] .&lt;br /&gt;
&lt;br /&gt;
== stockage docker == &lt;br /&gt;
Voir&lt;br /&gt;
  $ docker image inspect &amp;lt;image&amp;gt;&lt;br /&gt;
  $ docker volume inspect &amp;lt;volume&amp;gt;&lt;br /&gt;
  $ docker inspect &amp;lt;instance&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  $ sudo ls /var/lib/docker &lt;br /&gt;
  builder  buildkit  containers  image  network  overlay2  plugins  runtimes  swarm  tmp  trust  volumes&lt;br /&gt;
  $ sudo ls /var/lib/docker/overlay2&lt;br /&gt;
&lt;br /&gt;
Nettoyage des volumes &lt;br /&gt;
  # un volume précis: &lt;br /&gt;
  $ docker volume rm &amp;lt;volid&amp;gt;&lt;br /&gt;
  # tous les volumes non utilisés (volumes anonymes d'instances arrêtées par ex)&lt;br /&gt;
  $ docker volume&lt;br /&gt;
&lt;br /&gt;
== Dockerfile ==&lt;br /&gt;
&lt;br /&gt;
=== partage de dossiers avec le conteneur : &amp;quot;bind mounts&amp;quot; ===&lt;br /&gt;
Pas de déclaration dans le Dockerfile (c'est pour les volumes anonymes)&lt;br /&gt;
&lt;br /&gt;
A l'execution d'un conteneur:&lt;br /&gt;
  $ docker run -v $(pwd)/logs:/app/logs $(pwd)/ro_data:/app/ro_data:ro  myimg&lt;br /&gt;
  ou équivalent avec la commande mount &lt;br /&gt;
  $ docker run --mount type=bind,source=$(pwd)/logs,target=/app/logs \&lt;br /&gt;
      --mount type=bind,source=$(pwd)/ro_data,target=/app/ro_data,readonly &lt;br /&gt;
L'image voit le contenu du répertoire logs, et les logs écrits dedans donc persistants.&lt;br /&gt;
L'image voit le contenu du répertoire ro_data en lecture seule.&lt;br /&gt;
&lt;br /&gt;
voir https://docs.docker.com/storage/bind-mounts/ ,  https://docs.docker.com/storage/volumes/&lt;br /&gt;
&lt;br /&gt;
= Réseau =&lt;br /&gt;
== créer un réseau == &lt;br /&gt;
Par défaut, réseau créé en mode &amp;quot;bridge&amp;quot; (les conteneurs sont résolus par leur nom à l'intérieur d'un même réseau).&lt;br /&gt;
  $ docker network create [--driver bridge] mynet1&lt;br /&gt;
&lt;br /&gt;
Autres drivers:&lt;br /&gt;
* host: pour des conteneur &amp;quot;standalone&amp;quot; l'isolation avec le système hôte est supprimée, ils partagent le même réseau&lt;br /&gt;
* overlay: Connecter des conteneurs tournant sur plusieurs hôte. Mode &amp;quot;Swarm&amp;quot; seulement, presque obsolète. &lt;br /&gt;
* macvlan: force une adresse MAC au container. &lt;br /&gt;
* none: pas de réseau.&lt;br /&gt;
* autres 3PP à installer&lt;br /&gt;
== associer des conteneurs à un réseau ==&lt;br /&gt;
Au lancement, simplement mentionner le réseau &lt;br /&gt;
  $ docker run -network my-network --name cont1 my-image&lt;br /&gt;
  $ docker run -network my-network --name cont2 my-other-image&lt;br /&gt;
Les 2 conteneurs cont1 et cont2 peuvent communiquer. &lt;br /&gt;
&lt;br /&gt;
Associer 2 réseau à un même conteneur:&lt;br /&gt;
* créer d'abord les 2 réseaux mynet1 et mynet2&lt;br /&gt;
  $ docker network create --driver=bridge network1 --subnet=172.19.0.0/24&lt;br /&gt;
  $ docker network create --driver=bridge network2 --subnet=172.19.1.0/24&lt;br /&gt;
* créer l'instance de conteneur et asssocier le 2eme réseau avant de la lancer:&lt;br /&gt;
  $ docker create --network=network1 --name container_name containerimage:latest&lt;br /&gt;
  $ docker network connect network2 container_name&lt;br /&gt;
  $ docker start container_name&lt;br /&gt;
&lt;br /&gt;
= docker-compose =&lt;br /&gt;
== commandes ==&lt;br /&gt;
* '''docker-compose up -d''' vous permettra de démarrer l'ensemble des conteneurs en arrière-plan ;&lt;br /&gt;
* '''docker-compose ps''' vous permettra de voir le status de l'ensemble de votre stack ;&lt;br /&gt;
* '''docker-compose logs -f --tail 5''' vous permettra d'afficher les logs de votre stack ;&lt;br /&gt;
* '''docker-compose stop''' vous permettra d'arrêter l'ensemble des services d'une stack ;&lt;br /&gt;
* '''docker-compose down'''  vous permettra de détruire l'ensemble des ressources d'une stack ;&lt;br /&gt;
* '''docker-compose config''' vous permettra de valider la syntaxe de votre fichier docker-compose.yml.&lt;br /&gt;
&lt;br /&gt;
= Astuces divers points =&lt;br /&gt;
== communication image docker vers un service sur la machine hôte ==&lt;br /&gt;
Pour un serveur sur la machine hôte (pas un autre conteneur), au lieu de localhost, utiliser le pseudo-domaine 'host.docker.internal'.&lt;br /&gt;
&lt;br /&gt;
== associer des ports à un conteneur ==&lt;br /&gt;
Au lancement, simplement mentionner les associations&lt;br /&gt;
  $ docker run -p1234:3456 -p 5678:7890 my-cont1 my-image&lt;br /&gt;
&lt;br /&gt;
Le modification directe des ports dans /var/lib/docker/containers/&amp;lt;container-id&amp;gt;/hostconfig.json  et config.v2.json, même sur un conteneur stoppé est écrasé au start sous rhel8/docker-ce. &lt;br /&gt;
&lt;br /&gt;
Sur un conteneur existant, faire:&lt;br /&gt;
* arrêter le conteneur&lt;br /&gt;
  $ docker stop my-cntid&lt;br /&gt;
* docker commit my-cntid my-new-image-tag&lt;br /&gt;
* docker -p&amp;lt;xxx:yyy&amp;gt;... &lt;br /&gt;
&lt;br /&gt;
== commandes docker sans sudo ==&lt;br /&gt;
Message d'erreur:&lt;br /&gt;
  Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get     &lt;br /&gt;
  http://%2Fvar%2Frun%2Fdocker.sock/v1.40/images/json: dial unix /var/run/docker.sock: connect: permission denied&lt;br /&gt;
  &lt;br /&gt;
  $ ls -l /var/run/docker.sock&lt;br /&gt;
  srw-rw----. 1 root docker 0 Nov 17 14:29 /var/run/docker.sock&lt;br /&gt;
&lt;br /&gt;
Ajouter le groupe docker a l'utilisateur&lt;br /&gt;
  $ sudo usermod -a -G docker myusername&lt;br /&gt;
&lt;br /&gt;
== Trouver les images dépendant d'une image ==&lt;br /&gt;
&lt;br /&gt;
Cas d'usage: supprimer une image retourne l'erreur &amp;quot;image has dependent child images&amp;quot;&lt;br /&gt;
  $ docker image rm 7f6c67ae7dae &lt;br /&gt;
  Error response from daemon: conflict: unable to delete 7f6c67ae7dae (cannot be forced) - image has dependent child images&lt;br /&gt;
&lt;br /&gt;
définir la fonction (ex dans bashrc)&lt;br /&gt;
  docker_image_desc() {&lt;br /&gt;
    for image in $(docker images --quiet --filter &amp;quot;since=${1}&amp;quot;); do&lt;br /&gt;
      if [ $(docker history --quiet ${image} | grep ${1}) ]; then&lt;br /&gt;
        docker_image_desc &amp;quot;${image}&amp;quot;&lt;br /&gt;
      fi&lt;br /&gt;
    done&lt;br /&gt;
    echo &amp;quot;${1}&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
et:&lt;br /&gt;
  $ docker_image_desc 7f6c67ae7dae &lt;br /&gt;
  76b749bf3727&lt;br /&gt;
  7f6c67ae7dae&lt;br /&gt;
&lt;br /&gt;
[[Category:Containers]]&lt;br /&gt;
[[Category:Docker]]&lt;br /&gt;
[[Category:Tips&amp;amp;Tricks]]&lt;/div&gt;</summary>
		<author><name>Toine</name></author>	</entry>

	<entry>
		<id>https://wiki.tonioc.ovh/index.php?title=Docker&amp;diff=405</id>
		<title>Docker</title>
		<link rel="alternate" type="text/html" href="https://wiki.tonioc.ovh/index.php?title=Docker&amp;diff=405"/>
				<updated>2020-11-21T17:26:45Z</updated>
		
		<summary type="html">&lt;p&gt;Toine : /* images */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= commandes docker-ce =&lt;br /&gt;
== instances ==&lt;br /&gt;
* démarrer :&lt;br /&gt;
  $ docker run [-ai] [--name myOwnName] &amp;lt;image&amp;gt;&lt;br /&gt;
  $ docker start [-ai] &amp;lt;instance&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* demarrer en interactif avec un shell (ne lance pas l'éventuelle commande CMD). en supprimant l'instance à sa sortie.&lt;br /&gt;
  $ docker run --rm -it &amp;lt;image&amp;gt; sh&lt;br /&gt;
&lt;br /&gt;
* attacher avec un shell a une image active&lt;br /&gt;
  $ docker exec -it &amp;lt;image&amp;gt; sh&lt;br /&gt;
&lt;br /&gt;
* arrêter: &lt;br /&gt;
  $ docker stop &amp;lt;image&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== images ==&lt;br /&gt;
* push/pull :&lt;br /&gt;
  $ docker image ls&lt;br /&gt;
  $ docker images&lt;br /&gt;
* push/pull :&lt;br /&gt;
  $ docker pull &amp;lt;image&amp;gt;&lt;br /&gt;
* renommer une image&lt;br /&gt;
  $ docker image ls&lt;br /&gt;
  REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE&lt;br /&gt;
  c7_dev              latest              744765ef7a95        4 days ago          333MB&lt;br /&gt;
  $ docker tag c7_dev:latest c7tools:1.0&lt;br /&gt;
  $ docker image ls &lt;br /&gt;
  REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE&lt;br /&gt;
  c7tools             1.0                 744765ef7a95        4 days ago          333MB&lt;br /&gt;
  c7_dev              latest              744765ef7a95        4 days ago          333MB&lt;br /&gt;
* suppression/pull :&lt;br /&gt;
  $ docker image rm &amp;lt;image&amp;gt;...&lt;br /&gt;
  $ docker rmi &amp;lt;image&amp;gt;...&lt;br /&gt;
* supprimer les images inutilisées :&lt;br /&gt;
  $ docker image prune&lt;br /&gt;
* inspecter les images :&lt;br /&gt;
  $ docker inspect &amp;lt;image&amp;gt;&lt;br /&gt;
* sauver/charge les images hors registry:&lt;br /&gt;
  $ docker save -o output-file.tar &amp;lt;image:tag&amp;gt;&lt;br /&gt;
  $ docker load -q -i input-file.tar&lt;br /&gt;
&lt;br /&gt;
== nettoyage ==&lt;br /&gt;
&lt;br /&gt;
* supprimer les ressources inutiles (images et instances stoppées):&lt;br /&gt;
  $ docker system prune&lt;br /&gt;
&lt;br /&gt;
= Fabriquer des images =&lt;br /&gt;
Voir d'abord https://docs.docker.com/develop/ &lt;br /&gt;
== commandes image build ==&lt;br /&gt;
Depuis le répertoire contenant le Dockerfile&lt;br /&gt;
  $ docker build [-t &amp;lt;name&amp;gt;[:&amp;lt;vers&amp;gt;]] .&lt;br /&gt;
&lt;br /&gt;
== stockage docker == &lt;br /&gt;
Voir&lt;br /&gt;
  $ docker image inspect &amp;lt;image&amp;gt;&lt;br /&gt;
  $ docker volume inspect &amp;lt;volume&amp;gt;&lt;br /&gt;
  $ docker inspect &amp;lt;instance&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  $ sudo ls /var/lib/docker &lt;br /&gt;
  builder  buildkit  containers  image  network  overlay2  plugins  runtimes  swarm  tmp  trust  volumes&lt;br /&gt;
  $ sudo ls /var/lib/docker/overlay2&lt;br /&gt;
&lt;br /&gt;
Nettoyage des volumes &lt;br /&gt;
  # un volume précis: &lt;br /&gt;
  $ docker volume rm &amp;lt;volid&amp;gt;&lt;br /&gt;
  # tous les volumes non utilisés (volumes anonymes d'instances arrêtées par ex)&lt;br /&gt;
  $ docker volume&lt;br /&gt;
&lt;br /&gt;
== Dockerfile ==&lt;br /&gt;
&lt;br /&gt;
=== partage de dossiers avec le conteneur : &amp;quot;bind mounts&amp;quot; ===&lt;br /&gt;
Pas de déclaration dans le Dockerfile (c'est pour les volumes anonymes)&lt;br /&gt;
&lt;br /&gt;
A l'execution d'un conteneur:&lt;br /&gt;
  $ docker run -v $(pwd)/logs:/app/logs $(pwd)/ro_data:/app/ro_data:ro  myimg&lt;br /&gt;
  ou équivalent avec la commande mount &lt;br /&gt;
  $ docker run --mount type=bind,source=$(pwd)/logs,target=/app/logs \&lt;br /&gt;
      --mount type=bind,source=$(pwd)/ro_data,target=/app/ro_data,readonly &lt;br /&gt;
L'image voit le contenu du répertoire logs, et les logs écrits dedans donc persistants.&lt;br /&gt;
L'image voit le contenu du répertoire ro_data en lecture seule.&lt;br /&gt;
&lt;br /&gt;
voir https://docs.docker.com/storage/bind-mounts/ ,  https://docs.docker.com/storage/volumes/&lt;br /&gt;
&lt;br /&gt;
= Réseau =&lt;br /&gt;
== créer un réseau == &lt;br /&gt;
Par défaut, réseau créé en mode &amp;quot;bridge&amp;quot; (les conteneurs sont résolus par leur nom à l'intérieur d'un même réseau).&lt;br /&gt;
  $ docker network create [--driver bridge] mynet1&lt;br /&gt;
&lt;br /&gt;
Autres drivers:&lt;br /&gt;
* host: pour des conteneur &amp;quot;standalone&amp;quot; l'isolation avec le système hôte est supprimée, ils partagent le même réseau&lt;br /&gt;
* overlay: Connecter des conteneurs tournant sur plusieurs hôte. Mode &amp;quot;Swarm&amp;quot; seulement, presque obsolète. &lt;br /&gt;
* macvlan: force une adresse MAC au container. &lt;br /&gt;
* none: pas de réseau.&lt;br /&gt;
* autres 3PP à installer&lt;br /&gt;
== associer des conteneurs à un réseau ==&lt;br /&gt;
Au lancement, siomplement mentionner le réseau &lt;br /&gt;
  $ docker run -network my-network --name cont1 my-image&lt;br /&gt;
  $ docker run -network my-network --name cont2 my-other-image&lt;br /&gt;
Les 2 conteneurs cont1 et cont2 peuvent communiquer. &lt;br /&gt;
&lt;br /&gt;
Associer 2 réseau à un même conteneur:&lt;br /&gt;
* créer d'abord les 2 réseaux mynet1 et mynet2&lt;br /&gt;
  $ docker network create --driver=bridge network1 --subnet=172.19.0.0/24&lt;br /&gt;
  $ docker network create --driver=bridge network2 --subnet=172.19.1.0/24&lt;br /&gt;
* créer l'instance de conteneur et asssocier le 2eme réseau avant de la lancer:&lt;br /&gt;
  $ docker create --network=network1 --name container_name containerimage:latest&lt;br /&gt;
  $ docker network connect network2 container_name&lt;br /&gt;
  $ docker start container_name&lt;br /&gt;
&lt;br /&gt;
= docker-compose =&lt;br /&gt;
== commandes ==&lt;br /&gt;
* '''docker-compose up -d''' vous permettra de démarrer l'ensemble des conteneurs en arrière-plan ;&lt;br /&gt;
* '''docker-compose ps''' vous permettra de voir le status de l'ensemble de votre stack ;&lt;br /&gt;
* '''docker-compose logs -f --tail 5''' vous permettra d'afficher les logs de votre stack ;&lt;br /&gt;
* '''docker-compose stop''' vous permettra d'arrêter l'ensemble des services d'une stack ;&lt;br /&gt;
* '''docker-compose down'''  vous permettra de détruire l'ensemble des ressources d'une stack ;&lt;br /&gt;
* '''docker-compose config''' vous permettra de valider la syntaxe de votre fichier docker-compose.yml.&lt;br /&gt;
&lt;br /&gt;
= Astuces divers points =&lt;br /&gt;
== communication image docker vers un service sur la machine hôte ==&lt;br /&gt;
Pour un serveur sur la machine hôte (pas un autre conteneur), au lieu de localhost, utiliser le pseudo-domaine 'host.docker.internal'.&lt;br /&gt;
&lt;br /&gt;
== commandes docker sans sudo ==&lt;br /&gt;
Message d'erreur:&lt;br /&gt;
  Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get     &lt;br /&gt;
  http://%2Fvar%2Frun%2Fdocker.sock/v1.40/images/json: dial unix /var/run/docker.sock: connect: permission denied&lt;br /&gt;
  &lt;br /&gt;
  $ ls -l /var/run/docker.sock&lt;br /&gt;
  srw-rw----. 1 root docker 0 Nov 17 14:29 /var/run/docker.sock&lt;br /&gt;
&lt;br /&gt;
Ajouter le groupe docker a l'utilisateur&lt;br /&gt;
  $ sudo usermod -a -G docker myusername&lt;br /&gt;
&lt;br /&gt;
== Trouver les images dépendant d'une image ==&lt;br /&gt;
&lt;br /&gt;
Cas d'usage: supprimer une image retourne l'erreur &amp;quot;image has dependent child images&amp;quot;&lt;br /&gt;
  $ docker image rm 7f6c67ae7dae &lt;br /&gt;
  Error response from daemon: conflict: unable to delete 7f6c67ae7dae (cannot be forced) - image has dependent child images&lt;br /&gt;
&lt;br /&gt;
définir la fonction (ex dans bashrc)&lt;br /&gt;
  docker_image_desc() {&lt;br /&gt;
    for image in $(docker images --quiet --filter &amp;quot;since=${1}&amp;quot;); do&lt;br /&gt;
      if [ $(docker history --quiet ${image} | grep ${1}) ]; then&lt;br /&gt;
        docker_image_desc &amp;quot;${image}&amp;quot;&lt;br /&gt;
      fi&lt;br /&gt;
    done&lt;br /&gt;
    echo &amp;quot;${1}&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
et:&lt;br /&gt;
  $ docker_image_desc 7f6c67ae7dae &lt;br /&gt;
  76b749bf3727&lt;br /&gt;
  7f6c67ae7dae&lt;br /&gt;
&lt;br /&gt;
[[Category:Containers]]&lt;br /&gt;
[[Category:Docker]]&lt;br /&gt;
[[Category:Tips&amp;amp;Tricks]]&lt;/div&gt;</summary>
		<author><name>Toine</name></author>	</entry>

	<entry>
		<id>https://wiki.tonioc.ovh/index.php?title=Docker&amp;diff=404</id>
		<title>Docker</title>
		<link rel="alternate" type="text/html" href="https://wiki.tonioc.ovh/index.php?title=Docker&amp;diff=404"/>
				<updated>2020-11-21T17:26:04Z</updated>
		
		<summary type="html">&lt;p&gt;Toine : /* images */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= commandes docker-ce =&lt;br /&gt;
== instances ==&lt;br /&gt;
* démarrer :&lt;br /&gt;
  $ docker run [-ai] [--name myOwnName] &amp;lt;image&amp;gt;&lt;br /&gt;
  $ docker start [-ai] &amp;lt;instance&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* demarrer en interactif avec un shell (ne lance pas l'éventuelle commande CMD). en supprimant l'instance à sa sortie.&lt;br /&gt;
  $ docker run --rm -it &amp;lt;image&amp;gt; sh&lt;br /&gt;
&lt;br /&gt;
* attacher avec un shell a une image active&lt;br /&gt;
  $ docker exec -it &amp;lt;image&amp;gt; sh&lt;br /&gt;
&lt;br /&gt;
* arrêter: &lt;br /&gt;
  $ docker stop &amp;lt;image&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== images ==&lt;br /&gt;
* push/pull :&lt;br /&gt;
  $ docker image ls&lt;br /&gt;
  $ docker images&lt;br /&gt;
* push/pull :&lt;br /&gt;
  $ docker pull &amp;lt;image&amp;gt;&lt;br /&gt;
* renommer une image&lt;br /&gt;
  $ docker image ls&lt;br /&gt;
  REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE&lt;br /&gt;
  c7_dev              latest              744765ef7a95        4 days ago          333MB&lt;br /&gt;
  $ docker tag c7_dev:latest c7tools:1.0&lt;br /&gt;
  $ docker image ls &lt;br /&gt;
  REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE&lt;br /&gt;
  c7tools             1.0                 744765ef7a95        4 days ago          333MB&lt;br /&gt;
  c7_dev              latest              744765ef7a95        4 days ago          333MB&lt;br /&gt;
* suppression/pull :&lt;br /&gt;
  $ docker image rm &amp;lt;image&amp;gt;...&lt;br /&gt;
  $ docker rmi &amp;lt;image&amp;gt;...&lt;br /&gt;
* supprimer les images inutilisées :&lt;br /&gt;
  $ docker image prune&lt;br /&gt;
* inspecter les images :&lt;br /&gt;
  $ docker inspect &amp;lt;image&amp;gt;&lt;br /&gt;
* sauver/charge les images hors registry:&lt;br /&gt;
  $ docker save -o output-file &amp;lt;image:tag&amp;gt;&lt;br /&gt;
  $ docker load -q -i input-file&lt;br /&gt;
&lt;br /&gt;
== nettoyage ==&lt;br /&gt;
&lt;br /&gt;
* supprimer les ressources inutiles (images et instances stoppées):&lt;br /&gt;
  $ docker system prune&lt;br /&gt;
&lt;br /&gt;
= Fabriquer des images =&lt;br /&gt;
Voir d'abord https://docs.docker.com/develop/ &lt;br /&gt;
== commandes image build ==&lt;br /&gt;
Depuis le répertoire contenant le Dockerfile&lt;br /&gt;
  $ docker build [-t &amp;lt;name&amp;gt;[:&amp;lt;vers&amp;gt;]] .&lt;br /&gt;
&lt;br /&gt;
== stockage docker == &lt;br /&gt;
Voir&lt;br /&gt;
  $ docker image inspect &amp;lt;image&amp;gt;&lt;br /&gt;
  $ docker volume inspect &amp;lt;volume&amp;gt;&lt;br /&gt;
  $ docker inspect &amp;lt;instance&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  $ sudo ls /var/lib/docker &lt;br /&gt;
  builder  buildkit  containers  image  network  overlay2  plugins  runtimes  swarm  tmp  trust  volumes&lt;br /&gt;
  $ sudo ls /var/lib/docker/overlay2&lt;br /&gt;
&lt;br /&gt;
Nettoyage des volumes &lt;br /&gt;
  # un volume précis: &lt;br /&gt;
  $ docker volume rm &amp;lt;volid&amp;gt;&lt;br /&gt;
  # tous les volumes non utilisés (volumes anonymes d'instances arrêtées par ex)&lt;br /&gt;
  $ docker volume&lt;br /&gt;
&lt;br /&gt;
== Dockerfile ==&lt;br /&gt;
&lt;br /&gt;
=== partage de dossiers avec le conteneur : &amp;quot;bind mounts&amp;quot; ===&lt;br /&gt;
Pas de déclaration dans le Dockerfile (c'est pour les volumes anonymes)&lt;br /&gt;
&lt;br /&gt;
A l'execution d'un conteneur:&lt;br /&gt;
  $ docker run -v $(pwd)/logs:/app/logs $(pwd)/ro_data:/app/ro_data:ro  myimg&lt;br /&gt;
  ou équivalent avec la commande mount &lt;br /&gt;
  $ docker run --mount type=bind,source=$(pwd)/logs,target=/app/logs \&lt;br /&gt;
      --mount type=bind,source=$(pwd)/ro_data,target=/app/ro_data,readonly &lt;br /&gt;
L'image voit le contenu du répertoire logs, et les logs écrits dedans donc persistants.&lt;br /&gt;
L'image voit le contenu du répertoire ro_data en lecture seule.&lt;br /&gt;
&lt;br /&gt;
voir https://docs.docker.com/storage/bind-mounts/ ,  https://docs.docker.com/storage/volumes/&lt;br /&gt;
&lt;br /&gt;
= Réseau =&lt;br /&gt;
== créer un réseau == &lt;br /&gt;
Par défaut, réseau créé en mode &amp;quot;bridge&amp;quot; (les conteneurs sont résolus par leur nom à l'intérieur d'un même réseau).&lt;br /&gt;
  $ docker network create [--driver bridge] mynet1&lt;br /&gt;
&lt;br /&gt;
Autres drivers:&lt;br /&gt;
* host: pour des conteneur &amp;quot;standalone&amp;quot; l'isolation avec le système hôte est supprimée, ils partagent le même réseau&lt;br /&gt;
* overlay: Connecter des conteneurs tournant sur plusieurs hôte. Mode &amp;quot;Swarm&amp;quot; seulement, presque obsolète. &lt;br /&gt;
* macvlan: force une adresse MAC au container. &lt;br /&gt;
* none: pas de réseau.&lt;br /&gt;
* autres 3PP à installer&lt;br /&gt;
== associer des conteneurs à un réseau ==&lt;br /&gt;
Au lancement, siomplement mentionner le réseau &lt;br /&gt;
  $ docker run -network my-network --name cont1 my-image&lt;br /&gt;
  $ docker run -network my-network --name cont2 my-other-image&lt;br /&gt;
Les 2 conteneurs cont1 et cont2 peuvent communiquer. &lt;br /&gt;
&lt;br /&gt;
Associer 2 réseau à un même conteneur:&lt;br /&gt;
* créer d'abord les 2 réseaux mynet1 et mynet2&lt;br /&gt;
  $ docker network create --driver=bridge network1 --subnet=172.19.0.0/24&lt;br /&gt;
  $ docker network create --driver=bridge network2 --subnet=172.19.1.0/24&lt;br /&gt;
* créer l'instance de conteneur et asssocier le 2eme réseau avant de la lancer:&lt;br /&gt;
  $ docker create --network=network1 --name container_name containerimage:latest&lt;br /&gt;
  $ docker network connect network2 container_name&lt;br /&gt;
  $ docker start container_name&lt;br /&gt;
&lt;br /&gt;
= docker-compose =&lt;br /&gt;
== commandes ==&lt;br /&gt;
* '''docker-compose up -d''' vous permettra de démarrer l'ensemble des conteneurs en arrière-plan ;&lt;br /&gt;
* '''docker-compose ps''' vous permettra de voir le status de l'ensemble de votre stack ;&lt;br /&gt;
* '''docker-compose logs -f --tail 5''' vous permettra d'afficher les logs de votre stack ;&lt;br /&gt;
* '''docker-compose stop''' vous permettra d'arrêter l'ensemble des services d'une stack ;&lt;br /&gt;
* '''docker-compose down'''  vous permettra de détruire l'ensemble des ressources d'une stack ;&lt;br /&gt;
* '''docker-compose config''' vous permettra de valider la syntaxe de votre fichier docker-compose.yml.&lt;br /&gt;
&lt;br /&gt;
= Astuces divers points =&lt;br /&gt;
== communication image docker vers un service sur la machine hôte ==&lt;br /&gt;
Pour un serveur sur la machine hôte (pas un autre conteneur), au lieu de localhost, utiliser le pseudo-domaine 'host.docker.internal'.&lt;br /&gt;
&lt;br /&gt;
== commandes docker sans sudo ==&lt;br /&gt;
Message d'erreur:&lt;br /&gt;
  Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get     &lt;br /&gt;
  http://%2Fvar%2Frun%2Fdocker.sock/v1.40/images/json: dial unix /var/run/docker.sock: connect: permission denied&lt;br /&gt;
  &lt;br /&gt;
  $ ls -l /var/run/docker.sock&lt;br /&gt;
  srw-rw----. 1 root docker 0 Nov 17 14:29 /var/run/docker.sock&lt;br /&gt;
&lt;br /&gt;
Ajouter le groupe docker a l'utilisateur&lt;br /&gt;
  $ sudo usermod -a -G docker myusername&lt;br /&gt;
&lt;br /&gt;
== Trouver les images dépendant d'une image ==&lt;br /&gt;
&lt;br /&gt;
Cas d'usage: supprimer une image retourne l'erreur &amp;quot;image has dependent child images&amp;quot;&lt;br /&gt;
  $ docker image rm 7f6c67ae7dae &lt;br /&gt;
  Error response from daemon: conflict: unable to delete 7f6c67ae7dae (cannot be forced) - image has dependent child images&lt;br /&gt;
&lt;br /&gt;
définir la fonction (ex dans bashrc)&lt;br /&gt;
  docker_image_desc() {&lt;br /&gt;
    for image in $(docker images --quiet --filter &amp;quot;since=${1}&amp;quot;); do&lt;br /&gt;
      if [ $(docker history --quiet ${image} | grep ${1}) ]; then&lt;br /&gt;
        docker_image_desc &amp;quot;${image}&amp;quot;&lt;br /&gt;
      fi&lt;br /&gt;
    done&lt;br /&gt;
    echo &amp;quot;${1}&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
et:&lt;br /&gt;
  $ docker_image_desc 7f6c67ae7dae &lt;br /&gt;
  76b749bf3727&lt;br /&gt;
  7f6c67ae7dae&lt;br /&gt;
&lt;br /&gt;
[[Category:Containers]]&lt;br /&gt;
[[Category:Docker]]&lt;br /&gt;
[[Category:Tips&amp;amp;Tricks]]&lt;/div&gt;</summary>
		<author><name>Toine</name></author>	</entry>

	<entry>
		<id>https://wiki.tonioc.ovh/index.php?title=Docker&amp;diff=403</id>
		<title>Docker</title>
		<link rel="alternate" type="text/html" href="https://wiki.tonioc.ovh/index.php?title=Docker&amp;diff=403"/>
				<updated>2020-11-21T17:24:25Z</updated>
		
		<summary type="html">&lt;p&gt;Toine : /* commandes image build */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= commandes docker-ce =&lt;br /&gt;
== instances ==&lt;br /&gt;
* démarrer :&lt;br /&gt;
  $ docker run [-ai] [--name myOwnName] &amp;lt;image&amp;gt;&lt;br /&gt;
  $ docker start [-ai] &amp;lt;instance&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* demarrer en interactif avec un shell (ne lance pas l'éventuelle commande CMD). en supprimant l'instance à sa sortie.&lt;br /&gt;
  $ docker run --rm -it &amp;lt;image&amp;gt; sh&lt;br /&gt;
&lt;br /&gt;
* attacher avec un shell a une image active&lt;br /&gt;
  $ docker exec -it &amp;lt;image&amp;gt; sh&lt;br /&gt;
&lt;br /&gt;
* arrêter: &lt;br /&gt;
  $ docker stop &amp;lt;image&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== images ==&lt;br /&gt;
* push/pull :&lt;br /&gt;
  $ docker image ls&lt;br /&gt;
  $ docker images&lt;br /&gt;
* push/pull :&lt;br /&gt;
  $ docker pull &amp;lt;image&amp;gt;&lt;br /&gt;
* renommer une image&lt;br /&gt;
  $ docker image ls&lt;br /&gt;
  REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE&lt;br /&gt;
  c7_dev              latest              744765ef7a95        4 days ago          333MB&lt;br /&gt;
  $ docker tag c7_dev:latest c7tools:1.0&lt;br /&gt;
  $ docker image ls &lt;br /&gt;
  REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE&lt;br /&gt;
  c7tools             1.0                 744765ef7a95        4 days ago          333MB&lt;br /&gt;
  c7_dev              latest              744765ef7a95        4 days ago          333MB&lt;br /&gt;
* suppression/pull :&lt;br /&gt;
  $ docker image rm &amp;lt;image&amp;gt;...&lt;br /&gt;
  $ docker rmi &amp;lt;image&amp;gt;...&lt;br /&gt;
* supprimer les images inutilisées :&lt;br /&gt;
  $ docker image prune&lt;br /&gt;
* inspecter les images :&lt;br /&gt;
  $ docker inspect &amp;lt;image&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== nettoyage ==&lt;br /&gt;
&lt;br /&gt;
* supprimer les ressources inutiles (images et instances stoppées):&lt;br /&gt;
  $ docker system prune&lt;br /&gt;
&lt;br /&gt;
= Fabriquer des images =&lt;br /&gt;
Voir d'abord https://docs.docker.com/develop/ &lt;br /&gt;
== commandes image build ==&lt;br /&gt;
Depuis le répertoire contenant le Dockerfile&lt;br /&gt;
  $ docker build [-t &amp;lt;name&amp;gt;[:&amp;lt;vers&amp;gt;]] .&lt;br /&gt;
&lt;br /&gt;
== stockage docker == &lt;br /&gt;
Voir&lt;br /&gt;
  $ docker image inspect &amp;lt;image&amp;gt;&lt;br /&gt;
  $ docker volume inspect &amp;lt;volume&amp;gt;&lt;br /&gt;
  $ docker inspect &amp;lt;instance&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  $ sudo ls /var/lib/docker &lt;br /&gt;
  builder  buildkit  containers  image  network  overlay2  plugins  runtimes  swarm  tmp  trust  volumes&lt;br /&gt;
  $ sudo ls /var/lib/docker/overlay2&lt;br /&gt;
&lt;br /&gt;
Nettoyage des volumes &lt;br /&gt;
  # un volume précis: &lt;br /&gt;
  $ docker volume rm &amp;lt;volid&amp;gt;&lt;br /&gt;
  # tous les volumes non utilisés (volumes anonymes d'instances arrêtées par ex)&lt;br /&gt;
  $ docker volume&lt;br /&gt;
&lt;br /&gt;
== Dockerfile ==&lt;br /&gt;
&lt;br /&gt;
=== partage de dossiers avec le conteneur : &amp;quot;bind mounts&amp;quot; ===&lt;br /&gt;
Pas de déclaration dans le Dockerfile (c'est pour les volumes anonymes)&lt;br /&gt;
&lt;br /&gt;
A l'execution d'un conteneur:&lt;br /&gt;
  $ docker run -v $(pwd)/logs:/app/logs $(pwd)/ro_data:/app/ro_data:ro  myimg&lt;br /&gt;
  ou équivalent avec la commande mount &lt;br /&gt;
  $ docker run --mount type=bind,source=$(pwd)/logs,target=/app/logs \&lt;br /&gt;
      --mount type=bind,source=$(pwd)/ro_data,target=/app/ro_data,readonly &lt;br /&gt;
L'image voit le contenu du répertoire logs, et les logs écrits dedans donc persistants.&lt;br /&gt;
L'image voit le contenu du répertoire ro_data en lecture seule.&lt;br /&gt;
&lt;br /&gt;
voir https://docs.docker.com/storage/bind-mounts/ ,  https://docs.docker.com/storage/volumes/&lt;br /&gt;
&lt;br /&gt;
= Réseau =&lt;br /&gt;
== créer un réseau == &lt;br /&gt;
Par défaut, réseau créé en mode &amp;quot;bridge&amp;quot; (les conteneurs sont résolus par leur nom à l'intérieur d'un même réseau).&lt;br /&gt;
  $ docker network create [--driver bridge] mynet1&lt;br /&gt;
&lt;br /&gt;
Autres drivers:&lt;br /&gt;
* host: pour des conteneur &amp;quot;standalone&amp;quot; l'isolation avec le système hôte est supprimée, ils partagent le même réseau&lt;br /&gt;
* overlay: Connecter des conteneurs tournant sur plusieurs hôte. Mode &amp;quot;Swarm&amp;quot; seulement, presque obsolète. &lt;br /&gt;
* macvlan: force une adresse MAC au container. &lt;br /&gt;
* none: pas de réseau.&lt;br /&gt;
* autres 3PP à installer&lt;br /&gt;
== associer des conteneurs à un réseau ==&lt;br /&gt;
Au lancement, siomplement mentionner le réseau &lt;br /&gt;
  $ docker run -network my-network --name cont1 my-image&lt;br /&gt;
  $ docker run -network my-network --name cont2 my-other-image&lt;br /&gt;
Les 2 conteneurs cont1 et cont2 peuvent communiquer. &lt;br /&gt;
&lt;br /&gt;
Associer 2 réseau à un même conteneur:&lt;br /&gt;
* créer d'abord les 2 réseaux mynet1 et mynet2&lt;br /&gt;
  $ docker network create --driver=bridge network1 --subnet=172.19.0.0/24&lt;br /&gt;
  $ docker network create --driver=bridge network2 --subnet=172.19.1.0/24&lt;br /&gt;
* créer l'instance de conteneur et asssocier le 2eme réseau avant de la lancer:&lt;br /&gt;
  $ docker create --network=network1 --name container_name containerimage:latest&lt;br /&gt;
  $ docker network connect network2 container_name&lt;br /&gt;
  $ docker start container_name&lt;br /&gt;
&lt;br /&gt;
= docker-compose =&lt;br /&gt;
== commandes ==&lt;br /&gt;
* '''docker-compose up -d''' vous permettra de démarrer l'ensemble des conteneurs en arrière-plan ;&lt;br /&gt;
* '''docker-compose ps''' vous permettra de voir le status de l'ensemble de votre stack ;&lt;br /&gt;
* '''docker-compose logs -f --tail 5''' vous permettra d'afficher les logs de votre stack ;&lt;br /&gt;
* '''docker-compose stop''' vous permettra d'arrêter l'ensemble des services d'une stack ;&lt;br /&gt;
* '''docker-compose down'''  vous permettra de détruire l'ensemble des ressources d'une stack ;&lt;br /&gt;
* '''docker-compose config''' vous permettra de valider la syntaxe de votre fichier docker-compose.yml.&lt;br /&gt;
&lt;br /&gt;
= Astuces divers points =&lt;br /&gt;
== communication image docker vers un service sur la machine hôte ==&lt;br /&gt;
Pour un serveur sur la machine hôte (pas un autre conteneur), au lieu de localhost, utiliser le pseudo-domaine 'host.docker.internal'.&lt;br /&gt;
&lt;br /&gt;
== commandes docker sans sudo ==&lt;br /&gt;
Message d'erreur:&lt;br /&gt;
  Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get     &lt;br /&gt;
  http://%2Fvar%2Frun%2Fdocker.sock/v1.40/images/json: dial unix /var/run/docker.sock: connect: permission denied&lt;br /&gt;
  &lt;br /&gt;
  $ ls -l /var/run/docker.sock&lt;br /&gt;
  srw-rw----. 1 root docker 0 Nov 17 14:29 /var/run/docker.sock&lt;br /&gt;
&lt;br /&gt;
Ajouter le groupe docker a l'utilisateur&lt;br /&gt;
  $ sudo usermod -a -G docker myusername&lt;br /&gt;
&lt;br /&gt;
== Trouver les images dépendant d'une image ==&lt;br /&gt;
&lt;br /&gt;
Cas d'usage: supprimer une image retourne l'erreur &amp;quot;image has dependent child images&amp;quot;&lt;br /&gt;
  $ docker image rm 7f6c67ae7dae &lt;br /&gt;
  Error response from daemon: conflict: unable to delete 7f6c67ae7dae (cannot be forced) - image has dependent child images&lt;br /&gt;
&lt;br /&gt;
définir la fonction (ex dans bashrc)&lt;br /&gt;
  docker_image_desc() {&lt;br /&gt;
    for image in $(docker images --quiet --filter &amp;quot;since=${1}&amp;quot;); do&lt;br /&gt;
      if [ $(docker history --quiet ${image} | grep ${1}) ]; then&lt;br /&gt;
        docker_image_desc &amp;quot;${image}&amp;quot;&lt;br /&gt;
      fi&lt;br /&gt;
    done&lt;br /&gt;
    echo &amp;quot;${1}&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
et:&lt;br /&gt;
  $ docker_image_desc 7f6c67ae7dae &lt;br /&gt;
  76b749bf3727&lt;br /&gt;
  7f6c67ae7dae&lt;br /&gt;
&lt;br /&gt;
[[Category:Containers]]&lt;br /&gt;
[[Category:Docker]]&lt;br /&gt;
[[Category:Tips&amp;amp;Tricks]]&lt;/div&gt;</summary>
		<author><name>Toine</name></author>	</entry>

	<entry>
		<id>https://wiki.tonioc.ovh/index.php?title=Docker&amp;diff=402</id>
		<title>Docker</title>
		<link rel="alternate" type="text/html" href="https://wiki.tonioc.ovh/index.php?title=Docker&amp;diff=402"/>
				<updated>2020-11-21T17:11:25Z</updated>
		
		<summary type="html">&lt;p&gt;Toine : /* Fabriquer des images */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= commandes docker-ce =&lt;br /&gt;
== instances ==&lt;br /&gt;
* démarrer :&lt;br /&gt;
  $ docker run [-ai] [--name myOwnName] &amp;lt;image&amp;gt;&lt;br /&gt;
  $ docker start [-ai] &amp;lt;instance&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* demarrer en interactif avec un shell (ne lance pas l'éventuelle commande CMD). en supprimant l'instance à sa sortie.&lt;br /&gt;
  $ docker run --rm -it &amp;lt;image&amp;gt; sh&lt;br /&gt;
&lt;br /&gt;
* attacher avec un shell a une image active&lt;br /&gt;
  $ docker exec -it &amp;lt;image&amp;gt; sh&lt;br /&gt;
&lt;br /&gt;
* arrêter: &lt;br /&gt;
  $ docker stop &amp;lt;image&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== images ==&lt;br /&gt;
* push/pull :&lt;br /&gt;
  $ docker image ls&lt;br /&gt;
  $ docker images&lt;br /&gt;
* push/pull :&lt;br /&gt;
  $ docker pull &amp;lt;image&amp;gt;&lt;br /&gt;
* renommer une image&lt;br /&gt;
  $ docker image ls&lt;br /&gt;
  REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE&lt;br /&gt;
  c7_dev              latest              744765ef7a95        4 days ago          333MB&lt;br /&gt;
  $ docker tag c7_dev:latest c7tools:1.0&lt;br /&gt;
  $ docker image ls &lt;br /&gt;
  REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE&lt;br /&gt;
  c7tools             1.0                 744765ef7a95        4 days ago          333MB&lt;br /&gt;
  c7_dev              latest              744765ef7a95        4 days ago          333MB&lt;br /&gt;
* suppression/pull :&lt;br /&gt;
  $ docker image rm &amp;lt;image&amp;gt;...&lt;br /&gt;
  $ docker rmi &amp;lt;image&amp;gt;...&lt;br /&gt;
* supprimer les images inutilisées :&lt;br /&gt;
  $ docker image prune&lt;br /&gt;
* inspecter les images :&lt;br /&gt;
  $ docker inspect &amp;lt;image&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== nettoyage ==&lt;br /&gt;
&lt;br /&gt;
* supprimer les ressources inutiles (images et instances stoppées):&lt;br /&gt;
  $ docker system prune&lt;br /&gt;
&lt;br /&gt;
= Fabriquer des images =&lt;br /&gt;
Voir d'abord https://docs.docker.com/develop/ &lt;br /&gt;
== commandes image build ==&lt;br /&gt;
Depuis le répertoire contenant le Dockerfile&lt;br /&gt;
  $ docker builmt [-t &amp;lt;name&amp;gt;[:&amp;lt;vers&amp;gt;]] . &lt;br /&gt;
&lt;br /&gt;
== stockage docker == &lt;br /&gt;
Voir&lt;br /&gt;
  $ docker image inspect &amp;lt;image&amp;gt;&lt;br /&gt;
  $ docker volume inspect &amp;lt;volume&amp;gt;&lt;br /&gt;
  $ docker inspect &amp;lt;instance&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  $ sudo ls /var/lib/docker &lt;br /&gt;
  builder  buildkit  containers  image  network  overlay2  plugins  runtimes  swarm  tmp  trust  volumes&lt;br /&gt;
  $ sudo ls /var/lib/docker/overlay2&lt;br /&gt;
&lt;br /&gt;
Nettoyage des volumes &lt;br /&gt;
  # un volume précis: &lt;br /&gt;
  $ docker volume rm &amp;lt;volid&amp;gt;&lt;br /&gt;
  # tous les volumes non utilisés (volumes anonymes d'instances arrêtées par ex)&lt;br /&gt;
  $ docker volume&lt;br /&gt;
&lt;br /&gt;
== Dockerfile ==&lt;br /&gt;
&lt;br /&gt;
=== partage de dossiers avec le conteneur : &amp;quot;bind mounts&amp;quot; ===&lt;br /&gt;
Pas de déclaration dans le Dockerfile (c'est pour les volumes anonymes)&lt;br /&gt;
&lt;br /&gt;
A l'execution d'un conteneur:&lt;br /&gt;
  $ docker run -v $(pwd)/logs:/app/logs $(pwd)/ro_data:/app/ro_data:ro  myimg&lt;br /&gt;
  ou équivalent avec la commande mount &lt;br /&gt;
  $ docker run --mount type=bind,source=$(pwd)/logs,target=/app/logs \&lt;br /&gt;
      --mount type=bind,source=$(pwd)/ro_data,target=/app/ro_data,readonly &lt;br /&gt;
L'image voit le contenu du répertoire logs, et les logs écrits dedans donc persistants.&lt;br /&gt;
L'image voit le contenu du répertoire ro_data en lecture seule.&lt;br /&gt;
&lt;br /&gt;
voir https://docs.docker.com/storage/bind-mounts/ ,  https://docs.docker.com/storage/volumes/&lt;br /&gt;
&lt;br /&gt;
= Réseau =&lt;br /&gt;
== créer un réseau == &lt;br /&gt;
Par défaut, réseau créé en mode &amp;quot;bridge&amp;quot; (les conteneurs sont résolus par leur nom à l'intérieur d'un même réseau).&lt;br /&gt;
  $ docker network create [--driver bridge] mynet1&lt;br /&gt;
&lt;br /&gt;
Autres drivers:&lt;br /&gt;
* host: pour des conteneur &amp;quot;standalone&amp;quot; l'isolation avec le système hôte est supprimée, ils partagent le même réseau&lt;br /&gt;
* overlay: Connecter des conteneurs tournant sur plusieurs hôte. Mode &amp;quot;Swarm&amp;quot; seulement, presque obsolète. &lt;br /&gt;
* macvlan: force une adresse MAC au container. &lt;br /&gt;
* none: pas de réseau.&lt;br /&gt;
* autres 3PP à installer&lt;br /&gt;
== associer des conteneurs à un réseau ==&lt;br /&gt;
Au lancement, siomplement mentionner le réseau &lt;br /&gt;
  $ docker run -network my-network --name cont1 my-image&lt;br /&gt;
  $ docker run -network my-network --name cont2 my-other-image&lt;br /&gt;
Les 2 conteneurs cont1 et cont2 peuvent communiquer. &lt;br /&gt;
&lt;br /&gt;
Associer 2 réseau à un même conteneur:&lt;br /&gt;
* créer d'abord les 2 réseaux mynet1 et mynet2&lt;br /&gt;
  $ docker network create --driver=bridge network1 --subnet=172.19.0.0/24&lt;br /&gt;
  $ docker network create --driver=bridge network2 --subnet=172.19.1.0/24&lt;br /&gt;
* créer l'instance de conteneur et asssocier le 2eme réseau avant de la lancer:&lt;br /&gt;
  $ docker create --network=network1 --name container_name containerimage:latest&lt;br /&gt;
  $ docker network connect network2 container_name&lt;br /&gt;
  $ docker start container_name&lt;br /&gt;
&lt;br /&gt;
= docker-compose =&lt;br /&gt;
== commandes ==&lt;br /&gt;
* '''docker-compose up -d''' vous permettra de démarrer l'ensemble des conteneurs en arrière-plan ;&lt;br /&gt;
* '''docker-compose ps''' vous permettra de voir le status de l'ensemble de votre stack ;&lt;br /&gt;
* '''docker-compose logs -f --tail 5''' vous permettra d'afficher les logs de votre stack ;&lt;br /&gt;
* '''docker-compose stop''' vous permettra d'arrêter l'ensemble des services d'une stack ;&lt;br /&gt;
* '''docker-compose down'''  vous permettra de détruire l'ensemble des ressources d'une stack ;&lt;br /&gt;
* '''docker-compose config''' vous permettra de valider la syntaxe de votre fichier docker-compose.yml.&lt;br /&gt;
&lt;br /&gt;
= Astuces divers points =&lt;br /&gt;
== communication image docker vers un service sur la machine hôte ==&lt;br /&gt;
Pour un serveur sur la machine hôte (pas un autre conteneur), au lieu de localhost, utiliser le pseudo-domaine 'host.docker.internal'.&lt;br /&gt;
&lt;br /&gt;
== commandes docker sans sudo ==&lt;br /&gt;
Message d'erreur:&lt;br /&gt;
  Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get     &lt;br /&gt;
  http://%2Fvar%2Frun%2Fdocker.sock/v1.40/images/json: dial unix /var/run/docker.sock: connect: permission denied&lt;br /&gt;
  &lt;br /&gt;
  $ ls -l /var/run/docker.sock&lt;br /&gt;
  srw-rw----. 1 root docker 0 Nov 17 14:29 /var/run/docker.sock&lt;br /&gt;
&lt;br /&gt;
Ajouter le groupe docker a l'utilisateur&lt;br /&gt;
  $ sudo usermod -a -G docker myusername&lt;br /&gt;
&lt;br /&gt;
== Trouver les images dépendant d'une image ==&lt;br /&gt;
&lt;br /&gt;
Cas d'usage: supprimer une image retourne l'erreur &amp;quot;image has dependent child images&amp;quot;&lt;br /&gt;
  $ docker image rm 7f6c67ae7dae &lt;br /&gt;
  Error response from daemon: conflict: unable to delete 7f6c67ae7dae (cannot be forced) - image has dependent child images&lt;br /&gt;
&lt;br /&gt;
définir la fonction (ex dans bashrc)&lt;br /&gt;
  docker_image_desc() {&lt;br /&gt;
    for image in $(docker images --quiet --filter &amp;quot;since=${1}&amp;quot;); do&lt;br /&gt;
      if [ $(docker history --quiet ${image} | grep ${1}) ]; then&lt;br /&gt;
        docker_image_desc &amp;quot;${image}&amp;quot;&lt;br /&gt;
      fi&lt;br /&gt;
    done&lt;br /&gt;
    echo &amp;quot;${1}&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
et:&lt;br /&gt;
  $ docker_image_desc 7f6c67ae7dae &lt;br /&gt;
  76b749bf3727&lt;br /&gt;
  7f6c67ae7dae&lt;br /&gt;
&lt;br /&gt;
[[Category:Containers]]&lt;br /&gt;
[[Category:Docker]]&lt;br /&gt;
[[Category:Tips&amp;amp;Tricks]]&lt;/div&gt;</summary>
		<author><name>Toine</name></author>	</entry>

	<entry>
		<id>https://wiki.tonioc.ovh/index.php?title=Docker&amp;diff=401</id>
		<title>Docker</title>
		<link rel="alternate" type="text/html" href="https://wiki.tonioc.ovh/index.php?title=Docker&amp;diff=401"/>
				<updated>2020-11-21T13:48:16Z</updated>
		
		<summary type="html">&lt;p&gt;Toine : /* communication image docker vers un service sur la machine hôte */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= commandes docker-ce =&lt;br /&gt;
== instances ==&lt;br /&gt;
* démarrer :&lt;br /&gt;
  $ docker run [-ai] [--name myOwnName] &amp;lt;image&amp;gt;&lt;br /&gt;
  $ docker start [-ai] &amp;lt;instance&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* demarrer en interactif avec un shell (ne lance pas l'éventuelle commande CMD). en supprimant l'instance à sa sortie.&lt;br /&gt;
  $ docker run --rm -it &amp;lt;image&amp;gt; sh&lt;br /&gt;
&lt;br /&gt;
* attacher avec un shell a une image active&lt;br /&gt;
  $ docker exec -it &amp;lt;image&amp;gt; sh&lt;br /&gt;
&lt;br /&gt;
* arrêter: &lt;br /&gt;
  $ docker stop &amp;lt;image&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== images ==&lt;br /&gt;
* push/pull :&lt;br /&gt;
  $ docker image ls&lt;br /&gt;
  $ docker images&lt;br /&gt;
* push/pull :&lt;br /&gt;
  $ docker pull &amp;lt;image&amp;gt;&lt;br /&gt;
* renommer une image&lt;br /&gt;
  $ docker image ls&lt;br /&gt;
  REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE&lt;br /&gt;
  c7_dev              latest              744765ef7a95        4 days ago          333MB&lt;br /&gt;
  $ docker tag c7_dev:latest c7tools:1.0&lt;br /&gt;
  $ docker image ls &lt;br /&gt;
  REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE&lt;br /&gt;
  c7tools             1.0                 744765ef7a95        4 days ago          333MB&lt;br /&gt;
  c7_dev              latest              744765ef7a95        4 days ago          333MB&lt;br /&gt;
* suppression/pull :&lt;br /&gt;
  $ docker image rm &amp;lt;image&amp;gt;...&lt;br /&gt;
  $ docker rmi &amp;lt;image&amp;gt;...&lt;br /&gt;
* supprimer les images inutilisées :&lt;br /&gt;
  $ docker image prune&lt;br /&gt;
* inspecter les images :&lt;br /&gt;
  $ docker inspect &amp;lt;image&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== nettoyage ==&lt;br /&gt;
&lt;br /&gt;
* supprimer les ressources inutiles (images et instances stoppées):&lt;br /&gt;
  $ docker system prune&lt;br /&gt;
&lt;br /&gt;
= Fabriquer des images =&lt;br /&gt;
== commandes image build ==&lt;br /&gt;
Depuis le répertoire contenant le Dockerfile&lt;br /&gt;
  $ docker builmt [-t &amp;lt;name&amp;gt;[:&amp;lt;vers&amp;gt;]] . &lt;br /&gt;
&lt;br /&gt;
== stockage docker == &lt;br /&gt;
Voir&lt;br /&gt;
  $ docker image inspect &amp;lt;image&amp;gt;&lt;br /&gt;
  $ docker volume inspect &amp;lt;volume&amp;gt;&lt;br /&gt;
  $ docker inspect &amp;lt;instance&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  $ sudo ls /var/lib/docker &lt;br /&gt;
  builder  buildkit  containers  image  network  overlay2  plugins  runtimes  swarm  tmp  trust  volumes&lt;br /&gt;
  $ sudo ls /var/lib/docker/overlay2&lt;br /&gt;
&lt;br /&gt;
Nettoyage des volumes &lt;br /&gt;
  # un volume précis: &lt;br /&gt;
  $ docker volume rm &amp;lt;volid&amp;gt;&lt;br /&gt;
  # tous les volumes non utilisés (volumes anonymes d'instances arrêtées par ex)&lt;br /&gt;
  $ docker volume&lt;br /&gt;
&lt;br /&gt;
== Dockerfile ==&lt;br /&gt;
&lt;br /&gt;
=== partage de dossiers avec le conteneur : &amp;quot;bind mounts&amp;quot; ===&lt;br /&gt;
Pas de déclaration dans le Dockerfile (c'est pour les volumes anonymes)&lt;br /&gt;
&lt;br /&gt;
A l'execution d'un conteneur:&lt;br /&gt;
  $ docker run -v $(pwd)/logs:/app/logs $(pwd)/ro_data:/app/ro_data:ro  myimg&lt;br /&gt;
  ou équivalent avec la commande mount &lt;br /&gt;
  $ docker run --mount type=bind,source=$(pwd)/logs,target=/app/logs \&lt;br /&gt;
      --mount type=bind,source=$(pwd)/ro_data,target=/app/ro_data,readonly &lt;br /&gt;
L'image voit le contenu du répertoire logs, et les logs écrits dedans donc persistants.&lt;br /&gt;
L'image voit le contenu du répertoire ro_data en lecture seule.&lt;br /&gt;
&lt;br /&gt;
voir https://docs.docker.com/storage/bind-mounts/ ,  https://docs.docker.com/storage/volumes/&lt;br /&gt;
&lt;br /&gt;
= Réseau =&lt;br /&gt;
== créer un réseau == &lt;br /&gt;
Par défaut, réseau créé en mode &amp;quot;bridge&amp;quot; (les conteneurs sont résolus par leur nom à l'intérieur d'un même réseau).&lt;br /&gt;
  $ docker network create [--driver bridge] mynet1&lt;br /&gt;
&lt;br /&gt;
Autres drivers:&lt;br /&gt;
* host: pour des conteneur &amp;quot;standalone&amp;quot; l'isolation avec le système hôte est supprimée, ils partagent le même réseau&lt;br /&gt;
* overlay: Connecter des conteneurs tournant sur plusieurs hôte. Mode &amp;quot;Swarm&amp;quot; seulement, presque obsolète. &lt;br /&gt;
* macvlan: force une adresse MAC au container. &lt;br /&gt;
* none: pas de réseau.&lt;br /&gt;
* autres 3PP à installer&lt;br /&gt;
== associer des conteneurs à un réseau ==&lt;br /&gt;
Au lancement, siomplement mentionner le réseau &lt;br /&gt;
  $ docker run -network my-network --name cont1 my-image&lt;br /&gt;
  $ docker run -network my-network --name cont2 my-other-image&lt;br /&gt;
Les 2 conteneurs cont1 et cont2 peuvent communiquer. &lt;br /&gt;
&lt;br /&gt;
Associer 2 réseau à un même conteneur:&lt;br /&gt;
* créer d'abord les 2 réseaux mynet1 et mynet2&lt;br /&gt;
  $ docker network create --driver=bridge network1 --subnet=172.19.0.0/24&lt;br /&gt;
  $ docker network create --driver=bridge network2 --subnet=172.19.1.0/24&lt;br /&gt;
* créer l'instance de conteneur et asssocier le 2eme réseau avant de la lancer:&lt;br /&gt;
  $ docker create --network=network1 --name container_name containerimage:latest&lt;br /&gt;
  $ docker network connect network2 container_name&lt;br /&gt;
  $ docker start container_name&lt;br /&gt;
&lt;br /&gt;
= docker-compose =&lt;br /&gt;
== commandes ==&lt;br /&gt;
* '''docker-compose up -d''' vous permettra de démarrer l'ensemble des conteneurs en arrière-plan ;&lt;br /&gt;
* '''docker-compose ps''' vous permettra de voir le status de l'ensemble de votre stack ;&lt;br /&gt;
* '''docker-compose logs -f --tail 5''' vous permettra d'afficher les logs de votre stack ;&lt;br /&gt;
* '''docker-compose stop''' vous permettra d'arrêter l'ensemble des services d'une stack ;&lt;br /&gt;
* '''docker-compose down'''  vous permettra de détruire l'ensemble des ressources d'une stack ;&lt;br /&gt;
* '''docker-compose config''' vous permettra de valider la syntaxe de votre fichier docker-compose.yml.&lt;br /&gt;
&lt;br /&gt;
= Astuces divers points =&lt;br /&gt;
== communication image docker vers un service sur la machine hôte ==&lt;br /&gt;
Pour un serveur sur la machine hôte (pas un autre conteneur), au lieu de localhost, utiliser le pseudo-domaine 'host.docker.internal'.&lt;br /&gt;
&lt;br /&gt;
== commandes docker sans sudo ==&lt;br /&gt;
Message d'erreur:&lt;br /&gt;
  Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get     &lt;br /&gt;
  http://%2Fvar%2Frun%2Fdocker.sock/v1.40/images/json: dial unix /var/run/docker.sock: connect: permission denied&lt;br /&gt;
  &lt;br /&gt;
  $ ls -l /var/run/docker.sock&lt;br /&gt;
  srw-rw----. 1 root docker 0 Nov 17 14:29 /var/run/docker.sock&lt;br /&gt;
&lt;br /&gt;
Ajouter le groupe docker a l'utilisateur&lt;br /&gt;
  $ sudo usermod -a -G docker myusername&lt;br /&gt;
&lt;br /&gt;
== Trouver les images dépendant d'une image ==&lt;br /&gt;
&lt;br /&gt;
Cas d'usage: supprimer une image retourne l'erreur &amp;quot;image has dependent child images&amp;quot;&lt;br /&gt;
  $ docker image rm 7f6c67ae7dae &lt;br /&gt;
  Error response from daemon: conflict: unable to delete 7f6c67ae7dae (cannot be forced) - image has dependent child images&lt;br /&gt;
&lt;br /&gt;
définir la fonction (ex dans bashrc)&lt;br /&gt;
  docker_image_desc() {&lt;br /&gt;
    for image in $(docker images --quiet --filter &amp;quot;since=${1}&amp;quot;); do&lt;br /&gt;
      if [ $(docker history --quiet ${image} | grep ${1}) ]; then&lt;br /&gt;
        docker_image_desc &amp;quot;${image}&amp;quot;&lt;br /&gt;
      fi&lt;br /&gt;
    done&lt;br /&gt;
    echo &amp;quot;${1}&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
et:&lt;br /&gt;
  $ docker_image_desc 7f6c67ae7dae &lt;br /&gt;
  76b749bf3727&lt;br /&gt;
  7f6c67ae7dae&lt;br /&gt;
&lt;br /&gt;
[[Category:Containers]]&lt;br /&gt;
[[Category:Docker]]&lt;br /&gt;
[[Category:Tips&amp;amp;Tricks]]&lt;/div&gt;</summary>
		<author><name>Toine</name></author>	</entry>

	<entry>
		<id>https://wiki.tonioc.ovh/index.php?title=Docker&amp;diff=400</id>
		<title>Docker</title>
		<link rel="alternate" type="text/html" href="https://wiki.tonioc.ovh/index.php?title=Docker&amp;diff=400"/>
				<updated>2020-11-20T18:13:38Z</updated>
		
		<summary type="html">&lt;p&gt;Toine : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= commandes docker-ce =&lt;br /&gt;
== instances ==&lt;br /&gt;
* démarrer :&lt;br /&gt;
  $ docker run [-ai] [--name myOwnName] &amp;lt;image&amp;gt;&lt;br /&gt;
  $ docker start [-ai] &amp;lt;instance&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* demarrer en interactif avec un shell (ne lance pas l'éventuelle commande CMD). en supprimant l'instance à sa sortie.&lt;br /&gt;
  $ docker run --rm -it &amp;lt;image&amp;gt; sh&lt;br /&gt;
&lt;br /&gt;
* attacher avec un shell a une image active&lt;br /&gt;
  $ docker exec -it &amp;lt;image&amp;gt; sh&lt;br /&gt;
&lt;br /&gt;
* arrêter: &lt;br /&gt;
  $ docker stop &amp;lt;image&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== images ==&lt;br /&gt;
* push/pull :&lt;br /&gt;
  $ docker image ls&lt;br /&gt;
  $ docker images&lt;br /&gt;
* push/pull :&lt;br /&gt;
  $ docker pull &amp;lt;image&amp;gt;&lt;br /&gt;
* renommer une image&lt;br /&gt;
  $ docker image ls&lt;br /&gt;
  REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE&lt;br /&gt;
  c7_dev              latest              744765ef7a95        4 days ago          333MB&lt;br /&gt;
  $ docker tag c7_dev:latest c7tools:1.0&lt;br /&gt;
  $ docker image ls &lt;br /&gt;
  REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE&lt;br /&gt;
  c7tools             1.0                 744765ef7a95        4 days ago          333MB&lt;br /&gt;
  c7_dev              latest              744765ef7a95        4 days ago          333MB&lt;br /&gt;
* suppression/pull :&lt;br /&gt;
  $ docker image rm &amp;lt;image&amp;gt;...&lt;br /&gt;
  $ docker rmi &amp;lt;image&amp;gt;...&lt;br /&gt;
* supprimer les images inutilisées :&lt;br /&gt;
  $ docker image prune&lt;br /&gt;
* inspecter les images :&lt;br /&gt;
  $ docker inspect &amp;lt;image&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== nettoyage ==&lt;br /&gt;
&lt;br /&gt;
* supprimer les ressources inutiles (images et instances stoppées):&lt;br /&gt;
  $ docker system prune&lt;br /&gt;
&lt;br /&gt;
= Fabriquer des images =&lt;br /&gt;
== commandes image build ==&lt;br /&gt;
Depuis le répertoire contenant le Dockerfile&lt;br /&gt;
  $ docker builmt [-t &amp;lt;name&amp;gt;[:&amp;lt;vers&amp;gt;]] . &lt;br /&gt;
&lt;br /&gt;
== stockage docker == &lt;br /&gt;
Voir&lt;br /&gt;
  $ docker image inspect &amp;lt;image&amp;gt;&lt;br /&gt;
  $ docker volume inspect &amp;lt;volume&amp;gt;&lt;br /&gt;
  $ docker inspect &amp;lt;instance&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  $ sudo ls /var/lib/docker &lt;br /&gt;
  builder  buildkit  containers  image  network  overlay2  plugins  runtimes  swarm  tmp  trust  volumes&lt;br /&gt;
  $ sudo ls /var/lib/docker/overlay2&lt;br /&gt;
&lt;br /&gt;
Nettoyage des volumes &lt;br /&gt;
  # un volume précis: &lt;br /&gt;
  $ docker volume rm &amp;lt;volid&amp;gt;&lt;br /&gt;
  # tous les volumes non utilisés (volumes anonymes d'instances arrêtées par ex)&lt;br /&gt;
  $ docker volume&lt;br /&gt;
&lt;br /&gt;
== Dockerfile ==&lt;br /&gt;
&lt;br /&gt;
=== partage de dossiers avec le conteneur : &amp;quot;bind mounts&amp;quot; ===&lt;br /&gt;
Pas de déclaration dans le Dockerfile (c'est pour les volumes anonymes)&lt;br /&gt;
&lt;br /&gt;
A l'execution d'un conteneur:&lt;br /&gt;
  $ docker run -v $(pwd)/logs:/app/logs $(pwd)/ro_data:/app/ro_data:ro  myimg&lt;br /&gt;
  ou équivalent avec la commande mount &lt;br /&gt;
  $ docker run --mount type=bind,source=$(pwd)/logs,target=/app/logs \&lt;br /&gt;
      --mount type=bind,source=$(pwd)/ro_data,target=/app/ro_data,readonly &lt;br /&gt;
L'image voit le contenu du répertoire logs, et les logs écrits dedans donc persistants.&lt;br /&gt;
L'image voit le contenu du répertoire ro_data en lecture seule.&lt;br /&gt;
&lt;br /&gt;
voir https://docs.docker.com/storage/bind-mounts/ ,  https://docs.docker.com/storage/volumes/&lt;br /&gt;
&lt;br /&gt;
= Réseau =&lt;br /&gt;
== créer un réseau == &lt;br /&gt;
Par défaut, réseau créé en mode &amp;quot;bridge&amp;quot; (les conteneurs sont résolus par leur nom à l'intérieur d'un même réseau).&lt;br /&gt;
  $ docker network create [--driver bridge] mynet1&lt;br /&gt;
&lt;br /&gt;
Autres drivers:&lt;br /&gt;
* host: pour des conteneur &amp;quot;standalone&amp;quot; l'isolation avec le système hôte est supprimée, ils partagent le même réseau&lt;br /&gt;
* overlay: Connecter des conteneurs tournant sur plusieurs hôte. Mode &amp;quot;Swarm&amp;quot; seulement, presque obsolète. &lt;br /&gt;
* macvlan: force une adresse MAC au container. &lt;br /&gt;
* none: pas de réseau.&lt;br /&gt;
* autres 3PP à installer&lt;br /&gt;
== associer des conteneurs à un réseau ==&lt;br /&gt;
Au lancement, siomplement mentionner le réseau &lt;br /&gt;
  $ docker run -network my-network --name cont1 my-image&lt;br /&gt;
  $ docker run -network my-network --name cont2 my-other-image&lt;br /&gt;
Les 2 conteneurs cont1 et cont2 peuvent communiquer. &lt;br /&gt;
&lt;br /&gt;
Associer 2 réseau à un même conteneur:&lt;br /&gt;
* créer d'abord les 2 réseaux mynet1 et mynet2&lt;br /&gt;
  $ docker network create --driver=bridge network1 --subnet=172.19.0.0/24&lt;br /&gt;
  $ docker network create --driver=bridge network2 --subnet=172.19.1.0/24&lt;br /&gt;
* créer l'instance de conteneur et asssocier le 2eme réseau avant de la lancer:&lt;br /&gt;
  $ docker create --network=network1 --name container_name containerimage:latest&lt;br /&gt;
  $ docker network connect network2 container_name&lt;br /&gt;
  $ docker start container_name&lt;br /&gt;
&lt;br /&gt;
= docker-compose =&lt;br /&gt;
== commandes ==&lt;br /&gt;
* '''docker-compose up -d''' vous permettra de démarrer l'ensemble des conteneurs en arrière-plan ;&lt;br /&gt;
* '''docker-compose ps''' vous permettra de voir le status de l'ensemble de votre stack ;&lt;br /&gt;
* '''docker-compose logs -f --tail 5''' vous permettra d'afficher les logs de votre stack ;&lt;br /&gt;
* '''docker-compose stop''' vous permettra d'arrêter l'ensemble des services d'une stack ;&lt;br /&gt;
* '''docker-compose down'''  vous permettra de détruire l'ensemble des ressources d'une stack ;&lt;br /&gt;
* '''docker-compose config''' vous permettra de valider la syntaxe de votre fichier docker-compose.yml.&lt;br /&gt;
&lt;br /&gt;
= Astuces divers points =&lt;br /&gt;
== communication image docker vers un service sur la machine hôte ==&lt;br /&gt;
au lieu de localhost, utiliser le pseudo-domaine 'host.docker.internal'&lt;br /&gt;
&lt;br /&gt;
== commandes docker sans sudo ==&lt;br /&gt;
Message d'erreur:&lt;br /&gt;
  Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get     &lt;br /&gt;
  http://%2Fvar%2Frun%2Fdocker.sock/v1.40/images/json: dial unix /var/run/docker.sock: connect: permission denied&lt;br /&gt;
  &lt;br /&gt;
  $ ls -l /var/run/docker.sock&lt;br /&gt;
  srw-rw----. 1 root docker 0 Nov 17 14:29 /var/run/docker.sock&lt;br /&gt;
&lt;br /&gt;
Ajouter le groupe docker a l'utilisateur&lt;br /&gt;
  $ sudo usermod -a -G docker myusername&lt;br /&gt;
&lt;br /&gt;
== Trouver les images dépendant d'une image ==&lt;br /&gt;
&lt;br /&gt;
Cas d'usage: supprimer une image retourne l'erreur &amp;quot;image has dependent child images&amp;quot;&lt;br /&gt;
  $ docker image rm 7f6c67ae7dae &lt;br /&gt;
  Error response from daemon: conflict: unable to delete 7f6c67ae7dae (cannot be forced) - image has dependent child images&lt;br /&gt;
&lt;br /&gt;
définir la fonction (ex dans bashrc)&lt;br /&gt;
  docker_image_desc() {&lt;br /&gt;
    for image in $(docker images --quiet --filter &amp;quot;since=${1}&amp;quot;); do&lt;br /&gt;
      if [ $(docker history --quiet ${image} | grep ${1}) ]; then&lt;br /&gt;
        docker_image_desc &amp;quot;${image}&amp;quot;&lt;br /&gt;
      fi&lt;br /&gt;
    done&lt;br /&gt;
    echo &amp;quot;${1}&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
et:&lt;br /&gt;
  $ docker_image_desc 7f6c67ae7dae &lt;br /&gt;
  76b749bf3727&lt;br /&gt;
  7f6c67ae7dae&lt;br /&gt;
&lt;br /&gt;
[[Category:Containers]]&lt;br /&gt;
[[Category:Docker]]&lt;br /&gt;
[[Category:Tips&amp;amp;Tricks]]&lt;/div&gt;</summary>
		<author><name>Toine</name></author>	</entry>

	<entry>
		<id>https://wiki.tonioc.ovh/index.php?title=Docker&amp;diff=399</id>
		<title>Docker</title>
		<link rel="alternate" type="text/html" href="https://wiki.tonioc.ovh/index.php?title=Docker&amp;diff=399"/>
				<updated>2020-11-20T17:31:54Z</updated>
		
		<summary type="html">&lt;p&gt;Toine : /* Astuces divers points */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Docker tips &amp;amp; tricks =&lt;br /&gt;
== commandes docker-ce ==&lt;br /&gt;
=== instances ===&lt;br /&gt;
* démarrer :&lt;br /&gt;
  $ docker run [-ai] [--name myOwnName] &amp;lt;image&amp;gt;&lt;br /&gt;
  $ docker start [-ai] &amp;lt;instance&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* demarrer en interactif avec un shell (ne lance pas l'éventuelle commande CMD). en supprimant l'instance à sa sortie.&lt;br /&gt;
  $ docker run --rm -it &amp;lt;image&amp;gt; sh&lt;br /&gt;
&lt;br /&gt;
* attacher avec un shell a une image active&lt;br /&gt;
  $ docker exec -it &amp;lt;image&amp;gt; sh&lt;br /&gt;
&lt;br /&gt;
* arrêter: &lt;br /&gt;
  $ docker stop &amp;lt;image&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== images ===&lt;br /&gt;
* push/pull :&lt;br /&gt;
  $ docker image ls&lt;br /&gt;
  $ docker images&lt;br /&gt;
* push/pull :&lt;br /&gt;
  $ docker pull &amp;lt;image&amp;gt;&lt;br /&gt;
* renommer une image&lt;br /&gt;
  $ docker image ls&lt;br /&gt;
  REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE&lt;br /&gt;
  c7_dev              latest              744765ef7a95        4 days ago          333MB&lt;br /&gt;
  $ docker tag c7_dev:latest c7tools:1.0&lt;br /&gt;
  $ docker image ls &lt;br /&gt;
  REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE&lt;br /&gt;
  c7tools             1.0                 744765ef7a95        4 days ago          333MB&lt;br /&gt;
  c7_dev              latest              744765ef7a95        4 days ago          333MB&lt;br /&gt;
* suppression/pull :&lt;br /&gt;
  $ docker image rm &amp;lt;image&amp;gt;...&lt;br /&gt;
  $ docker rmi &amp;lt;image&amp;gt;...&lt;br /&gt;
* supprimer les images inutilisées :&lt;br /&gt;
  $ docker image prune&lt;br /&gt;
* inspecter les images :&lt;br /&gt;
  $ docker inspect &amp;lt;image&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== nettoyage ===&lt;br /&gt;
&lt;br /&gt;
* supprimer les ressources inutiles (images et instances stoppées):&lt;br /&gt;
  $ docker system prune&lt;br /&gt;
&lt;br /&gt;
= Fabriquer des images =&lt;br /&gt;
== commandes image build ==&lt;br /&gt;
Depuis le répertoire contenant le Dockerfile&lt;br /&gt;
  $ docker builmt [-t &amp;lt;name&amp;gt;[:&amp;lt;vers&amp;gt;]] . &lt;br /&gt;
&lt;br /&gt;
== stockage docker == &lt;br /&gt;
Voir&lt;br /&gt;
  $ docker image inspect &amp;lt;image&amp;gt;&lt;br /&gt;
  $ docker volume inspect &amp;lt;volume&amp;gt;&lt;br /&gt;
  $ docker inspect &amp;lt;instance&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  $ sudo ls /var/lib/docker &lt;br /&gt;
  builder  buildkit  containers  image  network  overlay2  plugins  runtimes  swarm  tmp  trust  volumes&lt;br /&gt;
  $ sudo ls /var/lib/docker/overlay2&lt;br /&gt;
&lt;br /&gt;
Nettoyage des volumes &lt;br /&gt;
  # un volume précis: &lt;br /&gt;
  $ docker volume rm &amp;lt;volid&amp;gt;&lt;br /&gt;
  # tous les volumes non utilisés (volumes anonymes d'instances arrêtées par ex)&lt;br /&gt;
  $ docker volume&lt;br /&gt;
&lt;br /&gt;
== Dockerfile ==&lt;br /&gt;
&lt;br /&gt;
=== partage de dossiers avec le conteneur : &amp;quot;bind mounts&amp;quot; ===&lt;br /&gt;
Pas de déclaration dans le Dockerfile (c'est pour les volumes anonymes)&lt;br /&gt;
&lt;br /&gt;
A l'execution d'un conteneur:&lt;br /&gt;
  $ docker run -v $(pwd)/logs:/app/logs $(pwd)/ro_data:/app/ro_data:ro  myimg&lt;br /&gt;
  ou équivalent avec la commande mount &lt;br /&gt;
  $ docker run --mount type=bind,source=$(pwd)/logs,target=/app/logs \&lt;br /&gt;
      --mount type=bind,source=$(pwd)/ro_data,target=/app/ro_data,readonly &lt;br /&gt;
L'image voit le contenu du répertoire logs, et les logs écrits dedans donc persistants.&lt;br /&gt;
L'image voit le contenu du répertoire ro_data en lecture seule.&lt;br /&gt;
&lt;br /&gt;
voir https://docs.docker.com/storage/bind-mounts/ ,  https://docs.docker.com/storage/volumes/&lt;br /&gt;
&lt;br /&gt;
= docker-compose =&lt;br /&gt;
== commandes ==&lt;br /&gt;
* '''docker-compose up -d''' vous permettra de démarrer l'ensemble des conteneurs en arrière-plan ;&lt;br /&gt;
* '''docker-compose ps''' vous permettra de voir le status de l'ensemble de votre stack ;&lt;br /&gt;
* '''docker-compose logs -f --tail 5''' vous permettra d'afficher les logs de votre stack ;&lt;br /&gt;
* '''docker-compose stop''' vous permettra d'arrêter l'ensemble des services d'une stack ;&lt;br /&gt;
* '''docker-compose down'''  vous permettra de détruire l'ensemble des ressources d'une stack ;&lt;br /&gt;
* '''docker-compose config''' vous permettra de valider la syntaxe de votre fichier docker-compose.yml.&lt;br /&gt;
&lt;br /&gt;
= Astuces divers points =&lt;br /&gt;
== communication image docker vers un service sur la machine hôte ==&lt;br /&gt;
au lieu de localhost, utiliser le pseudo-domaine 'host.docker.internal'&lt;br /&gt;
&lt;br /&gt;
== commandes docker sans sudo ==&lt;br /&gt;
Message d'erreur:&lt;br /&gt;
  Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get     &lt;br /&gt;
  http://%2Fvar%2Frun%2Fdocker.sock/v1.40/images/json: dial unix /var/run/docker.sock: connect: permission denied&lt;br /&gt;
  &lt;br /&gt;
  $ ls -l /var/run/docker.sock&lt;br /&gt;
  srw-rw----. 1 root docker 0 Nov 17 14:29 /var/run/docker.sock&lt;br /&gt;
&lt;br /&gt;
Ajouter le groupe docker a l'utilisateur&lt;br /&gt;
  $ sudo usermod -a -G docker myusername&lt;br /&gt;
&lt;br /&gt;
== Trouver les images dépendant d'une image ==&lt;br /&gt;
&lt;br /&gt;
Cas d'usage: supprimer une image retourne l'erreur &amp;quot;image has dependent child images&amp;quot;&lt;br /&gt;
  $ docker image rm 7f6c67ae7dae &lt;br /&gt;
  Error response from daemon: conflict: unable to delete 7f6c67ae7dae (cannot be forced) - image has dependent child images&lt;br /&gt;
&lt;br /&gt;
définir la fonction (ex dans bashrc)&lt;br /&gt;
  docker_image_desc() {&lt;br /&gt;
    for image in $(docker images --quiet --filter &amp;quot;since=${1}&amp;quot;); do&lt;br /&gt;
      if [ $(docker history --quiet ${image} | grep ${1}) ]; then&lt;br /&gt;
        docker_image_desc &amp;quot;${image}&amp;quot;&lt;br /&gt;
      fi&lt;br /&gt;
    done&lt;br /&gt;
    echo &amp;quot;${1}&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
et:&lt;br /&gt;
  $ docker_image_desc 7f6c67ae7dae &lt;br /&gt;
  76b749bf3727&lt;br /&gt;
  7f6c67ae7dae&lt;br /&gt;
&lt;br /&gt;
[[Category:Containers]]&lt;br /&gt;
[[Category:Docker]]&lt;br /&gt;
[[Category:Tips&amp;amp;Tricks]]&lt;/div&gt;</summary>
		<author><name>Toine</name></author>	</entry>

	<entry>
		<id>https://wiki.tonioc.ovh/index.php?title=Docker&amp;diff=398</id>
		<title>Docker</title>
		<link rel="alternate" type="text/html" href="https://wiki.tonioc.ovh/index.php?title=Docker&amp;diff=398"/>
				<updated>2020-11-20T16:03:16Z</updated>
		
		<summary type="html">&lt;p&gt;Toine : /* images */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Docker tips &amp;amp; tricks =&lt;br /&gt;
== commandes docker-ce ==&lt;br /&gt;
=== instances ===&lt;br /&gt;
* démarrer :&lt;br /&gt;
  $ docker run [-ai] [--name myOwnName] &amp;lt;image&amp;gt;&lt;br /&gt;
  $ docker start [-ai] &amp;lt;instance&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* demarrer en interactif avec un shell (ne lance pas l'éventuelle commande CMD). en supprimant l'instance à sa sortie.&lt;br /&gt;
  $ docker run --rm -it &amp;lt;image&amp;gt; sh&lt;br /&gt;
&lt;br /&gt;
* attacher avec un shell a une image active&lt;br /&gt;
  $ docker exec -it &amp;lt;image&amp;gt; sh&lt;br /&gt;
&lt;br /&gt;
* arrêter: &lt;br /&gt;
  $ docker stop &amp;lt;image&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== images ===&lt;br /&gt;
* push/pull :&lt;br /&gt;
  $ docker image ls&lt;br /&gt;
  $ docker images&lt;br /&gt;
* push/pull :&lt;br /&gt;
  $ docker pull &amp;lt;image&amp;gt;&lt;br /&gt;
* renommer une image&lt;br /&gt;
  $ docker image ls&lt;br /&gt;
  REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE&lt;br /&gt;
  c7_dev              latest              744765ef7a95        4 days ago          333MB&lt;br /&gt;
  $ docker tag c7_dev:latest c7tools:1.0&lt;br /&gt;
  $ docker image ls &lt;br /&gt;
  REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE&lt;br /&gt;
  c7tools             1.0                 744765ef7a95        4 days ago          333MB&lt;br /&gt;
  c7_dev              latest              744765ef7a95        4 days ago          333MB&lt;br /&gt;
* suppression/pull :&lt;br /&gt;
  $ docker image rm &amp;lt;image&amp;gt;...&lt;br /&gt;
  $ docker rmi &amp;lt;image&amp;gt;...&lt;br /&gt;
* supprimer les images inutilisées :&lt;br /&gt;
  $ docker image prune&lt;br /&gt;
* inspecter les images :&lt;br /&gt;
  $ docker inspect &amp;lt;image&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== nettoyage ===&lt;br /&gt;
&lt;br /&gt;
* supprimer les ressources inutiles (images et instances stoppées):&lt;br /&gt;
  $ docker system prune&lt;br /&gt;
&lt;br /&gt;
= Fabriquer des images =&lt;br /&gt;
== commandes image build ==&lt;br /&gt;
Depuis le répertoire contenant le Dockerfile&lt;br /&gt;
  $ docker builmt [-t &amp;lt;name&amp;gt;[:&amp;lt;vers&amp;gt;]] . &lt;br /&gt;
&lt;br /&gt;
== stockage docker == &lt;br /&gt;
Voir&lt;br /&gt;
  $ docker image inspect &amp;lt;image&amp;gt;&lt;br /&gt;
  $ docker volume inspect &amp;lt;volume&amp;gt;&lt;br /&gt;
  $ docker inspect &amp;lt;instance&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  $ sudo ls /var/lib/docker &lt;br /&gt;
  builder  buildkit  containers  image  network  overlay2  plugins  runtimes  swarm  tmp  trust  volumes&lt;br /&gt;
  $ sudo ls /var/lib/docker/overlay2&lt;br /&gt;
&lt;br /&gt;
Nettoyage des volumes &lt;br /&gt;
  # un volume précis: &lt;br /&gt;
  $ docker volume rm &amp;lt;volid&amp;gt;&lt;br /&gt;
  # tous les volumes non utilisés (volumes anonymes d'instances arrêtées par ex)&lt;br /&gt;
  $ docker volume&lt;br /&gt;
&lt;br /&gt;
== Dockerfile ==&lt;br /&gt;
&lt;br /&gt;
=== partage de dossiers avec le conteneur : &amp;quot;bind mounts&amp;quot; ===&lt;br /&gt;
Pas de déclaration dans le Dockerfile (c'est pour les volumes anonymes)&lt;br /&gt;
&lt;br /&gt;
A l'execution d'un conteneur:&lt;br /&gt;
  $ docker run -v $(pwd)/logs:/app/logs $(pwd)/ro_data:/app/ro_data:ro  myimg&lt;br /&gt;
  ou équivalent avec la commande mount &lt;br /&gt;
  $ docker run --mount type=bind,source=$(pwd)/logs,target=/app/logs \&lt;br /&gt;
      --mount type=bind,source=$(pwd)/ro_data,target=/app/ro_data,readonly &lt;br /&gt;
L'image voit le contenu du répertoire logs, et les logs écrits dedans donc persistants.&lt;br /&gt;
L'image voit le contenu du répertoire ro_data en lecture seule.&lt;br /&gt;
&lt;br /&gt;
voir https://docs.docker.com/storage/bind-mounts/ ,  https://docs.docker.com/storage/volumes/&lt;br /&gt;
&lt;br /&gt;
= docker-compose =&lt;br /&gt;
== commandes ==&lt;br /&gt;
* '''docker-compose up -d''' vous permettra de démarrer l'ensemble des conteneurs en arrière-plan ;&lt;br /&gt;
* '''docker-compose ps''' vous permettra de voir le status de l'ensemble de votre stack ;&lt;br /&gt;
* '''docker-compose logs -f --tail 5''' vous permettra d'afficher les logs de votre stack ;&lt;br /&gt;
* '''docker-compose stop''' vous permettra d'arrêter l'ensemble des services d'une stack ;&lt;br /&gt;
* '''docker-compose down'''  vous permettra de détruire l'ensemble des ressources d'une stack ;&lt;br /&gt;
* '''docker-compose config''' vous permettra de valider la syntaxe de votre fichier docker-compose.yml.&lt;br /&gt;
&lt;br /&gt;
= Astuces divers points =&lt;br /&gt;
== commandes docker sans sudo ==&lt;br /&gt;
Message d'erreur:&lt;br /&gt;
  Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get     &lt;br /&gt;
  http://%2Fvar%2Frun%2Fdocker.sock/v1.40/images/json: dial unix /var/run/docker.sock: connect: permission denied&lt;br /&gt;
  &lt;br /&gt;
  $ ls -l /var/run/docker.sock&lt;br /&gt;
  srw-rw----. 1 root docker 0 Nov 17 14:29 /var/run/docker.sock&lt;br /&gt;
&lt;br /&gt;
Ajouter le groupe docker a l'utilisateur&lt;br /&gt;
  $ sudo usermod -a -G docker myusername&lt;br /&gt;
&lt;br /&gt;
== Trouver les images dépendant d'une image ==&lt;br /&gt;
&lt;br /&gt;
Cas d'usage: supprimer une image retourne l'erreur &amp;quot;image has dependent child images&amp;quot;&lt;br /&gt;
  $ docker image rm 7f6c67ae7dae &lt;br /&gt;
  Error response from daemon: conflict: unable to delete 7f6c67ae7dae (cannot be forced) - image has dependent child images&lt;br /&gt;
&lt;br /&gt;
définir la fonction (ex dans bashrc)&lt;br /&gt;
  docker_image_desc() {&lt;br /&gt;
    for image in $(docker images --quiet --filter &amp;quot;since=${1}&amp;quot;); do&lt;br /&gt;
      if [ $(docker history --quiet ${image} | grep ${1}) ]; then&lt;br /&gt;
        docker_image_desc &amp;quot;${image}&amp;quot;&lt;br /&gt;
      fi&lt;br /&gt;
    done&lt;br /&gt;
    echo &amp;quot;${1}&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
et:&lt;br /&gt;
  $ docker_image_desc 7f6c67ae7dae &lt;br /&gt;
  76b749bf3727&lt;br /&gt;
  7f6c67ae7dae&lt;br /&gt;
&lt;br /&gt;
[[Category:Containers]]&lt;br /&gt;
[[Category:Docker]]&lt;br /&gt;
[[Category:Tips&amp;amp;Tricks]]&lt;/div&gt;</summary>
		<author><name>Toine</name></author>	</entry>

	<entry>
		<id>https://wiki.tonioc.ovh/index.php?title=Docker&amp;diff=397</id>
		<title>Docker</title>
		<link rel="alternate" type="text/html" href="https://wiki.tonioc.ovh/index.php?title=Docker&amp;diff=397"/>
				<updated>2020-11-20T13:42:07Z</updated>
		
		<summary type="html">&lt;p&gt;Toine : /* Dockerfile */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Docker tips &amp;amp; tricks =&lt;br /&gt;
== commandes docker-ce ==&lt;br /&gt;
=== instances ===&lt;br /&gt;
* démarrer :&lt;br /&gt;
  $ docker run [-ai] [--name myOwnName] &amp;lt;image&amp;gt;&lt;br /&gt;
  $ docker start [-ai] &amp;lt;instance&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* demarrer en interactif avec un shell (ne lance pas l'éventuelle commande CMD). en supprimant l'instance à sa sortie.&lt;br /&gt;
  $ docker run --rm -it &amp;lt;image&amp;gt; sh&lt;br /&gt;
&lt;br /&gt;
* attacher avec un shell a une image active&lt;br /&gt;
  $ docker exec -it &amp;lt;image&amp;gt; sh&lt;br /&gt;
&lt;br /&gt;
* arrêter: &lt;br /&gt;
  $ docker stop &amp;lt;image&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== images ===&lt;br /&gt;
* push/pull :&lt;br /&gt;
  $ docker image ls&lt;br /&gt;
  $ docker images&lt;br /&gt;
* push/pull :&lt;br /&gt;
  $ docker pull &amp;lt;image&amp;gt;&lt;br /&gt;
* renommer une image&lt;br /&gt;
  $ docker image ls&lt;br /&gt;
  REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE&lt;br /&gt;
  c7_dev              latest              744765ef7a95        4 days ago          333MB&lt;br /&gt;
  $ docker tag c7_dev:latest c7tools:1.0&lt;br /&gt;
  $ docker image ls &lt;br /&gt;
  REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE&lt;br /&gt;
  c7tools             1.0                 744765ef7a95        4 days ago          333MB&lt;br /&gt;
  c7_dev              latest              744765ef7a95        4 days ago          333MB&lt;br /&gt;
 &lt;br /&gt;
* suppression/pull :&lt;br /&gt;
  $ docker image rm &amp;lt;image&amp;gt;...&lt;br /&gt;
  $ docker rmi &amp;lt;image&amp;gt;...&lt;br /&gt;
* supprimer les images inutilisées :&lt;br /&gt;
  $ docker image prune&lt;br /&gt;
* inspecter les images :&lt;br /&gt;
  $ docker inspect &amp;lt;image&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== nettoyage ===&lt;br /&gt;
&lt;br /&gt;
* supprimer les ressources inutiles (images et instances stoppées):&lt;br /&gt;
  $ docker system prune&lt;br /&gt;
&lt;br /&gt;
= Fabriquer des images =&lt;br /&gt;
== commandes image build ==&lt;br /&gt;
Depuis le répertoire contenant le Dockerfile&lt;br /&gt;
  $ docker builmt [-t &amp;lt;name&amp;gt;[:&amp;lt;vers&amp;gt;]] . &lt;br /&gt;
&lt;br /&gt;
== stockage docker == &lt;br /&gt;
Voir&lt;br /&gt;
  $ docker image inspect &amp;lt;image&amp;gt;&lt;br /&gt;
  $ docker volume inspect &amp;lt;volume&amp;gt;&lt;br /&gt;
  $ docker inspect &amp;lt;instance&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  $ sudo ls /var/lib/docker &lt;br /&gt;
  builder  buildkit  containers  image  network  overlay2  plugins  runtimes  swarm  tmp  trust  volumes&lt;br /&gt;
  $ sudo ls /var/lib/docker/overlay2&lt;br /&gt;
&lt;br /&gt;
Nettoyage des volumes &lt;br /&gt;
  # un volume précis: &lt;br /&gt;
  $ docker volume rm &amp;lt;volid&amp;gt;&lt;br /&gt;
  # tous les volumes non utilisés (volumes anonymes d'instances arrêtées par ex)&lt;br /&gt;
  $ docker volume&lt;br /&gt;
&lt;br /&gt;
== Dockerfile ==&lt;br /&gt;
&lt;br /&gt;
=== partage de dossiers avec le conteneur : &amp;quot;bind mounts&amp;quot; ===&lt;br /&gt;
Pas de déclaration dans le Dockerfile (c'est pour les volumes anonymes)&lt;br /&gt;
&lt;br /&gt;
A l'execution d'un conteneur:&lt;br /&gt;
  $ docker run -v $(pwd)/logs:/app/logs $(pwd)/ro_data:/app/ro_data:ro  myimg&lt;br /&gt;
  ou équivalent avec la commande mount &lt;br /&gt;
  $ docker run --mount type=bind,source=$(pwd)/logs,target=/app/logs \&lt;br /&gt;
      --mount type=bind,source=$(pwd)/ro_data,target=/app/ro_data,readonly &lt;br /&gt;
L'image voit le contenu du répertoire logs, et les logs écrits dedans donc persistants.&lt;br /&gt;
L'image voit le contenu du répertoire ro_data en lecture seule.&lt;br /&gt;
&lt;br /&gt;
voir https://docs.docker.com/storage/bind-mounts/ ,  https://docs.docker.com/storage/volumes/&lt;br /&gt;
&lt;br /&gt;
= docker-compose =&lt;br /&gt;
== commandes ==&lt;br /&gt;
* '''docker-compose up -d''' vous permettra de démarrer l'ensemble des conteneurs en arrière-plan ;&lt;br /&gt;
* '''docker-compose ps''' vous permettra de voir le status de l'ensemble de votre stack ;&lt;br /&gt;
* '''docker-compose logs -f --tail 5''' vous permettra d'afficher les logs de votre stack ;&lt;br /&gt;
* '''docker-compose stop''' vous permettra d'arrêter l'ensemble des services d'une stack ;&lt;br /&gt;
* '''docker-compose down'''  vous permettra de détruire l'ensemble des ressources d'une stack ;&lt;br /&gt;
* '''docker-compose config''' vous permettra de valider la syntaxe de votre fichier docker-compose.yml.&lt;br /&gt;
&lt;br /&gt;
= Astuces divers points =&lt;br /&gt;
== commandes docker sans sudo ==&lt;br /&gt;
Message d'erreur:&lt;br /&gt;
  Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get     &lt;br /&gt;
  http://%2Fvar%2Frun%2Fdocker.sock/v1.40/images/json: dial unix /var/run/docker.sock: connect: permission denied&lt;br /&gt;
  &lt;br /&gt;
  $ ls -l /var/run/docker.sock&lt;br /&gt;
  srw-rw----. 1 root docker 0 Nov 17 14:29 /var/run/docker.sock&lt;br /&gt;
&lt;br /&gt;
Ajouter le groupe docker a l'utilisateur&lt;br /&gt;
  $ sudo usermod -a -G docker myusername&lt;br /&gt;
&lt;br /&gt;
== Trouver les images dépendant d'une image ==&lt;br /&gt;
&lt;br /&gt;
Cas d'usage: supprimer une image retourne l'erreur &amp;quot;image has dependent child images&amp;quot;&lt;br /&gt;
  $ docker image rm 7f6c67ae7dae &lt;br /&gt;
  Error response from daemon: conflict: unable to delete 7f6c67ae7dae (cannot be forced) - image has dependent child images&lt;br /&gt;
&lt;br /&gt;
définir la fonction (ex dans bashrc)&lt;br /&gt;
  docker_image_desc() {&lt;br /&gt;
    for image in $(docker images --quiet --filter &amp;quot;since=${1}&amp;quot;); do&lt;br /&gt;
      if [ $(docker history --quiet ${image} | grep ${1}) ]; then&lt;br /&gt;
        docker_image_desc &amp;quot;${image}&amp;quot;&lt;br /&gt;
      fi&lt;br /&gt;
    done&lt;br /&gt;
    echo &amp;quot;${1}&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
et:&lt;br /&gt;
  $ docker_image_desc 7f6c67ae7dae &lt;br /&gt;
  76b749bf3727&lt;br /&gt;
  7f6c67ae7dae&lt;br /&gt;
&lt;br /&gt;
[[Category:Containers]]&lt;br /&gt;
[[Category:Docker]]&lt;br /&gt;
[[Category:Tips&amp;amp;Tricks]]&lt;/div&gt;</summary>
		<author><name>Toine</name></author>	</entry>

	<entry>
		<id>https://wiki.tonioc.ovh/index.php?title=Docker&amp;diff=396</id>
		<title>Docker</title>
		<link rel="alternate" type="text/html" href="https://wiki.tonioc.ovh/index.php?title=Docker&amp;diff=396"/>
				<updated>2020-11-20T13:41:40Z</updated>
		
		<summary type="html">&lt;p&gt;Toine : /* Dockerfile */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Docker tips &amp;amp; tricks =&lt;br /&gt;
== commandes docker-ce ==&lt;br /&gt;
=== instances ===&lt;br /&gt;
* démarrer :&lt;br /&gt;
  $ docker run [-ai] [--name myOwnName] &amp;lt;image&amp;gt;&lt;br /&gt;
  $ docker start [-ai] &amp;lt;instance&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* demarrer en interactif avec un shell (ne lance pas l'éventuelle commande CMD). en supprimant l'instance à sa sortie.&lt;br /&gt;
  $ docker run --rm -it &amp;lt;image&amp;gt; sh&lt;br /&gt;
&lt;br /&gt;
* attacher avec un shell a une image active&lt;br /&gt;
  $ docker exec -it &amp;lt;image&amp;gt; sh&lt;br /&gt;
&lt;br /&gt;
* arrêter: &lt;br /&gt;
  $ docker stop &amp;lt;image&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== images ===&lt;br /&gt;
* push/pull :&lt;br /&gt;
  $ docker image ls&lt;br /&gt;
  $ docker images&lt;br /&gt;
* push/pull :&lt;br /&gt;
  $ docker pull &amp;lt;image&amp;gt;&lt;br /&gt;
* renommer une image&lt;br /&gt;
  $ docker image ls&lt;br /&gt;
  REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE&lt;br /&gt;
  c7_dev              latest              744765ef7a95        4 days ago          333MB&lt;br /&gt;
  $ docker tag c7_dev:latest c7tools:1.0&lt;br /&gt;
  $ docker image ls &lt;br /&gt;
  REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE&lt;br /&gt;
  c7tools             1.0                 744765ef7a95        4 days ago          333MB&lt;br /&gt;
  c7_dev              latest              744765ef7a95        4 days ago          333MB&lt;br /&gt;
 &lt;br /&gt;
* suppression/pull :&lt;br /&gt;
  $ docker image rm &amp;lt;image&amp;gt;...&lt;br /&gt;
  $ docker rmi &amp;lt;image&amp;gt;...&lt;br /&gt;
* supprimer les images inutilisées :&lt;br /&gt;
  $ docker image prune&lt;br /&gt;
* inspecter les images :&lt;br /&gt;
  $ docker inspect &amp;lt;image&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== nettoyage ===&lt;br /&gt;
&lt;br /&gt;
* supprimer les ressources inutiles (images et instances stoppées):&lt;br /&gt;
  $ docker system prune&lt;br /&gt;
&lt;br /&gt;
= Fabriquer des images =&lt;br /&gt;
== commandes image build ==&lt;br /&gt;
Depuis le répertoire contenant le Dockerfile&lt;br /&gt;
  $ docker builmt [-t &amp;lt;name&amp;gt;[:&amp;lt;vers&amp;gt;]] . &lt;br /&gt;
&lt;br /&gt;
== stockage docker == &lt;br /&gt;
Voir&lt;br /&gt;
  $ docker image inspect &amp;lt;image&amp;gt;&lt;br /&gt;
  $ docker volume inspect &amp;lt;volume&amp;gt;&lt;br /&gt;
  $ docker inspect &amp;lt;instance&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  $ sudo ls /var/lib/docker &lt;br /&gt;
  builder  buildkit  containers  image  network  overlay2  plugins  runtimes  swarm  tmp  trust  volumes&lt;br /&gt;
  $ sudo ls /var/lib/docker/overlay2&lt;br /&gt;
&lt;br /&gt;
Nettoyage des volumes &lt;br /&gt;
  # un volume précis: &lt;br /&gt;
  $ docker volume rm &amp;lt;volid&amp;gt;&lt;br /&gt;
  # tous les volumes non utilisés (volumes anonymes d'instances arrêtées par ex)&lt;br /&gt;
  $ docker volume&lt;br /&gt;
&lt;br /&gt;
== Dockerfile ==&lt;br /&gt;
&lt;br /&gt;
=== partage de dossiers avec le conteneur : &amp;quot;bind mounts&amp;quot; ===&lt;br /&gt;
Pas de déclaration dans le Dockerfile (c'est pour les volumes anonymes)&lt;br /&gt;
&lt;br /&gt;
A l'execution d'un conteneur:&lt;br /&gt;
  $ docker run -v $(pwd)/logs:/app/logs $(pwd)/ro_data:/app/ro_data:ro  myimg&lt;br /&gt;
  ou équivalent avec la commande mount &lt;br /&gt;
  $ docker run --mount type=bind,source=$(pwd)/logs,target=/app/logs \&lt;br /&gt;
      --mount type=bind,source=$(pwd)/ro_data,target=/app/ro_data,readonly &lt;br /&gt;
L'image voit le contenu du répertoire logs, et les logs écrits dedans donc persistants.&lt;br /&gt;
L'image voit le contenu du répertoire ro_data en lecture seule.&lt;br /&gt;
&lt;br /&gt;
voir https://docs.docker.com/storage/volumes/&lt;br /&gt;
&lt;br /&gt;
= docker-compose =&lt;br /&gt;
== commandes ==&lt;br /&gt;
* '''docker-compose up -d''' vous permettra de démarrer l'ensemble des conteneurs en arrière-plan ;&lt;br /&gt;
* '''docker-compose ps''' vous permettra de voir le status de l'ensemble de votre stack ;&lt;br /&gt;
* '''docker-compose logs -f --tail 5''' vous permettra d'afficher les logs de votre stack ;&lt;br /&gt;
* '''docker-compose stop''' vous permettra d'arrêter l'ensemble des services d'une stack ;&lt;br /&gt;
* '''docker-compose down'''  vous permettra de détruire l'ensemble des ressources d'une stack ;&lt;br /&gt;
* '''docker-compose config''' vous permettra de valider la syntaxe de votre fichier docker-compose.yml.&lt;br /&gt;
&lt;br /&gt;
= Astuces divers points =&lt;br /&gt;
== commandes docker sans sudo ==&lt;br /&gt;
Message d'erreur:&lt;br /&gt;
  Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get     &lt;br /&gt;
  http://%2Fvar%2Frun%2Fdocker.sock/v1.40/images/json: dial unix /var/run/docker.sock: connect: permission denied&lt;br /&gt;
  &lt;br /&gt;
  $ ls -l /var/run/docker.sock&lt;br /&gt;
  srw-rw----. 1 root docker 0 Nov 17 14:29 /var/run/docker.sock&lt;br /&gt;
&lt;br /&gt;
Ajouter le groupe docker a l'utilisateur&lt;br /&gt;
  $ sudo usermod -a -G docker myusername&lt;br /&gt;
&lt;br /&gt;
== Trouver les images dépendant d'une image ==&lt;br /&gt;
&lt;br /&gt;
Cas d'usage: supprimer une image retourne l'erreur &amp;quot;image has dependent child images&amp;quot;&lt;br /&gt;
  $ docker image rm 7f6c67ae7dae &lt;br /&gt;
  Error response from daemon: conflict: unable to delete 7f6c67ae7dae (cannot be forced) - image has dependent child images&lt;br /&gt;
&lt;br /&gt;
définir la fonction (ex dans bashrc)&lt;br /&gt;
  docker_image_desc() {&lt;br /&gt;
    for image in $(docker images --quiet --filter &amp;quot;since=${1}&amp;quot;); do&lt;br /&gt;
      if [ $(docker history --quiet ${image} | grep ${1}) ]; then&lt;br /&gt;
        docker_image_desc &amp;quot;${image}&amp;quot;&lt;br /&gt;
      fi&lt;br /&gt;
    done&lt;br /&gt;
    echo &amp;quot;${1}&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
et:&lt;br /&gt;
  $ docker_image_desc 7f6c67ae7dae &lt;br /&gt;
  76b749bf3727&lt;br /&gt;
  7f6c67ae7dae&lt;br /&gt;
&lt;br /&gt;
[[Category:Containers]]&lt;br /&gt;
[[Category:Docker]]&lt;br /&gt;
[[Category:Tips&amp;amp;Tricks]]&lt;/div&gt;</summary>
		<author><name>Toine</name></author>	</entry>

	<entry>
		<id>https://wiki.tonioc.ovh/index.php?title=Docker&amp;diff=395</id>
		<title>Docker</title>
		<link rel="alternate" type="text/html" href="https://wiki.tonioc.ovh/index.php?title=Docker&amp;diff=395"/>
				<updated>2020-11-20T13:41:19Z</updated>
		
		<summary type="html">&lt;p&gt;Toine : /* Dockerfile */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Docker tips &amp;amp; tricks =&lt;br /&gt;
== commandes docker-ce ==&lt;br /&gt;
=== instances ===&lt;br /&gt;
* démarrer :&lt;br /&gt;
  $ docker run [-ai] [--name myOwnName] &amp;lt;image&amp;gt;&lt;br /&gt;
  $ docker start [-ai] &amp;lt;instance&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* demarrer en interactif avec un shell (ne lance pas l'éventuelle commande CMD). en supprimant l'instance à sa sortie.&lt;br /&gt;
  $ docker run --rm -it &amp;lt;image&amp;gt; sh&lt;br /&gt;
&lt;br /&gt;
* attacher avec un shell a une image active&lt;br /&gt;
  $ docker exec -it &amp;lt;image&amp;gt; sh&lt;br /&gt;
&lt;br /&gt;
* arrêter: &lt;br /&gt;
  $ docker stop &amp;lt;image&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== images ===&lt;br /&gt;
* push/pull :&lt;br /&gt;
  $ docker image ls&lt;br /&gt;
  $ docker images&lt;br /&gt;
* push/pull :&lt;br /&gt;
  $ docker pull &amp;lt;image&amp;gt;&lt;br /&gt;
* renommer une image&lt;br /&gt;
  $ docker image ls&lt;br /&gt;
  REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE&lt;br /&gt;
  c7_dev              latest              744765ef7a95        4 days ago          333MB&lt;br /&gt;
  $ docker tag c7_dev:latest c7tools:1.0&lt;br /&gt;
  $ docker image ls &lt;br /&gt;
  REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE&lt;br /&gt;
  c7tools             1.0                 744765ef7a95        4 days ago          333MB&lt;br /&gt;
  c7_dev              latest              744765ef7a95        4 days ago          333MB&lt;br /&gt;
 &lt;br /&gt;
* suppression/pull :&lt;br /&gt;
  $ docker image rm &amp;lt;image&amp;gt;...&lt;br /&gt;
  $ docker rmi &amp;lt;image&amp;gt;...&lt;br /&gt;
* supprimer les images inutilisées :&lt;br /&gt;
  $ docker image prune&lt;br /&gt;
* inspecter les images :&lt;br /&gt;
  $ docker inspect &amp;lt;image&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== nettoyage ===&lt;br /&gt;
&lt;br /&gt;
* supprimer les ressources inutiles (images et instances stoppées):&lt;br /&gt;
  $ docker system prune&lt;br /&gt;
&lt;br /&gt;
= Fabriquer des images =&lt;br /&gt;
== commandes image build ==&lt;br /&gt;
Depuis le répertoire contenant le Dockerfile&lt;br /&gt;
  $ docker builmt [-t &amp;lt;name&amp;gt;[:&amp;lt;vers&amp;gt;]] . &lt;br /&gt;
&lt;br /&gt;
== stockage docker == &lt;br /&gt;
Voir&lt;br /&gt;
  $ docker image inspect &amp;lt;image&amp;gt;&lt;br /&gt;
  $ docker volume inspect &amp;lt;volume&amp;gt;&lt;br /&gt;
  $ docker inspect &amp;lt;instance&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  $ sudo ls /var/lib/docker &lt;br /&gt;
  builder  buildkit  containers  image  network  overlay2  plugins  runtimes  swarm  tmp  trust  volumes&lt;br /&gt;
  $ sudo ls /var/lib/docker/overlay2&lt;br /&gt;
&lt;br /&gt;
Nettoyage des volumes &lt;br /&gt;
  # un volume précis: &lt;br /&gt;
  $ docker volume rm &amp;lt;volid&amp;gt;&lt;br /&gt;
  # tous les volumes non utilisés (volumes anonymes d'instances arrêtées par ex)&lt;br /&gt;
  $ docker volume&lt;br /&gt;
&lt;br /&gt;
== Dockerfile ==&lt;br /&gt;
&lt;br /&gt;
=== partage de dossiers avec le conteneur : &amp;quot;bind mounts&amp;quot; ===&lt;br /&gt;
Pas de déclaration dans le Dockerfile (c'est pour les volumes anonymes)&lt;br /&gt;
&lt;br /&gt;
A l'execution d'un conteneur:&lt;br /&gt;
  $ docker run -v $(pwd)/logs:/app/logs $(pwd)/ro_data:/app/ro_data:ro  myimg&lt;br /&gt;
  ou équivalent avec la commande mount &lt;br /&gt;
  $ docker run --mount type=bind,source=$(pwd)/logs,target=/app/logs --mount type=bind,source=$(pwd)/ro_data,target=/app/ro_data,readonly &lt;br /&gt;
L'image voit le contenu du répertoire logs, et les logs écrits dedans donc persistants.&lt;br /&gt;
L'image voit le contenu du répertoire ro_data en lecture seule.&lt;br /&gt;
&lt;br /&gt;
voir https://docs.docker.com/storage/volumes/&lt;br /&gt;
&lt;br /&gt;
= docker-compose =&lt;br /&gt;
== commandes ==&lt;br /&gt;
* '''docker-compose up -d''' vous permettra de démarrer l'ensemble des conteneurs en arrière-plan ;&lt;br /&gt;
* '''docker-compose ps''' vous permettra de voir le status de l'ensemble de votre stack ;&lt;br /&gt;
* '''docker-compose logs -f --tail 5''' vous permettra d'afficher les logs de votre stack ;&lt;br /&gt;
* '''docker-compose stop''' vous permettra d'arrêter l'ensemble des services d'une stack ;&lt;br /&gt;
* '''docker-compose down'''  vous permettra de détruire l'ensemble des ressources d'une stack ;&lt;br /&gt;
* '''docker-compose config''' vous permettra de valider la syntaxe de votre fichier docker-compose.yml.&lt;br /&gt;
&lt;br /&gt;
= Astuces divers points =&lt;br /&gt;
== commandes docker sans sudo ==&lt;br /&gt;
Message d'erreur:&lt;br /&gt;
  Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get     &lt;br /&gt;
  http://%2Fvar%2Frun%2Fdocker.sock/v1.40/images/json: dial unix /var/run/docker.sock: connect: permission denied&lt;br /&gt;
  &lt;br /&gt;
  $ ls -l /var/run/docker.sock&lt;br /&gt;
  srw-rw----. 1 root docker 0 Nov 17 14:29 /var/run/docker.sock&lt;br /&gt;
&lt;br /&gt;
Ajouter le groupe docker a l'utilisateur&lt;br /&gt;
  $ sudo usermod -a -G docker myusername&lt;br /&gt;
&lt;br /&gt;
== Trouver les images dépendant d'une image ==&lt;br /&gt;
&lt;br /&gt;
Cas d'usage: supprimer une image retourne l'erreur &amp;quot;image has dependent child images&amp;quot;&lt;br /&gt;
  $ docker image rm 7f6c67ae7dae &lt;br /&gt;
  Error response from daemon: conflict: unable to delete 7f6c67ae7dae (cannot be forced) - image has dependent child images&lt;br /&gt;
&lt;br /&gt;
définir la fonction (ex dans bashrc)&lt;br /&gt;
  docker_image_desc() {&lt;br /&gt;
    for image in $(docker images --quiet --filter &amp;quot;since=${1}&amp;quot;); do&lt;br /&gt;
      if [ $(docker history --quiet ${image} | grep ${1}) ]; then&lt;br /&gt;
        docker_image_desc &amp;quot;${image}&amp;quot;&lt;br /&gt;
      fi&lt;br /&gt;
    done&lt;br /&gt;
    echo &amp;quot;${1}&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
et:&lt;br /&gt;
  $ docker_image_desc 7f6c67ae7dae &lt;br /&gt;
  76b749bf3727&lt;br /&gt;
  7f6c67ae7dae&lt;br /&gt;
&lt;br /&gt;
[[Category:Containers]]&lt;br /&gt;
[[Category:Docker]]&lt;br /&gt;
[[Category:Tips&amp;amp;Tricks]]&lt;/div&gt;</summary>
		<author><name>Toine</name></author>	</entry>

	<entry>
		<id>https://wiki.tonioc.ovh/index.php?title=Docker&amp;diff=394</id>
		<title>Docker</title>
		<link rel="alternate" type="text/html" href="https://wiki.tonioc.ovh/index.php?title=Docker&amp;diff=394"/>
				<updated>2020-11-20T13:27:48Z</updated>
		
		<summary type="html">&lt;p&gt;Toine : /* stockage docker */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Docker tips &amp;amp; tricks =&lt;br /&gt;
== commandes docker-ce ==&lt;br /&gt;
=== instances ===&lt;br /&gt;
* démarrer :&lt;br /&gt;
  $ docker run [-ai] [--name myOwnName] &amp;lt;image&amp;gt;&lt;br /&gt;
  $ docker start [-ai] &amp;lt;instance&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* demarrer en interactif avec un shell (ne lance pas l'éventuelle commande CMD). en supprimant l'instance à sa sortie.&lt;br /&gt;
  $ docker run --rm -it &amp;lt;image&amp;gt; sh&lt;br /&gt;
&lt;br /&gt;
* attacher avec un shell a une image active&lt;br /&gt;
  $ docker exec -it &amp;lt;image&amp;gt; sh&lt;br /&gt;
&lt;br /&gt;
* arrêter: &lt;br /&gt;
  $ docker stop &amp;lt;image&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== images ===&lt;br /&gt;
* push/pull :&lt;br /&gt;
  $ docker image ls&lt;br /&gt;
  $ docker images&lt;br /&gt;
* push/pull :&lt;br /&gt;
  $ docker pull &amp;lt;image&amp;gt;&lt;br /&gt;
* renommer une image&lt;br /&gt;
  $ docker image ls&lt;br /&gt;
  REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE&lt;br /&gt;
  c7_dev              latest              744765ef7a95        4 days ago          333MB&lt;br /&gt;
  $ docker tag c7_dev:latest c7tools:1.0&lt;br /&gt;
  $ docker image ls &lt;br /&gt;
  REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE&lt;br /&gt;
  c7tools             1.0                 744765ef7a95        4 days ago          333MB&lt;br /&gt;
  c7_dev              latest              744765ef7a95        4 days ago          333MB&lt;br /&gt;
 &lt;br /&gt;
* suppression/pull :&lt;br /&gt;
  $ docker image rm &amp;lt;image&amp;gt;...&lt;br /&gt;
  $ docker rmi &amp;lt;image&amp;gt;...&lt;br /&gt;
* supprimer les images inutilisées :&lt;br /&gt;
  $ docker image prune&lt;br /&gt;
* inspecter les images :&lt;br /&gt;
  $ docker inspect &amp;lt;image&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== nettoyage ===&lt;br /&gt;
&lt;br /&gt;
* supprimer les ressources inutiles (images et instances stoppées):&lt;br /&gt;
  $ docker system prune&lt;br /&gt;
&lt;br /&gt;
= Fabriquer des images =&lt;br /&gt;
== commandes image build ==&lt;br /&gt;
Depuis le répertoire contenant le Dockerfile&lt;br /&gt;
  $ docker builmt [-t &amp;lt;name&amp;gt;[:&amp;lt;vers&amp;gt;]] . &lt;br /&gt;
&lt;br /&gt;
== stockage docker == &lt;br /&gt;
Voir&lt;br /&gt;
  $ docker image inspect &amp;lt;image&amp;gt;&lt;br /&gt;
  $ docker volume inspect &amp;lt;volume&amp;gt;&lt;br /&gt;
  $ docker inspect &amp;lt;instance&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  $ sudo ls /var/lib/docker &lt;br /&gt;
  builder  buildkit  containers  image  network  overlay2  plugins  runtimes  swarm  tmp  trust  volumes&lt;br /&gt;
  $ sudo ls /var/lib/docker/overlay2&lt;br /&gt;
&lt;br /&gt;
Nettoyage des volumes &lt;br /&gt;
  # un volume précis: &lt;br /&gt;
  $ docker volume rm &amp;lt;volid&amp;gt;&lt;br /&gt;
  # tous les volumes non utilisés (volumes anonymes d'instances arrêtées par ex)&lt;br /&gt;
  $ docker volume&lt;br /&gt;
&lt;br /&gt;
== Dockerfile ==&lt;br /&gt;
&lt;br /&gt;
=== partage de dossiers avec le conteneur ===&lt;br /&gt;
Pas de déclaration dans le Dockerfile (c'est pour les volumes anonymes)&lt;br /&gt;
&lt;br /&gt;
A l'execution d'un conteneur:&lt;br /&gt;
  $ docker run -v $(pwd)/logs:/app/logs $(pwd)/ro_data:/app/ro_data:ro  myimg&lt;br /&gt;
&lt;br /&gt;
L'image voit le contenu du répertoire logs, et les logs écrits dedans donc persistants.&lt;br /&gt;
L'image voit le contenu du répertoire ro_data en lecture seule.&lt;br /&gt;
&lt;br /&gt;
voir https://docs.docker.com/storage/volumes/ &lt;br /&gt;
&lt;br /&gt;
= docker-compose =&lt;br /&gt;
== commandes ==&lt;br /&gt;
* '''docker-compose up -d''' vous permettra de démarrer l'ensemble des conteneurs en arrière-plan ;&lt;br /&gt;
* '''docker-compose ps''' vous permettra de voir le status de l'ensemble de votre stack ;&lt;br /&gt;
* '''docker-compose logs -f --tail 5''' vous permettra d'afficher les logs de votre stack ;&lt;br /&gt;
* '''docker-compose stop''' vous permettra d'arrêter l'ensemble des services d'une stack ;&lt;br /&gt;
* '''docker-compose down'''  vous permettra de détruire l'ensemble des ressources d'une stack ;&lt;br /&gt;
* '''docker-compose config''' vous permettra de valider la syntaxe de votre fichier docker-compose.yml.&lt;br /&gt;
&lt;br /&gt;
= Astuces divers points =&lt;br /&gt;
== commandes docker sans sudo ==&lt;br /&gt;
Message d'erreur:&lt;br /&gt;
  Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get     &lt;br /&gt;
  http://%2Fvar%2Frun%2Fdocker.sock/v1.40/images/json: dial unix /var/run/docker.sock: connect: permission denied&lt;br /&gt;
  &lt;br /&gt;
  $ ls -l /var/run/docker.sock&lt;br /&gt;
  srw-rw----. 1 root docker 0 Nov 17 14:29 /var/run/docker.sock&lt;br /&gt;
&lt;br /&gt;
Ajouter le groupe docker a l'utilisateur&lt;br /&gt;
  $ sudo usermod -a -G docker myusername&lt;br /&gt;
&lt;br /&gt;
== Trouver les images dépendant d'une image ==&lt;br /&gt;
&lt;br /&gt;
Cas d'usage: supprimer une image retourne l'erreur &amp;quot;image has dependent child images&amp;quot;&lt;br /&gt;
  $ docker image rm 7f6c67ae7dae &lt;br /&gt;
  Error response from daemon: conflict: unable to delete 7f6c67ae7dae (cannot be forced) - image has dependent child images&lt;br /&gt;
&lt;br /&gt;
définir la fonction (ex dans bashrc)&lt;br /&gt;
  docker_image_desc() {&lt;br /&gt;
    for image in $(docker images --quiet --filter &amp;quot;since=${1}&amp;quot;); do&lt;br /&gt;
      if [ $(docker history --quiet ${image} | grep ${1}) ]; then&lt;br /&gt;
        docker_image_desc &amp;quot;${image}&amp;quot;&lt;br /&gt;
      fi&lt;br /&gt;
    done&lt;br /&gt;
    echo &amp;quot;${1}&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
et:&lt;br /&gt;
  $ docker_image_desc 7f6c67ae7dae &lt;br /&gt;
  76b749bf3727&lt;br /&gt;
  7f6c67ae7dae&lt;br /&gt;
&lt;br /&gt;
[[Category:Containers]]&lt;br /&gt;
[[Category:Docker]]&lt;br /&gt;
[[Category:Tips&amp;amp;Tricks]]&lt;/div&gt;</summary>
		<author><name>Toine</name></author>	</entry>

	<entry>
		<id>https://wiki.tonioc.ovh/index.php?title=Docker&amp;diff=393</id>
		<title>Docker</title>
		<link rel="alternate" type="text/html" href="https://wiki.tonioc.ovh/index.php?title=Docker&amp;diff=393"/>
				<updated>2020-11-20T13:25:06Z</updated>
		
		<summary type="html">&lt;p&gt;Toine : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Docker tips &amp;amp; tricks =&lt;br /&gt;
== commandes docker-ce ==&lt;br /&gt;
=== instances ===&lt;br /&gt;
* démarrer :&lt;br /&gt;
  $ docker run [-ai] [--name myOwnName] &amp;lt;image&amp;gt;&lt;br /&gt;
  $ docker start [-ai] &amp;lt;instance&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* demarrer en interactif avec un shell (ne lance pas l'éventuelle commande CMD). en supprimant l'instance à sa sortie.&lt;br /&gt;
  $ docker run --rm -it &amp;lt;image&amp;gt; sh&lt;br /&gt;
&lt;br /&gt;
* attacher avec un shell a une image active&lt;br /&gt;
  $ docker exec -it &amp;lt;image&amp;gt; sh&lt;br /&gt;
&lt;br /&gt;
* arrêter: &lt;br /&gt;
  $ docker stop &amp;lt;image&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== images ===&lt;br /&gt;
* push/pull :&lt;br /&gt;
  $ docker image ls&lt;br /&gt;
  $ docker images&lt;br /&gt;
* push/pull :&lt;br /&gt;
  $ docker pull &amp;lt;image&amp;gt;&lt;br /&gt;
* renommer une image&lt;br /&gt;
  $ docker image ls&lt;br /&gt;
  REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE&lt;br /&gt;
  c7_dev              latest              744765ef7a95        4 days ago          333MB&lt;br /&gt;
  $ docker tag c7_dev:latest c7tools:1.0&lt;br /&gt;
  $ docker image ls &lt;br /&gt;
  REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE&lt;br /&gt;
  c7tools             1.0                 744765ef7a95        4 days ago          333MB&lt;br /&gt;
  c7_dev              latest              744765ef7a95        4 days ago          333MB&lt;br /&gt;
 &lt;br /&gt;
* suppression/pull :&lt;br /&gt;
  $ docker image rm &amp;lt;image&amp;gt;...&lt;br /&gt;
  $ docker rmi &amp;lt;image&amp;gt;...&lt;br /&gt;
* supprimer les images inutilisées :&lt;br /&gt;
  $ docker image prune&lt;br /&gt;
* inspecter les images :&lt;br /&gt;
  $ docker inspect &amp;lt;image&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== nettoyage ===&lt;br /&gt;
&lt;br /&gt;
* supprimer les ressources inutiles (images et instances stoppées):&lt;br /&gt;
  $ docker system prune&lt;br /&gt;
&lt;br /&gt;
= Fabriquer des images =&lt;br /&gt;
== commandes image build ==&lt;br /&gt;
Depuis le répertoire contenant le Dockerfile&lt;br /&gt;
  $ docker builmt [-t &amp;lt;name&amp;gt;[:&amp;lt;vers&amp;gt;]] . &lt;br /&gt;
&lt;br /&gt;
== stockage docker == &lt;br /&gt;
Voir&lt;br /&gt;
  $ docker image inspect &amp;lt;image&amp;gt;&lt;br /&gt;
  $ docker volume inspect &amp;lt;volume&amp;gt;&lt;br /&gt;
  $ docker inspect &amp;lt;instance&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  $ sudo ls /var/lib/docker &lt;br /&gt;
  builder  buildkit  containers  image  network  overlay2  plugins  runtimes  swarm  tmp  trust  volumes&lt;br /&gt;
  $ sudo ls /var/lib/docker/overlay2&lt;br /&gt;
&lt;br /&gt;
== Dockerfile ==&lt;br /&gt;
&lt;br /&gt;
=== partage de dossiers avec le conteneur ===&lt;br /&gt;
Pas de déclaration dans le Dockerfile (c'est pour les volumes anonymes)&lt;br /&gt;
&lt;br /&gt;
A l'execution d'un conteneur:&lt;br /&gt;
  $ docker run -v $(pwd)/logs:/app/logs $(pwd)/ro_data:/app/ro_data:ro  myimg&lt;br /&gt;
&lt;br /&gt;
L'image voit le contenu du répertoire logs, et les logs écrits dedans donc persistants.&lt;br /&gt;
L'image voit le contenu du répertoire ro_data en lecture seule.&lt;br /&gt;
&lt;br /&gt;
voir https://docs.docker.com/storage/volumes/ &lt;br /&gt;
&lt;br /&gt;
= docker-compose =&lt;br /&gt;
== commandes ==&lt;br /&gt;
* '''docker-compose up -d''' vous permettra de démarrer l'ensemble des conteneurs en arrière-plan ;&lt;br /&gt;
* '''docker-compose ps''' vous permettra de voir le status de l'ensemble de votre stack ;&lt;br /&gt;
* '''docker-compose logs -f --tail 5''' vous permettra d'afficher les logs de votre stack ;&lt;br /&gt;
* '''docker-compose stop''' vous permettra d'arrêter l'ensemble des services d'une stack ;&lt;br /&gt;
* '''docker-compose down'''  vous permettra de détruire l'ensemble des ressources d'une stack ;&lt;br /&gt;
* '''docker-compose config''' vous permettra de valider la syntaxe de votre fichier docker-compose.yml.&lt;br /&gt;
&lt;br /&gt;
= Astuces divers points =&lt;br /&gt;
== commandes docker sans sudo ==&lt;br /&gt;
Message d'erreur:&lt;br /&gt;
  Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get     &lt;br /&gt;
  http://%2Fvar%2Frun%2Fdocker.sock/v1.40/images/json: dial unix /var/run/docker.sock: connect: permission denied&lt;br /&gt;
  &lt;br /&gt;
  $ ls -l /var/run/docker.sock&lt;br /&gt;
  srw-rw----. 1 root docker 0 Nov 17 14:29 /var/run/docker.sock&lt;br /&gt;
&lt;br /&gt;
Ajouter le groupe docker a l'utilisateur&lt;br /&gt;
  $ sudo usermod -a -G docker myusername&lt;br /&gt;
&lt;br /&gt;
== Trouver les images dépendant d'une image ==&lt;br /&gt;
&lt;br /&gt;
Cas d'usage: supprimer une image retourne l'erreur &amp;quot;image has dependent child images&amp;quot;&lt;br /&gt;
  $ docker image rm 7f6c67ae7dae &lt;br /&gt;
  Error response from daemon: conflict: unable to delete 7f6c67ae7dae (cannot be forced) - image has dependent child images&lt;br /&gt;
&lt;br /&gt;
définir la fonction (ex dans bashrc)&lt;br /&gt;
  docker_image_desc() {&lt;br /&gt;
    for image in $(docker images --quiet --filter &amp;quot;since=${1}&amp;quot;); do&lt;br /&gt;
      if [ $(docker history --quiet ${image} | grep ${1}) ]; then&lt;br /&gt;
        docker_image_desc &amp;quot;${image}&amp;quot;&lt;br /&gt;
      fi&lt;br /&gt;
    done&lt;br /&gt;
    echo &amp;quot;${1}&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
et:&lt;br /&gt;
  $ docker_image_desc 7f6c67ae7dae &lt;br /&gt;
  76b749bf3727&lt;br /&gt;
  7f6c67ae7dae&lt;br /&gt;
&lt;br /&gt;
[[Category:Containers]]&lt;br /&gt;
[[Category:Docker]]&lt;br /&gt;
[[Category:Tips&amp;amp;Tricks]]&lt;/div&gt;</summary>
		<author><name>Toine</name></author>	</entry>

	</feed>