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

```yaml
#Commentaires ...
FROM debian:jessie
FROM debian:jessie
MAINTAINER tofulm

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 :**
```bash
docker build -t prefixe_du_tag/nom_du_tag .
```
**Attention, ne pas oubier le ’.’ final**

### Supprimer une image :
On liste les images : `docker images`

```bash
docker rmi -f "id_image"
```

Creer un conteneur à partir d’une IMAGE


```bash
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`
```bash
docker rm -f "id_conteneur"

```

Enregistrement d’un conteneur


Arret, log et suppression du conteneur

```bash
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**

```bash
docker-compose up -d
```
- d : en arrière plan

### Exemple de docker-compose.yml
```yaml
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 :

Licence Creative Commons Cet article est mise à disposition selon les termes de la Licence Creative Commons Attribution - Partage dans les Mêmes Conditions 4.0 International.