Docker Testumgebungen

Docker Testumgebungen

Getestet mit Ubuntu 14.04.3, Kernel 3.19 (Hardware Enablement Stack)

Im Folgenden wird eine einfache Testumgebung für PHP-Anwendungen eingeführt und auf die Basics von Docker eingegangen.

Docker Installation

Als root-User (derzeit Docker 1.8.1, ältere Versionen haben teils Bugs und sind nicht lauffähig):

apt-key adv --keyserver hkp://p80.pool.sks-keyservers.net:80 --recv-keys 58118E89F3A912897C070ADBF76221572C52609D
echo "deb https://apt.dockerproject.org/repo ubuntu-trusty main" > /etc/apt/sources.list.d/docker-testing-trusty.list
apt-get update
apt-get upgrade
apt-get install docker-engine

Test:

docker run hello-world

Images herunterladen:

# download debian/ubuntu image
docker pull ubuntu:14.04
docker pull debian:latest

Docker images auflisten:

docker images

Typo3 CMS Docker-Image erstellen

Im Folgenden wird ein provisioniertes Image namens 2bis10/typo3 angelegt:

Datei Dockerfile anlegen, Inhalt:

FROM debian:latest
ENV DEBIAN_FRONTEND=noninteractive
ENV SHARE_USER=webadmin
ENV SHARE_UID=1000
ENV SHARE_GROUP=webadmin
ENV SHARE_GID=1000
RUN groupadd --gid $SHARE_GID $SHARE_GROUP
RUN useradd --gid $SHARE_GROUP --uid $SHARE_UID $SHARE_USER
RUN mkdir -p /var/webadmin
RUN chown $SHARE_USER:$SHARE_GROUP /var/webadmin
RUN mkdir -p /var/www/typo3/typo3conf/ext
RUN echo "<?php\n\$GLOBALS['TYPO3_CONF_VARS']['SYS']['systemLocale']='en_US.UTF-8';\n\$GLOBALS['TYPO3_CONF_VARS']['GFX']['im_version_5']='gm';" > /var/www/typo3/typo3conf/AdditionalConfiguration.php
RUN chown -R www-data:www-data /var/www/typo3
RUN cd /var/www/typo3;ln -s ../../webadmin/typo3_src typo3_src;ln -s typo3_src/index.php index.php;ln -s typo3_src/typo3 typo3;ln -s typo3_src/composer.json;ln -s typo3_src/composer.lock
RUN echo "mysql-server-5.5 mysql-server/root_password password {{password}}" | debconf-set-selections
RUN echo "mysql-server-5.5 mysql-server/root_password_again password {{password}}" | debconf-set-selections
RUN apt-get update
RUN apt-get upgrade -y --force-yes
RUN apt-get install -y --force-yes locales
ENV LANGUAGE=en_US.UTF-8
ENV LC_ALL=en_US.UTF-8
ENV LANG=en_US.UTF-8
ENV LC_TYPE=en_US.UTF-8
RUN echo 'en_US.UTF-8' > /etc/default/locale
RUN echo 'LANGUAGE=en_US.UTF-8' >> /etc/environment
RUN echo 'LC_ALL=en_US.UTF-8' >> /etc/environment
RUN echo 'LANG=en_US.UTF-8' >> /etc/environment
RUN echo 'LC_TYPE=en_US.UTF-8' >> /etc/environment
RUN sed --in-place 's/# en_US.UTF-8 UTF-8/en_US.UTF-8 UTF-8/g' /etc/locale.gen
RUN locale-gen
RUN update-locale
RUN apt-get install -y --force-yes wget curl net-tools vim git man-db inotify-tools locate
RUN apt-get install -y --force-yes mysql-server mysql-client
RUN apt-get install -y --force-yes apache2 apache2-utils 
RUN apt-get install -y --force-yes php5 php5-cli libapache2-mod-php5 php5-mysqlnd php5-curl php5-gd php5-apcu
RUN apt-get install -y --force-yes graphicsmagick
RUN sed --in-place 's/\/var\/www\/html/\/var\/www\/typo3#NEXT#/g' /etc/apache2/sites-available/000-default.conf
RUN sed --in-place 's/#NEXT#/\n\t<Directory \/var\/www\/typo3>#NEXT#/g' /etc/apache2/sites-available/000-default.conf
RUN sed --in-place 's/#NEXT#/\n\t\t<IfModule mod_php5.c>#NEXT#/g' /etc/apache2/sites-available/000-default.conf
RUN sed --in-place 's/#NEXT#/\n\t\t\tphp_admin_value upload_max_filesize "10M"#NEXT#/g' /etc/apache2/sites-available/000-default.conf
RUN sed --in-place 's/#NEXT#/\n\t\t\tphp_admin_value post_max_size "15M"#NEXT#/g' /etc/apache2/sites-available/000-default.conf
RUN sed --in-place 's/#NEXT#/\n\t\t\tphp_admin_value max_execution_time "240"#NEXT#/g' /etc/apache2/sites-available/000-default.conf
RUN sed --in-place 's/#NEXT#/\n\t\t<\/IfModule>#NEXT#/g' /etc/apache2/sites-available/000-default.conf
RUN sed --in-place 's/#NEXT#/\n\t<\/Directory>/g' /etc/apache2/sites-available/000-default.conf
RUN sed --in-place 's/\/var\/www\/html/\/var\/www\/typo3/g' /etc/apache2/sites-available/default-ssl.conf
RUN mkdir -p /var/www/typo3; chgrp www-data /var/www/typo3; chmod 775 /var/www/typo3
RUN echo "apc.shm_size=128M" > /etc/php5/apache2/conf.d/20-apcu-custom.ini
RUN a2enmod rewrite
RUN a2enmod expires
RUN service apache2 restart
RUN gpasswd -a www-data webadmin
RUN gpasswd -a webadmin www-data
RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer

Provisionierung vornehmen:

docker build -t 2bis10/typo3 .

Test: Bei Erfolg wird dieses Image mit Namen 2bis10/typo3 mit folgendem Befehl angezeigt:

docker images

Typo3 CMS Docker-Testinstanz starten und verwalten

# create new machine with name 'typo3' which keeps running
docker run -dit --name typo3 -v /path/to/workspace/TYPO3.CMS:/var/webadmin/typo3_src -v /path/to/workspace/metaseo:/var/www/typo3/typo3conf/ext/metaseo 2bis10/typo3

# install or update dependencies to the pinned version in the repository
docker exec -it  --user="webadmin" typo3 /bin/bash -c 'cd /var/www/typo3; composer install'

# Start Mysql
docker exec -it typo3 service mysql start

# Start Apache
docker exec -it typo3 service apache2 start

# enable install tool
docker exec -it --user="www-data" typo3 touch /var/www/typo3/typo3conf/ENABLE_INSTALL_TOOL

# get IP-Adress
docker exec -it typo3 ifconfig|grep "addr:172"

# bash into running machine
docker exec -it typo3 bash

# start container with interactive shell
docker start -i typo3

# start container
docker start typo3

# list images
docker images

# list machines
docker ps -a

Native-Dockerfiles-Typo3 GitHub-Repository

Der aktuelle Stand ist in einem GitHub-Projekt namens Native-Dockerfiles-Typo3 verfügbar. Auch der Stand der Dokumentation wird im GitHub-Projekt in englischer Sprache laufend aktualisiert. Das Projekt steht unter MIT-Lizenz. Der aktuelle Code und die aktuelle Dokumentation sind verfügbar unter https://github.com/thomaszbz/native-dockerfiles-typo3. Supportanfragen und Verbesserungsvorschläge können eingereicht werden unter https://github.com/thomaszbz/native-dockerfiles-typo3/issues.