Ceci est pour une vieille version de Docker.
Fichier de config : /etc/default/docker
Sur Ubuntu :
# apt-get install -y docker.io
Une fois installé, on peut voir s'il est démarré:
# docker status
Et la version:
# docker -v
Même après l'installation de Docker, la version n'est pas la plus récente. Dans le cas présent, la version de Docker installée est 1.0.1. La procédure suivante va mettre à jour à la version plus récente (1.7.1 au moment d'écrire ceci).
# wget -qO- https://get.docker.io/gpg | sudo apt-key add - # echo deb http://get.docker.io/ubuntu docker main > /etc/apt/sources.list.d/docker.list # apt-get update # apt-get install -y lxc-docker
On veut ajouter un utilisateur non-root au groupe docker
.
# gpasswd -a <user> docker
Pour créer un container
docker run -it centos /bin/bash
Le premier paramètre run
le dit, c'est pour exécuter, le deuxième -it
est interactive, le troisième donne l'image que l'on veut (CentOS), et le dernier /bin/bash
le programme à exécuter.
Une fois l'image téléchargée, on tombe dans le container et on voit l'invite:
[root@66320b5574b4 /]#
De là, on peut voir que l'on utilise le kernel d'Ubuntu:
[root@66320b5574b4 /]# uname -a Linux 66320b5574b4 3.13.0-63-generic #103-Ubuntu SMP
Mais, c'est bien une image CentOS qui est utilisée:
[root@66320b5574b4 /]# cat /etc/redhat-release CentOS Linux release 7.1.1503 (Core)
On crée un fichier:
[root@66320b5574b4 /]# echo "testfile" > /tmp/testfile
On sort du container:
[root@66320b5574b4 /]# exit
Maintenant, sur l'hôte, on veut la liste des containers:
$ docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 66320b5574b4 centos "/bin/bash" 32 minutes ago Exited (0) About a minute ago loving_davinci
On voit que le GUID (rétrécit) dans le prompt (66320b5574b4) est aussi le même que de le container CentOS qu'on voit dans la liste.
On retient ce ID pour aller dans son système de fichiers. On peut aller d'abord dans:
# cd /var/lib/docker/aufs/diff # ls -l ... drwxr-xr-x 10 root root 4096 Oct 1 20:26 66320b5574b42763aa6842762f7c3fb89c7a92c50544a2bb07dc11f510c3b5e7 ... # cd 66320b5574b4[tab] # cd tmp # ls -l ... -rw-r--r-- 1 root root 19 Oct 2 00:12 testfile ...
Pour démarrer un container, suffit de faire docker start <ID du container>
, par exemple:
# docker start 66320b5574b4
Ensuite, si on veut aller dans le container:
# docker attach 66320b5574b4 [root@66320b5574b4 /]#
Pour télécharger une image du repository (ou hub) Docker, on utilise pull
:
# docker pull fedora
Quand on spécifie seulement le nom canonique de l'image (ex: fedora
, ubuntu
, redis
, etc), c'est la dernière version qui se télécharge. C'est l'équivalent de dire fedora:latest
.
Pour obtenir toutes les versions d'une image on utilise -a
:
# docker pull -a fedora
Voir les images locales:
# docker images REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE centos latest 0f73ae75014f 3 weeks ago 172.3 MB ubuntu latest 91e54dfb1179 6 weeks ago 188.4 MB
Ou en spécifiant le type d'image:
# docker images centos REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE centos latest 0f73ae75014f 3 weeks ago 172.3 MB
Les images se trouvent dans /var/lib/docker/aufs/layers
.
Les images sont faites en couches. Une image d'une couche supérieure fait référence à une autre image. Par excemple une image Apache (niveau 2) fait référence à une image CentOS (niveau 1). Pour voir ça on peut utiliser la commande (dépréciée):
# docker images --tree
Pour supprimer une image, les containers créés avec cette image doivent d'abord être elles-même supprimées avec docker rm
.
Pour supprimer une image, on utilise rmi
:
docker rmi <image-short-guid> <image-short-guid> ...
Lister les containers qui roulent actuellement sur l'hôte:
# docker ps
Lister les containers qui roulent actuellement et qui ont roulé sur l'hôte:
# docker ps -a
# docker history <image> # docker commit <guid du container> <nom de la nouvelle image> # docker save -o /tmp/<nom de la nouvelle image>[.tar]
Sur l'autre hôte:
# docker load -i <fichier tar>
Commande | Description |
---|---|
docker start <short guid|container name> | Démarre un container |
docker stop <short guid|container name> | Arrête un container |
docker restart <short guid|container name> | Redémarre un container |
docker kill <short guid|container name> | Arrête un container de façon moins gracieuse |
docker rm <short guid|container name> | Supprime un container arrêté. Utiliser -f pour forcer la suppression d'un container en exécution. |
–cpu-shares=256
memory=1g
docker top <shortguid>
docker logs <shortguid>
docker inspect <shortguid>
La commande docker attach <shortguid>
permet d'obtenir l'invite de commande du container. Le problème c'est qu'il s'attache au PID 1.
nsenter
Ceci nous permet d'entrer un namespace. Requiert un PID qu'on peut obtenir avec inspect
.
# docker inspect <shortguid> | grep Pid "Pid" 1923,
Une fois le PID obtenu, on peut faire:
# nsenter -m -u -n -p -i -t 1923 /bin/bash
Une fois terminé avec le shell, on peut faire exit
et contrairement à un attach
, un exit
n'arrêtera pas le container.
Une façon plus simple, qui fait la même chose:
# docker-enter <shortguid>
Aussi on peut faire:
# docker exec -it <shortguid> /bin/bash
Le fichier Dockerfile
(doit être nommé exactement de cette façon) est un fichier en plain-text, lisible par un humain.
Les lignes en commentaire commencent par un dièse #
.
La première instruction doit être FROM
.
# Ubuntu based Hello World container FROM ubuntu:14.04
Le format suit grosso-mode la forme d'une instruction en majuscules (ex: FROM
) et une valeur (ex: ubuntu:14.04
).
On peut continuer à construire le Dockerfile de cette façon:
# Ubuntu based Hello World container FROM ubuntu:14.04 MAINTAINER sgariepy@sgariepy.com RUN apt-get update CMD ["echo", "Hello World"]
La commande est :
docker build -t helloworld:0.1 .
Le paramètre -t
n'est pas obligatoire, mais recommandé. Le nom du container (ici helloworld
) doit être en minuscules. Le quatrième paramètre .
(point) est tout simplement le répertoire où construire le container, dans ce cas c'est le répertoire courant.
On peut créer un registre public ou privé sur le hub. Une fois le registre créé, par exemple ayant le nom sgy/helloworld
, on doit tagger l'image.
docker tag <image-short-guid> sgy/helloworld:1.0
Ensuite on fait un push
au registre:
docker push sgy/helloworld:1.0
Tout simplement faire un pull
:
docker pull sgy/helloworld
docker run -d -p 5000:5000 registry
Docker simplifie la construction, la livraison et l'exécution des applications. C'est une plateforme légère, ouverte et sécuritaire.
Les images sont une sorte de patron, ou modèle (blueprint ou template) pour créer un container. Les images peuvent être par exemple créée pour des applications NodeJS, d'autres pour MongoDB ou bien ASP.NET Core. On prend l'image qui répond à notre besoin et on en crée des containers qui contiendront l'application à exécuter.
Le client Docker roule nativement sur Linux, mais nécessite une machine virtuelle sur Mac OS X ou sur Windows.
Docker Toolbox : https://www.docker.com/products/docker-toolbox
DockerToolbox-1.xx.x.pkg
et procéder à l'installation.Interface graphique pour travailler avec les images et les containers. Permet aussi de rechercher des images.
En cliquant sur Docker Quickstart Terminal, un terminal s'ouvre et une machine virtuelle démarre (si elle n'est pas déjà démarrée) et on a accès aux commandes de Docker.
Une fois le processus terminé, on voit ceci:
## . ## ## ## == ## ## ## ## ## === /"""""""""""""""""\___/ === ~~~ {~~ ~~~~ ~~~ ~~~~ ~~~ ~ / ===- ~~~ \______ o __/ \ \ __/ \____\_______/ docker is configured to use the default machine with IP 192.168.99.100 For help getting started, check out the docs at https://docs.docker.com
On voit que la machine default
est démarrée avec l'IP 192.168.99.100. La machine default
est une machine virtuelle VirtualBox de Linux.
On a accès aux commandes docker
et docker-machine
.
docker-machine ls
docker-machine status [machine name]
docker-machine start [machine name]
docker-machine stop [machine name]
docker-machine env [machine name]
docker-machine ip [machine name]
La commande docker
sert à gérer les images et les containers.
Dans un terminal, si on fait docker ps
et qu'on a le message
Cannot connect to the Docker daemon. Is the docker daemon running on this host?
Dans ce cas on doit utiliser la commande docker-machine env [machine name]
, par exemple docker-machine env default
. Ensuite, dans ce qui est affiché
export DOCKER_TLS_VERIFY="1" export DOCKER_HOST="tcp://192.168.99.100:2376" export DOCKER_CERT_PATH="/Users/sgariepy/.docker/machine/machines/default" export DOCKER_MACHINE_NAME="default" # Run this command to configure your shell: # eval $(docker-machine env default)
Tel que mentionné, reste à exécuter la commande eval $(docker-machine env default)
et le tour est joué.