Docker comme environnement de développement, ça déchire

Docker pour développer c’est excellent.
Mais ça sert à quoi Docker ?
Et surtout comment cela fonctionne ?

Docker (dans notre exemple) va nous permettre d’installer un environnement de dév’ très rapidement. On peut switcher d’une version de PrestaShop à une autre (toujours dans notre exemple). Obtenir un environnement de « Dev » identique à celle de la « Prod ». Cela nous permettra aussi de déployer des configurations de serveur complexe, en quelques lignes de commande.

Bref on peut faire énormément de chose avec Docker (tester un environnement, config, CMS, test unitaire, etc …). Je vais juste vous présenter une infime partie de la solution pour utiliser un serveur x avec une solution y (ici « y » sera PrestaShop).

Comment installer PrestaShop avec Docker ?

Copier/coller la totalité des lignes ci-dessous :

# 1/ Installer PrestaShop :
docker run -ti –name some-prestashop -p 8080:80 -d prestashop/prestashop:1.7
# 2/ Installer PhpMyAdmin :
docker run –name psphpmyadmin -d –link some-prestashop:db -p 8081:80 phpmyadmin/phpmyadmin
# 3/ Copier les sources :
docker cp some-prestashop:/var/www/html/themes/ /Users/Michael/Documents/docker/prestashop/
docker cp some-prestashop:/var/www/html/modules/ /Users/Michael/Documents/docker/prestashop/
docker cp some-prestashop:/var/www/html/override/ /Users/Michael/Documents/docker/prestashop/

Il ne restera plus cas faire pointer le « volume » :

  • /var/www/html/themes/ vers /Users/Michael/Documents/docker/prestashop/themes/
  • /var/www/html/modules/ vers /Users/Michael/Documents/docker/prestashop/modules/
  • /var/www/html/override/ vers /Users/Michael/Documents/docker/prestashop/override/

NB : la 1er fois cela va charger l’image (cela prendra un peu de temps), puis lors des prochaines utilisations l’image sera rappelée sur votre machine (avec un « Docker run … », qui exécute un « docker create » et un « docker start »). Donc en gros, cela ira beaucoup plus vite (par contre on perdra les changements appliqués, puisqu’on repart de l’image).

docker-02

Oui mais cela sert à quoi ?

  1. Nous lançons le « container » pour PrestaShop (version 1.7)
    Il sera nommé « some-prestashop »
    Il utilisera le port 8080 de votre machine, et pointera sur le port 80 du « container »
  2. Puis nous allons utiliser un autre « container » pour PhpMyAdmin
    Il sera nommé « psphpmyadmin »
    Il utilisera le port 8081 de votre machine, et pointera sur le port 80 du « container »
    On le lie au « container » précédent nommé « some-prestashop »
  3. Puis pour pouvoir travailler en local sur votre code source (et surtout avoir une copie sur votre machine), car si vous lancez de nouveau le « container » avec un « run », vous allez récupérer l’image de ce dernier (et perdre vos modifications).
    En gros sur l’étape 3 on copie les sources du « container » vers votre machine.

Mais où trouver les « images » :

eewee-docker-repository-prestashop

Vous pouvez maintenant accéder à PrestaShop 1.7 :

Ouvrez votre navigateur puis inscrivez 192.168.99.100:8080

docker-03

Quelques lignes de commande pour Docker :

Faite un « docker –help » pour voir les informations ci-dessous.

En Anglais :

  • attach Attach to a running container
  • build Build an image from a Dockerfile
  • commit Create a new image from a container’s changes
  • cp Copy files/folders from a container’s filesystem to the host path
  • create Create a new container
  • diff Inspect changes on a container’s filesystem
  • events Get real time events from the server
  • exec Run a command in an existing container
  • export Stream the contents of a container as a tar archive
  • history Show the history of an image
  • images List images
  • import Create a new filesystem image from the contents of a tarball
  • info Display system-wide information
  • inspect Return low-level information on a container
  • kill Kill a running container
  • load Load an image from a tar archive
  • login Register or log in to a Docker registry server
  • logout Log out from a Docker registry server
  • logs Fetch the logs of a container
  • port Lookup the public-facing port that is NAT-ed to PRIVATE_PORT
  • pause Pause all processes within a container
  • ps List containers
  • pull Pull an image or a repository from a Docker registry server
  • push Push an image or a repository to a Docker registry server
  • restart Restart a running container
  • rm Remove one or more containers
  • rmi Remove one or more images
  • run Run a command in a new container
  • save Save an image to a tar archive
  • search Search for an image on the Docker Hub
  • start Start a stopped container
  • stop Stop a running container
  • tag Tag an image into a repository
  • top Lookup the running processes of a container
  • unpause Unpause a paused container
  • version Show the Docker version information
  • wait Block until a container stops, then print its exit code

En Français :

  • docker attach : Joindre à un conteneur en cours d’exécution
  • docker build : Construire une nouvelle image à partir du code source dans le PATH
  • docker commit : Créer une nouvelle image à partir des changements d’un conteneur
  • docker cp : Copier des fichiers ou des dossiers depuis le PATH d’un conteneur vers le HOSTDIR ou vers STDOUT
  • docker create : Créer un nouveau conteneur
  • docker diff : Inspectez changements sur le système de fichiers d’un conteneur
  • docker events : Obtenir des événements en temps réel depuis le serveur
  • docker exec : Exécuter une commande dans le conteneur en cours d’exécution
  • docker export : Exporter le contenu d’un système de fichiers d’une archive tar vers STDOUT
  • docker history : Afficher l’historique d’une image Docker
  • docker images : Lister des images
  • docker import : Créer une image de système de fichiers vide et y importer le contenu d’une l’archive (.tar, .tar.gz, .tgz, .bzip, .tar.xz, .txz), puis éventuellement y ajouter une étiquette (tag)
  • docker info : Afficher l’ensemble des informations système
  • docker inspect : Afficher les informations de bas niveau sur un conteneur ou une image Docker
  • docker kill : Tuer un conteneur en cours d’exécution en utilisant SIGKILL ou un signal spécifié
  • docker load : Chargez une image à partir d’une archive tar sur STDIN
  • docker login : Inscrivez-vous ou connectez-vous à le Docker Register (HUB)
  • docker logout : Déconnexion du Docker Register (HUB)
  • docker logs : Fetch des journaux d’un conteneur
  • docker pause : Mettre en pause tous les processus dans un conteneur
  • docker port : Liste les ports d’un conteneur, ou rechercher les ports “public” NATé vers un PRIVATE_PORT
  • docker ps : Liste de conteneurs
  • docker pull : Récupérer une image ou un repository à partir du Docker HUB
  • docker push : Publier une image ou un repository vers le Docker HUB
  • docker rename : Renommer un conteneur Docker
  • docker restart : Redémarrez un conteneur en cours d’exécution
  • docker rm : Supprimer une ou plusieurs conteneurs
  • docker rmi : Supprimer une ou plusieurs images
  • docker run : Exécuter une commande dans un nouveau conteneur
  • docker save : Enregistrer une image dans une archive tar (streaming vers STDOUT par défaut)
  • docker search : Rechercher des images sur le Docker Hub
  • docker start : Lancer un ou plusieurs conteneurs arrêtés
  • docker stats : Afficher l’utilisation des ressources d’un ou plusieurs conteneurs sous la forme d’un flux
  • docker stop : Arrêtez un conteneur en cours d’exécution en envoyant SIGTERM et SIGKILL après une période de grâce
  • docker tag : Étiqueter une image dans un repository
  • docker top : Afficher les processus en cours d’exécution d’un conteneur
  • docker unpause : Réactiver tous les processus dans un conteneur
  • docker version : Afficher les informations de version Docker
  • docker wait : Bloquer jusqu’à l’arrêt du conteneur, puis imprime son code de sortie

Docker-compose, hein ?

La commande « docker-compose up -d » va vous servir à lancer un fichier docker-compose.yml avec une config prédéfinie à l’intérieur.
Bon avec un exemple cela sera plus simple 🙂

On va installer un WordPress et PhpMyAdmin :

  1. On crée un fichier « docker-compose.yml » (le télécharger sur : github.com/eewee/docker-compose-wordpress-phpmyadmin/).
  2. On se place dans le dossier ne contenant que le fichier « docker-compose.yml ».
  3. On lance un « docker-compose up -d ».
  4. Tapez maintenant l’url suivante :
    – 192.168.99.100:8081, pour accéder à la page d’installation de WordPress.
    192.168.99.100:8080, pour accéder à la page de PhpMyAdmin.

eewee-docker-compose-yml-wordpress-phpmyadmin

Un peu d’explication sur le fichier docker-compose.yml utilisé :

# On donne le nom « wordpress » à ce container,
# à partir de l’image « wordpress »,
# on le lie à notre bdd nommée « db »,
# sur le port 8081 de notre machine, qui pointe sur le port 80 de notre « container »,
# puis pour finir on copie le « volume ».

wordpress:
image: wordpress
links:
– db:mysql
ports:
– 8081:80
volumes:
# copy in path windows
– ~/Documents/docker/wordpress/:/var/www/html/

# On donne le nom « wpmariadb » à ce container,
# à partir de la dernière image « mariadb »,
# on init une variable « MYSQL_ROOT_PASSWORD = root »,
# sur le port 3306 de notre machine, qui pointe sur le port 3306 de notre « container ».

db:
image: mariadb:latest
container_name: wpmariadb
environment:
MYSQL_ROOT_PASSWORD: root
ports:
– 3306:3306

# On donne le nom « wpphpmyadmin » à ce « container »,
# à partir de l’image « phpmyadmin/phpmyadmin »,
# on le lie à notre bdd nommée « db »,
# on init 2 variables « MYSQL_USERNAME= root » et « MYSQL_ROOT_PASSWORD=root »,
# sur le port 8080 de notre machine, qui pointe sur le port 80 de notre « container »,
# on crée un volume « /sessions ».

phpmyadmin:
image: phpmyadmin/phpmyadmin
container_name: wpphpmyadmin
links:
– db:db
environment:
MYSQL_USERNAME: root
MYSQL_ROOT_PASSWORD: root
restart: always
ports:
– 8080:80
volumes:
– /sessions

Dockerfile, encore, hein ?

Je vous laisse voir par ici : docs.docker.com/engine/userguide/eng-image/dockerfile_best-practices

Docker Cheat Sheet :

Télécharger le PDF (notes sur des commandes Docker)

Michael

Développeur / intégrateur, travaillant en agence web depuis 2005, je viens à présent vous proposer de venir découvrir mes créations personnelles de plugins / themes pour le CMS Wordpress & Prestashop, quelques solutions en mode SAAS & un peu d'actualité web ( / Twitter).

Vous aimerez aussi...

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.