Laravel Dockerization: Integrating S3Mock
Introduction
When developing a Laravel application that interacts with AWS S3 or other object storage services, it's crucial to have a testable bucket environment. This is especially important for features that local storage doesn't support, such as generating temporary URLs. Fortunately, there is a Docker image called S3Mock that simulates the AWS S3 API, which we'll explore in this tutorial.
What is S3Mock
The S3Mock is a library that provides a local server that mimics the behavior of the AWS S3 API. This allows developers to perform integration tests without having to actually connect to AWS. It is also available as a docker image, which we will be using in this tutorial.
Installing the Flysystem Composer Package
First, install the package Laravel uses for S3 integration via Composer:
Adding the Docker Service
Next, you need to add the following service to the docker-compose.yml file of your docker setup:
Configuring the Environment File
Ensure that the new service is functioning within your Docker setup, then set the storage-related environment variables in the .env file:
Verify that the bucket name you specify as AWS_BUCKET is listed under initialBuckets in the docker-compose.yml file. It's also important to set AWS_USE_PATH_STYLE_ENDPOINT to true to mandate the library's use of this endpoint.
Note: Make sure that the S3Mock service is connected to the same network as your Laravel application so the container name ld_s3 is recognized by the application as a domain.
Configuring Hosts
As you might have figured out already, the URLs for the bucket objects will start with http://ld_s3:9090. To make these URLs accessible outside the Docker environment, you will need to modify your hosts file by adding the following line:
In Ubuntu and other Unix-like systems, the hosts file is located at /etc/hosts.
Testing the Bucket
Your service is now ready to handle requests. Let's implement two methods: one to store a random PDF from the public directory into the bucket, and another to list the items in it:
S3Mock stores uploaded files in /s3mockroot/ within the container.
By default, S3Mock deletes the files stored in the bucket upon shutdown. To retain these files, set retainFilesOnExit to true:
References





