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:

Zdjęcie poglądowe
Rozszerzenie sqlsrv jest dostępne i uruchomione
Zdjęcie poglądowe
Rozszerzenie odbc także jest uruchomione poprawnie

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).