Run Contao 4 Inside a Docker Container

What is Contao?

Why Docker?

The Base Image

FROM php:7-apache
ENV COMPOSER_MEMORY_LIMIT -1
ENV APACHE_DOCUMENT_ROOT /var/www/html/contao/web
WORKDIR /var/www/html
RUN apt-get updateRUN apt-get install -y \
libfreetype6-dev \
libjpeg62-turbo-dev \
libpng-dev \
libicu-dev \
&& docker-php-ext-install -j$(nproc) iconv \
&& docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ \
&& docker-php-ext-install -j$(nproc) gd \
&& docker-php-ext-install -j$(nproc) intl \
&& docker-php-ext-install -j$(nproc) pdo_mysql
RUN apt-get install -y git zip
RUN curl -sS https://getcomposer.org/installer | php \
&& mv composer.phar /usr/local/bin/composer \
&& composer create-project --no-dev contao/managed-edition /var/www/html/contao '4.4.*'
RUN chown -R www-data:www-data /var/www/html/contao
RUN a2enmod rewrite
RUN sed -ri -e ‘s!/var/www/html!${APACHE_DOCUMENT_ROOT}!g’ /etc/apache2/sites-available/*.confRUN sed -ri -e ‘s!/var/www/!${APACHE_DOCUMENT_ROOT}!g’ /etc/apache2/apache2.conf /etc/apache2/conf-available/*.conf
RUN mv “$PHP_INI_DIR/php.ini-development” “$PHP_INI_DIR/php.ini”
RUN rm -rf /var/www/html/contao/var/cache/*
EXPOSE 80

The Docker Environment

version: '3.1'services:
database:
image: mariadb
ports:
- 3306:3306
environment:
MYSQL_ROOT_PASSWORD: root
networks:
- default
contao:
image: productionbuild/contao
ports:
- 80:80
networks:
- default
networks:
default:
docker stack deploy -c docker-compose.yml contao

Persistence

services:
database:
image: mariadb
ports:
- 3306:3306
environment:
MYSQL_ROOT_PASSWORD: root
volumes:
- ./db:/var/lib/mysql

networks:
- default
docker stack rm contao
docker stack deploy -c docker-compose.yml contao
contao:
image: productionbuild/contao
ports:
- 80:80
volumes:
- ./contao/composer.json:/var/www/html/contao/composer.json
- ./contao/app/config:/var/www/html/contao/app/config
- ./contao/system/config:/var/www/html/contao/system/config
- ./contao/app/Resources:/var/www/html/contao/app/Resources
- ./contao/templates:/var/www/html/contao/templates
- ./contao/files:/var/www/html/contao/files
- ./contao/src:/var/www/html/contao/src

networks:
- default
docker exec [container id] cat contao/composer.json

Your own Dockerfile

FROM productionbuild/contao:ltsCOPY ./contao/composer.json /var/www/html/contao/composer.jsonRUN composer update -d contao && \
composer install -d contao && \
composer dump-autoload -d contao
RUN chown -R www-data:www-data /var/www/html/contao
RUN rm -rf /var/www/html/contao/var/cache/*
EXPOSE 80
docker build -t my-own-contao-image .
contao:
image: my-own-contao-image
ports:
- 80:80

Version Control

Install and Configure Contao

Conclusion

--

--

Software Developer and Entrepreneur at productionbuild.de

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store