Docker

De TechWik
Révision datée du 20 novembre 2020 à 13:42 par Toine (discussion | contributions) (Dockerfile)
Aller à : navigation, rechercher

Docker tips & tricks

commandes docker-ce

instances

  • démarrer :
 $ docker run [-ai] [--name myOwnName] <image>
 $ docker start [-ai] <instance>
  • demarrer en interactif avec un shell (ne lance pas l'éventuelle commande CMD). en supprimant l'instance à sa sortie.
 $ docker run --rm -it <image> sh
  • attacher avec un shell a une image active
 $ docker exec -it <image> sh
  • arrêter:
 $ docker stop <image>

images

  • push/pull :
 $ docker image ls
 $ docker images
  • push/pull :
 $ docker pull <image>
  • renommer une image
 $ docker image ls
 REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
 c7_dev              latest              744765ef7a95        4 days ago          333MB
 $ docker tag c7_dev:latest c7tools:1.0
 $ docker image ls 
 REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
 c7tools             1.0                 744765ef7a95        4 days ago          333MB
 c7_dev              latest              744765ef7a95        4 days ago          333MB

  • suppression/pull :
 $ docker image rm <image>...
 $ docker rmi <image>...
  • supprimer les images inutilisées :
 $ docker image prune
  • inspecter les images :
 $ docker inspect <image>

nettoyage

  • supprimer les ressources inutiles (images et instances stoppées):
 $ docker system prune

Fabriquer des images

commandes image build

Depuis le répertoire contenant le Dockerfile

 $ docker builmt [-t <name>[:<vers>]] . 

stockage docker

Voir

 $ docker image inspect <image>
 $ docker volume inspect <volume>
 $ docker inspect <instance>
 $ sudo ls /var/lib/docker 
 builder  buildkit  containers  image  network  overlay2  plugins  runtimes  swarm  tmp  trust  volumes
 $ sudo ls /var/lib/docker/overlay2

Nettoyage des volumes

 # un volume précis: 
 $ docker volume rm <volid>
 # tous les volumes non utilisés (volumes anonymes d'instances arrêtées par ex)
 $ docker volume

Dockerfile

partage de dossiers avec le conteneur : "bind mounts"

Pas de déclaration dans le Dockerfile (c'est pour les volumes anonymes)

A l'execution d'un conteneur:

 $ docker run -v $(pwd)/logs:/app/logs $(pwd)/ro_data:/app/ro_data:ro  myimg
 ou équivalent avec la commande mount 
 $ docker run --mount type=bind,source=$(pwd)/logs,target=/app/logs \
     --mount type=bind,source=$(pwd)/ro_data,target=/app/ro_data,readonly 

L'image voit le contenu du répertoire logs, et les logs écrits dedans donc persistants. L'image voit le contenu du répertoire ro_data en lecture seule.

voir https://docs.docker.com/storage/bind-mounts/ , https://docs.docker.com/storage/volumes/

docker-compose

commandes

  • docker-compose up -d vous permettra de démarrer l'ensemble des conteneurs en arrière-plan ;
  • docker-compose ps vous permettra de voir le status de l'ensemble de votre stack ;
  • docker-compose logs -f --tail 5 vous permettra d'afficher les logs de votre stack ;
  • docker-compose stop vous permettra d'arrêter l'ensemble des services d'une stack ;
  • docker-compose down vous permettra de détruire l'ensemble des ressources d'une stack ;
  • docker-compose config vous permettra de valider la syntaxe de votre fichier docker-compose.yml.

Astuces divers points

commandes docker sans sudo

Message d'erreur:

 Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get     
 http://%2Fvar%2Frun%2Fdocker.sock/v1.40/images/json: dial unix /var/run/docker.sock: connect: permission denied
 
 $ ls -l /var/run/docker.sock
 srw-rw----. 1 root docker 0 Nov 17 14:29 /var/run/docker.sock

Ajouter le groupe docker a l'utilisateur

 $ sudo usermod -a -G docker myusername

Trouver les images dépendant d'une image

Cas d'usage: supprimer une image retourne l'erreur "image has dependent child images"

 $ docker image rm 7f6c67ae7dae 
 Error response from daemon: conflict: unable to delete 7f6c67ae7dae (cannot be forced) - image has dependent child images

définir la fonction (ex dans bashrc)

 docker_image_desc() {
   for image in $(docker images --quiet --filter "since=${1}"); do
     if [ $(docker history --quiet ${image} | grep ${1}) ]; then
       docker_image_desc "${image}"
     fi
   done
   echo "${1}"
 }

et:

 $ docker_image_desc 7f6c67ae7dae 
 76b749bf3727
 7f6c67ae7dae