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. |
Container
Un container est une instance d'une image. Il est créé à partir d'une image mais ne modifie jamais celle-ci.
Lance une commande dans un nouveau container. Téléchargement de l'image si besoin et création du container.
|
docker run <Repository<:Tag>>
|
|
docker start <ContainerName ou ContainerId>
docker stop <ContainerName ou ContainerId>
|
autres
|
docker ps
docker ps -as --format "{{.Names}} \t{{.Size}}\t\t{{.Image}}"
docker inspect <ContainerName ou ContainerId>
docker inspect -f '{{.Name}} - {{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' $(docker ps -aq)
docker rename <ContainerName> <NewContainerName>
docker rm <ContainerName ou ContainerId>
docker rm $(docker ps -a -q)
docker exec -ti <ContainerName> /bin/bash
docker exec <ContainerName> touch /tmp/test
docker cp /path/local-file.txt <ContainerName>:/tmp/file.txt
docker logs -f <ContainerName>
docker volume ls
docker volume rm $(docker volume ls -q)
|
|
docker images
docker pull <Repository<:Tag>>
docker commit <ContainerId> <ImageName>
docker rmi <Repository:<Tag> ou ImageId>
docker image rm $(docker images -a -q)
docker tag [image_ID] [Nouveau_Tag]
docker rmi [Ancien_Tag]
docker images -f dangling=true
docker images purge
docker search <image name>
|
Images utiles:
- ubuntu
- debian
- alpine
- microsoft/dotnet
- nginx
|
docker build -t [image-name] .
docker build -t [image-name] -f ./Other-Dockerfile .
|
Dockerfile
|
FROM [image-name]
RUN [command]
COPY [source] [destination]
|
 |
Avec COPY, la source doit se trouver dans le build context. |
Exemples
|
docker pull mcr.microsoft.com/dotnet/sdk:6.0
docker run --rm -v $(pwd):/app -w /app mcr.microsoft.com/dotnet/sdk:6.0 dotnet publish -c Release -o out
|
|
docker run -dit --name apache-php -p 8080:80 -v /host/path:/var/www/html php:7.2-apache
|
Dockerfile
|
FROM php:7.2-cli
COPY . /usr/src/myapp
WORKDIR /usr/src/myapp
CMD [ "php", "./your-script.php" ]
|
|
docker run -dit --name apache -p 8080:80 -v /host/path:/usr/local/apache2/htdocs/ httpd
|
docker-compose.yml
|
image: mariadb
restart: always
environment:
MYSQL_ROOT_PASSWORD: ***
MYSQL_DATABASE: mydb
MYSQL_USER: myuser
MYSQL_PASSWORD: ***
MYSQL_INITDB_SKIP_TZINFO: 1
|
Restore sql dump file
Depuis un hôte Linux:
|
docker exec -i [mariadb-comtainer] sh -c 'exec mysql -uroot -p"$MYSQL_ROOT_PASSWORD"' < /path/host/dump.sql
|
Depuis un hôte Windows:
|
docker cp sql-dump.sql [mariadb-container]:/
docker exec [mariadb-container] sh -c 'mysql -u root -p$MYSQL_ROOT_PASSWORD -D mydb -e ''source sql-dump.sql;'''
get-content C:\path\host\dump.sql | docker exec -i [mariadb-container] exec mysql -uroot -p"$MYSQL_ROOT_PASSWORD"
|
bugfix
docker-compose.yml
|
image: mysql
command: --default-authentication-plugin=mysql_native_password
restart: always
environment:
MYSQL_ROOT_PASSWORD: ***
MYSQL_DATABASE: mydb
MYSQL_USER: myuser
MYSQL_PASSWORD: ***
|
borg
|
docker run -v c:/Users/<user>/Documents:/media/data --name borg -ti alpine
apk update
apk upgrade
apk add borgbackup
docker exec -ti borg ash
|
Swarm mode
Faire fonctionner plusieurs engine en même temps (ex: plusieurs services qui communiquent entre eux).
docker-compose.yml
|
version: '3.9'
services:
db:
container_name: 'wiki-mariadb'
image: mariadb:10.5.8
restart: always
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: mediawikidb
MYSQL_INITDB_SKIP_TZINFO: 1
wiki:
container_name: 'wiki-mediawiki'
image: mediawiki:1.35.1
restart: always
ports:
- 8080:80
|
|
docker-compose up
docker-compose ps
docker-compose stop
docker-compose down
docker-compose exec [service name] [command]
docker-compose logs -f [service name]
docker-compose images
|
|
pacman -S docker docker-compose
sudo gpasswd -a $USER docker
systemctl start docker
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
- Clique-droit sur l'icône Docker → Settings → Shared Drives
|
docker run -v [Host_path]:[Container_path] [image]
docker run --mount source=[Host_path],target=[Container_path] [image]
|
|
choco install docker-desktop
|
 |
docker-desktop inclut Docker Engine, Docker CLI client, Docker Compose, Docker Machine, et Kitematic. |
GUI
Kitematic
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 |
Installation sur Windows avec container Linux
|
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.