Docker PostgreSQL DataBase
$ mkdir -p ~/projects/dev/db/postgres/
$ cd ~/projects/dev/db/postgres/
$ sudo apt install -y postgresql-client-common postgresql-client
$ sudo vi /etc/hosts
127.0.0.1 postgres
$ vi .env
DATABASE_HOST=postgres
DATABASE_NAME=postgresdb
DATABASE_PORT=5432
DATABASE_USER=admin1
DATABASE_PASSWORD=pA55w0rd123
$ vi docker-compose.yml
version: '3'
services:
postgres:
container_name: postgres
image: postgres:15.2-alpine3.17
restart: always
hostname: ${DATABASE_HOST}
ports:
- ${DATABASE_PORT}:5432
environment:
POSTGRES_DB: ${DATABASE_NAME}
POSTGRES_USER: ${DATABASE_USER}
POSTGRES_PASSWORD: ${DATABASE_PASSWORD}
volumes:
- ./PGDATA:/var/lib/postgresql/data
$ docker-compose up
Example:
https://github.com/webmakaka/Uber-Eats-Clone
Import data into postgresql from sql dump file
$ cd data/
// Connect
$ PGPASSWORD=pA55w0rd123 psql -U admin1 -h postgres -p 5432 -d postgresdb
// Import data from sql
// $ PGPASSWORD=pA55w0rd123 psql -U admin1 -h postgres -p 5432 -d postgresdb < go_movies.sql
$ PGPASSWORD=pA55w0rd123 psql --host=localhost --username=admin1 --port=5432 --dbname=go_movies -c 'select id, title, description, year, release_date, rating, runtime, mpaa_rating, created_at, updated_at from movies where id = 1'
$ PGPASSWORD=pA55w0rd123 psql --host=localhost --username=admin1 --port=5432 --dbname=go_movies -c "INSERT INTO movies_genres (movie_id, genre_id, created_at, updated_at) VALUES (1, 1, '2021-05-19', '2021-05-19');"
Run pgadmin in docker container:
$ docker run -e PGADMIN_DEFAULT_EMAIL='[email protected]' -e PGADMIN_DEFAULT_PASSWORD='password1234' -p 5555:80 --name pgadmin dpage/pgadmin4
http://localhost:5555/
login: [email protected]
pass: password1234
To connect, use host ip address
Docker-compose config with postgres and pgadmin
services:
postgres:
container_name: postgres
image: postgres
environment:
POSTGRES_USER: amigoscode
POSTGRES_PASSWORD: password
PGDATA: /data/postgres
volumes:
- postgres:/data/postgres
ports:
- '5432:5432'
networks:
- postgres
restart: unless-stopped
pgadmin:
container_name: pgadmin
image: dpage/pgadmin4
environment:
PGADMIN_DEFAULT_EMAIL: ${PGADMIN_DEFAULT_EMAIL:[email protected]}
PGADMIN_DEFAULT_PASSWORD: ${PGADMIN_DEFAULT_PASSWORD:-admin}
PGADMIN_CONFIG_SERVER_MODE: 'False'
volumes:
- pgadmin:/var/lib/pgadmin
ports:
- '5050:80'
networks:
- postgres
restart: unless-stopped
networks:
postgres:
driver: bridge
volumes:
postgres:
pgadmin: