Laravel Docker #8 - Install Composer in Docker Container
In this tutorial, we will learn how to install Composer inside a Docker container for your Laravel project. Composer is an important tool for PHP that helps to manage dependencies and packages easily.
We will go step by step and set up Docker with Laravel, Composer, and other required configurations. This will help you to run Laravel inside Docker without any manual setup.
Step 1: Create Laravel Project
laravel new my-app
Step 2: Create Dockerfile
Dockerfile
FROM php:8.3-fpm
WORKDIR /var/www/html
RUN apt-get update & apt-get install -y \
libzip-dev \
unzip \
& docker-php-ext-install zip pdo_mysql
# Composer Install
COPY --from=composer:latest /usr/bin/composer /usr/bin/composer
COPY . /var/www/html
# Composer Install for Laravel Project
RUN composer install
RUN chown -R www-data:www-data /var/www/html
RUN chown -R www-data:www-data /var/www/html/storage /var/www/html/bootstrap/cache /var/www/html/vendor
RUN chmod -R 775 /var/www/html/storage /var/www/html/bootstrap/cache /var/www/html/vendor
Step 3: Create NGINX Config File
.docker/apache/default.conf
server {
listen 80;
index index.php index.html;
root /var/www/html/public;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
include fastcgi_params;
fastcgi_pass web:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_buffers 16 16k;
fastcgi_buffer_size 32k;
}
location ~ /\.ht {
deny all;
}
}
Step 4: Create docker-compose.yml
docker-compose.yml
services:
web:
build:
context: .
dockerfile: Dockerfile
image: my-laravel-app
volumes:
- .:/var/www/html
- /var/www/html/storage
- /var/www/html/bootstrap/cache
- /var/www/html/vendor
working_dir: /var/www/html
user: "www-data"
depends_on:
- db
nginx:
image: nginx:latest
ports:
- "8080:80"
volumes:
- .:/var/www/html
- ./.docker/nginx/default.conf:/etc/nginx/conf.d/default.conf
depends_on:
- web
db:
image: mysql:8.0
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: laravel
MYSQL_USER: laravel
MYSQL_PASSWORD: secret
ports:
- "3307:3306"
volumes:
- dbdata:/var/lib/mysql
volumes:
dbdata:
Run Laravel App:
All the required steps have been done, now you have to type the given below command and hit enter to run the Laravel app:
php artisan serve
Now, Go to your web browser, type the given URL and view the app output:
http://localhost:8080
Now you can use.