Deploying Laravel Applications with Docker and Kubernetes
Deploying Laravel Applications with Docker and Kubernetes
Deploying Laravel applications using Docker and Kubernetes is a modern and scalable approach to managing and running your web applications. In this guide, we will explore the steps to containerize a Laravel application with Docker and then deploy it to a Kubernetes cluster.
Step 1: Containerizing Your Laravel Application with Docker
Containerization allows you to package your Laravel application and its dependencies into a Docker image. Create a
Dockerfile in your Laravel project's root directory to define how your application should be built into an image.
# Dockerfile # Use an official PHP runtime as a parent image FROM php:7.4-fpm # Set the working directory in the container WORKDIR /var/www/html # Copy the application code into the container COPY . . # Install PHP extensions and dependencies RUN apt-get update && apt-get install -y libzip-dev && docker-php-ext-configure zip && docker-php-ext-install zip pdo pdo_mysql # Expose port 9000 to communicate with PHP-FPM EXPOSE 9000 # Start PHP-FPM CMD [`php-fpm`]
After creating the Dockerfile, build the Docker image:
docker build -t laravel-app .
Step 2: Create a Docker Compose Configuration (Optional)
If your Laravel application requires additional services like a database or a cache server, you can define them in a
docker-compose.yml file. Docker Compose allows you to manage multiple containers as a single service.
version: '3' services: web: build: . ports: - `80:80` depends_on: - db db: image: mysql:5.7 environment: MYSQL_ROOT_PASSWORD: secret MYSQL_DATABASE: laravel_db
Use
docker-compose up to start the services defined in the docker-compose.yml file.
Step 3: Deploying to Kubernetes
Deploying your Laravel application to Kubernetes involves creating Kubernetes manifests (YAML files) to define your application's pods, services, and other resources. Here's an example of a Kubernetes Deployment and Service for a Laravel application:
# laravel-app-deployment.yml apiVersion: apps/v1 kind: Deployment metadata: name: laravel-app spec: replicas: 3 selector: matchLabels: app: laravel-app template: metadata: labels: app: laravel-app spec: containers: - name: laravel-app image: laravel-app:latest ports: - containerPort: 9000 # laravel-app-service.yml apiVersion: v1 kind: Service metadata: name: laravel-app spec: selector: app: laravel-app ports: - protocol: TCP port: 80 targetPort: 9000 type: LoadBalancer
Apply these manifests to your Kubernetes cluster using
kubectl apply -f laravel-app-deployment.yml and kubectl apply -f laravel-app-service.yml.
Step 4: Managing Environment Variables
Manage your Laravel application's environment variables in Kubernetes using ConfigMaps or Secrets. This allows you to separate configuration from your code and keep sensitive information secure.
Step 5: Scaling and Load Balancing
Kubernetes makes it easy to scale your Laravel application by adjusting the number of replicas in your Deployment. Load balancing is automatically handled by Kubernetes, ensuring that traffic is distributed evenly to all running pods.
Conclusion
Deploying Laravel applications with Docker and Kubernetes offers scalability, reliability, and ease of management. By containerizing your application and leveraging Kubernetes for orchestration, you can efficiently run and scale your Laravel projects in production environments.