Difficulty: beginner
Estimated Time: 10 minuten

In deze oefening demonstreren we hoe we een PHP framework vanaf github kunnen clonen en vervolgens overzetten naar de container.

In deze oefening heb je je eerste container gestart middels docker container run, en heb je met het commando docker container ls -a een lijst kunnen maken van gestarte en gestopte containers.

3. Creëren van CakePHP image

3.1 CakePHP met Composer

In deze opdracht gaan we het MVC framework CakePHP installeren vanaf github. Op de achtergrond wordt alvast de source code vanaf deze repo gecloned en wordt de officiele PHP docker container gedownload, zodat we hier straks niet meer op hoeven te wachten.

1) Om onze container op te bouwen, baseren we deze op de officiele PHP 7.3 container.

FROM php:7.3-apache

2) Helaas bevat deze container nog niet alle packages en php extensies welke wij nodig hebben, dus gaan we deze ook installeren.

# Install required php module
RUN apt update && \
    apt install -qqy \
    zlib1g-dev libicu-dev g++ unzip && \ 
    docker-php-ext-install intl && \
    # Delete all the apt list files since they're big and get stale quickly
    rm -rf /var/lib/apt/lists/* && apt clean

# Enable mod rewrite
RUN a2enmod rewrite   

3) Nu alle pre-requirements zijn geinstalleerd en enabled kunnen we aan de gang om onze applicatie over te zetten naar de container en alle composer packages te installeren.

# Set workdir (no more cd from now)
WORKDIR /var/www/html

# Copy source files to container
COPY . .

# Composer install application
RUN curl https://raw.githubusercontent.com/composer/getcomposer.org/d3e09029468023aa4e9dcd165e9b6f43df0a9999/web/installer | php -- --quiet && \
    php composer.phar -n install

# Setup some required configuration for our app.
RUN cp config/app.default.php config/app.php && \
    # Inject some non random salt for this example 
    sed -i -e "s/__SALT__/somerandomsalt/" config/app.php && \
    # Make sessionhandler configurable via environment
    sed -i -e "s/'php',/env('SESSION_DEFAULTS', 'php'),/" config/app.php  && \
    # Set write permissions for webserver
    chgrp -R www-data logs tmp && \
    chmod -R g+rw logs tmp 

4) De laatste stap die ons rest is het exposen van de http(s) port en de apache server starten.

####################################################
# Expose port and run Apache webserver             #
####################################################

EXPOSE 80
CMD ["/usr/sbin/apache2ctl", "-DFOREGROUND"] 

5) Tenslotte rest ons niks anders meer dan de image builden en een container starten, zodat we onze applicatie in actie kunnen zien.

Build het image

docker image build -t cakephp .

Start de container en maak deze bereikbaar op port 1337 van deze host

docker container run -d -p 1337:80 cakephp

Controleer de output in je browser.

Dockerfile