Docker-image med Laravel, PHP 7.4-fpm og MSSQL

Under er en Dockerfile og en Docker Compose-fil for Laravel på PHP 7.4-fpm med støtte for Microsoft SQL Server.

Hva MSSQL krever

Skal Laravel snakke med en MSSQL-database, trenger PHP sqlsrv-driveren, som ikke er med som standard. Containeren trenger også Microsoft ODBC-drivere.

Dockerfile

FROM php:7.4-fpm

# Installer systemavhengigheter
RUN apt-get update && apt-get install -y \
git curl zip unzip libpng-dev libjpeg-dev \
libfreetype6-dev libonig-dev libxml2-dev \
gnupg2 apt-transport-https

# Microsoft ODBC-drivere
RUN curl https://packages.microsoft.com/keys/microsoft.asc | apt-key add - \
&& curl https://packages.microsoft.com/config/debian/10/prod.list \
> /etc/apt/sources.list.d/mssql-release.list \
&& apt-get update \
&& ACCEPT_EULA=Y apt-get install -y msodbcsql17 unixodbc-dev

# PHP-utvidelser
RUN docker-php-ext-install pdo mbstring exif pcntl bcmath gd
RUN pecl install sqlsrv pdo_sqlsrv \
&& docker-php-ext-enable sqlsrv pdo_sqlsrv

# Composer
COPY --from=composer:latest /usr/bin/composer /usr/bin/composer

WORKDIR /var/www/html
COPY . .
RUN composer install --no-dev --optimize-autoloader

EXPOSE 9000
CMD ["php-fpm"]


Docker Compose


version: '3.8'
services:
app:
build: .
volumes:
- .:/var/www/html
ports:
- "9000:9000"
environment:
- DB_CONNECTION=sqlsrv
- DB_HOST=mssql
- DB_DATABASE=mydb
- DB_USERNAME=sa
- DB_PASSWORD=YourPassword123


Merknader


ODBC-driverne krever at du aksepterer EULA via ACCEPT_EULA=Y.pdo_sqlsrv er nødvendig for Laravel sin database-abstraksjon.Sett DB_CONNECTION=sqlsrv i .env.Legg til 'sqlsrv' i config/database.php hvis den mangler.


MSSQL-støtte i PHP er tungvint å sette opp for hånd, og denne Dockerfilen har spart meg for mye arbeid.