WordPress sous Docker avec docker engine

 

docker

 

Pré-requis :

  • Linux en version 64bits

1 – modification des dépôts

$ sudo vim /etc/apt/sources.list.d/docker.list

ajout de la ligne : deb http://apt.dockerproject.org/repo debian-jessie main

$ sudo apt-key adv --keyserver hkp://p80.pool.sks-keyservers.net:80 --recv-keys 58118E89F3A912897C070ADBF76221572C52609D

2 – installation de docker

$ sudo apt-get update && apt-get upgrade
$ sudo apt-get install docker-engine

On vérifie que docker fonctionne

$ sudo docker run hello-world
Hello from Docker.
This message shows that your installation appears to be working correctly.
To generate this message, Docker took the following steps:
 1. The Docker client contacted the Docker daemon.
 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
 3. The Docker daemon created a new container from that image which runs the
 executable that produces the output you are currently reading.
 4. The Docker daemon streamed that output to the Docker client, which sent it
 to your terminal.
To try something more ambitious, you can run an Ubuntu container with:
 $ docker run -it ubuntu bash
Share images, automate workflows, and more with a free Docker Hub account:
 https://hub.docker.com
For more examples and ideas, visit:
 https://docs.docker.com/userguide/

3 – Rattachement de l’utilisateur courant au groupe docker.

Par défaut, docker communique via un socket Unix et non pas TCP/IP

$ ls -l /var/run/docker.sock 
srw-rw---- 1 root docker 0 déc. 28 11:10 /var/run/docker.sock

Seuls root et les membres du groupe docker peuvent donc utiliser ce socket.

Pour que l’utilisateur courant puisse utiliser docker sans passer par sudo :

$ sudo adduser utilisateur docker

Fermer la session et réouvrir.

4 – Recherche  des images

Là encore, deux méthodes : une par une à la main (privilégiée en premier pour comprendre le fonctionnement de Docker) ou avec docker-compose (voir plus loin… ou plus tard)

Docker crée des containers qui sont lancés à partir d’images.
On cherche les images à récupérer pour mettre en place notre wordpress

  • soit sur le concentrateur (hub) d’images de docker : Docker Hub
  • soit en ligne de commande :
$ docker search wordpress

1 image officielle (maintenue par Docker)

$ docker search mysql/

2 images officielles : mysql et mariadb

$ docker search phpmyadmin

pas d’image officielle : choix de phpmyadmin/phpmyadmin

5 – Installation du container base de données (MariaDB)

$ docker pull mariadb:latest
....

Afficher la liste des images en local (pour vérifier la présence de mariadb) :

$ docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
mariadb latest 7ea699452bc9 6 days ago 304.3 MB
hello-world latest 0a6ba66e537a 10 weeks ago 960 B

Lancer un container db à partir de cette image :

$ docker run -e MYSQL_ROOT_PASSWORD=password --name db -d mariadb
 33a2454e8386a94a1bad3841f854c84f92dbab7b4992c0155091b147a72b0069

L’utilisateur par défaut est « root » et le mot de passe celui dans la commande ci-dessus

Vérifier que le conteneur est lancé :

$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
33a2454e8386 mariadb "/docker-entrypoint.s" 2 minutes ago Up 2 minutes 3306/tcp db

Voir au passage que la base de données écoute sur le port 3306

Se connecter à la base de données :

  • récupérer l’IP du container de la base de données (db)
$ docker inspect --format '{{ .NetworkSettings.IPAddress }}' db
172.17.0.2
  • installer le client mariadb en local si pas fait
$ sudo apt-get update
$ sudo apt-get install mariadb-client-10.0
  • se connecter à la base :
$ mysql -h 172.17.0.2 -uroot -ppassword
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 5
Server version: 10.0.23-MariaDB-1~jessie mariadb.org binary distribution

Copyright (c) 2000, 2015, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]>

6 – installation du container WordPress

$ docker pull wordpress:latest
...

Vérification :

$ docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
mariadb latest 7ea699452bc9 6 days ago 304.3 MB
wordpress latest 954d040f616f 11 days ago 516 MB
hello-world latest 0a6ba66e537a 10 weeks ago 960 B

Création et lancement du container WordPress (nommé docker_WP et lié à la base dans le container db) et récupération de l’IP

$ docker run --name docker_WP --link db:mysql -d wordpress
a31d4de54136d66aafa93c39591a5a495562254e88b90e341c0a7f05e2a61944
$ docker inspect --format '{{ .NetworkSettings.IPAddress }}' docker_WP
172.17.0.3

En tapant cette IP (172.17.0.3) dans un navigateur, on accède au WordPress dans un container Docker.

7 – Quelques commandes supplémentaires utiles

Démarrer ou éteindre un container :

$ docker start docker_WP
$ docker stop docker_WP

Supprimer un container

$ docker rm docker_WP

Effacer une image

$ docker rmi wordpress