Dockerfile : creer une image à partir d’une autre image
Exemple de Dockerfile
#Commentaires ...
FROM debian:jessie
FROM debian:jessie
MAINTAINER tofulm <tofulm@gmail.com>
RUN apt-get -y update
RUN apt-get install -y vim zsh tmux
#APACHE
RUN apt-get install -y apache2
RUN a2enmod userdir
RUN a2enmod rewrite
RUN echo "ServerName localhost" >> /etc/apache2/apache2.conf
RUN service apache2 restart
#PHP
RUN apt-get install -y php5 php5-mysql php5-cgi php5-cli php5-gd \
php5-imagick php5-curl php5-sqlite php5-xsl php5-xdebug
RUN apt-get install -y libapache2-mod-php5
RUN apt-get install -y sudo
RUN useradd -ms /bin/zsh tof -G www-data,sudo
WORKDIR /var/www/html
ADD ./apache.sh /usr/local/bin/
RUN chmod 755 /usr/local/bin/apache.sh
EXPOSE 80
EXPOSE 443
CMD ["apache.sh", "arg2", "arg2"]
Descriptions
- FROM permet de définir depuis quelle base votre image ve être créée
- MAINTAINER permet de définir l’auteur de l’image et s’écrit de la manière suivante Nom
- RUN permet de lancer une commande, mais aura aussi pour effet de créer une image intermédiaire.
- COPY permet de copier un fichier depuis la machine hôte
- ADD permet de copier un fichier depuis la machine hôte ou depuis une URL
- EXPOSE permet d’exposer un port du container vers l’extérieur
- ENTRYPOINT permet d’ajouter une commande qui sera exécutée par défaut, et ce, même si on choisit d’exécuter une commande différente de la commande standard
- CMD détermine la commande qui sera exécutée lorsque le container démarrera. Vient apres ENTRYPOINT
- WORKDIR permet de définir le dossier de travail pour toutes les autres commandes (par exemple RUN, CMD, ENTRYPOINT et ADD)
- ENV permet de définir des variables d’environnements qui pourront ensuite être modifiées grâce au paramètre de la commande run —env
= . - VOLUMES permet de créer un point de montage qui permettra de persister les données.
Creer une image qui s’appelera : prefixe_du_tag/nom_du_tag
Dans le repertoire contenant le fichier Dockerfile :
docker build -t prefixe_du_tag/nom_du_tag .
Attention, ne pas oubier le ’.’ final
Supprimer une image :
On liste les images : docker images
docker rmi -f "id_image"
Creer un conteneur à partir d’une IMAGE
docker run --rm -ti prefixe_du_tag/nom_du_tag -p port_exterieur:port_interieur -v /repertoire/exterieur:/repertoire/interieur script_a_lancer.sh
-ti : avoir une invite de commande du conteneur --name : nom du conteneur -d : en tache de fond -p 80:80 exterieux:conteneur -v dossier_ext:dossier_conteneur : lier un fichier ext:int du conteneur --rm : supprime le conteneur après son arret Si on ajoute : script_a_lancer.sh il remplace le script lancé par la commande : CMD du Dockerfile
Quelques commandes sur une conteneur lancé en tache de fond avec l’option -d
On récupère l’id du conteneur : docker ps -a
Puis on se connecte dans ce conteneur : docker exec -ti "id_conteneur" bash
Pour stopper un conteneur : docker stop "id_conteneur"
Supprimer un conteneur
On liste les conteneurs : docker ps
docker rm -f "id_conteneur"
Enregistrement d’un conteneur
Arret, log et suppression du conteneur
docker logs "id_conteneur"
docker diff
docker commit "id_conteneur" nom_nouveau_conteneur
docker save "mon_nom" > /home/mon_user/
docker-compose.yml
Lancer un docker-compose dans le répertoire contenant le docker-compose.yml
docker-compose up -d
-d : en arrière plan
Exemple de docker-compose.yml
web:
image: gamuza/debian8
restart: always
ports:
- "80:80"
volumes:
- /home/docker/www/:/var/www/html/
- /home/docker/debian8/php/php.ini:/etc/php5/apache2/conf.d/30-custom.ini
- /home/docker/vhost/:/etc/apache2/sites-enabled/
environment:
- ALLOW_OVERRIDE=true
links:
- "mariadb:db"
- "mailhog:mailhog"
phpmyadmin:
image: phpmyadmin/phpmyadmin
ports:
- "8081:8080"
environment:
- MYSQL_ROOT_PASSWORD=iopklm
links:
- "mariadb:db"
mariadb:
image: mariadb:10.0
environment:
- MYSQL_ROOT_PASSWORD=mon_super_mdp
- TERM=dumb
volumes:
- /home/docker/debian8/mysql:/var/lib/mysql
- /home/docker/debian8/dump:/dump
mailhog:
restart: always
image: mailhog/mailhog
ports:
- "8025:8025"
- "1025:1025"
Références :
- Pour les options de docker run (= idem les options du fichier docker-compose.yml), voir https://docs.docker.com/engine/reference/run/#restart-policies-restart