DEV Community

Nhan Nguyen
Nhan Nguyen

Posted on

Setting Up PostgreSQL in Docker: A Step-by-Step Guide

PostgreSQL is a powerful, open-source object-relational database system. Running PostgreSQL in a Docker container is an efficient way to set up and manage your database. This guide will walk you through setting up PostgreSQL in Docker, from installation to configuration.

Prerequisites

Before you begin, ensure that you have the following installed on your system:

1. Docker: You can download Docker from the official website.

2. Docker Compose (optional but recommended): This tool simplifies multi-container Docker setups.

3. Basic knowledge of the command line.

Step 1: Pull the PostgreSQL Docker Image

To get started, pull the official PostgreSQL Docker image from Docker Hub:

docker pull postgres
Enter fullscreen mode Exit fullscreen mode

This command fetches the latest PostgreSQL image. If you need a specific version, specify it, like so:

docker pull postgres:15.3
Enter fullscreen mode Exit fullscreen mode

Step 2: Run the PostgreSQL Container

Run a PostgreSQL container using the docker run command:

docker run --name postgres-container -e POSTGRES_USER=myuser -e POSTGRES_PASSWORD=mypassword -e POSTGRES_DB=mydatabase -p 5432:5432 -d postgres
Enter fullscreen mode Exit fullscreen mode

Here’s a breakdown of the flags:

  • --name postgres-container: Names the container for easy reference.

  • -e POSTGRES_USER=myuser: Sets the PostgreSQL username.

  • -e POSTGRES_PASSWORD=mypassword: Sets the PostgreSQL password.

  • -e POSTGRES_DB=mydatabase: Creates a database named mydatabase.

  • -p 5432:5432: Maps port 5432 on your host to port 5432 in the container.

  • -d postgres: Runs the container in detached mode.

Step 3: Verify the Setup

To ensure the container is running:

docker ps
Enter fullscreen mode Exit fullscreen mode

You should see your postgres-container in the list of running containers.

To connect to the database from your host machine, use a PostgreSQL client or a tool like psql. For example:

psql -h localhost -U myuser -d mydatabase
Enter fullscreen mode Exit fullscreen mode

You’ll be prompted for the password you set earlier (mypassword).

Step 4: Persisting Data

By default, any data stored in the container will be lost if the container is removed. To persist data, you need to mount a volume:

docker run --name postgres-container -e POSTGRES_USER=myuser -e POSTGRES_PASSWORD=mypassword -e POSTGRES_DB=mydatabase -p 5432:5432 -v pgdata:/var/lib/postgresql/data -d postgres
Enter fullscreen mode Exit fullscreen mode

Here, pgdata is a Docker volume that stores your database data on your host system. You can verify the volume is created with:

docker volume ls
Enter fullscreen mode Exit fullscreen mode

Step 5: Using Docker Compose (Optional)

For more complex setups, such as defining multiple containers, use Docker Compose. Create a docker-compose.yml file:

version: '3.8'
services:
  postgres:
    image: postgres
    container_name: postgres-container
    environment:
      POSTGRES_USER: myuser
      POSTGRES_PASSWORD: mypassword
      POSTGRES_DB: mydatabase
    ports:
      - "5432:5432"
    volumes:
      - pgdata:/var/lib/postgresql/data
volumes:
  pgdata:
Enter fullscreen mode Exit fullscreen mode

Start the container with:

docker-compose up -d
Enter fullscreen mode Exit fullscreen mode

Step 6: Managing the PostgreSQL Container

Here are some useful commands for managing your PostgreSQL container:

  • Stop the container:
docker stop postgres-container
Enter fullscreen mode Exit fullscreen mode
  • Start the container:
docker start postgres-container
Enter fullscreen mode Exit fullscreen mode
  • Remove the container:
docker rm postgres-container
Enter fullscreen mode Exit fullscreen mode

Step 7: Security and Best Practices

  • Use strong passwords: Avoid default or weak passwords.

  • Network isolation: Use Docker networks to limit access to the database container.

  • Backups: Regularly back up your database using tools like pg_dump.

  • Environment files: Store sensitive information in .env files instead of hardcoding them in docker-compose.yml.

Conclusion

Running PostgreSQL in Docker simplifies setup and management, making it easier to integrate into your development workflow. By following this guide, you’ll have a PostgreSQL instance running in no time. With Docker's flexibility, you can scale and configure your database to suit your needs. Happy coding!


I hope you found it helpful. Thanks for reading. 🙏
Let's get connected! You can find me on:

Top comments (0)