Adrien Marquès c98b0e7014 | ||
---|---|---|
virtual | ||
LICENSE | ||
README.md | ||
docker-compose.yml |
README.md
| Introduction to docker (2) |
[TOC]
II. Linking containers
1)
III. Setting up a development stack
1) Choosing images
We will setup a simple web dev stack with :
- nginx (i.e. nginx:latest)
- mariadb (i.e. mariadb:latest)
- php-fpm (i.e. php:7-fpm)
2) Volume & network sharing policy
1. Volume sharing
a) Configuration files
The apache and php configuration will be on the host machine (for easy modification) and only mounted on the containers to override the default configuration files. A virtual folder will hold these configurations with the same path for consistency:
- the nginx configuration file is located at virtual/etc/nginx/nginx.conf.
- the php-fpm configuration file is located at virtual/usr/local/etc/php-fpm.d/www.conf.
b) Storage files
MariaDB will have its whole data folder (i.e. /var/lib/mysql
) on the host in the virtual folder to have the data remaining throughout containers. This property makes the database consistent and persistent among container creation/deletion.
c) Log files
Also logs will be mounted the same way in order for developers to easily check these out when needed (e.g. virtual/var/log/apache2/access.log
). Also, note that even if the container is removed, the logs will remain.
d) Development folder
The development folder (i.e. the actual code to test) is located in the folder virtual/vhost. In a real-world use of this configuration, I would clone a git repository into it in order for my docker configuration and my actual code not to mix together ; we could then use git submodules for version stability among the 2 repositories.
2. Network sharing
a) Ports and network
The whole system will only expose its port 8080
;
We do not use the default HTTP port not to break a possible web server on the host.
Containers between them will be connected through the privnet
network which is unreachable from the host ; except for the port 8080.
b) DNS
The nginx
container is configured to only accept the host mydomain.com
, it corresponds to the DNS record chosen for the production server. This domain must be added into the /etc/hosts
file of each developer in order for them to access the web server at mydomain.com:8080
.
c) Production deployment
If the project is pushed into a production server, if you have no other program occupying the port 80
, you can just replace the port binding 8080:80
in docker-compose.yml
. If it is already taken by apache/nginx, you will have to create an entry in your web server to forward your requests from your address (i.e. domain.com) to the specific port 8080 (c.f. reverse proxy).