This Dockerfile will build a container image for nginx with php-fpm for web development and webapps. It supports templating, automated cloning from git, installation of Composer and the installation of dependencies using Composer. The image is based on CentOS 7, and was initally forked from this repository.
The source files for this project are available on GitHub: https://github.com/TheKatastrophe/nginx-php-fpm
The Docker Hub page for this project can be found here.
Docker Tags and Git Branches
latest: This contains the latest PHP5 build
php7: This contains the latest PHP7 build
latest is referenced in a command, this can be replaced by
php7 to use the PHP7 build instead. All other features remain the same between these two branches at present.
Pulling from Docker Hub
To pull this Dockerfile from Docker Hub:
docker pull katastrophe/nginx-php-fpm:latest
Building from source
You can build this container from source with:
git clone https://github.com/TheKatastrophe/nginx-php-fpm.git docker build -t katastrophe/nginx-php-fpm:latest .
-b php7 and change the Docker tag to
php7 to build the PHP7 version.
Run the container with minimal configuration and options:
docker run --name <container_name> -p 8080:80 -d -h <container_hostname> katastrophe/nginx-php-fpm:latest
This will run the container, and you can access the web server by browsing to http://docker-host:8080
You can use Docker to link a path within the container to a path on the host. For example, to expose the web server's document root on the Docker host at
/opt/website, you could use:
docker run --name <container_name> -p 8080:80 -d -h <container_hostname> -v /opt/website:/usr/share/nginx/html katastrophe/nginx-php-fpm:latest
-e 'GIT_REPO=git@git-server:repository.git' -e 'GIT_NAME=Mary' -e 'GIT_EMAILemail@example.com' -e 'GIT_BRANCH=master'
This container supports automatically cloning a git repository upon deploy. It also provides a
pull and a
push script for automatically pushing to/pulling from git from within the container.
There are four environment variables that can be set for this:
GIT_REPO: The URL to the Git repository. This can be an SSH URL (
git@git-server:repository.git) or an HTTP URL (
http://git-server/repository.git). Be sure to read below about Git authentication. If
GIT_REPOis specified, it will be cloned upon deploy.
GIT_EMAIL: This is optional, but will set the email address used in commits made within this container.
GIT_NAME: This is also optional, but will set the name used in commits made within this container.
GIT_BRANCH: This is also optional, but will be used to specify which branch should be used for the git repository being cloned.
Notes on Git authentication
If specifying a HTTP URL that points to a public repository not requiring authentication, nothing further needs to be done. If authentication is required, I recommend using an SSH URL and providing an SSH key to be used for the deploy.
This can be done using linked volumes (see above): before deploying the container, create a folder on the Docker host, such as
/opt/deploy and create a file called
id_rsa in it containing the private key used to authenticate to the Git host. Then link
/opt/deploy on the host to
/root/.ssh within the container using these flags:
It is important that you then set the permissions on the key correctly:
chmod 0600 /opt/deploy/id_rsa or the key will not be used. The
start.sh script, when the container is deployed, will set the permissions on the key if it exists, but if the key is replaced/changed, you need to ensure those permissions are maintained.
Pushing and pulling
There are two scripts available that make it easy to push and pull to/from your repository from the container or Docker host:
/usr/bin/pull. From within the container, you can just run
pull. From the Docker host, you'd run:
docker exec -t -i <container_name> /usr/bin/push
docker exec -t - i <container_name> /usr/bin/pull
Composer is automatically installed within the container at
/usr/bin/composer and can be run from within the container as
composer. For example:
cd /usr/share/nginx/html composer install
The container can also automatically run
composer install to install requried dependencies.
RUN_COMPOSER is set to true as an environment variable using the
composer install will automatically be run within the document root.
By default, PHP errors are logged but not displayed to the end user in the browser. To change this default, you can set the
ERRORS environment variable to
PHP requires a timezone to be set explicitly, so we pass this in using the
PHPTZ environment variable. If this is not specified, it will be defaulted to
Container Linking and Templating
I will document these features in the near future, however for the moment I have not had the opportunity. They are currently, however, identical to the same features from the repository this project was forked from, so for usage information, see the relevant sections of this README.