2016-10-28 19:57:02 +02:00
|
|
|
---
|
|
|
|
title: Howto Docker
|
|
|
|
categories: docker
|
|
|
|
---
|
|
|
|
|
|
|
|
Docker est une solution qui permet de créer, déployer et gérer en toute
|
|
|
|
simplicité des conteneurs Linux.
|
|
|
|
Elle combine plusieurs technologies pour rendre l'utilisation
|
|
|
|
des conteneurs accessible à tous.
|
|
|
|
|
2018-01-18 15:48:30 +01:00
|
|
|
Documentation : <https://docs.docker.com/engine/installation/linux/docker-ce/debian/#install-docker-ce-1>
|
|
|
|
|
2018-01-18 18:02:58 +01:00
|
|
|
Docker-Compose : [HowtoDockerCompose]()
|
|
|
|
|
2016-10-28 19:57:02 +02:00
|
|
|
# Docker Engine
|
|
|
|
|
|
|
|
## Installation
|
|
|
|
|
2017-01-20 10:51:37 +01:00
|
|
|
~~~
|
2017-09-11 20:07:36 +02:00
|
|
|
# apt install apt-transport-https
|
|
|
|
# echo "deb http://download.docker.com/linux/debian stretch stable" > /etc/apt/sources.list.d/docker.list
|
|
|
|
# curl -fsSL https://download.docker.com/linux/debian/gpg | apt-key add -
|
2016-10-28 19:57:02 +02:00
|
|
|
# apt update
|
2017-09-11 20:07:36 +02:00
|
|
|
# apt install docker-ce
|
2017-01-20 10:51:37 +01:00
|
|
|
~~~
|
2016-10-28 19:57:02 +02:00
|
|
|
|
2017-09-11 20:07:36 +02:00
|
|
|
> *Note* : Pour Debian 8 :
|
|
|
|
>
|
|
|
|
> ~~~
|
|
|
|
> # echo "deb http://apt.dockerproject.org/repo debian-jessie main" > /etc/apt/sources.list.d/docker.list
|
|
|
|
> # apt-key adv --keyserver hkp://p80.pool.sks-keyservers.net:80 --recv-keys 58118E89F3A912897C070ADBF76221572C52609D
|
|
|
|
> # apt update
|
|
|
|
> # apt install docker-engine
|
|
|
|
> # adduser <USER> docker
|
|
|
|
> ~~~
|
|
|
|
|
2018-01-18 15:41:10 +01:00
|
|
|
### Configuration
|
|
|
|
|
|
|
|
#### Changer le chemin de stockage
|
|
|
|
|
|
|
|
Créer le fichier `/etc/docker/daemon.conf` et y mettre :
|
|
|
|
|
|
|
|
~~~
|
|
|
|
{
|
|
|
|
"graph": "<VOTRE_CHEMIN>",
|
|
|
|
"storage-driver": "overlay"
|
|
|
|
}
|
|
|
|
~~~
|
|
|
|
|
2016-10-28 19:57:02 +02:00
|
|
|
### Ansible
|
2017-09-11 20:07:36 +02:00
|
|
|
|
2016-10-28 19:57:02 +02:00
|
|
|
Le rôle docker-host permet d'installer le docker-engine sur un hôte distant et
|
|
|
|
de l'exposer à l'externe ou non.
|
|
|
|
|
|
|
|
La documentation concernant l'utilisation du rôle est située dans son répertoire.
|
|
|
|
|
|
|
|
#### TLS
|
2018-01-19 16:18:40 +01:00
|
|
|
|
2016-10-28 19:57:02 +02:00
|
|
|
Lorsque le docker-engine est exposé, il est important de le sécuriser avec TLS.
|
|
|
|
|
|
|
|
Au moment de l'installation, une version altérée de shellpki est copiée dans le
|
|
|
|
répertoire docker/tls. Ensuite, les certificats et la clé sont créés pour le
|
|
|
|
serveur. (`shellpki init`)
|
|
|
|
|
|
|
|
Pour autoriser des hôtes à se connecter à l'engine, il faut leur créer une clé
|
|
|
|
et un certificat.
|
|
|
|
Pour ce faire, il suffit de lancer le script:
|
|
|
|
|
2017-01-20 10:51:37 +01:00
|
|
|
~~~
|
2016-10-28 19:57:02 +02:00
|
|
|
/home/docker/tls$ ./shellpki create
|
2017-01-20 10:51:37 +01:00
|
|
|
~~~
|
2016-10-28 19:57:02 +02:00
|
|
|
|
|
|
|
Les fichiers seront créés, par défaut, dans le répertoire
|
|
|
|
`/home/docker/tls/files/$CN`
|
|
|
|
|
|
|
|
## Utilisation de base
|
|
|
|
|
|
|
|
Une image Docker contient un OS avec un ou plusieurs services préconfigurés.
|
|
|
|
Un conteneur quant à lui est une instance (créée à partir d'une image)
|
|
|
|
en cours d'execution.
|
|
|
|
|
|
|
|
### Lister les conteneurs et les images:
|
2018-01-19 16:18:40 +01:00
|
|
|
|
2017-01-20 10:51:37 +01:00
|
|
|
~~~
|
2016-10-28 19:57:02 +02:00
|
|
|
$ docker ps [options]
|
2017-01-20 10:51:37 +01:00
|
|
|
~~~
|
2018-01-19 16:18:40 +01:00
|
|
|
|
2016-10-28 19:57:02 +02:00
|
|
|
Voici quelques options utiles pour la commande `ps`
|
2018-01-19 16:18:40 +01:00
|
|
|
|
2017-01-20 10:51:37 +01:00
|
|
|
~~~
|
2016-10-28 19:57:02 +02:00
|
|
|
-a : Lister tous les conteneurs
|
|
|
|
-l : Lister les conteneurs récentralise
|
|
|
|
-q : Lister uniquement les ID des conteneurs
|
2017-01-20 10:51:37 +01:00
|
|
|
~~~
|
2016-10-28 19:57:02 +02:00
|
|
|
|
|
|
|
### Démarrer un conteneur
|
2018-01-19 16:18:40 +01:00
|
|
|
|
2017-01-20 10:51:37 +01:00
|
|
|
~~~
|
2016-10-28 19:57:02 +02:00
|
|
|
$ docker run [options] IMAGE [commande]
|
2017-01-20 10:51:37 +01:00
|
|
|
~~~
|
2018-01-19 16:18:40 +01:00
|
|
|
|
2016-10-28 19:57:02 +02:00
|
|
|
Options courantes:
|
2018-01-19 16:18:40 +01:00
|
|
|
|
2017-01-20 10:51:37 +01:00
|
|
|
~~~
|
2016-10-28 19:57:02 +02:00
|
|
|
--name="nom" : Donner un nom au conteneur
|
|
|
|
-p port_hôte:port_conteneur : Rendre un port accessible depuis l'hôte
|
|
|
|
-d : Lancer le conteneur en mode 'détaché'
|
|
|
|
-it : Lancer le conteneur en mode intéractif avec tty
|
2017-01-20 10:51:37 +01:00
|
|
|
~~~
|
2018-01-19 16:18:40 +01:00
|
|
|
|
2016-10-28 19:57:02 +02:00
|
|
|
Pour plus d'options, consulter `$ man docker run`
|
|
|
|
|
|
|
|
### Éteindre ou tuer un conteneur
|
2018-01-19 16:18:40 +01:00
|
|
|
|
2017-01-20 10:51:37 +01:00
|
|
|
~~~
|
2016-10-28 20:14:41 +02:00
|
|
|
$ docker stop|kill [options] CONTENEUR
|
2017-01-20 10:51:37 +01:00
|
|
|
~~~
|
2018-01-19 16:18:40 +01:00
|
|
|
|
2016-10-28 19:57:02 +02:00
|
|
|
CONTENEUR correspond au nom ou à l'ID du conteneur.
|
|
|
|
|
|
|
|
Lorsque le conteneur n'est plus en fonction, il existe toujours et peut être
|
|
|
|
lister à l'aide de la commande `$ docker ps -a`
|
|
|
|
|
|
|
|
### Supprimer un conteneur ou une image
|
2018-01-19 16:18:40 +01:00
|
|
|
|
2017-01-20 10:51:37 +01:00
|
|
|
~~~
|
2016-10-28 19:57:02 +02:00
|
|
|
$ docker rm [options] CONTENEUR
|
|
|
|
ou
|
|
|
|
$ docker rmi [options] IMAGE
|
2017-01-20 10:51:37 +01:00
|
|
|
~~~
|
2016-10-28 19:57:02 +02:00
|
|
|
|
|
|
|
### Exécuter des commandes au sein d'un conteneur en marche
|
2018-01-19 16:18:40 +01:00
|
|
|
|
2017-01-20 10:51:37 +01:00
|
|
|
~~~
|
2016-10-28 19:57:02 +02:00
|
|
|
$ docker exec [options] CONTENEUR COMMANDE
|
2017-01-20 10:51:37 +01:00
|
|
|
~~~
|
2018-01-19 16:18:40 +01:00
|
|
|
|
2016-10-28 19:57:02 +02:00
|
|
|
Options courante:
|
2018-01-19 16:18:40 +01:00
|
|
|
|
2017-01-20 10:51:37 +01:00
|
|
|
~~~
|
2016-10-28 19:57:02 +02:00
|
|
|
-it : Lancer la commande de manière intéractive dans un TTY.
|
2017-01-20 10:51:37 +01:00
|
|
|
~~~
|
2016-10-28 19:57:02 +02:00
|
|
|
|
|
|
|
### Visionner les logs d'un conteneur
|
2018-01-19 16:18:40 +01:00
|
|
|
|
2017-01-20 10:51:37 +01:00
|
|
|
~~~
|
2016-10-28 19:57:02 +02:00
|
|
|
$ docker logs [options] CONTENEUR
|
2017-01-20 10:51:37 +01:00
|
|
|
~~~
|
2018-01-19 16:18:40 +01:00
|
|
|
|
2016-10-28 19:57:02 +02:00
|
|
|
Option:
|
2018-01-19 16:18:40 +01:00
|
|
|
|
2017-01-20 10:51:37 +01:00
|
|
|
~~~
|
2016-10-28 19:57:02 +02:00
|
|
|
-f : Suivre les logs en direct
|
2017-01-20 10:51:37 +01:00
|
|
|
~~~
|
2016-10-28 19:57:02 +02:00
|
|
|
|
|
|
|
### Se connecter à un conteneur en marche
|
2018-01-19 16:18:40 +01:00
|
|
|
|
2016-10-28 19:57:02 +02:00
|
|
|
S'il est nécessaire d'intéragir directement avec un process lancé dans un
|
|
|
|
conteneur, il faut utiliser la commande `attach`.
|
|
|
|
Dans le cas où l'on souhaite simplement visionner la sortie (logs) du conteneur,
|
|
|
|
il faut utiliser `logs`.
|
|
|
|
Pour lancer un terminal ou une commande supplémmentaire, utiliser `exec`.
|
2018-01-19 16:18:40 +01:00
|
|
|
|
2017-01-20 10:51:37 +01:00
|
|
|
~~~
|
2016-10-28 19:57:02 +02:00
|
|
|
docker attach [options] CONTENEUR
|
2017-01-20 10:51:37 +01:00
|
|
|
~~~
|
2016-10-28 19:57:02 +02:00
|
|
|
|
|
|
|
**ATTENTION!!!**
|
|
|
|
|
|
|
|
Lorsque le conteneur est attaché, l'utilisation de *CTRL+C* termine le processus
|
|
|
|
en cours. La commande *CTRL+P+Q* doit être utilisé ou l'on doit ajouter l'option
|
|
|
|
`--sig-proxy=false` lors du lancement ou de l'attachement.
|
|
|
|
|
|
|
|
|
|
|
|
### Astuces
|
|
|
|
Éteindre/Tuer/Supprimer tous les conteneurs:
|
2018-01-19 16:18:40 +01:00
|
|
|
|
2017-01-20 10:51:37 +01:00
|
|
|
~~~
|
2016-10-28 19:57:02 +02:00
|
|
|
$ docker stop|kill|rm $(docker ps -aq)
|
2017-01-20 10:51:37 +01:00
|
|
|
~~~
|
2016-10-28 19:57:02 +02:00
|
|
|
|
|
|
|
Supprimer toutes les images:
|
2018-01-19 16:18:40 +01:00
|
|
|
|
2017-01-20 10:51:37 +01:00
|
|
|
~~~
|
2016-10-28 19:57:02 +02:00
|
|
|
$ docker rmi $(docker images -q)
|
2017-01-20 10:51:37 +01:00
|
|
|
~~~
|
2016-10-28 19:57:02 +02:00
|
|
|
|
|
|
|
Lancer un terminal bash dans un conteneur en marche:
|
2018-01-19 16:18:40 +01:00
|
|
|
|
2017-01-20 10:51:37 +01:00
|
|
|
~~~
|
2016-10-28 19:57:02 +02:00
|
|
|
$ docker exec -it CONTENEUR bash
|
2017-01-20 10:51:37 +01:00
|
|
|
~~~
|
2016-10-28 19:57:02 +02:00
|
|
|
|
|
|
|
Démarrer un conteneur avec un terminal bash:
|
2018-01-19 16:18:40 +01:00
|
|
|
|
2017-01-20 10:51:37 +01:00
|
|
|
~~~
|
2016-10-28 19:57:02 +02:00
|
|
|
$ docker run -it IMAGE bash
|
2017-01-20 10:51:37 +01:00
|
|
|
~~~
|
2016-10-28 20:14:41 +02:00
|
|
|
|
|
|
|
### Dépannage
|
|
|
|
|
|
|
|
#### Problème de connectivité à l'intérieur des conteneurs
|
|
|
|
Solution:
|
|
|
|
|
|
|
|
Redémarrer le service docker
|
|
|
|
|
|
|
|
#### Espace insuffisant lors d'un build
|
|
|
|
Solutions:
|
|
|
|
|
|
|
|
- Vérifier que le "build context" n'est pas trop grand.
|
|
|
|
- Modifier la variable d'environnement DOCKER_TMPDIR .
|
|
|
|
- Créer un fichier .dockerignore pour exclure des fichiers et répertoires
|
|
|
|
du "build context"
|
|
|
|
|
|
|
|
*Build context: Tout ce qui se trouve à la racine du Dockerfile.*
|
2017-09-11 20:07:36 +02:00
|
|
|
|
|
|
|
## Dockerfile
|
|
|
|
|
|
|
|
Exemple :
|
|
|
|
|
|
|
|
~~~
|
|
|
|
FROM debian:stretch
|
|
|
|
MAINTAINER John Doe <jdoe@example.com>
|
|
|
|
|
|
|
|
ENV DEBIAN_FRONTEND noninteractive
|
|
|
|
|
|
|
|
RUN (apt-get update && apt-get upgrade -y -q && apt-get dist-upgrade -y -q && apt-get -y -q autoclean && apt-get -y -q autoremove)
|
|
|
|
RUN apt-get install -y -q mariadb-server
|
|
|
|
|
|
|
|
EXPOSE 3306
|
|
|
|
CMD ["mysqld"]
|
|
|
|
~~~
|
|
|
|
|
|
|
|
~~~
|
|
|
|
# ls
|
|
|
|
Dockerfile
|
|
|
|
|
|
|
|
# docker build -t mariadb .
|
|
|
|
|
|
|
|
# docker images
|
|
|
|
REPOSITORY TAG IMAGE ID CREATED SIZE
|
|
|
|
mariadb latest 4bea99cda08c 8 minutes ago 470MB
|
|
|
|
debian stretch 5b712ae16dd7 3 days ago 100MB
|
|
|
|
~~~
|