Laravel Sail Docker Development Environment

By Evytor Dailyβ€’August 7, 2025β€’Programming / Developer

🎯 Summary

Laravel Sail provides a lightweight Docker-based development environment for Laravel applications. This article will guide you through setting up, customizing, and optimizing Laravel Sail for a seamless PHP development experience. We'll explore key configurations, commands, and advanced techniques to boost your productivity and streamline your workflow using this powerful tool. Whether you're a beginner or an experienced Laravel developer, mastering Laravel Sail is essential for modern web development.

πŸš€ Getting Started with Laravel Sail

What is Laravel Sail?

Laravel Sail is a command-line interface for interacting with Laravel's default Docker configuration. It simplifies the process of setting up a local development environment by managing Docker containers for your application's dependencies, such as MySQL, Redis, and Mailhog. Using Laravel Sail abstracts away complex Docker commands, making it easy to start, stop, and manage your development environment with simple artisan commands. βœ…

Prerequisites

Before diving into Laravel Sail, ensure you have the following:

  • Docker Desktop installed and running on your machine.
  • Composer installed globally.
  • A basic understanding of Docker concepts is helpful but not required.

Installation

Installing Laravel Sail is straightforward. For new Laravel projects, you can use the following Composer command:

composer create-project laravel/laravel:^10.0 my-laravel-app cd my-laravel-app php artisan sail:install 

For existing Laravel applications, run the following commands:

composer require laravel/sail --dev php artisan sail:install 

Starting and Stopping Sail

To start your Laravel Sail environment, simply run:

./vendor/bin/sail up 

This command builds and starts all the necessary Docker containers. To stop the environment, use:

./vendor/bin/sail down 

πŸ”§ Customizing Your Sail Environment

sail.sh Script

The sail script in your project root directory acts as a proxy for running commands within your Docker containers. You can execute artisan commands, run tests, and more using this script. For example:

./vendor/bin/sail artisan migrate ./vendor/bin/sail phpunit 

Docker Compose File

The docker-compose.yml file defines the services used in your Sail environment. You can customize this file to add additional services, modify existing configurations, or adjust environment variables. Be cautious when modifying this file, as incorrect configurations can break your environment.

Environment Variables

Laravel Sail uses environment variables defined in your .env file to configure various services. You can modify these variables to change database credentials, Redis settings, and more. Remember to restart your Sail environment after making changes to the .env file. πŸ’‘

Adding Additional Services

To add services such as Memcached or Selenium, you need to modify the docker-compose.yml file and rebuild your containers. Here’s an example of how to add Memcached:

version: '3.7' services:     laravel.test:         build:             context: ./             dockerfile: Dockerfile         image: sail-8.1/app         extra_hosts:             - 'host.docker.internal:host-gateway'         ports:             - '${APP_PORT:-80}:80'         environment:             WWWUSER: '${WWWUSER:-1000}'             LARAVEL_SAIL: 1         volumes:             - '.:/var/www/html'         networks:             - sail      memcached:         image: 'memcached:1.6-alpine'         ports:             - '11211:11211'         networks:             - sail  networks:     sail:         driver: bridge 

After updating the docker-compose.yml file, run:

./vendor/bin/sail build --no-cache ./vendor/bin/sail up -d 

πŸ“ˆ Optimizing Laravel Sail for Performance

Using the Production Preset

For production-like environments, you can use the production preset. This preset optimizes the Docker configuration for performance and security. To use the production preset, set the APP_ENV variable to production in your .env file and rebuild your containers.

Caching Configuration

Leverage Laravel’s caching features to improve application performance. Configure caching drivers like Redis or Memcached and cache frequently accessed data. Ensure your cache configuration is properly set in your .env file and config/cache.php.

Optimizing Docker Resources

Adjust the resources allocated to your Docker containers based on your application's needs. You can configure CPU and memory limits in the docker-compose.yml file to prevent resource contention and improve performance. πŸ€”

πŸ› Troubleshooting Common Issues

Permissions Issues

Sometimes, you may encounter permission issues when running commands within the Docker container. This is often due to user ID mismatches between your host machine and the container. To resolve this, ensure the WWWUSER environment variable in your .env file is set to your user ID. You can find your user ID by running id -u on your host machine.

chown -R $USER:$USER storage chown -R $USER:$USER bootstrap/cache chmod -R 775 storage chmod -R 775 bootstrap/cache 

Database Connection Errors

If you encounter database connection errors, ensure your database service is running and that the database credentials in your .env file are correct. Also, verify that the database host is set to mysql (or the name of your database service in the docker-compose.yml file). βœ…

Composer Errors

Composer errors can occur due to various reasons, such as dependency conflicts or network issues. Try clearing your Composer cache and updating your dependencies:

composer clear-cache composer update 

Example: Fixing a common issue with Node dependencies

Sometimes Node modules can cause issues within the sail environment. Here's a common fix:

./vendor/bin/sail npm rebuild ./vendor/bin/sail npm update 

🌍 Advanced Usage and Tips

Using Sail with Multiple Projects

You can use Laravel Sail with multiple projects simultaneously by assigning different ports to each project. Modify the APP_PORT variable in your .env file for each project to avoid port conflicts. Also, make sure your APP_URL is correctly configured.

Sharing Your Environment with Colleagues

To share your Sail environment with colleagues, you can commit your docker-compose.yml and .env files to your Git repository. Ensure you exclude sensitive information, such as API keys and database passwords, from your repository. πŸ’°

Using a Custom Dockerfile

For more advanced customization, you can create a custom Dockerfile for your application. This allows you to install additional dependencies, configure your environment, and optimize your application for production. Reference this Dockerfile in your docker-compose.yml file.

Interactive Code Sandbox

You can easily run PHP code interactively within your Sail container using the php artisan tinker command. This is useful for testing code snippets and debugging issues. To run Tinker, execute:

./vendor/bin/sail artisan tinker 

The Takeaway

Laravel Sail simplifies the process of setting up a Docker-based development environment for Laravel applications. By mastering Laravel Sail, you can streamline your development workflow, improve your productivity, and ensure consistency across different environments. Embrace this powerful tool and unlock the full potential of Laravel development. We've walked through everything from initial setup to advanced optimization. βœ…

Keywords

Laravel Sail, Docker, PHP development, development environment, Docker Compose, artisan commands, Sail configuration, environment variables, optimization, troubleshooting, web development, containerization, Laravel, PHP framework, Docker containers, development workflow, Sail script, performance tuning, debugging, application deployment

Popular Hashtags

#Laravel #LaravelSail #Docker #PHP #WebDevelopment #Programming #DevOps #Coding #SoftwareDevelopment #WebApp #PHPFramework #DeveloperTools #CodeNewbie #WebDev #Tech

Frequently Asked Questions

What is the difference between Laravel Sail and Homestead?

Laravel Sail is a lightweight Docker-based development environment, while Homestead is a pre-packaged Vagrant box. Sail is easier to set up and manage, while Homestead provides a more complete virtual machine environment.

Can I use Laravel Sail in production?

While Laravel Sail is primarily designed for local development, it can be used in production with some additional configuration and optimization. However, it is recommended to use a more robust deployment solution for production environments.

How do I update Laravel Sail?

To update Laravel Sail, you can update the laravel/sail dependency in your composer.json file and run composer update. Then, republish the Sail configuration files using php artisan sail:install.

How do I run background workers with Sail?

You can run background workers, such as queues, by adding a new service to your docker-compose.yml file and configuring it to run the necessary artisan commands. For example, you can create a worker service that runs php artisan queue:work.

A developer working on a Laravel application within a Docker container, using Laravel Sail. The scene shows a clean workspace with a laptop displaying code, a Docker icon subtly visible, and a sense of focused productivity. The color palette should be modern and tech-inspired, emphasizing the ease and efficiency of Laravel Sail.