--- sidebar_position: 4 --- # Docker N-tier Architecture ## Context Deployment of a containerized n-tier architecture for BeeSafe company, including a web server, database and DNS server. ## Objectives - Containerize a LAMP web application - Configure a DNS server with Bind9 - Set up a reverse proxy - Document the technical architecture ## Technologies Used - **Docker / Docker Compose**: containerization - **Apache/PHP**: web server - **MySQL**: database - **Bind9**: DNS server ## Deployed Architecture ``` +-------------+ | Client | +------+------+ | +------v------+ | DNS Bind9 | +------+------+ | +------v------+ | Apache | | + PHP | +------+------+ | +------v------+ | MySQL | +-------------+ ``` ## Deliverables
Architecture Diagram (PDF)
Docker Compose ```yaml services: web: build: context: . dockerfile: Dockerfile container_name: apache_php ports: - "80:80" volumes: - ./web:/var/www/html - ./apache/beesafe.conf:/etc/apache2/sites-available/beesafe.conf depends_on: - db - dns networks: - backend restart: unless-stopped db: image: mysql:8.0 container_name: mysql environment: MYSQL_ROOT_PASSWORD: rootclassroom MYSQL_DATABASE: beesafe_db volumes: - db_data:/var/lib/mysql - ./sql:/docker-entrypoint-initdb.d networks: - backend restart: unless-stopped dns: image: internetsystemsconsortium/bind9:9.18 container_name: bind9 ports: - "53:53/tcp" - "53:53/udp" volumes: - ./bind9/etc:/etc/bind - ./bind9/cache:/var/cache/bind - ./bind9/lib:/var/lib/bind - ./bind9/log:/var/log command: ["-g"] networks: - backend restart: unless-stopped networks: backend: driver: bridge volumes: db_data: ```
Dockerfile ```dockerfile FROM php:8.0-apache # Update and install dependencies RUN apt-get update && apt-get install -y \ libzip-dev \ unzip \ && docker-php-ext-install mysqli \ && docker-php-ext-enable mysqli # Enable beesafe.conf site and disable default 000-default.conf site RUN a2ensite beesafe.conf && \ a2dissite 000-default.conf && \ service apache2 reload # Clean unnecessary files to reduce image size RUN apt-get clean && rm -rf /var/lib/apt/lists/* # Command to keep Apache running CMD ["apache2-foreground"] ```
## Skills Acquired - Multi-tier application containerization - DNS server configuration - Orchestration with Docker Compose - Decoupled application architecture