Outils pour utilisateurs

Outils du site


gestion_configuration:docker:pre1.12

Docker

Vieille documentation

Ceci est pour une vieille version de Docker.

Principes généraux

  • Union Mount / AUFS

Fichier de config : /etc/default/docker

Installation et configuration

Vieille façon d'installer Docker, voir plus bas pour la nouvelle façon.

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

Mise à jour

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

Ajouter un utilisateur à Docker

On veut ajouter un utilisateur non-root au groupe docker.

# gpasswd -a <user> docker

Premiers pas avec un container

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)

Persistance des données

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
...

Démarrer un container

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 /]#

Gérer les images

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.

Arborescence des images

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

Supprimer une image

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> ...

Containers

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

Copier/Déplacer un container d'un hôte à l'autre

# 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>

Commandes de gestion de containers

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.

Options

  • –cpu-shares=256
  • memory=1g

Voir les processus

docker top <shortguid>

docker logs <shortguid>

docker inspect <shortguid>

Obtenir un shell d'un container

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

Dockerfile

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"]

Build

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.

Registre

Pousser une image

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

Récupérer l'image

Tout simplement faire un pull:

docker pull sgy/helloworld

Registre privé

docker run -d -p 5000:5000 registry

Docker for Web Developers

Docker simplifie la construction, la livraison et l'exécution des applications. C'est une plateforme légère, ouverte et sécuritaire.

Images et containers

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.

Docker Client

Le client Docker roule nativement sur Linux, mais nécessite une machine virtuelle sur Mac OS X ou sur Windows.

Docker Tools

Docker Toolbox : https://www.docker.com/products/docker-toolbox

  • Docker Client
  • Docker Machine
  • Docker Compose
  • Docker Kitematic
  • VirtualBox

Configurer les environnements de développement

Linux

Mac

  1. Télécharger Docker Toolbox pour Mac.
  2. Exécuter le fichier DockerToolbox-1.xx.x.pkg et procéder à l'installation.

Windows

  1. Télécharger Docker Tools pour Windows et installer.
  2. Vérifier que la Virtualisation est activée. Aller dans Task Manager, onglet Performance et sous le graphique CPU, la valeur de Virtualisation doit être Enabled.

Docker Kitematic

Interface graphique pour travailler avec les images et les containers. Permet aussi de rechercher des images.

Docker Quickstart Terminal

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.

Commande 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]

Commande Docker

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é.

gestion_configuration/docker/pre1.12.txt · Dernière modification : 2023/10/03 21:38 de sgariepy