Docker : les commandes de base

Références : les commandes de base sur les Images, Container, Dockerfile, docker-compose.yml

, par Christophe


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 :