Docker

De Banane Atomic
Aller à la navigationAller à la recherche

Liens

Généralités

Docker permet de créer des environnements isolés du reste du système.
Il ne permet pas de faire de virtualisation et donc de faire fonctionner d'autres OS.
Couplé avec un système de virtualisation (Hyper-V), il permet de créer des environnements isolés sur d'autres OS virtualisés (containers Linux sous un OS Windows).

  • une image représente le programme avant son installation (installer ou une archive zip)
  • un container représente le programme une fois installé
Les images dockers sont pour les systèmes 64 bits.

Utilisation

Container

Bash.svg
# création et lancement d'un container (et téléchargement de son image si besoin)
docker run --name <ContainerName> -p 8080:80 -d <Repository<:Tag>>
# -p 8080:80 mapping du port 8080 du host vers le port 80 du container
# -d : detach, run container in background and print container ID
# -v <LocalPath>:<ContainerPath>  monter un dossier local dans le container (-v c:/folder:/media/folder)
# --rm  Automatically remove the container when it exits

# démarrer d'un container
docker start <ContainerName>

# arrêter un container
docker stop <ContainerName ou ConatainerId>

# lister les containers actifs
docker ps
# -a tous les containers
# lister tous les containers et leur tailles
docker ps -as --format "{{.Names}}    \t{{.Size}}\t\t{{.Image}}"

# renommer un container
docker rename <ContainerName> <NewContainerName>

# supprimer un container
docker rm <ContainerName ou ConatainerId>

Images

Bash.svg
# lister les images
docker images

# télécharger une image depuis Docker Store
docker pull <Repository<:Tag>>

# sauvegarder l'état du container dans une image
docker commit <ContainerId> <ImageName>

# supprimer une image
docker rmi <Repository:<Tag> ou ImageId>

# renommer une image : créer un nouveau tag et supprimer l'ancien
docker tag [image_ID] [Nouveau_Tag]
docker rmi [Ancien_Tag]

# lister les dangling images
docker images -f dangling=true
# supprimer les dangling images
docker images purge

# rechercher une image sur docker store
docker search <image name>

Images utiles:

  • ubuntu
  • debian
  • alpine
  • microsoft/dotnet
  • nginx

Autres

Bash.svg
# se connecter au container via un terminal bash
docker exec -ti <ContainerName> /bin/bash
# -t : tty, allocate a pseudo-TTY
# -i : interactive, keep STDIN open even if not attached
# Ctrl+P+Q pour sortir du terminal bash sans tuer le processus

# exécuter une commande dans un container
docker exec <ContainerName> touch /tmp/test
# -e VAR=1  définit une variable d'environnement
# -w /root  change le working directory

# copier un fichier dans un container
docker cp /path/local-file.txt <ContainerName>:/tmp/file.txt

# suivre le log d'un container en direct
docker logs -f <ContainerName>

Exemple: docker contenant borg

Bash.svg
# créer un container à partir de l'image archlinux
# monter Documents dans /media/data
docker run -v c:/Users/<user>/Documents:/media/data --name borg -ti alpine

# depuis le container
# màj
apk update
apk upgrade
# màj puis installer borg
apk add borgbackup

# se connecter au container
docker exec -ti borg ash

Swarm mode

Faire fonctionner plusieurs engine en même temps (ex: plusieurs services qui communiquent entre eux).

Installation

Bash.svg
# installer docker
pacman -S docker

# ajouter l'utilisateur au group docker
sudo gpasswd -a $USER docker
# Anyone added to the docker group is root equivalent

# démarrer le service
systemctl start docker
# vérifier que le service fonctionne
docker info

Image location

/var/lib/docker
Surcharge de docker.service pour le changement de l'emplacement de stockage des images:

/etc/systemd/system/docker.service.d/docker-storage.conf
[Service]
ExecStart= 
ExecStart=/usr/bin/dockerd --data-root=/path/to/new/location/docker -H fd://

Erreurs

Your Linux kernel version is not supported for running docker

Linux kernel version 3.8.x.x-x is not supported for running docker. Please upgrade your kernel to 3.10.0 or newer.

Windows

À l'installation, choisir entre conteneur Windows et Linux.
Au lancement Docker demande l'activation d'Hyper-V (ce qui n'est pas compatible avec VirtualBox) et de Containers features.
Activer Hyper-V à la main: Menu → Turn Windows features on or off → cocher Hyper-V

  • Historiquement Windows utilisait Hyper-V pour faire tourner une VM Linux dans laquelle était installée Docker.
  • Maintenant, Windows peut faire tourner nativement des conteneurs Linux sans VM.

Windows Containers on Windows 10

Monter un dossier host dans un container

  1. Clique-droit sur l'icône Docker → Settings → Shared Drives
Powershell.png
docker run -v [Host_path]:[Container_path] [image]
docker run --mount source=[Host_path],target=[Container_path] [image]

Kitematic - GUI

Clique-droit sur l'icône docker → Kitematic

Si les flèches du clavier ne fonctionne pas c'est parce qu'EXEC à été lancé avec sh

Entrer la commande bash

Ou Options (engrenage en bas à gauche) → Exec command shell = bash

Portainer - GUI

Installation sur Windows avec container Linux

Powershell.png
md C:\ProgramData\Portainer
docker run -d -p 9000:9000 --name portainer --restart always -v /var/run/docker.sock:/var/run/docker.sock -v C:\ProgramData\Portainer:/data portainer/portainer
Error response from daemon: driver failed programming external connectivity on endpoint nervous_meninsky (5b7b910bf03ed74ba38b7dc442b6cc6c159ad8bad75b482884de72cd5a555ad4): Error starting userland proxy: mkdir /port/tcp:0.0.0.0:9000:tcp:172.17.0.2:9000: input/output error.