Par Karel Faille / @shaffe
“Docker est un logiciel libre qui automatise le déploiement d'applications dans des conteneurs logiciels.”Wikipedia
Dans un OS, la mémoire est séparée en deux espaces :
Conteneurisation : multiplication de user spaces.
Le noyau Linux permet également d'isoler certaines ressources du kernel space pour le conteneur.
Gestion de la consommation des ressources physiques des conteneurs : RAM, CPU, I/O disque...
Fusion de plusieurs systèmes de fichiers (couches, branches) en un seul point de montage.
Image docs.docker.com
$ docker pull # Récupère une image distante
$ docker build # Créer une image à partir d'un Dockerfile
$ docker images # Listes les images de l'hôte
$ docker run # Lance une image
$ docker ps # Liste les containers (lancés et éteints)
$ docker stop # Arrête un container
$ docker start # Relance un container
$ docker rm # Supprime un container
$ docker rmi # Supprime une image
$ docker pull ubuntu:latest
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu latest 7b9b13f7b9c0 11 days ago 118.3 MB
# Crée un conteneur à partir de ubuntu:latest,
# y lance le programme bash et
# y attache votre shell grâce aux options -it
$ docker run -it ubuntu bash
root@d882ad3827c4:/#
root@d882ad3827c4:/# exit # ou Ctrl+d
$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d882ad3827c4 ubuntu "bash" 2 minutes ago Exited (0) 1 seconds ago elegant_pike
1. Récupérer l'image de base (optionnel)
$ docker pull node:latest
2. Créer un fichier server.js
$ echo """
const http = require('http')
const server = http.createServer(function(req, res) {
res.end('Hello from the other side!')
});
server.listen(3000)
""" > server.js
3. Lancer l'image
$ docker run -d --name hello-node -p 8080:3000 -v $(pwd):/app node:latest node /app/server.js
Les fichiers Dockerfiles permettent de construire une image, étape par étape, calque par calque.
1. Créer un fichier Dockerfile avec le contenu suivant :
FROM node:latest
# Create app directory
RUN mkdir -p /usr/src/app
WORKDIR /usr/src/app
# Install dependencies
ADD package.json /usr/src/app/
RUN npm install
# Copy project files
ADD . /usr/src/app
# Build the app
RUN npm build
# Expose the app port and the volume to share
EXPOSE 3000
VOLUME /usr/src/app/log
# Start the app
CMD node server.js
2. Créer un fichier .dockerignore pour indiquer les fichiers à ne pas inclure dans l'image (node_modules, .git...)
$ echo -e "node_modules\nnpm-debug.log" > .dockerignore
3. Créer un fichier package.json
$ echo '{ "name": "hello-node", "version": "1.0.0" }' > package.json
4. Builder l'image
$ docker build . -t hello-node
5. Lancer le conteneur hello-node
$ docker run -d --name hello-node -p 8080:3000 hello-node
Les fichiers docker-compose.yml permettent de définir et lancer des applications utilisant plusieurs containers.
On lance les conteneurs avec la commande
docker-compose up -d
.
version: '1'
services:
mysql:
image: mysql
volumes:
- /var/lib/mysql
environment:
- MYSQL_ROOT_PASSWORD=notsecret
php:
image: php:7.0-fpm
volumes:
- "~/www:/var/www/html"
links:
- mysql:db
nginx:
image: nginx
ports:
- 80:80
volumes:
- "~/docker/nginx:/etc/nginx/conf.d"
- "~/www:/var/www/html"
links:
- php:php
docker-compose.yml pour une architecture web
http://rhelblog.redhat.com/2015/07/29/architecting-containers-part-1-user-space-vs-kernel-space/
https://blog.yadutaf.fr/2013/12/22/introduction-to-linux-namespaces-part-1-uts/
https://www.geeek.org/check-list-projet-docker-153.html
Wikipedia <3
https://www.github.com/shaffe-fr