Docker : Différence entre versions
m (→stockage docker) |
m (→Dockerfile) |
||
| Ligne 67 : | Ligne 67 : | ||
== Dockerfile == | == Dockerfile == | ||
| − | === partage de dossiers avec le conteneur === | + | === partage de dossiers avec le conteneur : "bind mounts" === |
Pas de déclaration dans le Dockerfile (c'est pour les volumes anonymes) | Pas de déclaration dans le Dockerfile (c'est pour les volumes anonymes) | ||
A l'execution d'un conteneur: | A l'execution d'un conteneur: | ||
$ docker run -v $(pwd)/logs:/app/logs $(pwd)/ro_data:/app/ro_data:ro myimg | $ 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 logs, et les logs écrits dedans donc persistants. | ||
L'image voit le contenu du répertoire ro_data en lecture seule. | L'image voit le contenu du répertoire ro_data en lecture seule. | ||
| − | voir https://docs.docker.com/storage/volumes/ | + | voir https://docs.docker.com/storage/volumes/ |
= docker-compose = | = docker-compose = | ||
Version du 20 novembre 2020 à 13:41
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/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