Crear un usuario de base de datos usando Docker Postgres
- Crear un nuevo proyecto
- Definir DDL para el usuario y la base de datos
- Definir un Dockerfile para la imagen
- Construir una imagen
- ejecutar un contenedor
- Conéctese al contenedor
- Iniciar sesión en PostgreSQL
- Crear una base de datos de usuarios sin un archivo de script
- Conclusión
Cuando desarrollamos aplicaciones, generalmente usamos sistemas de administración de bases de datos como PostgreSQL, MySQL, MongoDB y otros para registrar los datos de las aplicaciones.
Docker nos ayuda a ejecutar una instancia de estos sistemas de administración de bases de datos de aplicaciones. Esto ayuda a ahorrar tiempo y almacenamiento en la computadora porque no se necesita un DBMS en la computadora.
Cada base de datos creada a partir de estos DBMS tiene usuarios que tienen diferentes autorizaciones en la base de datos. En este tutorial, aprenderemos los diferentes enfoques para crear un usuario de base de datos utilizando Docker Postgres.
Crear un nuevo proyecto
Para este tutorial, usaremos WebStorm IDE, pero no dude en usar cualquier entorno de desarrollo. Abra WebStorm IDE y seleccione Archivo
> Nuevo
> Proyecto
para crear un nuevo proyecto.
Seleccione la opción Proyecto vacío
y en la ventana que se abre, cambie el nombre del proyecto de sin título
a initdb.d
o use el nombre que prefiera.
Definir DDL para el usuario y la base de datos
Para agregar una inicialización adicional a nuestra imagen personalizada usando una imagen base de PostgreSQL, debemos agregar *.sql
, *.sql.gz
o *.sh
en la carpeta /docker-entrypoint-initdb.d
.
Como queremos crear una consulta SQL, definiremos nuestra consulta utilizando el archivo con la extensión .sql
. Cree un archivo llamado db-config.sql
en la carpeta actual de nuestro proyecto y copie y pegue las siguientes instrucciones SQL en el archivo.
CREATE USER doe;
CREATE DATABASE employee_database;
GRANT ALL PRIVILEGES ON DATABASE employee_database TO doe;
El db-config.sql
se ejecutará después de que el punto de entrada llame a initdb
para crear el usuario y la base de datos Postgres
predeterminados.
Tenga en cuenta que los scripts en /docker-entrypoint-initdb.d
solo se ejecutan si el directorio de datos está vacío. Esto significa que durante el inicio, cualquier base de datos ejecutada antes de esta no cambiará.
Definir un Dockerfile para la imagen
Cree un archivo llamado Dockerfile
en la carpeta actual y copie y pegue las siguientes instrucciones en el archivo.
FROM postgres:15.1-alpine
COPY db-config.sql /docker-entrypoint-initdb.d/
FROM
: define la imagen base sobre la que crear una imagen personalizada utilizando las instrucciones posteriores. En este caso hemos utilizado alpine
, que nos ayuda a optimizar el almacenamiento al ser una versión ligera de PostgreSQL.
COPY
: copia archivos y carpetas del host al sistema de archivos de imágenes. En este caso, hemos copiado el archivo db-config.sql
en la carpeta /docker-entrypoint-initdb.d/
.
Construir una imagen
Abra una nueva ventana de terminal usando el atajo de teclado ALTF12 en su teclado y use el siguiente comando para construir una imagen con la etiqueta postgres-image
.
~/WebstormProjects/initdb.d$ docker build --tag postgres-image:latest .
Producción :
=> [1/2] FROM docker.io/library/postgres:15.1-alpine@sha256:cc663286e63810373bdfc91a5ed24b772447fb5282d 0.0s
=> CACHED [2/2] COPY db-config.sql /docker-entrypoint-initdb.d/ 0.0s
=> exporting to image 0.4s
=> => exporting layers 0.0s
=> => writing image sha256:fd33d80c880452dcb25de1d8f7d6415eeb874039bdab176cc3d3fe1c910ebcbc 0.1s
=> => naming to docker.io/library/postgres-image:latest
ejecutar un contenedor
Usando la misma ventana de terminal, use el siguiente comando para ejecutar un contenedor PostgreSQL con el nombre postgres-container
.
~/WebstormProjects/initdb.d$ docker run --name postgres-container -e POSTGRES_PASSWORD=postgres -d postgres-image
Producción :
3b8e0f85c2b4ef4b1aa28e2bad169ae796751331580af6fbba251a1c05aa4fca
Tenga en cuenta que hemos utilizado una variable de entorno llamada POSTGRES_PASSWORD
en el comando ejecutar
. Al ejecutar PostgreSQL, podemos pasar varias variables de entorno para proporcionar detalles de superusuario, incluida la base de datos y el nombre de usuario.
La variable de entorno POSTGRES_PASSWORD
es una variable obligatoria
que proporciona la contraseña de superusuario. La contraseña predeterminada para PostgreSQL es postgres
.
Otras variables de entorno que se pueden pasar son las opcionales
, que incluyen POSTGRES_USER
, POSTGRES_DB
y POSTGRES_INITDB_ARGS
, entre otras.
Dado que estamos ejecutando el contenedor en modo separado, no podemos ver la ejecución del archivo db-config.sql
. Sin embargo, este archivo se ejecuta en segundo plano por el superusuario.
Conéctese al contenedor
Necesitamos conectarnos al contenedor usando un shell interactivo para que podamos iniciar sesión en PostgreSQL usando el nuevo usuario y la base de datos. Para lograr esto, use el siguiente comando para conectarse al contenedor.
~/WebstormProjects/initdb.d$ docker exec -it postgres-container bash
Producción :
bash-5.1#
Iniciar sesión en PostgreSQL
Una vez que tengamos acceso al shell de los contenedores, use el siguiente comando para iniciar sesión en la base de datos de empleados
como usuario doe
.
bash-5.1# psql -d employee_database -U doe
Producción :
psql (15.1)
Type "help" for help.
employee_database=>
Crear una base de datos de usuarios sin un archivo de script
En la sección anterior, aprendimos cómo crear un usuario de base de datos en Docker Postgres agregando un SQL que contiene el DDL a /docker-entrypoint-initdb.d/
.
Hay un enfoque más sencillo para hacer esto sin escribir ningún archivo de script. Este enfoque utiliza las variables de entorno mencionadas en la sección anterior para definir los detalles de un nuevo usuario.
Estas variables de entorno se agregan al Dockerfile
usando la instrucción ENV
y estarán disponibles para el contenedor. Para ver esto en acción, reemplace las instrucciones en el Dockerfile
con las instrucciones proporcionadas a continuación.
FROM postgres:15.1-alpine
ENV POSTGRES_USER=doe
ENV POSTGRES_DB=employee_database
Después de agregar las variables de entorno, repita todos los pasos cubiertos en las secciones anteriores, desde crear una imagen, ejecutar un contenedor, conectarse al contenedor e iniciar sesión en PostgreSQL.
Utilice el mismo comando para todos los pasos. Sin embargo, asegúrese de detener y retirar el contenedor existente.
También puede optar por crear una nueva imagen y contenedor.
Conclusión
En este tutorial, hemos aprendido dos enfoques que podemos usar para crear un usuario de base de datos con Docker Postgres. El primer enfoque creó un usuario agregando un script SQL a /docker-entrypoint-initdb.d/
, y este archivo se ejecutó durante la inicialización de initdb
.
En el segundo enfoque, hemos definido los detalles del usuario en el Dockerfile
aprovechando las variables de entorno de Docker Postgres.
David is a back end developer with a major in computer science. He loves to solve problems using technology, learning new things, and making new friends. David is currently a technical writer who enjoys making hard concepts easier for other developers to understand and his work has been published on multiple sites.
LinkedIn GitHub