Dzisiaj o tym, jak stworzyć proste środowisko deweloperskie zawierające serwer Apache, PHP w wersji 7.3 oraz bazę danych Microsoft SQL 2017 przeznaczone do celów deweloperskich. Doinstalujemy także Xdebuga. Zapraszam serdecznie do dalszej lektury.
Instalacja oraz konfiguracja Dockera w systemie
Dzisiaj nie będę się rozpisywał, jak zainstalować środowisko Dockerowe w Twoim systemie. Jeżeli nie masz go jeszcze przygotowane, to więcej informacji znajdziesz na stronie producenta: https://www.docker.com. Oprócz samego Dockera w tym poradniku będę także używał narzędzia docker-compose, które instaluje się wraz z Dockerem. W moim przypadku środowisko zainstalowałem w systemie Windows 10 opierając kontenery o VirtualBox. Jeżeli masz już zainstalowane środowisko u siebie, to możesz przejść do jego skonfigurowania. Musimy upewnić się, że maszyna wirtualna Dockera posiada odpowiedni przydział pamięci operacyjnej, ponieważ serwis z bazą danych Microsoftu wymaga co najmniej 4GB. Aby sprawdzić obecny przydział, wykonujemy polecenie:
docker-machine inspect default
Argument default oznacza nazwę naszej maszyny, ale domyślnie tworzona przez środowiska ma dokładnie tę nazwę. Nazwę tę możesz także sprawdzić poleceniem:
docker-machine ls
Sprawdź proszę opcję Driver | Memory. Jeżeli jest mniejsza od wartości 4096 (w domyśle: MB), to należy taką wartość ustawić. Modyfikację możemy wykonać (zatrzymując uprzednio maszynę!) poleceniem:
VBoxManage modifyvm default --memory 4096
Alternatywnie, możemy stworzyć nową maszynę Dockera z większym przydziałem pamięci:
docker-machine create -d virtualbox --virtualbox-memory 4096 default
Uwaga! Powyższe metody zadziałają, jeżeli korzystamy do uruchamiania kontenerów Dockera maszyn opartych o VirtualBox. W innym przypadku polecenia będą się różnić.
Wskazówka: Wartość pamięci operacyjnej możemy także łatwo wyłuskać poleceniem:
docker-machine inspect --format='{{.Driver.Memory}}' default
Teraz stworzymy konfigurację oraz dodatkowe pliki, m.in. dockerfile.
Przygotowanie konfiguracji docker-compose
Najpierw stwórzmy katalog projektu, w którym umieścimy konfigurację serwisów. Ja stworzyłem katalog oraz plik konfiguracyjny w katalogu użytkownika: C:\Users\rombarte\Docker\docker-compose.yaml i umieściłem w nim następującą konfigurację:
version: '3'
services:
apache:
image: php:7.3-apache
container_name: apache
build:
context: ./.docker
dockerfile: Dockerfile
volumes:
- ./:/var/www/html/
- ./.docker/php/php.ini:/usr/local/etc/php/conf.d/custom.ini
ports:
- "80:80"
stdin_open: true
tty: true
database:
image: microsoft/mssql-server-linux:2017-GDR
container_name: database
environment:
ACCEPT_EULA: 1
SA_PASSWORD: Password1234
MSSQL_PID: Developer
ports:
- "1433:1433"
Pora na krótkie wyjaśnienie. W opcji image wskazałem na obrazy źródłowe z serwisami, na których bazować będzie nasza konfiguracja. Dostępne obrazy możemy znaleźć na https://hub.docker.com. Dockerfile (plik wskazujący, jak zbudować obraz naszego serwisu) dla PHP znajdować się będzie w ścieżce .docker/Dockerfile. W ustawieniach serwisu MS SQL mamy ustawienia srodowiska:
- ACCEPT_EULA - potwierdzenie akceptacji EULA. Przeczytać ją można na Docker Hub
- SA_PASSWORD - hasło dostępowe dla użytkownika sa
- MSSQL_PID - PID serwera baz danych
Uwaga! Hasło musi być odpowiednio mocne, ponieważ inaczej serwis nie wystartuje. Jest to restrykcja Microsoftu, o której poczytasz więcej na Docker Hub. Więcej informacji o powyższych zmiennych oraz akceptowalne wartości są dostępne oczywiście na stronie projektu na Docker Hub.
Teraz przechodzimy do stworzenia pliku Dockerfile. Dodajemy w nim zawartość:
FROM php:7.3-apache
RUN apt-get update -y
RUN pecl install xdebug-2.7.0RC1 \
&& docker-php-ext-enable xdebug
RUN apt-get install -y gnupg \
&& curl https://packages.microsoft.com/keys/microsoft.asc | apt-key add - \
&& curl https://packages.microsoft.com/config/debian/9/prod.list > /etc/apt/sources.list.d/mssql-release.list \
&& apt-get install -y apt-transport-https \
&& apt-get -y update \
&& ACCEPT_EULA=Y apt-get install -y msodbcsql17 \
&& ACCEPT_EULA=Y apt-get install -y mssql-tools \
&& echo 'export PATH="$PATH:/opt/mssql-tools/bin"' >> ~/.bash_profile \
&& echo 'export PATH="$PATH:/opt/mssql-tools/bin"' >> ~/.bashrc \
&& apt-get install -y unixodbc-dev
RUN pecl install sqlsrv pdo_sqlsrv \
&& docker-php-ext-enable sqlsrv \
&& docker-php-ext-enable pdo_sqlsrv
RUN docker-php-ext-configure pdo_odbc --with-pdo-odbc=unixODBC,/usr \
&& docker-php-ext-install pdo_odbc \
&& docker-php-ext-enable pdo_odbc
RUN docker-php-source extract \
&& echo 'AC_DEFUN([PHP_ALWAYS_SHARED],[])dnl' >> config.m4 \
&& cat /usr/src/php/ext/odbc/config.m4 >> config.m4 \
&& mv config.m4 /usr/src/php/ext/odbc/config.m4 \
&& docker-php-ext-configure odbc --with-unixODBC=shared,/usr \
&& docker-php-ext-install odbc \
&& docker-php-source delete
Instalacja rozszerzenia ODBC jest obecnie nieco skomplikowana, przygotowana powyższa konfiguracja została oparta o źródło pierwsze oraz źródło drugie.
Jak pewnie zauważyłeś, w powyższej konfiguracji instalujemy Xdebuga. Owszem, ale żeby poprawnie zadziałał to musimy go dodać do konfiguracji php.ini. Tworzymy plik php.ini w katalogu .docker/php/php.ini i umieszczamy w nim zawartość:
[XDEBUG]
xdebug.remote_enable=on
xdebug.remote_connect_back=on
xdebug.remote_port=9000
Teraz już możemy zbudować i uruchomić nasze serwisy. Budujemy je i uruchamiamy poleceniem:
docker-compose up --build --detach
Sprawdzenie poprawności przygotowanej konfiguracji
Serwisy są uruchomione, teraz sprawdźmy czy działają poprawnie. W katalogu głównym projektu dodajemy plik index.php z zawartością:
<?php
phpinfo();
oraz uruchamiamy skrypt w przeglądarce. Powinna pojawić się naszym oczom konfiguracja PHP. Szukamy, czy istnieje pozycja z modułem sqlsrv oraz odbc:
Rozszerzenia zostały zainstalowane poprawnie. Teraz czas na próbę połączenia z serwerem MS SQL. Sprawdzimy to za pomocą narzędzia Microsoft SQL Server Management Studio 17. Jest to program umożliwiający zarządzanie bazą danych, upraszczając: taki phpMyAdmin dla bazy Microsoftu. Ściągamy to narzędzie oraz instalujemy w systemie, następnie uruchamiamy i wpisujemy dane skonfigurowane wcześniej w pliku docker-compose.yaml. Nazwa serwera powinna zawierać IP maszyny Dockera (to samo IP po którym uzyskaliśmy dostęp do serwera WWW). Ten adres możemy sprawdzić poleceniem:
docker-machine ip
Metodę uwierzytelnienia wybieramy jako SQL Server Authentication, w pole login wpisujemy sa, natomiast w hasło wartość Password1234. Po kliknięciu w przycisk Connect powinno nastąpić połączenie z bazą danych.
Gotowe! Jesteś gotowy do pracy nad swoją aplikacją! A nie, chwila... pozostała konfiguracja Xdebuga w swoim IDE... ale z tym to sobie chyba już poradzisz :)
Na koniec dodatkowa informacja. Może okazać się, że nie możesz uzyskać dostępu do swojego serwisu z powodu błędu. Aby uzyskać informacje zapisywane do logów, wykorzystaj polecenie:
docker logs database
gdzie database jest nazwą kontenera (patrz: plik docker-compose.yaml).
Komentarze
Ten wpis nie posiada komentarzy.
Dodaj komentarz
Pola oznaczone gwiazdką (*) są wymagane. Komentarze są wstępnie moderowane i mogą nie pojawić się na stronie.