Total: 1 hour 30 min
- Install Docker: 15 min
- Install and Configure PSQL using Docker: 20-30 min
- Install PG-admin using Docker: 20-30 min
- Check for Understanding: 10 min
- Docker
- Installing software is hard. And it has nothing to do with your expertise as a developer. We have all seen our fair share of version clashes, esoteric build failure messages and missing dependency errors each time we embarked upon the task of installing a new software to use. We have spent countless hours copy pasting snippets of code from Stack Overflow onto our terminal and running them with the hope that one of them will magically resolve install issues and make the software run. The result is mostly despair, frustration and loss of productivity.
- Docker provides a way out of this mess by reducing the task of installing and running software to as little as two commands (docker run and docker pull). In this lesson we will see this process in action by taking a step by step look at how easy and simple it is to setup a Postgres installation with docker.1
Participants will be able to:
- Install Docker
- Build & run a PostgreSQL and PGAdmin using Docker
Follow the Docker installation process according to your operating system.
Try running this command on terminal, if docker is installed, you should get a error free response:
$ docker --version
To pull down an image from the Postgres docker hub, simply run
$ docker pull postgres
After downloading the image you can check that is available to use:
$ docker images
We will create a local folder and mount it as a data volume for our running container to store all the database files in a known location for you.
$ mkdir ${HOME}/postgres-data/
Starting the Postgres container is as simple as running the docker run command
$ docker run -d --name dev-postgres -e POSTGRES_PASSWORD=Password -v ${HOME}/postgres-data/:/var/lib/postgresql/data -p 5432:5432 postgres
-
-d: Launches the container in detached mode or in other words, in the background.
-
-- name: An identifying name for the container. We can choose any name we want.
-
-e: Expose environment variable of name POSTGRES_PASSWORD with value docker to the container. This environment variable sets the superuser password for PostgreSQL. We can set POSTGRES_PASSWORD to anything we like.
-
-v: Mount ${HOME}/postgres-data/:/var/lib/postgresql/data on the host machine to the container side volume path /var/lib/postgresql/data created inside the container. This ensures that postgres data persists even after the container is removed.
-
-p: Bind port 5432 on localhost to port 5432 within the container. This option enables applications running out side of the container to be able to connect to the Postgres server running inside the container.
You can verify the container is running using
$ docker ps
Run this command to access our running container dev-postgres
$ docker exec -it dev-postgres bash
Great, now you are in the container's bash console. To connect with our “Dockerized” Postgres instance run this command
$ psql -h localhost -U postgres
To check the list of database
\l
To check the current date
SELECT * from CURRENT_DATE;
Congratulations. If you don't get any error that means we have successfully run PostgreSQL in Docker. Press CTRL+D
to exit.
pgAdmin is the most popular and feature-rich Open Source administration and development platform for PostgreSQL. You will use it to manage the DB instance as well as to run your queries against the tables of it.
You will be using this docker image to deploy it in a container. To get the image and run the instance of the image with the following commands2
docker pull dpage/pgadmin4
Once the image is available in your local, run the below command to create a pgAdmin container.
$ docker run -p 80:80 -e '[email protected]' -e 'PGADMIN_DEFAULT_PASSWORD=password' --name dev-pgadmin -d dpage/pgadmin4
The parameters that we are passing to the docker run command are:
- -p 80:80: This parameter tells docker to map the port 80 in the container to port 80 in your computer (Docker host)
- -e 'PGADMIN_DEFAULT_EMAIL: Environment variable for default user’s email, you will use this to log in the portal afterwards
- -e 'PGADMIN_DEFAULT_PASSWORD': Environment variable for default user’s password
- -d: This parameters tells docker to start the container in detached mode dpage/pgadmin4: This parameter tells docker to use the image that we have previously downloaded
PS: If the command fails to run due with error
port is already allocated
, Open docker dashboard and stop the container that is running on port 80.
Let’s check that the container is up and running,
$ docker ps
To look for the IP address of the PostgreSQL container on our host, you can run this command for it:
$ docker inspect dev-postgres -f "{{json .NetworkSettings.Networks }}"
- docker inspect: return low-level information of Docker objects, in this case, the ‘dev-postgres’ instance’s IP Adress.
- -f: parameter is to format the output as a JSON given a Go template.
The output should look like this:
{
"bridge": {
"IPAMConfig": null,
"Links": null,
"Aliases": null,
"NetworkID": "9d28fc17d1131317a774c6494b1b4e40eb3f889afa52b03848f48aa6d0684a28",
"EndpointID": "36176d4730e4eeff639ba65fc58cb853fac30ad207ab1e15c32a925fb4aca2ef",
"Gateway": "172.17.0.1",
"IPAddress": "172.17.0.3",
"IPPrefixLen": 16,
"IPv6Gateway": "",
"GlobalIPv6Address": "",
"GlobalIPv6PrefixLen": 0,
"MacAddress": "02:42:ac:11:00:03",
"DriverOpts": null
}
}
Copy the IPAddress value into the clipboard, which is 172.17.0.3 in this example, you will need to define the connection in the pgAdmin tool.
The next step is to go to your web browser and type http://localhost:80.
Login pgAdmin using email address and password. In our case Email- [email protected]
Password - password
Once you login click on Add New Server
Enter the credentials to save and manage PSQL via GUI.
Host - The IP address of your machine
Password - Password used while creating the PSQL server with docker
Once you have created the connection you should see the server on the right side of your screen. At this moment you are ready to start building your databases and tables, uploading data and querying for your analysis or applications.
-
Why should we use Postgres with Docker?
-
What is Docker image?
-
What is Docker container?