DEV Community

Nhan Nguyen
Nhan Nguyen

Posted on

3

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:

Enterprise-level in-app dashboards. Startup-level speed.

Enterprise-level in-app dashboards. Startup-level speed.

Ship pixel-perfect dashboards that feel native to your app with Embeddable. It's fast, flexible, and built for devs.

Get early access

Top comments (0)

Feature flag article image

Create a feature flag in your IDE in 5 minutes with LaunchDarkly’s MCP server 🏁

How to create, evaluate, and modify flags from within your IDE or AI client using natural language with LaunchDarkly's new MCP server. Follow along with this tutorial for step by step instructions.

Read full post

👋 Kindness is contagious

Dive into this insightful article, celebrated by the caring DEV Community. Programmers from all walks of life are invited to share and expand our collective wisdom.

A simple thank-you can make someone’s day—drop your kudos in the comments!

On DEV, spreading knowledge paves the way and strengthens our community ties. If this piece helped you, a brief note of appreciation to the author truly counts.

Let’s Go!