This project has been created as part of the 42 curriculum by srahhali
This project is an exercise on DevOps and System Administration.
It aims to set up a network of Docker containers, each containing a single service and to connect between all of them to provide a working service.
For users: USER_DOC.md
For devs: DEV_DOC.md
Docker Engine Docs Docker Compose Docs MariaDB Quick Install WordPress Configuration NGINX Docs
AI has been used in this project to resolve doubts about the services' configurations. Google Gemini has been used.
Docker is a containerization platform with tools for creating services separate from the rest of system. It achieves this by creating "Images", which are pre-configured system setups, and then creating "Containers" out of them, which are instantiated Images with data separate from any other containers made from the same image. A similarity between Images/Containers and Classes/Objects can be seen here.
The difference betwen Virtual Machines and Docker containers, is that Virtual Machines
emulate an entire system, including the CPU and peripherals, but a Docker
container runs as part of the system, using namespaces to achieve isolation
from the host system and other containers.
Environment variables have been chosen over Docker Compose Secrets due to most
of the logic requiring the secrets being in the setup and configuration.
The difference between them is the way they're presented to the running container,
which for environment variables, are passed as-is to the process, but Docker
secrets mount the secrets file into the container.
Docker Network: Since this project's subject asks for a private network (no access
from outside the network other that to interact with nginx), I've used
Docker networks.
The difference between them is just the scope, where for the host network
it allows access for the whole network and its hosts, and for the Docker
Network it is a smaller, scaled-down private network that can be configured
for each of the containers.
Docker Volumes: A Docker volume is just a directory configured for the Docker container to store its data. It is better than regular bind mounts in that it is managed by the Docker Daemon instead of the Kernel directly, taking into account some of the quirks of containers.