mirror of
https://github.com/marcel-dempers/docker-development-youtube-series.git
synced 2025-06-06 17:01:30 +00:00
Merge pull request #172 from marcel-dempers/postgres-intro
add postgres-intro
This commit is contained in:
commit
022ec40bef
3
.gitignore
vendored
3
.gitignore
vendored
@ -14,3 +14,6 @@ messaging/kafka/data/*
|
|||||||
kubernetes/portainer/volume*
|
kubernetes/portainer/volume*
|
||||||
kubernetes/rancher/volume/*
|
kubernetes/rancher/volume/*
|
||||||
kubernetes/portainer/business/volume*
|
kubernetes/portainer/business/volume*
|
||||||
|
|
||||||
|
#ignore postgres data for sample and database tutorials
|
||||||
|
pgdata
|
128
storage/databases/postgresql/1-introduction/README.md
Normal file
128
storage/databases/postgresql/1-introduction/README.md
Normal file
@ -0,0 +1,128 @@
|
|||||||
|
# Introduction to PostgreSQL
|
||||||
|
|
||||||
|
This is part 1 of my series on learning PostgreSQL. <br/>
|
||||||
|
The primary focus is getting PostgreSQL up and running and </br>
|
||||||
|
taking a first look at the database. </br>
|
||||||
|
|
||||||
|
PostgreSQL [Docker Image](https://hub.docker.com/_/postgres)
|
||||||
|
|
||||||
|
## Run a simple PostgreSQL database (docker)
|
||||||
|
|
||||||
|
```
|
||||||
|
docker run --name some-postgres -e POSTGRES_PASSWORD=mysecretpassword -d postgres
|
||||||
|
```
|
||||||
|
|
||||||
|
## Run a simple PostgreSQL database (compose)
|
||||||
|
|
||||||
|
```
|
||||||
|
cd storage/databases/postgresql/1-introduction
|
||||||
|
|
||||||
|
docker compose up
|
||||||
|
```
|
||||||
|
|
||||||
|
We can access our database from the adminer web page on `http://localhost8080` </br>
|
||||||
|
|
||||||
|
|
||||||
|
When running containers, its always important to pull the image by tag </br>
|
||||||
|
to ensure you always get the same container image, else it will pull latest. </br>
|
||||||
|
We will do that in the next step. </br>
|
||||||
|
|
||||||
|
## Persisting Data
|
||||||
|
|
||||||
|
To persist data to PostgreSQL, we simply mount a docker volume. </br>
|
||||||
|
This is the way to persist container data. </br>
|
||||||
|
PostgreSQL stores its data by default under `/var/lib/postgresql/data`
|
||||||
|
Also take note we are running a specific version of PostgreSQL now:
|
||||||
|
|
||||||
|
```
|
||||||
|
docker run -it --rm --name postgres `
|
||||||
|
-e POSTGRES_PASSWORD=admin123 `
|
||||||
|
-v ${PWD}/pgdata:/var/lib/postgresql/data `
|
||||||
|
postgres:15.0
|
||||||
|
```
|
||||||
|
|
||||||
|
We can enter the container to connect to SQL:
|
||||||
|
|
||||||
|
```
|
||||||
|
# enter the container
|
||||||
|
docker exec -it postgres bash
|
||||||
|
|
||||||
|
# login to postgres
|
||||||
|
psql -h localhost -U postgres
|
||||||
|
|
||||||
|
#create a table
|
||||||
|
CREATE TABLE customers (firstname text,lastname text, customer_id serial);
|
||||||
|
|
||||||
|
#add record
|
||||||
|
INSERT INTO customers (firstname, lastname) VALUES ( 'Bob', 'Smith');
|
||||||
|
|
||||||
|
#show table
|
||||||
|
\dt
|
||||||
|
|
||||||
|
# get records
|
||||||
|
SELECT * FROM customers;
|
||||||
|
|
||||||
|
# quit
|
||||||
|
\q
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
Now we can see our data persisted by killing and removing the container:
|
||||||
|
|
||||||
|
```
|
||||||
|
docker rm -f postgres
|
||||||
|
```
|
||||||
|
|
||||||
|
Run it again with the above `docker run` command and list our record with the above commands we've learnt </br>
|
||||||
|
|
||||||
|
## Networking
|
||||||
|
|
||||||
|
PostgreSQL by default uses port `5432`. </br>
|
||||||
|
Since we are running in Docker, we can bind a different port if we wish with Docker's `-p` flag. </br>
|
||||||
|
For example, we can expose port `5000` outside the container :
|
||||||
|
|
||||||
|
```
|
||||||
|
docker run -it --rm --name postgres `
|
||||||
|
-e POSTGRES_PASSWORD=admin123 `
|
||||||
|
-v ${PWD}/pgdata:/var/lib/postgresql/data `
|
||||||
|
-p 5000:5432 `
|
||||||
|
postgres:15.0
|
||||||
|
```
|
||||||
|
Note that this does not change the port which PostgreSQL runs on. </br>
|
||||||
|
To change that, we need to explore the configuration.
|
||||||
|
|
||||||
|
## Configuration
|
||||||
|
|
||||||
|
PostgreSQL can be configured using environment variables as well as a config file. </br>
|
||||||
|
|
||||||
|
PostgreSQL has a ton of configuration options. </br>
|
||||||
|
In the next chapter, we will explore the configuration of PostgreSQL. </br>
|
||||||
|
|
||||||
|
## Docker Compose
|
||||||
|
|
||||||
|
Let's update our compose file to reflect our latest changes. </br>
|
||||||
|
|
||||||
|
We need to update the docker image, the port we want to expose outside of the container as well as a volume mount for persistence. </br>
|
||||||
|
|
||||||
|
```
|
||||||
|
version: '3.1'
|
||||||
|
services:
|
||||||
|
db:
|
||||||
|
image: postgres:15.0
|
||||||
|
restart: always
|
||||||
|
environment:
|
||||||
|
POSTGRES_PASSWORD: admin123
|
||||||
|
ports:
|
||||||
|
- 5000:5432
|
||||||
|
volumes:
|
||||||
|
- ./pgdata:/var/lib/postgresql/data
|
||||||
|
adminer:
|
||||||
|
image: adminer
|
||||||
|
restart: always
|
||||||
|
ports:
|
||||||
|
- 8080:8080
|
||||||
|
```
|
||||||
|
|
||||||
|
That's it for chapter one! </br>
|
||||||
|
In [chapter 2](../2-configuration/README.md), we will take a look at Configuration and how to start our PostgreSQL instance with a custom configuration file. </br>
|
||||||
|
We will also explore the customization options available. </br>
|
@ -0,0 +1,16 @@
|
|||||||
|
version: '3.1'
|
||||||
|
services:
|
||||||
|
db:
|
||||||
|
image: postgres:15.0
|
||||||
|
restart: always
|
||||||
|
environment:
|
||||||
|
POSTGRES_PASSWORD: admin123
|
||||||
|
ports:
|
||||||
|
- 5000:5432
|
||||||
|
volumes:
|
||||||
|
- ./pgdata:/var/lib/postgresql/data
|
||||||
|
adminer:
|
||||||
|
image: adminer
|
||||||
|
restart: always
|
||||||
|
ports:
|
||||||
|
- 8080:8080
|
Loading…
x
Reference in New Issue
Block a user