---
# System prepended metadata

title: Cheatsheet Docker

---

Cheatsheet Docker
===

_NB: most of commands accept as argument names or container id._

`docker ps` shows running containers.

`docker run -it image_name sh` run and show the content of the container (handy to see files and folders in it)

`docker exec -it image_name sh` idem as the previous line, except it works only if container is already up

`docker logs` gets logs from container. (You can use a custom log driver, but logs is only available for json-file and journald in 1.10).

`docker inspect` looks at all the info on a container (including IP address).

`docker events` gets events from container.

`docker port` shows public facing port of container.

`docker top` shows running processes in container.

`docker stats` shows containers' resource usage statistics.

`docker diff` shows changed files in the container's FS.

`docker ps -a` shows running and stopped containers.

`docker stats --all` shows a list of all containers, default shows just running.

`docker volume inspect medle-pgdata` shows infos about volumes like the physical location of the volume.

`sudo docker image ls` see all image created (image is different than a container)

`docker system prune` remove not used containers.

`docker system prune --volumes` remove also the volumes.

`docker-compose rm` remove the container defined in docker-compose.yml.

`docker volume rm emjpm_emjpm-pgdata` remove a volume (`docker volume ls` to see the details of volumes).

## Docker-compose

`docker-compose config` see the configuration applied via .env files.

`docker-compose logs` see logs of all containers.

`docker-compose logs -f app` see logs of app container (name app is found in docker-compose.yml), with -f flag for logs with interactivity.

`sudo docker-compose up --build -d` : force le rebuild des containers et lancement en arrière-plan


__Docker-compose et .env__

Si un fichier .env est à la racine du fichier `docker-compose.yaml`, alors il servira pour la substitution des variables. 

`docker-compose config` pour voir le fichier yaml avec l'interpolations des variables.

>Attention au cache Docker
Si docker ne voit pas de différence dans le code, il prendra une version précédente de ce layer Docker, si celui- il existe en cache. Ce qui est problématique pour le cas où l'on veut prendre en compte une nouvelle valeur pour une variable d'environnement.

Les variables d'environnement sont donc prises en compte au build time.

Si l'on veut modifier ces variables, il est nécessaire de:
- modifier le `.env`
- lancer `docker-compose build --no-cache` pour interdire de prendre une ancienne version du layer avec l'ancienne valeur de la variable d'environnement

## Docker Desktop

Dans les préférences, on peut modifier les ressources:
- 1 CPU (par défaut 4 sur mon MBP)
- 1 Go de RAM (par défaut 4 Go sur mon MBP)
- 1 Go de swap (par défaut 2 Go sur mon MBP)
- 16 Go de Disk image size (par défaut + de 50 Go sur mon MBP)

Dans l'onglet File sharing, supprimer les répertoires non utiles:
- /Users
- /Volumes

Cela évite de solliciter le CPU quand un fichier change dans ces répertoires. Le file sharing n'a d'intérêt que si l'on développait et qu'un container devait prendre en compte ces fichiers.

Si Docker Desktop tourne et ne parvient pas à vraiment démarrer, on peut aller dans Troubleshoot:
- Faire clean/purge data

Si ça ne marche toujours pas, on peut faire:
- Reset to factory default

Attention: dans ces 2 cas, les volumes, les images et les containers seront effacés.


