TL;DR • About • Disclaimer • Getting Started • Download • How To Use • Databases • Docker Network
FAQ • Useful Tips • Changelog • Contributing • Security Vulnerabilities • Credits • Sponsor • License
Want to learn or experiment with different database engines without requiring to install additional dependencies? Localhost Databases is a collection of Docker Compose files for relational and NoSQL databases.
- Clone this repository.
- The Database Docker Compose files are located in the
databases
folder. - Copy the DotEnv example file to create your DotEnv file and configure your database's credentials and settings.
- Starting a database Docker container is simple by running the
docker compose up
command.
$ docker compose up -d
This repository is a collection of Docker Compose files for relational and NoSQL databases. Which aims to offer a simple approach to setting up databases for a local environment.
What is the purpose of the database collection?
As a developer, you might be working on multiple Docker-based projects. Your projects could be interacting with each other, e.g., a service mesh. Each service could have its database container with the same database engine.
Running all the containers locally on your computer could impact performance. You could experience the Docker container port binding failure message - Bind for 0.0.0.0:3306 failed: port is already allocated. Having a shared database container would resolve these issues.
Also this database collection allows you to learn and experiment with different database engines without you installing additional dependencies to use the databases.
Important
Localhost Databases is not affiliated with the databases' developers/owners and is not an official product.
Localhost Databases has been developed to run databases in a local Docker environment. To install a production instance, read the databases' respective installation guides.
You will need to make sure your system meets the following prerequisites:
- Docker Engine >= 20.10.00
This repository utilizes Docker to run Databases, e.g., MySQL. So, before using Localhost Databases, make sure you have Docker installed on your system.
You can clone the latest version of Localhost Databases repository for macOS, Linux and Windows.
# Clone this repository.
$ git clone git@github.com:luisaveiro/localhost-databases.git --branch main --single-branch
There are a few steps you need to follow before you can have a database set up and running in Docker container. I have outline the steps you would need to take to get started.
Before you start a database in a Docker container, you will need to create a DotEnv file. The DotEnv file will allow you to configure your database's credentials and map a container's port.
Localhost Databases includes a .env.example
file for each Database. You
can run the following command in the terminal to create your DotEnv file.
# Navigate to a database.
$ cd databases/mysql
# Create .env from .env.example.
$ cp .env.example .env
Each database has its environment variables (below, I have provided more information). You have the option to modify each of the database's environment variables individually.
#--------------------------------------------------------------------------
# Database (MySQL) env
#--------------------------------------------------------------------------
# The MySQL database container name. | default: mysql_db
DB_CONTAINER_NAME="${APP_NAME}_db"
# The MySQL database configuration. | default: local
DB_DATABASE="local"
# The MySQL database root credentials.
DB_ROOT_PASSWORD=""
# The MySQL database user credentials.
DB_USERNAME=""
DB_PASSWORD=""
# Map the database container exposed port to the host port. | default: 3306
DB_PORT=3306
After you configure your DotEnv, you can start a database container. Each
database has its individual Docker Compose file. You can run the Docker Compose
up
command.
$ docker compose up -d
An example of the docker compose
command would be as follows:
# Navigate to a database.
$ cd databases/redis
# Run Docker Compose command.
$ docker compose up -d
Docker will create the database container with the container name
redis_db
in our example. The container will be attached to a network
called local_dbs_network
.
If you want to change the container name or network name, you can edit the DotEnv file and override the Docker Compose variables. Below is an example of the DotEnv variables.
#--------------------------------------------------------------------------
# Database (Redis) env
#--------------------------------------------------------------------------
# The Redis database container name. | default: redis_db
DB_CONTAINER_NAME="redis_db"
#--------------------------------------------------------------------------
# Network env
#--------------------------------------------------------------------------
# The Docker network for the containers. | default: local_dbs_network
NETWORK_NAME="local_dbs_network"
Localhost Databases include 14 database servers. The following databases are part of this repository's collection:
- Cassandra
- CockroachDB
- CouchDB
- DynamoDB Local
- EdgeDB
- MariaDB
- MongoDB
- Microsoft SQL Server (MSSQL)
- MySQL
- Neo4j
- PostgreSQL
- Redis
- SurrealDB
- YugabyteDB
I have provided a README file for each database on how to configure the database, start the database container and connect to the database via a database client app.
If you wish to attach your Docker containers to the database network to allow other containers to access your database. I have outlined the necessary configuration below both for Docker Compose and Docker CLI approach.
Once your database container is up and running, you will need to configure your containers by attaching the local_dbs_network network to your container(s).
Docker Compose
In your Docker Compose file you need to define local_dbs_network as an external network. For each services you want to have access to your database container, you will need to add local_dbs_network as an attached network.
version: '3.8'
services:
backend:
container_name: backend
image: python:3
# (Optional) depends on database container name
depends_on:
- mongodb
# Add local_dbs_network as attached network.
networks:
- local_dbs_network
volumes:
- ./:/usr/src/myapp
command: ["python" "main.py"]
networks:
# Add local_dbs_network as an external network.
local_dbs_network:
external: true
Docker CLI
If you don't use Docker Compose, I have included an example of Docker CLI to start a container with the necessary configurations.
$ docker run --rm -it --name backend --network=local_dbs_network -v "$PWD":/usr/src/myapp -w /usr/src/myapp python:3 python main.py
Q: Are you planning to add additional databases, e.g., CouchDB & Cassandra?
A: I don't have a roadmap for adding additional databases to this repository.
However, you can suggest a database in the
Discussion section
and I will try to include the database as part of the repository's database
collection.
NoSQL Workbench is an Amazon DynamoDB client that provides data modeling, data visualization, and query development.
TablePlus is a modern, native tool for database management that supports whole set of relational databases (and some NoSQL).
Postman enables you to easily explore, debug, and test your APIs while also enabling you to define complex API requests for HTTP, REST, SOAP, GraphQL, and WebSockets.
Please see CHANGELOG for more information what has changed recently.
I encourage you to contribute to Localhost Databases! Contributions are what make the open source community such an amazing place to be learn, inspire, and create. Any contributions you make are greatly appreciated.
Please check out the contributing to Localhost Databases guide for guidelines about how to proceed.
Trying to report a possible security vulnerability in Localhost Databases? Please check out our security policy for guidelines about how to proceed.
The illustration used in the project is from unDraw (created by Katerina Limpitsouni). All product names, logos, brands, trademarks and registered trademarks are property of their respective owners.
Do you like this project? Support it by donating.
The MIT License (MIT). Please see License File for more information.