Les dernières actualités d'Alsacreations.com
Que vous prévoyiez une dimension internationale dès la conception de votre site web ou que vous rencontriez ce besoin plus tard dans son cycle de vie, il est toujours bon de faire le nécessaire à l'internationalisation (couramment abrégée i18n) dès le départ. Croyez-en mon expérience, personne ne veut être pris de court et repasser sur l'intégralité des fichiers d'un site, plusieurs années après sa création, pour rajouter le support d'autres langues.
Nous n'aborderons ici que la méthode officielle et ne parlerons pas d'extensions dédiées à ce besoin, comme Loco Translate.
Trève de digressions, c'est parti !
Partons du principe que vous n'achetez pas votre thème sur une boutique en ligne, mais que vous le développiez vous-même (les thèmes premium sont très souvent "translation-ready" et s'ils ne le sont pas, fuyez !).
Voici un morceau de code très sommaire permettant d'afficher une liste d'articles et que l'on peut retrouver dans beaucoup de thèmes.
<h2>Actualités</h2>
<ul class="list">
<?php while( have_posts() ) : the_post(); ?>
<li class="list-item">
<h3><?php echo get_the_title(); ?></h3>
<a href="<?php echo get_permalink(); ?>">Voir l'article</a>
</li>
<?php endwhile; ?>
</ul>
<a href="https://www.alsacreations.com/">Voir toutes les actualités</a>
Ici, tous les textes statiques sont écrits directement dans le fichier. Résultat, impossible de les traduire.
Voyons maintenant ce que ça donne si notre thème est correctement développé.
<h2><?php echo __( 'Actualités', 'textdomain' ); ?></h2>
<ul class="list">
<?php while( have_posts() ) : the_post(); ?>
<li class="list-item">
<h3><?php echo get_the_title(); ?></h3>
<a href="<?php echo get_permalink(); ?>">
<?php echo __( 'Voir l\'article', 'textdomain' ); ?>
</a>
</li>
<?php endwhile; ?>
</ul>
<a href="https://www.alsacreations.com/">
<?php echo __( 'Voir toutes les actualités', 'textdomain' ); ?>
</a>
Et voilà ! Avec seulement quelques octets de plus, cette partie du site est maintenant prête pour la traduction ! ð
Et ça change quoi ? ð¤
Pas grand chose, si ce n'est que l'on utilise désormais les fonctions de gettext, la bibliothèque de fonctions de traduction intégrée à WordPress et originaire du système d'exploitation GNU.
On notera l'utilisation de la fonction __()
pour afficher les textes, mais c'est loin d'être la seule !
Gestion des pluriels, échappement des textes pour affichage dans des attributs HTML ou encore _e()
pour économiser les appels à echo
. À chaque usage peut correspondre une fonction, mais il est aussi possible de n'utiliser que la fonction de base __()
et de la combiner avec d'autres fonctions PHP comme on peut le faire habituellement.
Notez également le second paramètre ici appelé textdomain
.
Il est très important et doit être unique pour votre thème, car il définit le domaine de nos traductions à venir.
Ainsi, __( 'Mon texte à traduire', 'domaine1' )
et __( 'Mon texte à traduire', 'domaine2' )
sont 2 chaînes de caractères complètement différentes, même si on ne dirait pas au premier abord.
Choisissez un nom de domaine suffisamment unique pour votre thème sous peine de rencontrer de potentiels conflits avec des extensions installées sur votre site.
C'est là que la marche à suivre se complique un peu et sort du cadre confortable de WordPress.
Il existe 3 types de fichiers dédiés à la traduction : .pot
, .po
et .mo
et chacun à son rôle.
.pot
Tout d'abord, il faut extraire toutes les chaines de caractères dans un catalogue qui servira de base à toutes les futures traductions, peu importe la langue cible.
Ça tombe bien, c'est exactement le rôle des fichiers .pot
!
Plusieurs outils existent pour le faire, dont le plus connu est PoEdit. Cependant, la génération de catalogue est, de mon point de vue, plus facile et directe avec un autre logiciel, EazyPo, que nous utiliserons dans la suite de ce tutoriel.
Une fois EazyPo téléchargé (pas besoin d'installation, c'est un logiciel portable), lancez-le pour vous retrouver face à une interface des plus conviviales.
Cliquez ensuite sur "Extract from source code" ou "File" puis "New from source code files" et sélectionnez le dossier de votre thème. Assurez-vous que la liste des fichiers est correcte si besoin.
Enfin, cliquez sur "Build" pour pouvoir choisir la destination et le nom du fichier qui sera généré.
Note : Une convention commune dans l'écosystème WordPress et d'utiliser le nom du thème à la fois pour le domaine et pour le nom des fichiers de traduction.
Une fois ceci fait, il ne vous reste plus qu'à cliquer sur le gros bouton rouge "Execute command" pour créer le fichier.
ðTADA !ð
La génération terminée, le logiciel ouvre votre catalogue de traductions.
Vous pouvez maintenant fermer ce fichier, nous n'avons plus besoin de le toucher.
Solution alternative : si vous êtes un utilisateur avancé, vous connaissez peut-être WP-CLI, l'interface en ligne de commande de WordPress. La commande make-pot
permet de générer un fichier .pot
en se positionnant dans le dossier de votre thème ou de votre extension (voir la documentation de make-pot
).
.po
et .mo
Maintenant que votre fichier .pot
est prêt, vous allez pouvoir générer les fichiers nécessaires pour chaque langue que vous souhaitez ajouter à votre site.
Sans rentrer dans les détails :
.po
pour les traducteurs/traductrices humains.mo
à destination de la machine.Pour servir d'exemple, nous allons créer un nouveau fichier pour traduire notre thème dans la langue de Shakespeare.
Pour cela, cliquez sur "File" puis "New from file".
Sélectionnez votre catalogue fraichement créé puis à l'étape suivante, choisissez de créer un fichier .po
.
Enfin, choisissez l'emplacement de création de votre fichier et son nom.
Notez que le nommage de vos fichiers est important. En plus d'avoir le même nom que votre fichier .pot
, les fichiers .po
doivent être suffixés de la locale de traduction. Ainsi, le fichier dédié à la langue anglaise doit être nommé nom-de-mon-theme-en_GB.po
(ou nom-de-mon-theme-en_US.po
si vous préférez l'anglais américain).
Une fois votre fichier créé, il ne vous reste plus qu'à le remplir ! ð
Pour mener à bien cette partie fastidieuse, sélectionnez les chaînes de caractères une par une et cliquez dans le cadre en bas à droite pour saisir votre traduction. En fonction de la complexité de votre thème, on ne va pas se mentir, cela peut prendre plus ou moins de temps (pensez à sauvegarder régulièrement !).
Nous y voilà, toutes vos traductions sont prêtes et il ne vous reste plus qu'à faire en sorte que WordPress charge le bon fichier.
Heureusement, le CMS dispose de plusieurs fonctions pour cette tâche et celle qui nous intéresse ici est load_theme_textdomain
(voir la documentation).
Ajoutez ce morceau de code dans le fichier functions.php
de votre thème.
/**
* Chargement des fichiers de traduction
*/
function load_theme_translations(){
load_theme_textdomain( 'textdomain', get_template_directory() . '/lang' );
}
add_action( 'after_setup_theme', 'load_theme_translations' );
Le premier paramètre est le domaine que vous avez choisi. Le second est l'URL vers le dossier qui contient vos fichiers de traduction (ici, on suppose que votre thème contient un dossier /lang
).
Note : Les différentes fonctions de chargement de fichiers de traductions tenteront d'abord de localiser vos fichiers dans le dossier /languages
de WordPress, donc si vous le voulez, vous pouvez les y mettre directement.
Si préparer son thème ne demande que quelques efforts supplémentaires lors du développement, la création des fichiers de traductions peut s'avérer assez laborieuse surtout si c'est quelque chose que l'on rencontre peu dans son quotidien.
Toujours est-il que l'on ne saurait que trop vous recommander de penser à l'internationalisation de vos développements de thèmes ou d'extensions WordPress dès leur conception, sans quoi vous pourriez perdre un temps non négligeable en le faisant a posteriori, si c'est un besoin qui n'apparait que tardivement dans un projet.
Pour approfondir le sujet et connaitre, par exemple, la marche à suivre pour proposer des traductions pour des thèmes ou extensions, l'équipe de traduction de WordPress met à disposition ce guide.
Le processus reste relativement similaire, mais pour éviter d'allonger un article déjà bien complet, nous ne rentrerons pas dans les détails ici. Toutefois, si vous souhaitez un nouveau tutoriel dédié, faites-le nous savoir !
En attendant, vous pouvez visiter la documentation officielle proposée par WordPress.
Vous avez sûrement déjà entendu parler de Docker, si ce n'est déjà utilisé.
Docker peut considérablement vous simplifier la vie, sécuriser, harmoniser votre environnement de développement ou de production, ainsi que faciliter le travail en équipe... après l'avoir apprivoisé.
Le plan de ce tutoriel :
À la fin de cette page vous serez comme ça.
Docker n'est pas une machine virtuelle ; c'est une technologie qui orchestre des applications en conteneurs (containerisées), embarquant chacune leurs dépendances, en fonctionnant de manière isolée tout en pouvant partager des ressources et communiquer.
Même si on peut le percevoir comme une autre recette accroissant la hauteur du burger full-stack, s'y intéresser vaut le détour.
ð¥ Chez Alsacréations nous avons, après de multiples expérimentations, structuré notre propre environnement pour les projets WordPress autour de WordPlate + MySQL/MariaDB dans Docker. Cela nous permet d'avoir un modèle propre, organisé, testé, éprouvé, documenté, pour tout nouveau projet de site. #pub Si vous avez besoin d'une équipe à la pointe pour votre nouveau site ou votre refonte, contactez-nous ;) (PS : on aime aussi Vue et Nuxt).
(Illustration : Docker.com)
Lorsqu'on découvre Docker, le plus mystérieux n'est pas son fonctionnement interne. Il faut avant tout cerner la logique des quelques opérations de base :
Cette introduction est destinée à en présenter les concepts pour une prise en main rapide pour un cas simple : développer un site web (avec WordPress en option) sans avoir à installer et configurer Apache, PHP, MySQL sur sa machine ou une solution qui les regroupe telle que WAMP, MAMP, XAMPP, etc. et que l'on n'ose plus toucher ultérieurement "tant que ça marche".
Le même principe est applicable à d'autres configurations et langages (Java, Python, Node, Redis, PostgreSQL, Nginx, MongoDB...)
Identifions tout de suite les avantages majeurs de Docker :
Sans entrer dans les détails techniques, il ne s'agit pas d'émulation et il n'y a pas de comparaison possible avec VirtualBox ou VmWare. La performance de Docker selon le système utilisé est :
Si le poids des images (des applications) varie selon leur complexité, on reste loin d'une machine virtuelle complète : à partir de quelques Mo car pouvant être construites grâce à Alpine Linux, une distribution très légère (~5 Mo)... jusqu'à quelques centaines de Mo.
Docker est articulé autour de plusieurs concepts, qu'il n'est pas nécessaire de maîtriser pleinement pour commencer à s'en servir :
Si vous installez Docker sur votre machine, vous retrouverez la commande docker
dans votre Terminal (CLI) quoiqu'il arrive.
Toutes les opérations sont décrites en ligne de commande mais une fois vos containers en place vous pouvez les démarrer/arrêter en un clic avec l'interface graphique ou l'extension Visual Studio Code.
Une image est un modèle d'application, préconfigurée, embarquée dans un mini-système Linux. Docker Hub liste toutes les images disponibles publiquement au téléchargement https://hub.docker.com/search?q=&type=image ; chacune étant nommée image:tag
, avec tag représentant une version, ou une déclinaison particulière.
Exemples :
L'image hello-world
est une petite image de démonstration qui ne fait qu'afficher un message de bienvenue, pratique pour les premiers tests :
Récupérer une image existante se fait avec la commande pull
, par exemple : docker pull hello-world:latest
Exécuter cette image dans un conteneur se fait avec run
: docker run hello-world
Si on tente un run directement sans avoir pull ou sans avoir déjà une image en stock, le pull est déclenché automatiquement. On en profite.
Si on possède Docker Desktop (Windows, Mac) ou Dockstation (Linux), l'image apparaît dans le "stock" disponible en local.
L'image est notée comme étant in use (utilisée) par un un conteneur qui a aussi été créé pour l'occasion (avec un nom aléatoire) :
On peut aussi se renseigner en ligne de commande avec docker image ls
$ docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
hello-world latest feb5d9fea6a5 2 weeks ago 13.3kB
À noter : lorsqu'une image a été téléchargée pour être exécutée, elle reste disponible en local. On peut nettoyer cette liste par la suite en se débarrassant des conteneurs associés : docker container prune
(supprime les conteneurs inactifs) puis docker image rm hello-world
.
Il y a toujours cette dualité : un conteneur ne peut exister l'image qui lui a donné naissance.
Cette première étape est déjà bien motivante : on peut rapidement télécharger-exécuter une application avec les avantages de base de Docker. Lançons notre premier serveur web Apache avec PHP : docker run -p 80:80 php:7.4-apache
(les noms disponibles peuvent être trouvés dans la section tags du hub Docker).
L'option -p 80:80
signifie que l'on fait correspondre le port http local à celui exposé par le conteneur (sinon on ne pourra s'y connecter, tout étant bloqué par défaut).
Et maintenant ? En se rendant à l'adresse http://localhost/ il y a une réponse du serveur... avec une erreur du type 403 Forbidden car aucun fichier n'est encore prêt à être servi. Mais nous avons bien un serveur web Apache qui tourne, équipé de PHP (croyons-le sur parole) après une seule ligne de commande. ð
Il reste maintenant à peaufiner la configuration, déterminer l'accès aux bons fichiers (du site web) et compléter par MySQL dans le cadre de cette introduction.
Il est possible de créer ses propres images, à partir de briques déjà existantes (telles que celle utilisée précédemment php:7.4-apache), complétées par des instructions de configuration.
Un Dockerfile est un fichier texte qui va dans un premier temps invoquer une image de base, avec l'instruction FROM
puis dérouler d'autres commandes propres à Docker dont la liste est présentée ci-dessous. En voici un exemple relativement parlant (surtout si vous êtes familier de la ligne de commande Linux).
# Image de base
FROM php:7.4-apache
# Port ouvert (web = 80)
EXPOSE 80
# Dossier de travail pour les commandes suivantes
WORKDIR /var/www/html
# Installation initiale de modules apache et php
RUN a2enmod headers deflate expires rewrite
RUN docker-php-ext-install mysqli
# Redémarrage d'Apache pour prendre en compte ces modifications
RUN apachectl restart
L'image obtenue nous permettra d'avoir désormais en plus : des modules Apache (headers, deflate, expires, rewrite) et un module mysqli pour PHP.
Une dizaine d'instructions existent : https://docs.docker.com/engine/reference/builder/ entre autres :
FROM
Définit l'image source (FROM php:7.4-cli
).ENV
Définit une variable d'environnement à la compilation et à l'exécution (ENV MY_VAR=kiwi
).LABEL
Ajoute une métadonnée à l'image.WORKDIR
Définit le dossier de travail pour les commandes suivantes (WORKDIR /var/www/html
).RUN
Exécute une commande à la compilation (RUN echo Hello
).CMD
Exécute une commande dans le conteneur (CMD [ "php", "./your-script.php" ]
).EXPOSE
Informe Docker que le conteneur écoute sur un port (EXPOSE 80
ou EXPOSE 80/tcp
).COPY
Copie des fichiers/répertoires depuis une source vers le filesystem de l'image. --chown
modifie les droits à la volée.ADD
Ajoute des fichiers/répertoires (y compris depuis une URL ou une extraction tar) dans le filesystem de l'image (ADD test.txt dir/
). --chown
modifie les droits à la volée.VOLUME
Crée un point de montage (VOLUME /myvol
).ENTRYPOINT
Configure un conteneur comme un exécutable.USER
Définit l'id utilisateur (UID) et groupe (GID) à utiliser lorsque l'image s'exécute et pour toute instruction suivante (RUN, CMD, ENTRYPOINT).ARG
Définit une variable que l'on peut passer au moment de la compilation avec --build-arg <varname>=<value>
.La commande build compile une nouvelle image à partir de paramètres (et dans la plupart des cas d’une autre image racine) décrits par la “recette” Dockerfile : docker build -t monserveurweb .
Le point final signifie que le fichier Dockerfile se trouve dans le dossier courant.
L'image apparaît ensuite dans la liste des images disponibles, que ce soit en ligne de commande avec docker image list
ou dans le client graphique Docker.
Pour lancer le conteneur correspondant, on utilisera docker run
(ou l'interface graphique) à partir d’un nom d'image, par exemple docker run monserveurweb
.
(Il ne faut pas faire attention ici aux warnings, c'est logique et propre à Apache car on ne lui a pas indiqué de configuration particulière)
Pour éviter d'avoir un nom généré aléatoirement, on pourra le nommer docker run --name mon-serveur-web monserveurweb
. et relancer cette commande autant de fois que nécessaire.
On constate alors que ce nouveau couple image/conteneur :
docker container stop mon-serveur-web
et supprimé avec docker container rm mon-serveur-web
lorsqu'on n'en a plus besoin, puis invoqué à nouveau plus tard, etc.La commande docker run
peut comporter un certain nombre de paramètres pour indiquer dans quelles conditions exécuter l’application (volumes de données, ports, droits, etc).
Chaque conteneur peut exposer (EXPOSE
) des ports du conteneur vers l’extérieur (l’hôte) : -p 8000:80
signifie que le conteneur "publie" son port 80 "natif" vers le port 8000 et que le navigateur s'y connecter sur http://localhost:8000 s'il est sur la même machine. Dans notre exemple initial nous avions 80:80
, si votre port 80 est déjà occupé par une autre application rien ne vous empêchera d'en choisir librement un autre. Chaque conteneur Apache invoqué pourra donc vivre sur son port 80 naturellement sans avoir besoin d'être configuré autrement.
Un lien permet de lier, ou plutôt de rendre visibles des conteneurs entre eux, par des noms choisis, sur leurs réseaux respectifs : --link db:mysql
(plus de détails à venir dans la partie compose).
Un volume est un "partage" d’un dossier local (machine hôte = votre système Linux/Windows/Mac) avec le conteneur. Il peut aussi provenir d’un service distant (ssh, s3…). Ce n’est pas une copie, c’est une synchronisation réelle sur le disque. Conteneur et hôte peuvent lire et écrire dans cet emplacement : pratique pour conserver les données utiles hors du conteneur lorsqu'il est arrêté/détruit.
Exemples : -v C:\www\mysql:/var/lib/mysql
(car dans un conteneur mysql ou mariadb, les données des bases sont par défaut dans /var/lib/mysql) ou -v /var/www/wordpress/public:/var/www/html
(car dans un conteneur apache, les fichiers sont cherchés par défaut dans /var/www/html)
On place le chemin local à gauche du séparateur :
et le chemin dans le conteneur à droite local:conteneur
Pour finir, une commande plus complète pourrait donner ceci :
docker run
-v c:\www\docker\wordpress:/var/www/html
-p 80:80
# -p 8000:80 (si on a besoin de changer le port)
# --link mysqlserver:db (on ne peut pas encore faire ça, voir ci-dessous)
monserveurweb
# ou php:7.4-apache
Cela signifie que les fichiers de votre site web (WordPress ou autre, en HTML statique ou PHP) devront être placés dans le chemin mentionné (ici c:\www\docker\wordpress) pour qu'Apache puisse les trouver et afficher la page d'installation.
Nous avons le serveur web, il nous faut ajouter la base de données MySQL (ou MariaDB).
On peut là aussi démarrer rapidement un serveur à partir de docker run
et nous n'aurons pas besoin de Dockerfile car l'image de base fournie mysql/mysql-server
par https://hub.docker.com/r/mysql/mysql-server/ ne sera pas modifiée.
Une petite différence avec l'image d'Apache : nous aurons tout de même besoin d'une variable d'environnement car MySQL nécessite d'être initialisé avec un mot de passe ; au choix :
-e MYSQL_ROOT_PASSWORD=azertybaïdjan
(explicite, mot de passe "en dur")-e MYSQL_RANDOM_ROOT_PASSWORD=yes
(mot de passe aléatoirement généré la première fois : retrouvez-le dans les logs du container, attention il faut le noter car il disparaît ensuite)Voici la commande complète :
docker run
--name mysqlserver
# --restart always (si on veut le redémarrer automatiquement)
-p 3306:3306
-v $PWD/mysql:/var/lib/mysql
-e MYSQL_ROOT_PASSWORD=azertybaïdjan
mysql/mysql-server
Ici le port 3306 standard est exposé vers l'extérieur, et $PWD
signifie "dossier courant" : ce n'est pas forcément disponible sous Windows où il faudra spécifier le chemin complet (c:...)
Si on oublie le volume (option -v
) alors les données seront stockées dans le conteneur et effacées avec lui. Attention Dino Danger.
L'option -e
passe une variable d’environnement (existe déjà nativement sous Windows, macOS, Linux) au conteneur, souvent pour le pré-configurer.
Pour le serveur MySQL : -e MYSQL_ROOT_PASSWORD=****** -e MYSQL_DATABASE=db -e MYSQL_USER=user
Pour phpmyadmin : -e UPLOAD_LIMIT=128M -e PMA_HOST=db
Ces variables sont données par la documentation officielle, exemple pour PhpMyAdmin : https://hub.docker.com/r/phpmyadmin/phpmyadmin/
Nous devons adapter la commande run du conteneur apache pour qu'il puisse utiliser un lien vers le conteneur de la base.
docker run --name mon-serveur-web -v c:\www\docker\wordpress:/var/www/html -p 80:80 --link mysqlserver:db monserveurweb
Le nom du serveur (host, hostname) à indiquer pour un script PHP souhaitant se connecter à MySQL, ou pour l'installation de WordPress, deviendra "db".
Tout cela est bien beau, avec phpmyadmin pour administrer le serveur c'est encore mieux.
Lançons docker run --name pma --link mysqlserver:db -p 8080:80 -e PMA_HOST=db -e UPLOAD_LIMIT=128M phpmyadmin
Toutes les options ont déjà été décrites précédemment, la nouveauté est l'usage de --link
qui va indiquer que lorsque phpmyadmin tentera de se connecter au serveur nommé "db" (précisé par PMA_HOST), cela pointera en réalité vers l'IP interne du conteneur nommé "mysqlserver".
Nous pouvons nous y connecter via http://localhost:8080/ comme on peut le deviner avec l'option -p
utilisée.
Après cette mise en place, un constat : tous ces conteneurs sont bien pratiques, il nous a suffi de quelques d'instructions pour aboutir à un environnement complet, modulaire :
Tous les ports ouverts sont indiqués, ainsi que par la commande docker container ls
.
Une fois qu'on maîtrise ce principe, toutes les autres images Docker sont à portée de pull + run.
il nous faudrait ~~un anneau~~ une magie supplémentaire pour tous les gouverner... plutôt que de manipuler la ligne de commande pour chacun d'entre eux : cela fera l'objet d'un prochain tutoriel.
Un conteneur est surtout le code d’application, ne devrait pas détenir les données du projet (ex : la base SQL, les uploads).
Tant qu'on utilise les volumes qui partagent les fichiers du système hôte (votre machine) dans un dossier précis, on conservera les données utiles “en dehors” du conteneur s'il est détruit.
Un conteneur détruit pourra être remplacé par un autre (ex : une nouvelle version de l'application) tout en accédant au volume des données qui a été préservé. C'est une philosophie : séparer proprement, et se préparer au pire, permettent d'aborder les risques plus sereinement.
Vous pourrez par exemple
gitlab-ee
édition payante vers gitlab-ce
édition gratuite)mysql-server
par mariadb
, son "équivalent" beaucoup plus libreUn mot rapide sur Alpine Linux : c'est une distribution Linux minimaliste qui a été choisie pour la plupart des images Docker en raison de son poids. Si les quelques Mo qui servent de socle sont orientés pour des utilisateurs expérimentés, rien n'empêche de les étoffer par d'autres paquets.
Il n'y a aucune obligation à maîtriser Linux (ou Alpine Linux) pour se servir de Docker. Néanmoins pouvoir exécuter des commandes en accédant au shell du conteneur est pratique pour bien des opérations.
Il y a plusieurs façons d'exécuter un conteneur, la méthode classique est de le laisser tourner en permanence en tâche de fond et de s'y connecter sur un port, par exemple avec un navigateur web pour Apache, mais on peut aussi :
-it
)docker run -it alpine /bin/sh
ls
)docker run alpine ls -l
docker exec -i mysqlserver mysqldump mabase -ulogin -ppassword | gzip >export.sql.gz
Ici mysqlserver
est le nom du conteneur et mysqldump mabase -ulogin -ppassword
est la commande qui s'exécute dans ce conteneur.
L'extension Docker est fortement recommandée pour se connecter au service Docker (Engine) de la machine et administrer les images et conteneurs, mais aussi, entre autres :
À défaut d'utiliser Docker Desktop, cette extension accomplit les tâches les plus courantes, sans quitter l'éditeur de code.
Sous Linux, pour synchroniser l’heure/fuseau horaire de l’hôte à celui du conteneur (sinon il peut y avoir un décalage de 2h en Europe), on peut ajouter un volume -v /etc/localtime:/etc/localtime:ro
(ici ro
signifie read-only c'est-à-dire lecture seule)
Si le shell par défaut est trop limité, tenter d’exécuter bash
s'il est déjà inclus dans l'image, ou on peut l'installer avec un petit apt update && apt install bash
etc. Même chose pour l'éditeur vim
si vous savez comment en sortir.
docker build -t <nomimage:tag> .
docker run --name <nomducontainer> <nomimage:tag>
(+ voir autres options)docker start <nomducontainer>
(ou stop
)docker container exec -it <nomducontainer> <lacommande>
(par exemple bash
pour ouvrir un shell)docker container ls
ou docker ps -a
docker image ls
docker container rm <nomducontainer>
docker image rm <nomdelimage>
$PWD
docker network create my-custom-net
et l'utiliser au run : --network=my-custom-net
docker stats
docker logs <nomducontainer>
docker port <nomducontainer>
docker top <nomducontainer>
docker diff <nomducontainer>
-d
: permet de détacher l'exécution du container du terminal courant-p
: permet de lier un port (local:container -p 8080:80
)-u
: permet de spécifier l'utilisateur+groupe d'exécution-v
: permet de déclarer un volume (local:container -v /var/path/to/mydata/mysql:/var/lib/mysql
)-e
: permet de passer/spécifier une variable d'environnement-i
: permet d'avoir un terminal interactif (stdin), par exemple pour entrer un mot de passe au prompt (souvent combiné avec t
)-t
: alloue un pseudo-tty--link
: permet de "lier" un hostname d'un container à un autre (par exemple un serveur mysql dans un 1er container mysqlserver
devient --link mysqlserver:db
dans le 2e, on utilise alors db
)--restart always
: indique au service Docker de redémarrer le container au boot et de le maintenir actif si Docker est lui-même relancéAstuces :
-m 256m
pour limiter la mémoire à 256 Mo--read-only
pour que le système de fichiers soit en lecture seule:ro
pour qu'il soit en lecture seuleRetrouvez l'intégralité de ce tutoriel en ligne sur Alsacreations.com