Docker : Le tutoriel pour manipuler les containers

Docker

640px-Conteneurs1

Présentation

 

Docker (que je vous ai présenté la semaine dernière) est un logiciel a mi chemin entre la virtualisation applicative et l’automatisation.

Il a l’avantage de ne virtualiser que la partie application et pas du tout la partie système ni le noyau.

Il étend le principe des conteneurs Linux (LXC).

Dotcloud qui développe Docker, propose aussi un système minimaliste (CoreOS) pour héberger et hyperviser les conteneurs.

 

Installation

 

Créer le fichier /etc/apt/sources.list.d/docker.list :

deb http://get.docker.io/ubuntu docker main

Télécharger la clé GPG et installer le package :

apt-key adv –keyserver keyserver.ubuntu.com –recv-keys 36A1D7869245C8950F966E92D8576A8BA88D21E9
apt-get update
apt-get install lxc-docker

 

Manipulation d’images

 

Prendre une Debian sur le dépôt officiel de Docker et se connecter dessus

docker pull debian
docker run -i -t debian /bin/bash

Faire tout ce qu’on veut sur la nouvelle image

root@xxxxxx# …

Et sauvegarder les changements

root@xxxxxx# exit
docker commit xxxxxx le_nom_de_l_image

Manipuler un conteneur :

JOB1=$(docker run -d conteneur)
docker logs $JOB1
docker stop $JOB1

Voir les conteneurs qui tournent :

docker ps
docker ps -a

Supprimer un conteneur / supprimer tous les conteneurs :

docker rm $JOB1
docker rm id_du_conteneur
docker rm `docker ps -a -q`

Supprimer les images :

docker rmi id_ou_nom_de_l_image

 

Import / Export

 

Exporter un container en tar.gz :

docker export 419eed6ff306 > nginx.tgz

Importer un tar.gz :

cat nginx.tgz | docker import – nginx

 

Création d’images par Dockerfile

 

MAINTAINER : nom et mail de mainteneur du conteneur

FROM : image de base (ubuntu, debian)

VOLUME : Point de montage

RUN : commande à exécuter pour installer le conteneur.

ENTRYPOINT : commande qui s’exécute au démarrage du conteneur (une seule sera exécutée).

CMD : commande qui s’exécute au démarrage du conteneur.

ADD : Copier un fichier du répertoire courant dans le filesystem du conteneur.

USER : utilisateur qui exécute les commandes dans le conteneur.

EXPOSE : Port(s) à exposer à l’exterieur.

Construire un conteneur :

docker build -t nom_du_conteneur .

 

Exemple de Dockerfile : LAMP – MariaDB

 

Dockerfile

# lamp (d’un M qui veut dire Maria)
# Pour Debian Wheezy
#
# VERSION 0.0.1
#

FROM debian:wheezy
MAINTAINER Nico Dewaele « nico@adminrezo.fr »

ENV DEBIAN_FRONTEND noninteractive

# Depots, mises a jour et installs de Apache/PHP5

RUN echo « deb http://ftp.fr.debian.org/debian/ wheezy main non-free contrib » > /etc/apt/sources.list
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 vim ssh supervisor python-software-properties apache2 libapache2-mod-php5 php5-cli php5-mysql

# Installation et configuration de MariaDB

RUN apt-key adv –recv-keys –keyserver keyserver.ubuntu.com 0xcbcb082a1bb943db
RUN add-apt-repository ‘deb http://mirrors.linsrv.net/mariadb/repo/5.5/debian wheezy main’
RUN apt-get update && apt-get install -y mariadb-server
RUN service mysql start
RUN mysql -v -uroot -e’UPDATE user SET host = « % » WHERE user = « root » LIMIT 1; DELETE FROM user WHERE user = « root » AND host != « % »‘ mysql
RUN service mysql stop

# Config de Apache

ADD foreground.sh /etc/apache2/foreground.sh
ENV APACHE_RUN_USER www-data
ENV APACHE_RUN_GROUP www-data
ENV APACHE_LOG_DIR /var/log/apache2

# Verification de PHP

ADD index.php /var/www/index.php
#RUN rm /var/www/index.html

# Demarrage des services

RUN mkdir -p /var/log/supervisor
ADD supervisord.conf /etc/supervisor/conf.d/supervisord.conf
ADD start.sh /start.sh

EXPOSE 80 22
# Si MariaDB doit être exposée à l’extérieur
# EXPOSE 3306

CMD [« /bin/bash », « -e », « /start.sh »]

foreground.sh

#!/bin/bash

read pid cmd state ppid pgrp session tty_nr tpgid rest < /proc/self/stat
trap « kill -TERM -$pgrp; exit » EXIT TERM KILL SIGKILL SIGTERM SIGQUIT

source /etc/apache2/envvars
apache2 -D FOREGROUND

start.sh

#!/bin/bash
supervisord

supervisord.conf

[supervisord]
nodaemon=true

[program:sshd]
command=/usr/sbin/sshd -D
stdout_logfile=/var/log/supervisor/%(program_name)s.log
stderr_logfile=/var/log/supervisor/%(program_name)s.log
autorestart=true

[program:httpd]
command=/usr/sbin/apache2ctl start
stopsignal=6

[program:mariadb]
command=/usr/sbin/mysqld
stdout_logfile=/tmp/%(program_name)s.stdout
stderr_logfile=/tmp/%(program_name)s.stderr
stopsignal=6

 

Ressources :

 

 

 

Sur le même sujet :