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.
- 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.
1. To ensure an easy and clean installation, we first want to create a working directory named postgres and move into that directory:
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):
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:
In this guide, we created a container named example and we can quickly locate it among other running containers.
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
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:
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.
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.