Docker

De drev
Aller à : navigation, rechercher

Conteneur qui facilite le déploiement logiciel : leur configuration sera garantie identique et automatisée.

Vocabulaire

  • Image : Systeme de fichier et paramètres, ne change jamais
  • Container : Instance d'une image

Sources

https://docs.docker.com/engine/getstarted/step_two/

Installation

Installer le paquet docker

pacman -S docker

Lancement

lancer le service docker.service

systemctl start docker.service

operation sur les images

par example, avec l'image httpd

Télécharger une image

commande pull

docker pull httpd

Lister les image

  • commande images pour lister les dernières images crées
docker images
  • on peut aussi chercher des images avec un 2eme agrument, par exemple lister les images contenant 'php'
docker images php
  • Lister les images sans tag
docker images | grep "^<none>" | awk '{print $3}'


Lancer un container

commande docker run

docker run httpd

La commande docker run prend en argument une image est crée un conteneur où lancer une session.

Docker doit être lancé par un utilisateur appartenant au groupe docker ou par root (voir Linux)

on peut tester que tout fonctionne bien en lançant docker hello-world

sudo docker run hello-world


On peut aussi preciser un TAG

docker run httpd:my-tag

Options de docker run

Un container peut etre lancé en mode Detached (en arrière plan) ou Foreground (au premier plan)

  • -d lancer en mode Detached
  • --name Pour nommer le container
  • -i Ouvrir stdin (permet de l'utilisation du clavier)
  • -t Ouvre un pseudo TTY
  • --rm Pour effacer le container a la fin d'une session en mode Forefround
  • -v host:dock Pour monter un repertoire host dans le système de fichier du container docker
  • -p PORT_HOST:PORT_CONTAINER exposer un port

Sources

https://docs.docker.com/engine/reference/run/

effacer une image

Une image ne peut être effacée que si aucun contenter, même arrête, ne l'utilise.

docker rmi <image_id>

effacer toutes les images sans tag

docker rmi $(docker images | grep "^<none>" | awk '{print $3}')

Construire une image

Avec un fichier nommé Dockerfile dans le répertoire spécifié en deuxième argument

docker build .

indiquer un nom avec -t

docker build . -t 'drev/something'

renommer une image

docker tag IMAGE_CURRENT_ID IMAG_NEW_NAME

example

docker tag c140b5a2b4b7 'drev/something'

Operations sur les containers

Lister

  • Containers lancés
docker ps
  • Tout les containers
docker ps -a

arreter un container

docker stop CONTAINER_NAME

effacer un container

Un container doit être stoppé pour être effacé

docker rm CONTAINER_NAME

Effacer tout les containers

docker stop $(docker ps -a -q) && docker rm $(docker ps -a -q)

S'attacher à un container

  • commande attach
docker attach httpd 

Attention ! Pour quitter faire un

C-p C-q 

un C-c va tuer le processus

(c.f https://docs.docker.com/engine/reference/commandline/attach/)


exec

permet de lancer une commande dans un container en fonction

exemple : Lancer un shell dans un container

docker exec -it "CONTAINER_NAME" bash

Dockerfile

Fichier nommée 'Dockerfile' contaneant une serie d'instruction pour construire une image

La commande pour lancer

docker build . 

on peut aussi utilier l'option -t pour tagger l'image

docker build -t REPO:TAG

Instructions Dockerfile

COPY

Ajouter un fichier

COPY <fichier dans l'hôte> <chemin dans l'image>
  • Il existe aussi la commande ADD qui peut télécharger des fichiers depuis une URL et décompresser des archives

ENV

Definir une variable d'environnement

RUN

EXPOSE

Ouvre un port au système hôte

CMD

VOLUME

Sources

https://docs.docker.com/engine/reference/builder/

Inspecter un container

commande inspect

option format

Permet de filtrer le contenu retourné par inspect

exemples:

  • Récupérer l'ID
 docker inspect --format '{{ .Id }}' <container name>
  • Récupérer l’adresse IP
 docker inspect --format '{{.NetworkSettings.IPAddress}}' <container name>


Cas d'utilisations

creer un volume

Un volume est une zone mémoire où un container peut écrire

Creation d'un volume nommé v1

docker volume create --name v1

le volume sera crée sous /var/lib/docker/volumes/v1

Monter un répertoire

L'argument volume permet de monter un répertoire depuis l'hôte dans l'image

option -v CHEMIN_HOTE:CHEMIN_IMAGE

docker run -v /home/odrevet/projects:/root/projects -it drev/makedeb

Enregistrer les modifications sur le disque

par défaut, les modifications apportée dans une image ne sont pas enregistrée,

Commit

$ docker run -it ubuntu 
root@285d69284806:/# touch root/test
root@285d69284806:~# exit
$ docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                      PORTS               NAMES
285d69284806        ubuntu              "/bin/bash"         49 seconds ago      Exited (0) 30 seconds ago                       high_fermat
$ docker commit 285d69284806 drev/test
$ docker run -it drev/test
root@682b03f9a73f:/# ls root/
test


S'attacher en root a un container

docker exec -u 0 -it ID bash

Creation d'un .deb sous docker

Creation_d'un_.deb

LAMP avec docker

Lamp_with_docker


Source

https://docs.docker.com/engine/tutorials/dockerimages/