8. Docker : Copier des fichiers / Inspecter un container

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_history

On 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.com

Nous 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 -ef

Obtenir toutes les options de configuration d’un container

Pour obtenir la configuration d’un container, nous utiliserons la commande suivante :

docker inspect ContainerName

Ce qui nous donne par exemple :

docker inspect redis_test

Donnera :

[
    {
        "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 stats

Visualisation de l’espace disque utilisé

L’espace disque utilisé sur la machine hôte peut être visualisé en utilisant la commande suivante :

docker system df

On détaillera ce resultat avec l’option -v :

docker system df -v

Image par défaut
administrateur
Publications: 25

Laisser un commentaire