I am successfully deploying a Laravel Web Application on ECS using a base image from PHP, in particular 7.3-apache-stretch
from https://hub.docker.com/_/php/
Being well aware of the discussion about Alpine Linux Images in Docker (granting significative reductions in the final image dimension), I wanted to give it a run, to see how it performed. Unfortunately, while with the CLI version it was very easy (using 7.3-cli-alpine3.9
), there is no apache-enabled version. What I would need is a Dockerfile
to use as a base for my developments.
Apache Only
Browsing SO, I found How do I run Apache 2 on Alpine in Docker? that brought my attention to https://github.com/nimmis/docker-alpine-apache, that enables apache, but PHP is completely missing, so I'd have to integrate this.
Running Apache/NGINX and PHP with FCGI
This other question Alpine variants of PHP and Apache/httpd in Docker brings us closer, but implies theuse of two containers, that is not what I want to have.
How should the Dockerfile
be to let me deploy a Laravel Web Application off the shelf ?
After two days of attempts, I finally arrived to a point in which I am able to deploy my Laravel Application on a php-enabled apache container. Since the number of issues found was countless, here is the final
Dockerfile
, and an explanation of the sections:This is a short list of the operations that I made in the
Dockerfile
/home/application
public
Laravel folderapk
(all of them were required for my Laravel application). A full list of the available packages can be found on http://dl-cdn.alpinelinux.org/alpine/edge/community/x86_64/storage
folder/home/application/
folderhttpd.conf
fileAllowOverride All
instructionpdo_mysql
extension (otherwise commands will not be able to access mysql)httpd
Using this
Dockerfile
, it's now possible to run all of the Laravel Web Applications, it will just be a matter of copying the application source code in/home/application/