How to Run PostgreSQL on Docker

January 16, 2020

PostgreSQL, also referred to as Postgres, is an open-source, object-relational database management system. Developers often opt for this relational database as it is free, stable, and flexible. In fact, PostgreSQL and MySQL are the most popular Relational Database Management Systems.

Today, Postgres is one of the most widely used Docker images that run in containers. The popularity of containerized databases is attributed to the simplicity with which they can be deployed. Also, instead of having one centralized database for many applications, developers can devote a PostgreSQL container for each application.

In this tutorial, you will learn how to run PostgreSQL on a Docker container.

Tutorial on how to run PostgreSQL in a Docker container.

Prerequisites

  • Access to a command line/terminal window
  • A user account with sudo privileges
  • An existing Docker installation

Run PostgreSQL on Docker Containers

Deploying a Postgres container is simple. You can find the Postgres image for building these database containers in Docker’s official repository.

This guide shows you two ways to do so.

The first option uses Docker Compose, a tool for managing multi-container Docker applications. You can use Docker Compose to configure the Postgres as a service running inside of a container. In that case, you create a yaml file with all the specifications.

Alternatively, you can use a single Docker command with all the necessary information for deploying a new PostgreSQL container.

Option 1: Run Postgres Using Docker Compose

To deploy a Postgres container using Docker Compose, you should have this Docker tool set up on your system.

If you are a Linux user and need help setting up, refer to one of our guides on installing Docker Compose on Ubuntu or how to install Docker Compose on CentOS.

1. To ensure an easy and clean installation, we first want to create a working directory named postgres and move into that directory:

mkdir postgres
cd postgres/

2. Next, use Docker Compose to download the Postgres image and get the service up and running. Do this by creating a new docker-compose.yml file with an editor of your choice (in this example, we used nano):

nano docker-compose.yml

3. Add the following content to the docker-compose file:

version: ‘3’
service:
  postgres:
  image: ‘postgres: latest’
  ports:
    - “5432:5432” 

The yaml configuration file outlines there is a postgres service, built on the latest postgres image. You can decide on the newest Postgres version or specify the version number you want to use.

Finally, you need to define the ports on which the container communicates. 5432 is the default port number for PostgreSQL.

4. Save and exit the file.

5. Now that you have the yaml configuration file, you can start the postgres service and run the container. Use the docker-compose up command with the -d option to put it into detach mode (allowing you to continue to run commands from the current shell):

docker-compose up -d

6. You can check the logs with the command:

docker-compose logs -f

To return to the shell press CTRL+C.

Option 2: Run Postgres Using a Single Docker Command

Another way to deploy PostgreSQL in a container is by running a single docker command

1. You can download and run a Postgres container by specifying all the necessary information in one command.

docker run --name [container_name] -e POSTGRES_PASSWORD=[your_password] -d postgres

The command tells Docker to run a new container under a particular container name, defines the Postgres password, and downloads the latest Postgres release.

2. Confirm your PostgreSQL container is now up by prompting Docker to list all running containers with:

docker ps

In this guide, we created a container named example and we can quickly locate it among other running containers.

A single command for deploying Postgres in a Docker container.

Starting with Postgres Containers

Connect to Postgres in Docker Container

To enter a Postgres container, you need to execute using the container name and enable psql, the command-line interface for Postgres.

docker exec -it [container_name] psql -U [postgres_user]

In the example below, we connected to the example container as the postgres user.

Command for connecting to Postgres in a Docker container.

Create a Database

1. Once in the Docker Postgres container, we can create a database with:

create database [db_name];

Note: To view all the databases you have running on PostgreSQL run: \l.

2. Connect to the database as the postgres user type:

\c [db_name]

3. With the database set up, the next step is to create a schema that helps you get a logical representation of the database structure:

create schema [db_schema_name]

4. Here you can create a table and add data into the table.

create table [table_name] ([field_names] [values])

Note: If you want to exit the Postgres container, type in the following: \q.

Conclusion

In this article you learned two different ways to run a PostgreSQL in a Docker container. After deploying a Docker Postgres container, you can start creating your databases with all the data required. Deploying PostgreSQL in a container is cost-efficient in terms of infrastructure, it also supports CI/CD development, and streamlines deployment and application management.

If you want to learn more about PostgreSQL deployment, make sure to read our article how to deploy PostgreSQL on Kubernetes.

Beside PostgreSQL you can also run MySQL and MongoDB on Docker.

Was this article helpful?
YesNo
Sofija Simic
Sofija Simic is an experienced Technical Writer. Alongside her educational background in teaching and writing, she has had a lifelong passion for information technology. She is committed to unscrambling confusing IT concepts and streamlining intricate software installations.
Next you should read
How to Connect to a PostgreSQL Database From Command Line in Linux
June 18, 2019

PostgreSQL is an open source relational database management system. In this tutorial learn how to connect to...
Read more
How to List All Users in a MySQL Database
November 18, 2019

This simple tutorial analyses the commands used to list all user accounts in MySQL. Learn about additional...
Read more
How to Fix MySQL 'Command Not Found'
December 11, 2019

The 'Command Not Found' error is a general error not only found in MYSQL. By learning how to deal with it...
Read more
PostgreSQL Vs MySQL: A Detailed Comparison
March 30, 2023

Explore the differences between the two most widely used database management systems. PostgreSQL and MySQL...
Read more