Configuraci贸n de Postgres en Docker

4/27
Recursos

Aportes 33

Preguntas 18

Ordenar por:

驴Quieres ver m谩s aportes, preguntas y respuestas de la comunidad? Crea una cuenta o inicia sesi贸n.

Primera vez que uso docker! No sabia que era tan genial jajaa

Hola, mundo 馃憢
.
鈩癸笍Repositorio: https://github.com/roremdev/thingst
鈩癸笍Commit: https://github.com/roremdev/thingst/commit/88bee9878636286250d3a2b9426474cd8b17d0f2
.
鈾伙笍Doy unas recomendaciones:

  1. En cuanto a la version, viene siendo opcional desde la verison 1.27.0 de Docker.
  2. En cuanto a la image, puedes omitir latest o en su defecto seleccionar la versi贸n que buscas:
    image: resource_name:version
  3. Es recomendable leer desde las variables de entorno los datos sensibles, estando en dev o no. Opci贸n --env-file
  4. En cuanto al ports, cuando es el mismo (contenedor y host), basta con un solo n煤mero y sin ""
  5. En cuanto al volumes, no es necesario ~ ya que si quieres indexar desde un path se considera mejor ./, detalles del server o imagen base de tu postgres (algunos son alphine).

鉁ˋl fina puede quedar de la siguiente forma:

docker-compose.yml

services:
    wordpress:
        image: postgres
        restart: always
        ports:
            - 5432
        environment:
            POSTGRES_DB: ${DB_NAME}
            POSTGRES_USER: ${DB_USER}
            POSTGRES_PASSWORD: ${DB_PASSWORD}
        volumes:
            - ./db:/var/lib/postgresql/data

.

.env

# docker
DB_NAME=thingst
DB_USER=tester
DB_PASSWORD=14db7d47-f442-4a90-b633-2a537c8b5c13

馃敟Comando de ejecuci贸n

docker compose up
docker compose --env-file [dir_name] up

Yo uso WSL 2 y tuve algunos problemas con esta clase. Por ejemplo, State siempre aparec铆a como Exit 1 y no Up. Si alguien est谩 pasando por la misma situaci贸n, puede probar el siguiente c贸digo:

version: "3.3"

services:
  db:
    image: postgres:latest
    environment:
      POSTGRES_DB: my_store
      POSTGRES_USER: admin
      POSTGRES_PASSWORD: admin123
    ports:
      - "5432:5432"
    volumes:
      - "~/postgres_data:/var/lib/postgresql/data"

Si alguien tiene una sugerencia o una mejor soluci贸n, no dude en compartirla.

una extensi贸n recomendada en visual es Docker

comando

 docker-compose up -d postgres

 docker-compose ps

docker-compose down

Les dejo el codigo de docker-compose.yml. La identaci贸n me cost贸 bastante. Al parecer solo funciona con espacios y no con tabs.

version: '3.3'

services:
  postgres:
    image: postgres:13
    environment:
      - POSTGRES_DB=my_store
      - POSTGRES_USER=nico
      - POSTGRES_PASSWORD=admin123
    ports:
      - 5432:5432

Este es mi archivo de docker que agrega un gestow web para administrar de manera visual la base de datos

version: '3.3'

services:
  db:
    container_name: db
    image: postgres:13
    restart: always
    environment:
      POSTGRES_DB: my_store
      POSTGRES_USER: admin123
      POSTGRES_PASSWORD: admin123
    ports:
      - 5432:5432
    volumes:
      - dbdata:/var/lib/postgresql/data
    networks:
      - app-network

  dbmanager:
    image: bitnami/phppgadmin:7
    restart: always
    environment:
      DATABASE_HOST: db
      DATABASE_PORT_NUMBER: 5432
      DATABASE_SSL_MODE: allow
      ALLOW_EMPTY_PASSWORD: yes
    ports:
      - 8081:8080
    depends_on:
      - db
    networks:
      - app-network

#Docker Networks
networks:
  app-network:
    driver: bridge
#Volumes
volumes:
  dbdata:
    driver: local

Para los que tienen el siguiente error usando WSL2:

chmod: changing permissions of 鈥/var/lib/postgresql/data鈥: Permission denied

Solamente coloquen la ruta sin el 鈥.鈥 al inicio, as铆:

- /postgres_data:/var/lib/postgresql/data

Ah que bien que ya puedo empezar a usar Docker despues de 3 dias de tener problemas en las configuraciones

a mi me paso un error
Traceback (most recent call last):
File 鈥渦rllib3/connectionpool.py鈥, line 677, in urlopen
File 鈥渦rllib3/connectionpool.py鈥, line 392, in _make_request鈥

por si a alguien le sirve lo solucione usando
sudo service docker start
sudo docker-compose up -d postgres
sudo docker ps

para detener el servicio
sudo service docker stop

Para quienes tengan el siguiente error:

Traceback (most recent call last):
File 鈥渦rllib3/connectionpool.py鈥, line 677, in urlopen
File 鈥渦rllib3/connectionpool.py鈥, line 392, in _make_request
File 鈥渉ttp/client.py鈥, line 1277, in request
File 鈥渉ttp/client.py鈥, line 1323, in _send_request
File 鈥渉ttp/client.py鈥, line 1272, in endheaders
File 鈥渉ttp/client.py鈥, line 1032, in _send_output
File 鈥渉ttp/client.py鈥, line 972, in send
File 鈥渄ocker/transport/unixconn.py鈥, line 43, in connect
FileNotFoundError: [Errno 2] No such file or directory

Lo que ocurre es que no est谩 corriendo docker, entonces primero verificamos si docker est谩 corriendo

sudo service docker status

si aparece Docker is not runing
lo echamos a correr con

sudo service docker start

y de alli corremos el comando que nos indica Nico

docker-compose up -d postgres

Ejecuten todo lo que dice el profe desde la terminal y no desde la terminal de vscode porque este ultimo no jala bien con docker

Configurando Postgres en Docker

version: '3.3'

services:
  postgres:
    image: postgres:13
    environment:
      - POSTGRES_DB=my_store
      - POSTGRES_USER=alejo
      - POSTGRES_PASSWORD=1234
    ports:
      - 5432:5432
    volumes:
      - ./postgres_data:/var/lib/postgresql/data

Agregar a gitignore la carpeta postgres_data

Comando Descripcion
docker-compose up -d Corre postgres
docker-compose ps Inspecciona si corre postgres
docker-compose down Dejar de correr postgres

Qu茅 bueno que comencemos a usar Docker en los cursos (no solo de Docker). As铆 como git, debe convertirse en un 鈥渕ust鈥.
馃憦馃徑馃憦馃徑馃憦馃徑馃憦馃徑馃憦馃徑

Tuve un problema para levantar la imagen de postgres, debido a que ten铆a otro servicios en mi m谩quina andando en ese puerto. Luego de identificar el pid y 鈥渕atarlo鈥 me segu铆a ocurriendo lo mismo, ya se que se volv铆a a levantar el servicio en el mismo puerto (seguro es mi versi贸n de postgres local).
Finalmente, para no seguir perdiendo tiempo, simplemente edit茅 los puertos en mi docker-compose.yml (5433:5432) y no tuve m谩s el error.
Espero le sirva a alguien m谩s 鉁岎煆

Si alguno tuvo problemas agregando variables de entorno, esta es la soluci贸n

Remover los - de cada variable y escribir entre ${nombre de la variable}:

POSTGRES_DB: ${DB_NAME}
       POSTGRES_USER: ${DB_USER}
       POSTGRES_PASSWORD: ${DB_PASSWORD}
services: 
  postgres:
    image: postgres
    environment:
       POSTGRES_DB: ${DB_NAME}
       POSTGRES_USER: ${DB_USER}
       POSTGRES_PASSWORD: ${DB_PASSWORD}
    ports:
      - 5432
    volumes:
      - ./postgres_data:/var/lib/postgresql/data
    

Ya quedo el docker compose

creo que me voy por la opci贸n de usar el modulo pg ya que tengo postgres y pgadmin instalados localmente.

npm i pg
const { Client } = require('pg')

Configuring Postgres with Docker

  • Write docker-compose.yml
  • docker-compose up -d to start docker services by using 鈥渄ocker-compose.yml鈥
  • docker-compose ps to verify the docker process is running
  • docker-compose down to stop all docker services

Docker components are stateless
This means that each time a container is shut down all data inside of it is going away; to avoid this we can use a Docker feature called 鈥渧olumes鈥

Ejecuto el comando para iniciar el contenedor pero no lo inicia. Si alguien me puede ayudar, gracias 馃槂

lord jesus, docker is crack 鈽

Para los que tengan el siguiente error, dejo mi aporte para que lo puedan trabajar
Traceback (most recent call last):
File 鈥渦rllib3/connectionpool.py鈥, line 677, in urlopen
File 鈥渦rllib3/connectionpool.py鈥, line 392, in _make_request
File 鈥渉ttp/client.py鈥, line 1277, in request
File 鈥渉ttp/client.py鈥, line 1323, in _send_request
File 鈥渉ttp/client.py鈥, line 1272, in endheaders
File 鈥渉ttp/client.py鈥, line 1032, in _send_output
File 鈥渉ttp/client.py鈥, line 972, in send
File 鈥渄ocker/transport/unixconn.py鈥, line 43, in connect
ConnectionRefusedError: [Errno 111] Connection refused

During handling of the above exception, another exception occurred:

Si recien estas haciendo la instalacion, tienes que inicializar el docker para eso verifica si esta corriendo el servicio de docker con lo siguiente

<code> 
$ sudo service docker status

si tienes un mensaje de Docker is not running, ejecuta lo siguiente

<code> 
$ sudo service docker start

y luego ya corres el comando el indica nico de

<code> 
docker-compose up -d postgres

Yo soy usuario de WSL2 y tuve bastantes retos a la hora de realizar esta clase. Consegui hacer funcionar todo, cualquier duda escriban aqui. Les dejo mi docker-compose.yml:

version: "3.8"

services:
  postgres:
    image: postgres:latest
    restart: always
    environment:
      POSTGRES_DB: my_store
      POSTGRES_USER: maxdn
      POSTGRES_PASSWORD: admin123
    ports:
      - 5432:5432
    volumes:
      - /postgres_data:/var/lib/postgresql/data

Apuntes de la clase:
Con Docker podemos correr una base de datos sin tener problemas o complicaciones de instalaci贸n.
PASO 1

  • Creamos un archivo docker-compose.yml
  • En el archivo declaramos el servicio a usar
  • Le damosla imagen, sera un contenedor que corre postgres
  • Configuramos puertos y volumen
version: '3.3' // version de yml donde sera tratado el proyecto - opcional

services: 
  postgres:
    image: postgres:13
    environment:
      - POSTGRES_DB=my_store
      - POSTGRES_USER=max
      - POSTGRES_PASSWORD=admin123
    ports:
      - 5432:5432

PASO 2:

  • Lanzamos postgres dentro del contenedor
    • docker-compose up -d postgres
  • Inspeccionamos que esta corriendo
    • docker-compose ps
  • Para dejar de correr postegres
    • docker-compose down

ya temenos un contendor con postgres corriendo

PASO 3:

  • los contenedores no tienen estado.
  • La base de datos necesita un estado.
  • Cuando bajemos el contenedor todo dentro de el se va a borrar, contenedor no tiene estado.
  • Necesitamos crear volumen donde cada vez que contenedor levanta, se conecte a este y guarda la informaci贸n que quiera persistir.
  • Para tener persistencia en una carpeta del proyecto escribimos
version: '3.3'

services:
  postgres:
    image: postgres:13
    environment:
      - POSTGRES_DB=my_store
      - POSTGRES_USER=max
      - POSTGRES_PASSWORD=admin123
    ports:
      - 5432:5432
    volumes:
      - ./postgres_data:/var/lib/postgresql/data
  • Creamos la carpera postgres_data
  • Agregamos esa carpeta a .gitignore

Para los que tengan este error:

Cannot open self /usr/bin/docker-compose or archive /usr/bin/docker-compose.pkg

Se soluciona con este comando:

sudo curl -v -L 鈥https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)鈥 -o /usr/local/bin/docker-compose

M谩s sobre docker-compose 馃悑馃悑馃悑

Si es la primera vez que usas Docker y quieres entender mejor su funcionamiento, te recomendar铆a el curso de Docker aqu铆 en Platzi. Est谩 muy completo y te ayudar谩 a llenar lagunas y preguntas que seguramente te est谩s haciendo. La virtualizaci贸n es una tradici贸n en la computaci贸n y los contenedores (con Docker a la vanguardia) son una forma muy eficiente de echar a andar una app.
.
Pero, a manera de clickbait y resumen, docker-compose es una herramienta que nos permite describir de forma declarativa la arquitectura de nuestra app en el contenedor. Esto simplifica la tarea de crear el contenedor: determinar im谩genes, versiones, puertos de comunicaci贸n, etc.
.
Porque no hay nada como la documentaci贸n, aqu铆 te dejo algunos comandos que te ayudar谩n a sacar el mayo provecho de docker-compose.

Dos cosas.

  1. Fijense bien al indentar el archivo yml tal cual lo hace Nicolas.
  2. El comando que corre nicolas en el minuto 3:59 a mi me mando error hasta que lo ejecute co sudo, es dicir sudo docker-compose up -d postgres.

Comandos en Docker:

docker-compose up -d postgres 鈫 Levantar el contenedor docker.

docker-compose ps 鈫 Ver contenedores corriendo.

docker-compose down 鈫 Dejar de correr el contenedor docker.


Archivo docker-compose.yml:

  • Versi贸n (version): La versi贸n del archivo yml en el cual ser谩 tratado el proceso.
  • Servicios (services): Los servicios que queremos que corra, donde nos podemos conectar.
  • Imagen (image): La imagen que queremos correr, en este caso, postgres versi贸n 13.
  • Las variables de entorno (environment) son la configuraci贸n inicial que el contenedor va a recibir. En este caso, los datos de la BD.
  • Puerto (ports): En qu茅 puerto va a correr, en este caso, 5432.
  • Volumen (volume): Los contenedores no tienen estado (no tienen persistencia), por lo que todo lo que se haga se puede borrar al dejar de correr el contenedor. Para que esto no suceda, se necesita crear un volumen, eso ser铆a decirle 鈥渃ontenedor, cada vez que levantes con茅ctate a este volumen para que ah铆 vayas guardando toda la informaci贸n que quiero persistir鈥.
    Se espec铆fica que la persistencia de datos se guardar谩 en la carpeta postgres_data e internamente en el contenedor que se est谩 corriendo, los datos son guardados en /var/lib/postgresql/data.
version: '3.3'

services:
  postgres:
    image: postgres:13
    environment:
      - POSTGRES_DB=my_store
      - POSTGRES_USER=john
      - POSTGRES_PASSWORD=admin123
    ports:
      - 5432:5432
    volumes:
      - ./postgres_data:/var/lib/postgresql/data

Aprovechando de que se hizo un get con sequelize me inspir茅 en hacer los otros como delete, get(con id), put, patch, post. No estaba tan dif铆cil, porque est谩 f谩cil de entender la documentaci贸n.

El c贸digo est谩 en github, por si le quieren dar un ojo, en la rama experiment. Por el momento solo est谩 implementado en la tabla users.

Para quienes tengan un error del tipo:
ERROR: Version in 鈥.\docker-compose.yml鈥 is invalid - it should be a string.
es un error de tipeo en el .yml, asegurense de escribir tal cual lo hace Nicolas.

Tuve bastantes problemas con este error

error during connect: In the default daemon configuration on Windows, the docker client mu
st be run with elevated privileges to connect.: Get "https://%2F%2F.%2Fpipe%2Fdocker_engine
/v1.24/containers/json?all=1&filters=%7B%22label%22%3A%7B%22com.docker.compose.project%3Dc
urso-nodejs-postgres%22%3Atrue%7D%7D&limit=0": open //./pipe/docker_engine: The system can
not find the file specified.

Tambien tenia un error que no me dejaba inicializar bien docker al no tener WSL instalado. lo instale directamente desde microsoft y me soluciono el problema

Y para solucionar el primer error corr铆 la siguiente linea de c贸digo

"C:\Program Files\Docker\Docker\DockerCli.exe" -SwitchDaemon

En una terminal ejecutada como administrador.

Tuve problemas para mantener mi instancia docker en estado up, utilic茅 el siguiente c贸digo para poder correr:

version: 鈥3.3鈥

services:
db:
image: postgres:latest
environment:
POSTGRESS_DB: quotes
POSTGRESS_USER: cmejia
POSTGRESS_PASSWORD: admin123
POSTGRES_HOST_AUTH_METHOD: trust
ports:
- "5432:5432"
volumes:
- 鈥渵/postgres_data:/var/lib/postgresql/data鈥

La instrucci贸n que me marcaba error era la autenticaci贸n, para ello es la instrucci贸n trust, permite conectar 鈥渟in necesidad de auntenticar usuario鈥

Esta fue mi soluci贸n, por favor si alguien conoce mas a detalle el problema, comparta 馃槈