Ceci est une ancienne révision du document !
Table des matières
Docker
Doc
Driver de stockage
Dockerfile
docker-compose
Systemd
Sécurité
Plugins
API
Autres
Commandes docker
docker run
Crée et démarre un conteneur à partir d'une image :
Options intéressantes :
- –name : donne un nom au conteneur
- –rm : efface le contener quand il se termine
- -it : mode intéractif (-i) avec pseudo TTY –t)
- -d / –detach : Lance le conteneur en backgroud
- –read-only : monte le contener en RO
- -v / –volume : Map un volume
- -p / –publish : Map un port
- -P / –publish-all : Map l’ensemble des ports de façon aléatoire
- –expose : Expose le port d'un conteneur (pour un link par exemple)
Exemples :
$ docker run --rm -v /home/gigix:/foo:ro -w /foo -i -p 127.0.0.1:80:8080 -t ubuntu bash
$ docker run -itd --network=my-net --ip=10.10.9.75 busybox
$ docker run --device=/dev/sdc:/dev/xvdc --device=/dev/sdd --device=/dev/zero:/dev/nulo -i -t ubuntu ls -l /dev/{xvdc,sdd,nulo}
$ docker run --restart=always redis
Copie la configuration des volumes d'un conteneur à l'autre :
$ docker create -v /dbdata --name dbstore training/postgres /bin/true $ docker run -d --volumes-from dbstore --name db1 training/postgres $ docker run -d --volumes-from dbstore --name db2 training/postgres
Link ce conteneur avec db (–link id[:alias]) :
$ docker run -t -i --rm --link db:db training/webapp /bin/bash
docker create
Crée un nouveau conteneur à partir d'une image sans le démarrer :
Similaire à docker run sauf qu'il ne démarre pas le conteneur.
$ docker create -t -i fedora bash
docker attach
Interagit avec le processus du conteneur :
Pratique si un prompt se présente afin d'y répondre.
Pour se détacher ⇒ CTRL-p CTRL-q (on peut le changer avec l'option –detach-keys).
$ docker attach 2d5e8999b138
docker images
$ docker images --no-trunc
docker rmi $(docker images -f "dangling=true" -q)
$ docker images --digests
docker diff
Affiche les différences entre le conteneur et son image :
$ docker diff 2d5e8999b138
- A : Add
- D : Delete
- C : Change
docker history
docker tag
$ docker tag 0e5574283393 fedora/httpd:version1.0
$ docker tag httpd fedora/httpd:version1.0
docker rename
$ docker rename 2d5e8999b138 myconteneur_V1
docker exec
Lance une commande dans un conteneur :
$ docker exec -it bf283346cee9 bash
docker cp
Copie un fichier dans ou hors du conteneur :
docker cp foo.txt mycontainer:/foo.txt docker cp mycontainer:/foo.txt foo.txt
Une autre méthode pour décompresser un tar dans le /tmp du conteneur :
$ cat Docker.tgz | docker exec -i 2d5e8999b138 tar xzf - -C /tmp
docker events
Affiche le journal d'évenement de docker :
$ docker events --since '2016-10-22' --filter 'container=b6a2bd1f6ea8' --filter 'event=stop'
docker login
$ docker login
$ docker login localhost:8080
Cela crée le fichier $HOME/.docker/config.json.
docker logout
Se déconnecter du docker hub :
$ docker logout localhost:8080
docker pull
$ docker pull debian:jessie
$ docker pull ubuntu@sha256:45b23dee08af5e43a7fea6c4cf9c25ccf269ee113168c19722f87876677c5cb2
docker pull myregistry.local:5000/testing/test-image
docker pull --all-tags fedora
docker push
docker search
$ docker search --filter "stars=3" --filter "is-automated=true" --no-trunc --limit 5 debian
$ docker search --filter "is-official=true" debian
docker rmi
$ docker rmi localhost:5000/test/busybox@sha256:cbbf2f9a99b47fc460d422812b6a5adff7dfee951d8fa2e4a98caa0
$ docker rmi -f fd484f19954f
$ docker rmi test
docker rm
Supprime tous les conteneurs stoppés :
$ docker rm $(docker ps -a -q)
Supprime le lien entre webapp et redis :
$ docker rm --link /webapp/redis
Supprime le conteneur redis et ses volumes associés:
$ docker rm -v redis
docker ps
- -f, –filter value : Filter output based on conditions provided (default [])
- exited=<int> an exit code of <int>
- label=<key> or label=<key>=<value>
- status=(created|restarting|running|paused|exited)
- name=<string> a container's name
- id=<ID> a container's ID
- before=(<container-name>|<container-id>)
- since=(<container-name>|<container-id>)
- ancestor=(<image-name>[:tag]|<image-id>|<image@digest>)
containers created from an image or a descendant.
- –format : Pretty-print containers using a Go template
- .ID : Container ID
- .Image : Image ID
- .Command : Quoted command
- .CreatedAt : Time when the container was created.
- .RunningFor : Elapsed time since the container was started.
- .Ports : Exposed ports.
- .Status : Container status.
- .Size : Container disk size.
- .Names : Container names.
- .Labels : All labels assigned to the container.
- .Label : Value of a specific label for this container. For example '{{.Label "com.docker.swarm.cpu"}}'
- .Mounts : Names of the volumes mounted in this container.
$ docker ps -a --filter 'exited=137'
$ docker ps --format "table {{.ID}}\t{{.Labels}}"
docker logs
docker start
docker stop
docker restart
docker kill
docker wait
docker pause
docker unpause
docker version
Affiche la version de docker :
$ docker version --format '{{.Server.Version}}'
$ docker version --format '{{json .}}'
docker info
docker top
docker inspect
docker commit
Crée une nouvelle image à partir d'un conteneur :
$ docker commit -m "Added json gem" -a "GigiX" b6a2bd1f6ea8 gigi206/test:v1
$ docker inspect -f "{{ .Config.Env }}" gigi206/test:v1
[HOME=/ PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin]
$ docker commit --change "ENV DEBUG true" b6a2bd1f6ea8 gigi206/test:v1
$ docker commit --change='CMD ["apachectl", "-DFOREGROUND"]' -c "EXPOSE 80" c3f279d17e0a svendowideit/testimage:version4
docker update
docker build
Crée une nouvelle image à partir d'un Dockerfile :
On créer un fichier Dockerfile dans le répertoire courant et on lance la construction de l'image :
$ docker build -t ouruser/sinatra:v2 .
docker export
Exporte un conteneur au format tar :
$ docker export $ID | gzip -c > image.tgz
$ docker export red_panda > latest.tar
$ docker export --output="latest.tar" red_panda
docker import
Importe une image à partir d'un fichier archive (.tar, .tar.gz, .tgz, .bzip, .tar.xz, ou .txz) :
$ gzip -dc image.tgz | docker import - flat-image-name
Importe le répertoire courant en tant qu'image docker :
$ sudo tar -c . | docker import - exampleimagedir
docker port
Affiche le mapping de port d'un conteneur :
$ docker port test 7890/tcp -> 0.0.0.0:4321 9876/tcp -> 0.0.0.0:1234 $ docker port test 7890/tcp 0.0.0.0:4321
docker stats
docker network
docker network driver
Network supporte l'option driver afin de spécifier un driver. Celui par défaut est bridge.
docker network ls
docker network inspect
Affiche les caractéristiques d'un réseau :
$ docker network inspect bridge
docker network create
Crée un nouveau réseau : Créer un réseau qui n'a pas accès aux autres machines du parc :
$ docker network create -o com.docker.network.bridge.enable_icc=false -o com.docker.network.bridge.enable_ip_masquerade=false isolated $ docker network inspect isolated
docker network rm
$ docker network rm gigix
docker network connect
Connecte un conteneur à un nouveau réseau (en plus des réseaux existants) :
$ docker network connect gigix bf283346cee9
docker network disconnect
Déconnecte un conteneur d'un réseau :
$ docker network disconnect gigix bf283346cee9
docker volume
docker volume ls
docker volume create
$ docker volume create --driver local --opt type=btrfs --opt device=/dev/sda2 --name foo
$ docker volume create --driver local --opt type=tmpfs --opt device=tmpfs --opt o=size=100m,uid=1000 --
$ docker volume create --driver local --opt type=nfs --opt o=addr=192.168.1.1,rw --opt device=:/path/to/dir --name foo
docker volume inspect
docker volume rm
Commandes docker swarm
docker swarm
docker swarm init
Initialise le cluster en créant un noeud de type manager :
$ docker swarm init
docker swarm join
Rejoint le docker swarm : Une fois que le docker_swarm_init est lancé sur le noeud manager. Il faut recopier et coller la commande pour joindre le noeud manager en tant que worker.
docker swarm join-token
Génère un nouveau ticket pour joindre swarm :
$ docker swarm join-token worker
$ docker swarm join-token manager
docker swarm leave
$ docker swarm leave
A lancer à partir du worker (seulement pour un worker) !
docker swarm update
Met à jour swarm avec de nouveaux paramètres :
$ docker swarm update --cert-expiry 720h
docker node
Gestion des noeuds swarm.
docker node ls
$ docker node ls
docker node inspect
Affiche les caractéristiques d'un noeud :
$ docker node inspect node01
docker node inspect
Affiche les caractéristiques d'un noeud :
$ docker node inspect node01
docker node ps
Liste les tâches qui s’exécutent sur un noeud :
$ docker node ps node01
docker node promote
$ docker node promote node01
docker node demote
$ docker node promote node01
docker node update
Met à jour la configuration d'un noeud :
$ docker node update --availability drain node01
docker service
Pour créer un service basé sur un fichier docker-compose.yml, il faut se mettre dans ce même répertoire que ce fichier et taper :
$ docker-compose bundle
Cela va créer le fichier .dsb (.dab). Il suffit ensuite de le déployer dans swarm :
$ docker deploy <DABFilename>
docker service ls
$ docker service ls
docker service create
$ docker service create --name redis --replicas=2 redis:3.0.6
docker service inspect
Affiche la configuration du servive :
$ docker service inspect redis --pretty
docker service ps
Affiche les tâches d'un service :
$ docker service ps redis
docker service scale
$ docker service scale backend=3 frontend=5
docker service rm
$ docker service rm redis
docker service update
$ docker service update --limit-cpu 2 redis
Commandes docker-compose
L'outil docker-compose fait intervenir la notion de service qui représente l'ensemble des conteneurs construits à partir d'un fichier docker-compose.yml.
docker-compose build
Construit ou reconstruit les images du service à partir du fichier docker-compose.yml.
docker-compose pull
docker-compose up
Crée et démarre le(s) conteneur(s) du service.
Options :
- -d : mode démon (détaché)
- –build : rebuild les images avant de lancer les conteneurs
[root@docker test]# docker-compose up -d Starting test_redis_1 Starting test_web_1
docker-compose ps
docker-compose run
docker-compose exec
docker-compose stop
docker-compose start
docker-compose restart
docker-compose down
docker-compose config
docker-compose events
docker-compose kill
docker-compose pause
docker-compose unpause
docker-compose logs
docker-compose rm
Supprime les conteneur arrêtés :
$ docker-compose rm --all
docker-compose scale
Multiplie le nombre de conteneur pour un service :
$ docker-compose scale web=2
