Docker – łączymy kontener MySQL z kontenerem Apache/PHP oraz instalacja WordPress’a

 Docker – łączymy kontener MySQL z kontenerem Apache/PHP oraz instalacja WordPress’aMając już podstawy Dockera za sobą pokażemy jak przy jego pomocy możemy uruchomić własną stronę opartą na popularnym systemie zarządzania treścią WordPress. Aby było to możliwe potrzebujemy serwer www wraz z obsługą PHP oraz bazę danych MySQL. W tym celu zbudujemy dwa kontenery, na pierwszym uruchomimy bazę danych, na drugim serwer www. Pliki strony zmapujemy z naszego lokalnego dysku do kontenera na którym będzie działać webserver.

Kontener z bazą danych MySQL

Użyjemy oficjalnego obrazu MySQL z Docker Hub. W konsoli wpisujemy:

docker pull mysql

Kiedy obraz znajdzie się na naszym dysku, uruchamiamy kontener:

docker run --name wp-mysql --rm -e MYSQL_ROOT_PASSWORD=password -e MYSQL_DATABASE=wpdb -e MYSQL_USER=wpuser -e MYSQL_PASSWORD=wppassword mysql

Polecenie dosyć długie, więc wyjaśnijmy poszczególne argumenty:

  • --name wp-mysql – przydzielamy nazwę naszemu kontenerowi. Dzięki temu możemy się do niego odwoływać korzystając z jego nazwy, zamiast jego identyfikatora
  • --rm – kontener zostanie automatycznie usunięty po jego zatrzymaniu.
  • -e – ustawia zmienną środowiskową w kontenerze. Obraz mysql obsługuje kilka takich zmiennych:
    MYSQL_ROOT_PASSWORD – ustawia hasło do bazy danych dla użytkownika root
    MYSQL_DATABASE – tworzy bazę danych po starcie kontenera
    MYSQL_USER – nazwa użytkownika, któremu zostaną nadane pełne prawa (superuser) do bazy zdefiniowanej w MYSQL_DATABASE.
    MYSQL_PASSWORD – hasło dla użytkownika MYSQL_USER

Sprawdzimy czy połączenie do bazy danych jest w ogóle możliwe, najpierw potrzebujemy adres IP kontenera:

docker inspect wp-mysql | grep -i ipaddress
        "IPAddress": "172.17.0.2",

Następnie zalogujemy się do bazy korzystając ze zdefiniowanych wcześniej danych dostępowych:

mysql -N -u wpuser -pwppassword -h 172.17.0.2 wpdb -e "select database()"
+------+
| wpdb   |
+------+

Jak widać dostęp jest możliwy, przechodzimy dalej.

Budujemy kontener z obsługą PHP i MySQL

W poprzedniej części zbudowaliśmy własny kontener oparty na obrazie centos:6, w którym następnie doinstalowaliśmy pakiet httpd. Użyjemy ponownie tej metody, potrzebujemy tylko trochę więcej pakietów. Tworzymy plik Dockerfile:

FROM centos:6
MAINTAINER  ITCore 

RUN yum -y upgrade && yum -y install httpd php php-mysql && yum clean all

# Simple startup script to avoid some issues observed with container restart 
ADD start-httpd.sh /start-httpd.sh
RUN chmod -v +x /start-httpd.sh

EXPOSE 80

CMD ["/start-httpd.sh"]

oraz plik start-httpd.sh:

#!/bin/bash
rm -rf /run/httpd/*
exec /usr/sbin/apachectl -D FOREGROUND

Budujemy własny obraz:

docker build -t tech-itcore/centos6-httpd-php-mysql .

Po krótkiej chwili nowy obraz jest gotowy:

docker images tech-itcore/*
REPOSITORY                            TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
tech-itcore/centos6-httpd-php-mysql   latest              bdfa916ce0f3        3 minutes ago       438.3 MB

Łączymy kontenery ze sobą

Teraz najważniejsza część. Uruchomimy nowy kontener oraz połączymy go z działającym już kontenerem mysql, przez co uzyska on dostęp do bazy danych. Dodatkowo pliku projektu zmapujemy do kontenera z lokalnego dysku. Tym sposobem możemy łatwo zainstalować np. wtyczkę, bez ingerencji w samym kontenerze.

mkdir wordpress

docker run -p 80:80 -it --rm --name wp-apache --link wp-mysql:mysql -v "$PWD/wordpress":/var/www/html tech-itcore/centos6-httpd-php-mysql

Poniżej krótkie wyjaśnienie niektórych parametrów:

  • -p 80:80 – udostępmniamy port 80 kontenera na porcie 80 lokalnego hosta.
  • --link wp-mysql:mysql – łączymy (linkujemy) kontener z drugim wp-mysql. Wartość po dwukropku to alias, dlatego podczas łączenia z bazą danych zamiast podawać adres IP wystarczy, że wpiszemy mysql jako nazwę hosta.
  • -v "$PWD/wordpress":/var/www/html – montujemy aktualny podkatalog wordpress z aktualnego katalogu (zmienna $PWD) do katalogu /var/www/html kontenera.

Możemy teraz zainstalować wordpress’a w podkatalogu wordpress:

wget https://pl.wordpress.org/wordpress-4.3.1-pl_PL.tar.gz
tar xf wordpress-4.3.1-pl_PL.tar.gz
cd wordpress
cp wp-config-sample.php wp-config.php

Podajemy poprawne dane do bazy danych w pliku wp-config.php. Zwróćmy uwagę na poprawną nazwę hosta dla bazy danych. Jest to alias, którego użyliśmy podczas łączenia ze sobą kontenerów (–link wp-mysql:mysqlmysql.

vim wp-config.php
define('DB_NAME', 'wpdb');
define('DB_USER', 'wpuser');
define('DB_PASSWORD', 'wppassword');
define('DB_HOST', 'mysql');

Pozostaje nam tylko uruchomić przeglądarkę a w pasku adresu wpisać adres IP kontenera na którym uruchomiony jest serwer www i… gotowe!

 docker inspect wp-apache | grep -i ipaddr
        "IPAddress": "172.17.0.3",

Docker - instalacja WordPressa

docker - instalacja wordpressa, kontenery z mysql, php oraz apache

Zostaw komentarz


Podpowiedź - możesz użyć tych HTML tagów i atrybutów:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

Obraz CAPTCHY

*