added docker items for db
This commit is contained in:
89
docs/docker/local-db-pg.md
Normal file
89
docs/docker/local-db-pg.md
Normal file
@@ -0,0 +1,89 @@
|
||||
# Local Database With Scripts (PostgreSQL)
|
||||
|
||||
When developing apps locally it can be really useful to have a dockerised database unique to the application.
|
||||
|
||||
Often rather than just running a pre-built image, you'll want to run a database with some initial data, tables, or a schema.
|
||||
|
||||
For this purpose we can create our own image that extends the base image and adds our own scripts.
|
||||
|
||||
## Setup
|
||||
|
||||
For most applications the directory structure will look something like this:
|
||||
|
||||
```
|
||||
database/
|
||||
Dockerfile
|
||||
scripts/
|
||||
01-create-tables.sql
|
||||
development/
|
||||
compose.yml
|
||||
src/
|
||||
...
|
||||
tests/
|
||||
...
|
||||
```
|
||||
|
||||
### Dockerfile
|
||||
|
||||
Create a dockerfile in the `database/` directory:
|
||||
|
||||
::: code-group
|
||||
|
||||
```dockerfile [Dockerfile]
|
||||
FROM postgres:17
|
||||
|
||||
# Setup the postgres environment variables
|
||||
ENV POSTGRES_USER=myuser
|
||||
ENV POSTGRES_PASSWORD=mypassword
|
||||
ENV POSTGRES_DB=mydatabase
|
||||
|
||||
# Setup port
|
||||
EXPOSE 5432
|
||||
|
||||
# Copy all the scripts into the container
|
||||
COPY ./scripts /docker-entrypoint-initdb.d/
|
||||
```
|
||||
|
||||
:::
|
||||
|
||||
::: danger
|
||||
|
||||
As this is a local development database, we're using the a simple username and password. **Do not use this in production**.
|
||||
|
||||
:::
|
||||
|
||||
### Scripts
|
||||
|
||||
Create any scripts you need in the `database/scripts/` directory. PostgreSQL will run these scripts in alphabetical order against the database specified in the `POSTGRES_DB` environment variable.
|
||||
|
||||
::: code-group
|
||||
|
||||
```sql [01-create-tables.sql]
|
||||
CREATE TABLE MyTable (
|
||||
Id INT NOT NULL PRIMARY KEY,
|
||||
Name VARCHAR(50) NOT NULL
|
||||
);
|
||||
```
|
||||
|
||||
:::
|
||||
|
||||
## Compose
|
||||
|
||||
Lastly we need to create a `docker-compose.yml` file in the `development/` directory:
|
||||
|
||||
::: code-group
|
||||
|
||||
```yaml [compose.yml]
|
||||
services:
|
||||
db:
|
||||
build:
|
||||
context: ../database
|
||||
dockerfile: Dockerfile
|
||||
volumes:
|
||||
- db-data:/var/lib/postgresql/data
|
||||
ports:
|
||||
- "5432:5432"
|
||||
|
||||
volumes:
|
||||
db-data:
|
||||
```
|
Reference in New Issue
Block a user