Docker Compose makes it easy to interconnect various Docker images. What better way to showcase its features than by creating (yet another) LEMP stack. This is one is much more bleeding edge than others, though 😉.
A docker-compose
-powered stack to get your PHP project running in no time.
- PHP-FPM 7.1
- nginx
- MariaDB
- Node w/ Yarn
Docker
v17.09.0-ce or higherdocker-compose
v1.12.0 or higher
To start the stack, run:
docker-compose up -d --build --remove-orphans
- The
-d
flag daemonises the stack. - The
--build
builds services (e.g.php-fpm
,nginx
) that comprise the stack. - The
--remove-orphans
stack ensures that services that aren't being used are deleted (to save disk space).
Provided that no errors were emitted during the start, you should be able to visit your browser on http://localhost:8080
.
To stop the stack, run:
docker-compose stop
To ensure that all services have stopped, run:
docker-compose ps
There should be no more services running.
To connect to the MariaDB service, run:
docker-compose exec mariadb mysql -uapp -p
- This command uses the
app
user. There is also aroot
user. - Use the password defined on the
docker-compose.yml
file.
Manage composer dependencies, run:
docker-compose run --rm composer <install|update|require...>
- The
--rm
flag ensures that that intermediate (temporary) containers are deleted once you install packages (to save disk space). - The service's data is mounted on the
./mariadb
host folder, which means that data will persist betweendocker-compose
up
s andstop
s.
Manage npm packages with yarn, run:
docker-compose run --rm yarn add [name-of-package]
yarn
is faster thannpm
and contains a lockfile (yarn.lock
), for deterministic dependency resolution. Yarn documnetation
To enable the Xdebug module:
- Copy the
.env.example
to an.env
file and:- Change the value of
XDEBUG_ON
totrue
- Change the value of
XDEBUG_REMOTE_HOST
to your host machine's IP address.
- Change the value of
- Run
docker-compose up -d --build --remove-orphans
to re-build the service.
If you want to extend the functionality of a service (e.g. php-fpm), you have to re-build it.
To accomplish this, modify the Dockerfile, then run:
docker-compose build --no-cache --force-rm [name-of-service]
... followed by a docker-compose up [arguments...]
If you want to use a different web server port (e.g. 80), modify the port on the docker-compose.yml
file
and start the stack again.
Ensure that the host machine ports 8080
(web server) and 3306
(database) are open on your host machine.
Your version of Docker for Linux might ship with v1.8 (an older release) of Docker Compose. You need to upgrade to at least v1.12 in order to make this stack work.
For Linux/macOS users, you can run:
curl -L https://github.com/docker/compose/releases/download/1.12.0/docker-compose-`uname -s`-`uname -m` > /usr/bin/docker-compose
chmod x /usr/bin/docker-compose
To check that you are using v1.12 or higher, run:
docker-compose --version
- This stack was built on
Ubuntu 16.04.3 LTS 64-bit
.
-
Find out your docker IP address
ifconfig
In my case it was:
docker0 Link encap:Ethernet HWaddr **:**:**:**:**:** inet addr:172.17.0.1 Bcast:0.0.0.0 Mask:255.255.0.0 inet6 addr: ****::**:****:****:****/** Scope:Link UP BROADCAST MULTICAST MTU:1500 Metric:1 RX packets:472 errors:0 dropped:0 overruns:0 frame:0 TX packets:576 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:32312 (32.3 KB) TX bytes:657698 (657.6 KB)
-
Coppy .env.example to .env and modify IP:
XDEBUG_ON=true XDEBUG_REMOTE_HOST=172.17.0.1
-
Start/restart web-stack project by running
docker-compose up -d --build --remove-orphans
-
PhpStorm configuration
- This project was greatly inspired by the Docker web stack and by Laradock project-