Copier des fichiers entre hôte et container
Il est possible de copier des fichiers depuis la machine hôte vers un container et inversément. Pour cela, nous utiliserons la commande “cp”.
Commande :
docker cp ./DossierCible ContainerName:DossierDestination
Exemple :
docker cp ./test.txt alpine_test:app/Nous avons a présent un fichier test.txt dans le donner /app de notre container. Cela fonctionne aussi pour les dossiers.
L’inverse à présent, du container à la machine hôte :
Commande :
docker cp ContainerName:DossierDestination ./DossierCible
Exemple :
docker cp alpine_test:app/test2 ./Il faut faire attention au droits. le dossier de destination doit avoir les droit en écriture nécessaire, donc ceux du container.
Exemple, sur WSL il y a pas de problème. Mais sur une machine ubuntu20.04, étant donner que l’utilisateur actuel n’est pas dans le group docker, il faudra faire attention à régler cela. Mais ce chapitre suivra dans un prochain article.
Inspecter les changement d’un container
La commande “diff” va nous permettre d’afficher toutes les différence (Ajout, Modification, Suppression) de fichier dans un container.
Elle s’utilise ainsi :
Commande :
docker diff ContainerNom
Exemple :
docker diff alpine_test
Exemple de retour :
A /app
A /app/salut.txt
A /app/test
A /app/test2
A /app/text.txt
C /root
A /root/.ash_historyOn peut voir ici toutes les modifications apportées a notre container.
Afficher les utilisation de ressources d’une container
Nous avons aussi la possibilité d’afficher les ressources que les container utilisent.
Commande :
docker top ContainerName
Exemple :
docker top alpine_test
Exemple de routour :
UID PID PPID C STIME TTY TIME CMD
root 120707 120690 0 19:38 ? 00:00:00 /bin/sh
root 121864 120690 0 19:46 ? 00:00:03 ping google.comNous remarquerons que cette commande renvoie le même résultat que la commande top dans le terminal linux. mais nous préférerons utiliser cette commande directement dans docker.
La prochaine commande va lister les processus du container du point de vue de la machine hôte :
Aller dans le bash du container :
docker exec -it redis_test bash
Mise a jour des paquet et installation du paquet procps :
apt update && apt install procps
Affichage de la liste de processus :
ps -efObtenir toutes les options de configuration d’un container
Pour obtenir la configuration d’un container, nous utiliserons la commande suivante :
docker inspect ContainerNameCe qui nous donne par exemple :
docker inspect redis_testDonnera :
[
{
"Id": "1e68754038f88895c7d6ad15a238e820384670f27242faabe785de4d281809fd",
"Created": "2021-03-19T20:18:11.257421042Z",
"Path": "docker-entrypoint.sh",
"Args": [
"redis-server"
],
"State": {
"Status": "running",
"Running": true,
"Paused": false,
"Restarting": false,
"OOMKilled": false,
"Dead": false,
"Pid": 125397,
"ExitCode": 0,
"Error": "",
"StartedAt": "2021-03-19T20:19:54.489856847Z",
"FinishedAt": "2021-03-19T20:19:10.425424051Z"
},
"Image": "sha256:a617c1c92774952d26fb87ba9a32fdc4d424fb7be02bbc84d6fefb517f3d4c6c",
"ResolvConfPath": "/var/snap/docker/common/var-lib-docker/containers/1e68754038f88895c7d6ad15a238e820384670f27242faabe785de4d281809fd/resolv.conf",
"HostnamePath": "/var/snap/docker/common/var-lib-docker/containers/1e68754038f88895c7d6ad15a238e820384670f27242faabe785de4d281809fd/hostname",
"HostsPath": "/var/snap/docker/common/var-lib-docker/containers/1e68754038f88895c7d6ad15a238e820384670f27242faabe785de4d281809fd/hosts",
"LogPath": "/var/snap/docker/common/var-lib-docker/containers/1e68754038f88895c7d6ad15a238e820384670f27242faabe785de4d281809fd/1e68754038f88895c7d6ad15a238e820384670f27242faabe785de4d281809fd-json.log",
"Name": "/redis_test",
"RestartCount": 0,
"Driver": "overlay2",
"Platform": "linux",
"MountLabel": "",
"ProcessLabel": "",
"AppArmorProfile": "docker-default",
"ExecIDs": null,
"HostConfig": {
"Binds": null,
"ContainerIDFile": "",
"LogConfig": {
"Type": "json-file",
"Config": {}
},
"NetworkMode": "default",
"PortBindings": {},
"RestartPolicy": {
"Name": "no",
"MaximumRetryCount": 0
},
"AutoRemove": false,
"VolumeDriver": "",
"VolumesFrom": null,
"CapAdd": null,
"CapDrop": null,
"Capabilities": null,
"Dns": [],
"DnsOptions": [],
"DnsSearch": [],
"ExtraHosts": null,
"GroupAdd": null,
"IpcMode": "private",
"Cgroup": "",
"Links": null,
"OomScoreAdj": 0,
"PidMode": "",
"Privileged": false,
"PublishAllPorts": false,
"ReadonlyRootfs": false,
"SecurityOpt": null,
"UTSMode": "",
"UsernsMode": "",
"ShmSize": 67108864,
"Runtime": "runc",
"ConsoleSize": [
0,
0
],
"Isolation": "",
"CpuShares": 0,
"Memory": 0,
"NanoCpus": 0,
"CgroupParent": "",
"BlkioWeight": 0,
"BlkioWeightDevice": [],
"BlkioDeviceReadBps": null,
"BlkioDeviceWriteBps": null,
"BlkioDeviceReadIOps": null,
"BlkioDeviceWriteIOps": null,
"CpuPeriod": 0,
"CpuQuota": 0,
"CpuRealtimePeriod": 0,
"CpuRealtimeRuntime": 0,
"CpusetCpus": "",
"CpusetMems": "",
"Devices": [],
"DeviceCgroupRules": null,
"DeviceRequests": null,
"KernelMemory": 0,
"KernelMemoryTCP": 0,
"MemoryReservation": 0,
"MemorySwap": 0,
"MemorySwappiness": null,
"OomKillDisable": false,
"PidsLimit": null,
"Ulimits": null,
"CpuCount": 0,
"CpuPercent": 0,
"IOMaximumIOps": 0,
"IOMaximumBandwidth": 0,
"MaskedPaths": [
"/proc/asound",
"/proc/acpi",
"/proc/kcore",
"/proc/keys",
"/proc/latency_stats",
"/proc/timer_list",
"/proc/timer_stats",
"/proc/sched_debug",
"/proc/scsi",
"/sys/firmware"
],
"ReadonlyPaths": [
"/proc/bus",
"/proc/fs",
"/proc/irq",
"/proc/sys",
"/proc/sysrq-trigger"
]
},
"GraphDriver": {
"Data": {
"LowerDir": "/var/snap/docker/common/var-lib-docker/overlay2/1e01389e3ab846a9b3ca6e46e7b00ede2feee67ff10582a37108886aa77cb92c-init/diff:/var/snap/docker/common/var-lib-docker/overlay2/43745c6435180e7859d30f0b0063dfd57cd5bf416b9459ea5a6a309aa7f43695/diff:/var/snap/docker/common/var-lib-docker/overlay2/57b9f3103467d28824fa20a2ed8ae96503573bf7b75f4d0095189881720d42c1/diff:/var/snap/docker/common/var-lib-docker/overlay2/413922a7d46ce641450c716f5cb0224e061aaa01c4d95bcd73d0842cf3e99dd4/diff:/var/snap/docker/common/var-lib-docker/overlay2/d44b5f9f4c992c24b0c17a0e906f214be2c406caa8058534147e8e10c49e40c9/diff:/var/snap/docker/common/var-lib-docker/overlay2/bf870295c95bb6275b07e9b7b459a4a3f150d5cb3df016ae396251ea481b4c78/diff:/var/snap/docker/common/var-lib-docker/overlay2/f7727d5ed88c465313b2f794c452d02313991f46404674a35b97f676410a99c4/diff",
"MergedDir": "/var/snap/docker/common/var-lib-docker/overlay2/1e01389e3ab846a9b3ca6e46e7b00ede2feee67ff10582a37108886aa77cb92c/merged",
"UpperDir": "/var/snap/docker/common/var-lib-docker/overlay2/1e01389e3ab846a9b3ca6e46e7b00ede2feee67ff10582a37108886aa77cb92c/diff",
"WorkDir": "/var/snap/docker/common/var-lib-docker/overlay2/1e01389e3ab846a9b3ca6e46e7b00ede2feee67ff10582a37108886aa77cb92c/work"
},
"Name": "overlay2"
},
"Mounts": [
{
"Type": "volume",
"Name": "7c7807408873c6aeda9f60c8f9e639262ce0cebfd399d3f8bf05dc594d2da94f",
"Source": "/var/snap/docker/common/var-lib-docker/volumes/7c7807408873c6aeda9f60c8f9e639262ce0cebfd399d3f8bf05dc594d2da94f/_data",
"Destination": "/data",
"Driver": "local",
"Mode": "",
"RW": true,
"Propagation": ""
}
],
"Config": {
"Hostname": "1e68754038f8",
"Domainname": "",
"User": "",
"AttachStdin": false,
"AttachStdout": true,
"AttachStderr": true,
"ExposedPorts": {
"6379/tcp": {}
},
"Tty": false,
"OpenStdin": false,
"StdinOnce": false,
"Env": [
"PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
"GOSU_VERSION=1.12",
"REDIS_VERSION=6.2.1",
"REDIS_DOWNLOAD_URL=http://download.redis.io/releases/redis-6.2.1.tar.gz",
"REDIS_DOWNLOAD_SHA=cd222505012cce20b25682fca931ec93bd21ae92cb4abfe742cf7b76aa907520"
],
"Cmd": [
"redis-server"
],
"Image": "redis",
"Volumes": {
"/data": {}
},
"WorkingDir": "/data",
"Entrypoint": [
"docker-entrypoint.sh"
],
"OnBuild": null,
"Labels": {}
},
"NetworkSettings": {
"Bridge": "",
"SandboxID": "fb3608b014d55c23a879ce58887b48c8e698d27ac3079826c18188c90b541745",
"HairpinMode": false,
"LinkLocalIPv6Address": "",
"LinkLocalIPv6PrefixLen": 0,
"Ports": {
"6379/tcp": null
},
"SandboxKey": "/run/snap.docker/netns/fb3608b014d5",
"SecondaryIPAddresses": null,
"SecondaryIPv6Addresses": null,
"EndpointID": "9aa340f5eaf7fc6f23fcecf03e0d3811207db077fcbaf361f8746288e27b6756",
"Gateway": "172.17.0.1",
"GlobalIPv6Address": "",
"GlobalIPv6PrefixLen": 0,
"IPAddress": "172.17.0.3",
"IPPrefixLen": 16,
"IPv6Gateway": "",
"MacAddress": "02:42:ac:11:00:03",
"Networks": {
"bridge": {
"IPAMConfig": null,
"Links": null,
"Aliases": null,
"NetworkID": "7dfdda01e174a4cc5a88ec13195c408f6cf297c0b74eb5894789f8e64728e9e2",
"EndpointID": "9aa340f5eaf7fc6f23fcecf03e0d3811207db077fcbaf361f8746288e27b6756",
"Gateway": "172.17.0.1",
"IPAddress": "172.17.0.3",
"IPPrefixLen": 16,
"IPv6Gateway": "",
"GlobalIPv6Address": "",
"GlobalIPv6PrefixLen": 0,
"MacAddress": "02:42:ac:11:00:03",
"DriverOpts": null
}
}
}
}
]Visualisation de l’utilisation des ressources par les container
Pour visualiser en temps réel l’utilisation des ressources par nos containers en cours d’exécution, la commande “stats” sera utilisée :
docker statsVisualisation de l’espace disque utilisé
L’espace disque utilisé sur la machine hôte peut être visualisé en utilisant la commande suivante :
docker system dfOn détaillera ce resultat avec l’option -v :
docker system df -v

