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
