Magento2 is a powerful and flexible eCommerce platform, but deploying it can be challenging due to its multiple dependencies. Docker simplifies the process by allowing you to package Magento2, along with its required services, into portable and scalable containers.

At Raulji Technologies, we use Docker to deploy Magento2 quickly and efficiently. Yuvraj Raulji, a Magento2 expert, explains:
“With Docker, Magento2 deployment becomes a smooth, repeatable process, eliminating compatibility issues and reducing server setup time.”

In this guide, we will cover:

✅ Setting up a production-ready Magento2 Docker environment
✅ Configuring services like MySQL, Redis, Elasticsearch, and Varnish
✅ Running Magento2 using Docker Compose
✅ Deploying Magento2 on a cloud server

Why Use Docker for Magento2 Deployment?

Quick deployment – No manual installations required.
Scalability – Easily scale with Docker Swarm or Kubernetes.
Consistency – Ensures the same setup across development, staging, and production.
Portability – Deploy Magento2 on any cloud platform (AWS, DigitalOcean, Google Cloud).
Easy rollback – Quickly revert to a previous version.

Step 1: Prepare the Server for Deployment

Before deploying Magento2 with Docker, ensure your cloud server has Docker and Docker Compose installed.

1.1 Install Docker & Docker Compose
sh
CopyEdit
sudo apt update
sudo apt install -y docker.io docker-compose
sudo systemctl enable docker
Verify installation:
sh
CopyEdit
docker –version
docker-compose –version
1.2 Set Up a Magento2 Directory
sh
CopyEdit
mkdir magento-docker && cd magento-docker

Step 2: Create a docker-compose.yml File

This file defines all the services Magento2 needs: Nginx, PHP, MySQL, Redis, Elasticsearch, and Varnish.

2.1 Create the docker-compose.yml File
yaml
CopyEdit
version: ‘3.7’
services:
app:
image: magento/magento2
container_name: magento_app
restart: always
depends_on:
– db
– redis
– elasticsearch
volumes:
– ./app:/var/www/html
environment:
– MYSQL_HOST=db
– MYSQL_USER=magento
– MYSQL_PASSWORD=magento
– MYSQL_DATABASE=magento
ports:
– “9000:9000″nginx:
image: nginx:latest
container_name: magento_nginx
restart: always
depends_on:
– app
volumes:
– ./app:/var/www/html
– ./nginx/default.conf:/etc/nginx/conf.d/default.conf
ports:
– “80:80”
– “443:443″db:
image: mysql:5.7
container_name: magento_db
restart: always
environment:
– MYSQL_ROOT_PASSWORD=root
– MYSQL_DATABASE=magento
– MYSQL_USER=magento
– MYSQL_PASSWORD=magento
ports:
– “3306:3306″redis:
image: redis:latest
container_name: magento_redis
restart: always
ports:
– “6379:6379″elasticsearch:
image: docker.elastic.co/elasticsearch/elasticsearch:7.9.3
container_name: magento_elasticsearch
environment:
– discovery.type=single-node
– ES_JAVA_OPTS=-Xms512m -Xmx512m
ports:
– “9200:9200″varnish:
image: varnish:6.5
container_name: magento_varnish
restart: always
depends_on:
– nginx
ports:
– “6081:6081″volumes:
magento_data:

Step 3: Start the Magento2 Containers

Run the following command:
sh
CopyEdit
docker-compose up -d
This will:

✅ Download and start all required services.
✅ Mount Magento2 source code inside the container.
✅ Expose Magento on port 80 and 443.

Step 4: Install Magento2 in Docker

Run the Magento2 installation command inside the app container:
sh
CopyEdit
docker exec -it magento_app bin/magento setup:install \
–base-url=http://your-domain.com/ \
–db-host=db \
–db-name=magento \
–db-user=magento \
–db-password=magento \
–admin-firstname=Admin \
–admin-lastname=User \
–admin-email=admin@example.com \
–admin-user=admin \
–admin-password=Admin123 \
–language=en_US \
–currency=USD \
–timezone=America/New_York \
–use-rewrites=1
After installation, clear cache:
sh
CopyEdit
docker exec -it magento_app bin/magento cache:flush

Step 5: Configure Magento 2 for Production

5.1 Enable Production Mode
sh
CopyEdit
docker exec -it magento_app bin/magento deploy:mode:set production
5.2 Configure Redis for Caching
sh
CopyEdit
docker exec -it magento_app bin/magento setup:config:set \
–cache-backend=redis \
–cache-backend-redis-server=redis \
–cache-backend-redis-db=0
docker exec -it magento_app bin/magento setup:config:set \
–session-save=redis \
–session-save-redis-host=redis \
–session-save-redis-db=2
5.3 Configure Elasticsearch for Search
sh
CopyEdit
docker exec -it magento_app bin/magento config:set catalog/search/engine elasticsearch7
docker exec -it magento_app bin/magento indexer:reindex

Step 6: Set Up SSL with Let's Encrypt (Optional)

If your server has a domain, install Certbot for free SSL:
sh
CopyEdit
sudo apt install certbot python3-certbot-nginx
sudo certbot –nginx -d your-domain.com -d www.your-domain.com
Renew SSL automatically:
sh
CopyEdit
sudo crontab -e
Add this line to renew every 90 days:
css
CopyEdit
0 3 * * * certbot renew –quiet

Step 7: Monitor and Manage Magento2 in Docker

7.1 Restart Containers
sh
CopyEdit
docker-compose restart
7.2 Stop Containers
sh
CopyEdit
docker-compose down
7.3 Run Magento CLI Commands
sh
CopyEdit
docker exec -it magento_app bin/magento cache:flush
docker exec -it magento_app bin/magento indexer:reindex
docker exec -it magento_app bin/magento setup:upgrade
7.4 View Logs
sh
CopyEdit
docker logs magento_app

Final Thoughts

Using Docker for Magento2 deployment ensures a fast, scalable, and repeatable setup. Raulji Technologies and Yuvraj Raulji recommend this approach for any Magento2 store, whether for development, staging, or production.

Next Steps: Stay tuned for our next guide on scaling Magento 2 with Kubernetes and CI/CD pipelines!

Yuvraj Raulji

Yuvraj Raulji

Founder & CEO

February 11, 2025
7 min read

Founder of Raulji Technologies with expertise in enterprise eCommerce solutions.Specialized in Magento 2, Shopify, and headless commerce architecture.Driving growth through CRO, SEO, and performance engineering.Helping businesses turn technology into measurable revenue.

Ready to Transform Your Business?

Let's discuss how we can help you build scalable, AI-driven digital solutions that drive growth and success.