🔥 Holiday Sale! 25% Off Platinum Membership and up to 50% Off on Deployarr (ends December 31).

Redis Docker Compose Install: With 2 SAVVY Use Cases

Redis is an open-source cache for databases. This post shows a Redis Docker Compose example, with 2 savvy uses cases that take advantage of Redis caching.

Redis is a free and open source in-memory cache for databases that significantly speeds up data lookups and reduces load on database servers (e.g. MariaDB, MySQL, PostgreSQL, and more). It can also act as a high performance database (key value store) and message broker.

However, to take advantage of Redis's benefits, you need an application that is capable of using Redis.

Redis does a lot of things very well. But what is the significance of this to a server administrator and/or homelab user? We will cover that with some ways Redis can enhance your experience.

For me, it is part of my self-hosted multifactor authentication system with Authelia and an in-memory key value store to speedup my docker-based WordPress site.

But first, let us see look at a Redis Docker Compose example to add to our stack.

Redis Docker Compose Example

When I first started out with my Docker server setup, I had no idea what redis was and how I could use it. If you are like me, do not worry. In addition to showing you how to setup Redis with Docker Compose, I will also share how I use it in my own humble way.

What is Redis docker-compose?
Redis Docker-Compose is a template or a set of instructions in YAML that will create a Redis server as a Docker service.

While Redis can also be installed using plain old Docker, Docker-compose makes it very easy to install.

Requirements for Redis Docker Compose

In order to successfully follow this docker-compose Redis tutorial, you will need Docker and Docker Compose installed and running.

While not required, I strongly recommend also reading and following my basic Docker server guide.

Redis with Docker Compose

With Docker and Docker Compose running, let us now move on to Redis Docker Compose setup.

There are several Redis images available on Docker Hub.

Redis Images On Docker Hub
Redis Images On Docker Hub

We are going to be using the offical Redis image, pictured above. But the Bitname Redis image is also a trustworthy and reliable image. [Read: 20 Docker Security Best Practices – Hardening Traefik Docker Stack]

Building a Docker Compose File for Redis

Unfortunately, the official Redis image does not provide a Redis docker compose file. Fear not, here the docker-compose for Redis.

First, if you are starting a new Redis Docker-Compose file, then add the following at the top:

version: "3.9"

networks:
  default:
    driver: bridge

We are defining the docker compose file version and a network named default, that Redis will use.

If you already have an existing Docker compose stack that you are adding Redis to, then just copy-paste the Redis Docker-Compose snippet below:

  # Redis - Key-value Store
  redis:
    container_name: redis
    image: redis:latest
    restart: always
    entrypoint: redis-server --appendonly yes --requirepass $REDIS_PASSWORD --maxmemory 512mb --maxmemory-policy allkeys-lru
    networks:
      - default
    ports:
      - "6379:6379"
    volumes:
      - $DOCKERDIR/appdata/redis/data:/data
      - /etc/timezone:/etc/timezone:ro
      - /etc/localtime:/etc/localtime:ro

Docker Compose Redis Configuration

  • container_name - You can specify whatever you like.
  • image - We are using the latest version of the official Redis image.
  • restart - We are setting the Redis docker container to restart always (e.g. after boot or failure).
  • entrypoint - We are setting some configuration parameters at the start of Redis service. Typically, you will only have to configure two things. You can replace $REDIS_PASSWORD with your password or set the password as an environmental variable. The second parameter is the maximum allowed RAM memory for Redis.
  • networks - We are making redis docker container, a part of the default network. But you should change this to fit your needs. For example, in my WordPress stack, I put Redis on the same network as MariaDB so they can see each other.
  • ports - The default Redis port is 6379. We are exposing port 6379 from inside the container to port 6379 of the Docker host. So you should be able to connect to Redis using DOCKER-HOST-IP:6379.
  • volumes - We storing all Redis information in a persistent $DOCKERDIR/appdata/redis/data folder. You could use your own location on Docker host. But as I have explained previously in my Docker guide, I like to put everything in appdata folder. We are also passing timezone and local time info from the Docker host to Redis docker container.

Running Redis Using Docker-Compose

We are almost there. So, how do I start Redis in docker?

I strongly suggest you review the Docker and Docker Compose usage information published previously. But here is the command to start Redis Docker compose stack:

sudo docker-compose -f ~/docker/docker-compose.yml up -d

After starting, you can check the logs of Docker redis container using the following command:

sudo docker-compose logs redis

Your logs may look something like what is shown below.

Docker Compose Redis Logs
Docker Compose Redis Logs

In the above case, Redis server started successfully without any issues.

Enhancing Redis Experience

Now that you have Redis installed using Docker Compose, let us see how to use it.

Redis Use Cases

There are numerous use cases for Redis. But I use Redis only for two purposes.

1. WordPress Performance

I use Redis to speedup the performance of this site by caching database lookups in memory using Redis. I do this using Redis Object Cache plugin.

Redis Object Cache For Wordpress
Redis Object Cache For Wordpress

As you can see, I have almost 100% hit ratio for database calls that would otherwise be sent to MariaDB.

2. Authelia Authentication

I also use Redis to speed up Authelia authentication - a self-hosted multifactor authentication system. This is explained in detail in my Authelia guide.

How to Make Docker Compose Wait for Redis?

Your services or other docker containers may depend on Redis for starting successfully. If this is the case, you can add the following snippet to docker-compose snippets of those services so they all wait for Redis container to be started first.

    depends_on:
      - redis

That is a copy-paste from my Nginx service on my Docker WordPress stack, which will need Redis to be started before starting.

Note: Using depends_on only ensures that the Redis container is "started" first. It, however, will not do any checks to see if Redis started successfully and is up and running without any errors.

How do I interact with Redis docker?

You can interact with Redis in multiple ways.

Redis Container Shell

If you want to access the shell of your Redis server, then use:

sudo docker exec -ti redis /bin/bash

From here, you can use Redis commands to explore Redis's contents.

Redis GUI Client

Sometimes, GUI clients are a lot more easier to use. For this there are several tools available. But here are 3 I have used in the past.

  • Redis Desktop Manager - Free Redis GUI for Windows, MacOS, and Linux.
  • Redis Commander - A Docker based web UI for Redis server. Check my obsolete Docker compose example in my GitHub for an example.
  • phpRedisAdmin - I replaced Redis Commander with this one for that rare occasion that I have to check Redis's contents.
    Phpredisadmin
    Phpredisadmin

Concluding Remarks for Redis Docker Compose

At one point of time, setting up Redis was a lot more difficult. But with Docker it became simpler.

But installing Redis using Docker Compose takes the ease of setup to a whole new level.

I could see a noticeable performance improvement in Authelia authentications and WordPress speed with the use of Redis. It is also known to have similar performance improvements for Node.js or Express.js REST API applications.

While Redis is optional in many cases, I strongly recommend it. So if you have been thinking about it, then go ahead and use the Redis docker compose example from this guide and try it out for yourself.

Be the 1 in 200,000. Help us sustain what we do.
125 / 150 by Dec 31, 2024
You will gain benefits such as Deployarr access, discord roles, exclusive content, ad-free browsing, and more.
🔥 Holiday Sale! 25% Off Platinum Membership $399.99 $299.99 (ends December 31).
Join the Geek Army (starting from just $1.67/month)

Anand

Anand is a self-learned computer enthusiast, hopeless tinkerer (if it ain't broke, fix it), a part-time blogger, and a Scientist during the day. He has been blogging since 2010 on Linux, Ubuntu, Home/Media/File Servers, Smart Home Automation, and related HOW-TOs.

Holiday Sale