psql
docker pull postgers:17-alpine
docker network create dbnet
docker network ls
docker run -d --rm --name psgr --network dbnet -e POSTGRES_DB=mydata -e POSTGRES_USER=postgres -e POSTGRES_PASSWORD=1234 -v postgres-data:/var/lib/postgresql/data postgres:17-alpine
docker exec -it psgr psql -U postgres
SELECT * FROM pg_user
\q
docker pull adminer
docker run --rm -d --network dbnet --link psqr:db -p 8080:8080 adminer
На рабочем столе создаём папку Project
Внутри неё создаём файл Dockerfile
FROM python:3.12-slim
RUN groupadd -r groupflask && useradd -r -g groupflask userflask
RUN pip install --upgrade pip
RUN pip install flask psycopg2-binary
EXPOSE 4000
WORKDIR /app
COPY ./flaskprj .
USER userflask
CMD ["python", "site.py"]
Рядом с этим файлом создаём папку flaskprj
Внутри папки создаём файл site.py
from flask import Flask
import os, psycopg2
app = Flask(__name__)
@app.route("/")
def index():
conn = psycopg2.connect(dbname='mydata', user='postgres',password='1234',host='dbps')
cursor = conn.cursor()
cursor.execute('SELECT * FROM women')
records = cursor.fetchall()
cursor.close()
conn.close()
return f'{"<p>".join(map(str,records))}'
if __name__ == "__main__":
port = int(os.environ.get("PORT", 4000))
app.run(debug=True,host='0.0.0.0',port=port)
Возвращаемся к файлу Dockerfile и в терминале запускаем
docker build . -t flask-back
docker run --rm --network dbnet --link psgr:dbps --name web -dp 8000:4000 -v ${PWD}/flaskprj:/app flask-back
https://youtu.be/fdnP8i08vOk
#9 docker compose up
Файл Dokerfile перемещаем внутрь папки flaskprj
И создаём новый файл compose.yml
services:
postgres:
image: postgres:17-alpine
container_name: psgr
environment:
- POSTGRES_USER=postgres
- POSTGRES_PASSWORD=1234
- POSTGRES_DB=mydata
volumes:
- postgres-data:/var/lib/postgresql/data
networks:
- dbnet
adminer:
image: adminer
container_name: adminer
ports:
- "127.0.0.1:8080:8080"
links:
- "postgres:db"
networks:
- dbnet
depends_on:
- postgres
webflask:
build: ./flaskprj
image: flask-back
container_name: flsite
links:
- "postgres:dbps"
networks:
- dbnet
ports:
- "127.0.0.1:8000:4000"
volumes:
- ./flaskprj:/app
depends_on:
- postgres
networks:
dbnet:
driver: bridge
volumes:
postgres-data:
# docker run --rm --network dbnet --link psgr:dbps --name web -dp 8000:4000
# -v ${PWD}/flaskprj:/app flask-back