Docker + PostgreSQL
¿Qué es Docker?
Docker es una plataforma de código abierto diseñada para facilitar la creación, implementación y ejecución de aplicaciones en contenedores. Piensa en docker como una maquina virtual donde todo lo que sucede dentro del contenedor esta completamente aislado de lo que sucede fuera del contenedor. Pero para entender que es docker entendamos primero que son las maquinas virtuales VM
Ahora, quizás esto te confunde un poco. Déjame explicarte qué son los contenedores y las máquinas virtuales.
Empecemos por las máquinas virtuales, o VM. Una máquina virtual es un entorno simulado que permite ejecutar un sistema operativo completo en una computadora. Piensa en ella como una computadora dentro de otra computadora.
Entonces, ¿cada VM necesita su propio sistema operativo?
Exactamente. Cada VM tiene su propio sistema operativo, lo que significa que consume más recursos, como memoria y espacio en disco. Esto puede hacer que las VMs sean pesadas y lentas.
Y, ¿qué hay de los contenedores?
Los contenedores, como los que gestiona Docker, son más ligeros. En lugar de incluir un sistema operativo completo, los contenedores comparten el núcleo del sistema operativo del host. Esto los hace más rápidos y eficientes en términos de recursos.
¿Eso significa que los contenedores son más aislados que las VMs?
No exactamente. Los contenedores están aislados unos de otros y del sistema host, pero comparten el mismo núcleo
. Esto los hace más eficientes, pero menos aislados en comparación con las VMs, que son completamente independientes.
El núcleo del sistema operativo, o "kernel", es la parte central que gestiona los recursos del hardware y permite la comunicación entre el hardware y el software en un sistema operativo. Se encarga de tareas fundamentales como la gestión de la memoria, la programación de procesos y el control de dispositivos. El kernel actúa como intermediario, asegurando que las aplicaciones y los servicios puedan interactuar con el hardware de manera eficiente y segura.
Entonces, ¿Docker se encarga de gestionar esos contenedores?
Así es. Docker proporciona herramientas para crear, implementar y ejecutar aplicaciones en contenedores, facilitando el proceso de desarrollo y asegurando que las aplicaciones funcionen de manera consistente en diferentes entornos.
Un contenedor es una unidad de software ligera que incluye todo lo necesario para ejecutar una aplicación de manera independiente, como el código, las bibliotecas, las herramientas y las configuraciones.
En términos simples, Docker permite empaquetar una aplicación junto con sus dependencias en un contenedor virtual que puede ser ejecutado en cualquier sistema operativo compatible con Docker. Esto ayuda a asegurar que la aplicación se comporte de la misma manera independientemente del entorno en el que se ejecute, ya sea en un entorno de desarrollo, pruebas o producción.
Además de la portabilidad, Docker ofrece ventajas en términos de eficiencia y rapidez en comparación con las máquinas virtuales tradicionales, ya que los contenedores comparten recursos del sistema operativo subyacente y pueden iniciarse rápidamente.
Docker simplifica el proceso de desarrollo, distribución y despliegue de aplicaciones al utilizar contenedores, proporcionando consistencia y facilitando la gestión de las aplicaciones en diferentes entornos informáticos.
Veamos un ejemplo de cómo funcionan los contenedores en la práctica
Imagina que estás desarrollando una aplicación web que utiliza un servidor de base de datos y un servidor web. Con los contenedores, puedes crear un contenedor para cada uno de esos componentes.
Entonces, ¿cada contenedor tendría su propio software, como el servidor web y la base de datos?
Exactamente. Tendrías un contenedor que ejecuta el servidor web, como Nginx, y otro que ejecuta la base de datos, como MySQL. Cada contenedor incluye solo lo que necesita para funcionar, lo que los hace ligeros y rápidos.
¿Y cómo se comunican esos contenedores entre sí?
Docker proporciona redes internas que permiten que los contenedores se comuniquen entre sí. Por ejemplo, el contenedor del servidor web puede enviar solicitudes al contenedor de la base de datos a través de esta red, como si estuvieran en la misma máquina.
¿Y qué pasa si quiero actualizar uno de los contenedores?
Una de las ventajas de los contenedores es que puedes actualizar uno sin afectar a los demás. Si quieres actualizar el servidor web, simplemente detienes el contenedor del servidor web, realizas la actualización y luego lo reinicias. Los demás contenedores siguen funcionando sin problemas.
¡Eso suena muy eficiente! ¿Y qué hay de la portabilidad?
Buena pregunta. Los contenedores son muy portables. Puedes crear un contenedor en tu máquina local y, gracias a Docker, puedes llevarlo a cualquier otro entorno que tenga Docker instalado, como un servidor en la nube. La aplicación funcionará de la misma manera, sin importar dónde la ejecutes.
Ahora, veamos un ejemplo: Desde la terminal de Machine-0 vamos ejecutar el siguiente comando:
docker run hello-world
En este ejemplo el comando docker run hello-world
es utilizado para ejecutar un contenedor Docker que corre la imagen hello-world
. Este Docker te permite verificar rápidamente si Docker está instalado y configurado correctamente en tu sistema. Es un primer paso común cuando se comienza a trabajar con Docker para asegurarse de que todo funcione según lo esperado antes de trabajar con imágenes y contenedores más complejos.
Aquí te explico paso a paso qué sucede cuando ejecutas este comando:
-
Docker Daemon:
- Primero, el comando
docker
verifica que el serviciodockerd
(Docker Daemon) esté corriendo. Este daemon es responsable de administrar y ejecutar contenedores Docker en tu sistema.
- Primero, el comando
-
Descarga de la Imagen:
- Si la imagen
hello-world
no está presente localmente en tu sistema, Docker procederá a descargarla desde Docker Hub (el registro de imágenes Docker públicas) u otro registro de imágenes configurado.
- Si la imagen
-
Creación y Ejecución del Contenedor:
- Una vez que Docker tiene la imagen
hello-world
disponible localmente (o después de descargarla), procede a crear un contenedor basado en esta imagen. - El contenedor creado a partir de
hello-world
es extremadamente simple y está diseñado únicamente para mostrar un mensaje de prueba para verificar que Docker está funcionando correctamente.
- Una vez que Docker tiene la imagen
-
Mensaje de Salida:
- El contenedor
hello-world
imprime un mensaje en la salida estándar (stdout) enb terminal. Este mensaje generalmente incluye información básica sobre Docker y confirma que el proceso de ejecución de contenedores funciona correctamente en tu entorno.
- El contenedor
Principios de los contenedores
Ahora, revisemos cómo funciona un contenedor. Para aprender, vamos a trabajar con un contenedor configurado con Ubuntu y para lograr esto primero ejecutemos el siguiente comando docker:
docker images
El comando docker images
se utiliza para listar todas las imágenes Docker que están almacenadas localmente en tu sistema. Cuando ejecutas este comando, verás una tabla que muestra información detallada sobre cada imagen. Como puedes observar en la imagen solo tenemos una imagen la cual se descargo en el ejemplo anterior docker run hello-world
Ahora, vamos a revisar cada columna del resultado anterior:
-
REPOSITORY: Este campo muestra el nombre del repositorio de la imagen Docker. En tu caso, la única imagen listada tiene el repositorio
hello-world
. -
TAG: El tag (etiqueta) de la imagen Docker. Esta etiqueta se utiliza para identificar versiones específicas de una imagen dentro del mismo repositorio. En tu ejemplo, la imagen
hello-world
tiene el taglatest
, lo que indica que es la última versión disponible. -
IMAGE ID: Es el ID único asignado a cada imagen Docker. Este ID es único para cada versión de la imagen y se utiliza internamente por Docker para identificar y gestionar la imagen.
-
CREATED: Esta columna indica cuándo se creó la imagen. En tu caso, la imagen
hello-world
fue creada hace 13 meses desde la fecha actual. -
SIZE: El tamaño de la imagen en el almacenamiento local. En tu ejemplo, la imagen
hello-world
ocupa 13.3kB de espacio en disco.
Cuando ejecutas docker images
, obtienes una lista de todas las imágenes Docker almacenadas localmente en tu sistema, junto con detalles como el repositorio, la etiqueta, el ID de la imagen, la fecha de creación y el tamaño. Esto te permite gestionar y administrar las imágenes que utilizas en tus contenedores Docker.
Dentro de un contenedor
Ahora procedamos a ejecutar el siguiente comando de Docker
docker run -it ubuntu bash
El comando docker run -it ubuntu bash
se utiliza para ejecutar un contenedor Docker interactivo basado en la imagen de Ubuntu. Aquí está desglosado el significado y la función de cada parte del comando:
-
docker run: Este es el comando principal de Docker que se utiliza para crear y ejecutar un contenedor a partir de una imagen.
-
-it: Estos son dos parámetros combinados que se pasan al comando
docker run
:-
-i: Permite mantener abierta la entrada estándar del contenedor. Esto significa que puedes interactuar con el proceso que se está ejecutando en el contenedor (en este caso, el shell bash de Ubuntu).
-
-t: Asocia un pseudo-TTY (terminal) al contenedor. Esto facilita la interacción con el shell de Ubuntu y te permite ver y manejar las salidas del comando bash de manera adecuada.
-
-
ubuntu: Es el nombre de la imagen que se utilizará para crear el contenedor. En este caso,
ubuntu
es el nombre de la imagen oficial de Docker que contiene el sistema operativo Ubuntu Linux. -
bash: Es el comando que se ejecutará dentro del contenedor una vez que se haya iniciado. En este caso,
bash
es el intérprete de comandos (shell) que se abrirá dentro del contenedor Ubuntu, proporcionando una interfaz interactiva de línea de comandos.
Funcionamiento del comando:
Cuando ejecutas docker run -it ubuntu bash
:
-
Docker verifica si la imagen
ubuntu
está presente en tu sistema local. Si no lo está, la descarga desde Docker Hub (el registro de imágenes de Docker) antes de crear el contenedor. -
Una vez que la imagen está lista, Docker crea un nuevo contenedor basado en esa imagen.
-
El parámetro
-it
asegura que el contenedor se ejecute en modo interactivo, permitiendo la interacción directa con el shell bash de Ubuntu. -
El comando
bash
se ejecuta dentro del contenedor recién creado, abriendo un shell interactivo donde puedes introducir comandos de Linux directamente.
Este comando es útil para explorar y trabajar dentro de un entorno Ubuntu aislado, sin necesidad de instalar Ubuntu directamente en tu máquina local, aprovechando la tecnología de contenedores Docker para la virtualización ligera y el aislamiento de recursos.
Ejercicios
Una vez que tienes el contenedor de Ubuntu ejecutándose de manera interactiva con el shell bash, puedes realizar una variedad de tareas típicas que harías en un sistema Ubuntu normal. Aquí tienes algunos ejemplos de lo que puedes hacer:
- Instalar software adicional: Utiliza el gestor de paquetes
apt-get
para instalar herramientas y programas adicionales que necesites. Por ejemplo:apt-get update # Actualiza la lista de paquetes disponibles
apt-get install nano python3 # Instala un paquete específico
Presiona CTRL+D cuando te solicite Geographic area
- Explorar configuraciones de sistema: Revisa configuraciones del sistema, archivos de configuración y registros de eventos.
cat /etc/hostname # Muestra el nombre del host del sistema
tail -f /var/log/alternatives.log - Podemos ejecutar Python Dentro de un contenedor Docker que esté ejecutando Ubuntu, puedes ejecutar scripts de Python y utilizar el intérprete interactivo de Python para realizar diversas tareas. Aquí te explico cómo puedes hacerlo:
-
Verificar si Python está instalado: Primero, asegúrate de que Python esté instalado en tu contenedor. En la mayoría de las imágenes de Ubuntu, Python suele estar disponible de forma predeterminada. Puedes verificar la versión instalada utilizando el siguiente comando:
python3 --version
Si Python está instalado correctamente, este comando te mostrará la versión de Python que está disponible en tu contenedor.
-
Iniciar el intérprete interactivo de Python: También puedes iniciar el intérprete interactivo de Python directamente desde la línea de comandos dentro del contenedor. Esto es útil para realizar pruebas rápidas y ejecutar comandos de Python de manera interactiva:
python3
Una vez que ingreses este comando, verás un indicador de Python (
>>>
). Desde aquí, puedes ingresar comandos de Python directamente y obtener resultados instantáneos. -
Ejemplo de uso: Aquí tienes un ejemplo simple de cómo puedes utilizar Python dentro de tu contenedor de Ubuntu. Supongamos que tienes un archivo
hello.py
con el siguiente contenido:print("Hello, world!")
Esto imprimirá Hello, world!
en la salida estándar del contenedor.
- Explorar y modificar archivos: Navega por el sistema de archivos y edita archivos con editores de texto como
nano
ovim
. Antes de crear validemos con el comandols
el contenido de la ruta donde nos encontramos:
ls
Este comando arrojará el contenido de sistema de archivos Linux
bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
Ahora ejecutemos el siguiente comando:
nano demo.py # Abre un archivo para edición con el editor nano
Copia y pega el siguiente contenido en demo.py
# hello.py print
print ("Hello, world!")
Salva el contenido demo.py
con la combinación de teclas CTRL + X
y luego presiona la tecla Y
Y ejecuta de nuevo el comando ls
bin boot demo.py dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
Acabas de crear demo.py
como lo puedes ver en la lista.
- Realizar pruebas y desarrollo: Utiliza el contenedor para probar scripts, desarrollar aplicaciones, compilar código, etc.
# Ejemplo de ejecución de un script Python
python3 demo.py
Esto ejecutará demo.py lo que imprimirá en la terminal Hello, world!
Para salir del modo interactivo de Python en un contenedor Ubuntu (o en cualquier otro sistema donde estés ejecutando Python desde la línea de comandos), puedes Presionar Ctrl + D al mismo tiempo. Esto también aplica para salir del contenedor.
-
Ahora procederemos a instalar
venv
en nuestro contenedor remoto ya que este no viene configurado convenv
. Más adelante veremos cómo configurar nuestro contenedor remoto para instalar previamente los programas que necesitaremos. Con esto evitaremos tener que instalar estos programas cada vez que reiniciamos el contenedor. Para lograr esto, ejecutaremos los siguientes comandos desde la terminal. Recuerda salir del modo interactivo de python presionando las teclasCtrl + D
(Control y D) al mismo tiempo:apt update
apt install python3-venv -
Ahora crearemos un entorno virtual utilizando
venv
:python3 -m venv venv
-
Activa el entorno virtual:
source venv/bin/activate
Recuerda que cualquier biblioteca adicional de Python que necesites utilizar deberá estar instalada dentro del contenedor. Puedes instalarlas usando pip
si no están disponibles de forma predeterminada:
pip install pandas
Entramos de nuevo en el modo interactivo en python:
python3
Ahora ingresamos los siguientes comandos:
import pandas as pd
import numpy as np
Como conclusión podemos decir que Python puede ser ejecutado sin problemas dentro de un contenedor Docker basado en Ubuntu, permitiéndote aprovechar todas las capacidades del lenguaje para tus necesidades de desarrollo, automatización, análisis de datos, entre otros usos.
Al detener y luego reiniciar el contenedor, podrás notar que ninguno de los pasos anteriores que realizaste persiste después del reinicio debido a su naturaleza inmutable.
Estos son solo algunos ejemplos de las muchas posibilidades que tienes al ejecutar un contenedor interactivo de Ubuntu. Puedes adaptar estas acciones según tus necesidades específicas, ya sea para desarrollo, pruebas, aprendizaje o cualquier otro propósito.
Con Docker, se facilita enormemente la construcción y despliegue de aplicaciones en contenedores. Esta tecnología permite encapsular todas las dependencias de una aplicación, incluidas bibliotecas, entornos de tiempo de ejecución y configuraciones específicas del sistema operativo, en un contenedor único y portátil.
Esto significa que podemos crear imágenes que contienen no solo aplicaciones en Python, sino también en otros lenguajes como Java, Node.js, Ruby, entre otros. Cada contenedor es una instancia aislada y ligera que se ejecuta sobre el mismo kernel de sistema operativo, lo que garantiza consistencia y reproducibilidad tanto en entornos de desarrollo como en producción.
Además, Docker ofrece herramientas para gestionar y orquestar múltiples contenedores, lo que simplifica la gestión de aplicaciones distribuidas y escalables en infraestructuras modernas de nube.
Probemos ahora con esta imagen de Python
docker run -it --entrypoint=bash python:3.12
Este comando docker run -it --entrypoint=bash python:3.12
se utiliza para ejecutar un contenedor Docker basado en la imagen python:3.12
y abrir un shell interactivo de bash dentro de ese contenedor.
Repasemos:
-
docker run
: Este comando se utiliza para crear y ejecutar un contenedor a partir de una imagen Docker. -
-it
: Estos dos flags (-i
y-t
) permiten interactuar de manera interactiva con el contenedor.-i
hace que la sesión sea interactiva (stdin abierto), y-t
asigna un pseudo TTY (terminal) para la interacción. -
--entrypoint=bash
: Este parámetro especifica que el punto de entrada al contenedor será el intérprete de comandos bash en lugar del comando predeterminado definido en la imagen Docker. En este caso, la imagen originalmente tiene configurado un punto de entrada específico (probablemente el intérprete de Python), pero estamos anulando eso y eligiendo ejecutar bash en su lugar. Esto nos permite tener acceso directo al shell de bash dentro del contenedor. -
python:3.12
: Especifica la imagen de Docker que se utilizará para crear el contenedor. En este ejemplo,python:3.12
es una imagen de Docker oficial que contiene un entorno de ejecución de Python versión 3.12 y sus dependencias preinstaladas.
Al ejecutar docker run -it --entrypoint=bash python:3.12
, se crea un contenedor basado en la imagen python:3.12
, y se accede directamente a un shell interactivo de bash dentro de ese contenedor, ignorando el punto de entrada predeterminado de la imagen. Esto es útil para realizar diagnósticos, pruebas interactivas o ejecutar comandos específicos dentro del entorno del contenedor Docker.
# Ejecutar un comando Python para verificar la versión
python --version
# Crear y ejecutar un script Python simple
echo 'print("Hola desde Docker")' > script.py
python3 script.py
Dockerfile
Un Dockerfile es un archivo de texto plano que contiene una serie de instrucciones utilizadas por Docker para construir de manera automatizada una imagen Docker. Estas imágenes sirven como base para la creación y ejecución de contenedores Docker. Además de esto, permite la persistencia de datos y programas que se deseen instalar.
Funciones principales de un Dockerfile:
-
Definición de la imagen base: En el Dockerfile, la primera línea suele especificar la imagen base desde la cual se construirá la nueva imagen. Por ejemplo:
FROM ubuntu:20.04
Esta instrucción indica que la nueva imagen se basará en la imagen oficial de Ubuntu con la versión 20.04.
-
Configuración del entorno: Las instrucciones siguientes pueden incluir la instalación de paquetes, la configuración de variables de entorno, la copia de archivos desde el sistema de archivos del host al contenedor, entre otras configuraciones.
RUN apt-get update \
&& apt-get install -y python3 \
&& rm -rf /var/lib/apt/lists/*Aquí,
RUN
ejecuta comandos en el contenedor durante el proceso de construcción. -
Definición de comandos de ejecución: Se pueden definir comandos que se ejecutarán automáticamente cuando se inicie un contenedor basado en la imagen.
CMD ["python3", "app.py"]
Esta línea especifica que el contenedor debe ejecutar el script
app.py
utilizando Python 3 cuando se inicie.
Mi primera App
Crear un Dockerfile para ejecutar una aplicación Python sencilla es un proceso directo. A continuación te proporciono un ejemplo de Dockerfile que puedes usar para una aplicación básica de Python.
Supongamos que tienes la siguiente estructura de proyecto:
my_app/
│
├── app.py
├── requirements.txt
└── Dockerfile
app.py
es tu aplicación Python.requirements.txt
contiene las dependencias de tu proyecto.Dockerfile
es el archivo de configuración para Docker.
Antes de proseguir vamos a crear una carpeta llamada repos en ubicada en el directorio actual /home/z2h
con el siguiente comando:
mkdir repos # creamos la carpeta con el comando `mkdir`
cd repos # Navegamos dentro de la carpeta repos con el comando `cd`
mkdir my_app
cd my_app
Ahora dentro del la carpeta my_app
vamos a crear estos tres archivos app.py
requirements.txt
Dockerfile
. Cada uno de estos tres archivos utiliza nano
para crearlos.
app.py
# app.py
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello():
return "Hello, Docker!"
if __name__ == '__main__':
app.run(host='0.0.0.0', port=5000)
requirements.txt
flask
Dockerfile
# Utiliza una imagen base oficial de Python
FROM python:3.9-slim
# Establece el directorio de trabajo en /app
WORKDIR /app
# Copia el archivo requirements.txt en el directorio de trabajo
COPY requirements.txt .
# Instala las dependencias especificadas en requirements.txt
RUN pip install --no-cache-dir -r requirements.txt
# Copia todo el contenido del directorio actual en el directorio de trabajo de la imagen
COPY . .
# Expone el puerto en el que correrá la aplicación
EXPOSE 5000
# Define el comando por defecto para ejecutar la aplicación
CMD ["python", "app.py"]
Pasos para construir y ejecutar la imagen Docker
-
Navega al directorio que contiene tu Dockerfile.
cd my_app
-
Construye la imagen Docker.
docker build -t my-python-app .
-
Ejecuta un contenedor basado en la imagen creada.
docker run -p 5000:5000 my-python-app
Para poder acceder a la aplicación desde tu localhost:5000 primero debemos hacer un reenvío de puertos. Para lograr esto usaremos Visual Studio Code
ya que nos permite hacer un reenvío de puertos desde la VM a nuestro host local de manera sencilla
Aquí tienes una explicación más detallada sobre cómo configurar un reenvío de puertos desde una máquina virtual (VM) hasta tu host local utilizando Visual Studio Code:
-
Instala Visual Studio Code y Extensiones Necesarias:
- Asegúrate de tener instalado Visual Studio Code en tu máquina local.
- Abre Visual Studio Code y ve a la pestaña de Extensiones (Extensions) en el menú lateral izquierdo.
- Busca e instala la extensión "Remote - SSH" si no la tienes instalada. Esta extensión te permitirá conectar y trabajar en la VM desde Visual Studio Code de manera remota.
-
Conexión SSH a la Máquina Virtual (VM):
- Necesitarás tener configurada una conexión SSH a tu máquina virtual desde Visual Studio Code. Para hacer esto:
- Abre la paleta de comandos en Visual Studio Code (Ctrl/Cmd + Shift + P).
- Escribe y selecciona "Remote-SSH: Connect to Host...".
- Introduce la dirección IP de la VM y las credenciales necesarias (usuario y contraseña) cuando se te soliciten.
- Necesitarás tener configurada una conexión SSH a tu máquina virtual desde Visual Studio Code. Para hacer esto:
-
Reenvío de Puertos:
- Una vez conectado a la VM a través de SSH en Visual Studio Code, sigue estos pasos para configurar el reenvío de puertos:
- Abre la paleta de comandos nuevamente (Ctrl/Cmd + Shift + P).
- Escribe y selecciona "Remote-SSH: Open Configuration File..." para abrir el archivo de configuración SSH de la conexión actual.
- Añade una configuración de reenvío de puertos en la sección correspondiente del archivo de configuración. Por ejemplo:
HostName tu_direccion_ip_de_vm
User tu_usuario
LocalForward 5000 localhost:5000 - Esto configura un reenvío de puertos desde el puerto 5000 de tu máquina local hacia el puerto 5000 de la máquina virtual.
- Una vez conectado a la VM a través de SSH en Visual Studio Code, sigue estos pasos para configurar el reenvío de puertos:
-
Ejecutar la Aplicación en la VM:
- Asegúrate de que tu aplicación esté ejecutándose en la máquina virtual en el puerto 5000.
- Desde Visual Studio Code, puedes abrir una terminal remota SSH (Ctrl/Cmd + Shift + `) y ejecutar los comandos necesarios para iniciar tu aplicación en la VM.
-
Acceder a la Aplicación desde Localhost:
- Una vez configurado el reenvío de puertos, abre un navegador en tu máquina local y navega a
http://localhost:5000
. - Deberías poder ver y acceder a la aplicación que se está ejecutando en la máquina virtual a través de este puerto reenviado.
- Una vez configurado el reenvío de puertos, abre un navegador en tu máquina local y navega a
Siguiendo estos pasos, deberías poder configurar y utilizar Visual Studio Code para establecer un reenvío de puertos desde tu máquina virtual hasta tu host local de manera efectiva, facilitando así el acceso a la aplicación en desarrollo o en ejecución en la VM desde tu entorno local.
Ahora, tu aplicación Flask debería estar corriendo en http://localhost:5000
, y deberías ver "Hello, Docker!" cuando visites esta URL en tu navegador.
El objetivo de este Dockerfile es proporcionar un entorno aislado para tu aplicación Python, asegurando que las dependencias y la configuración sean consistentes en cualquier lugar donde se ejecute el contenedor.
PostgreSQL + Docker
PostgreSQL
PostgreSQL es un sistema de gestión de bases de datos relacional, muy robusto y de código abierto. Es conocido por su estabilidad, extensibilidad y conformidad con estándares SQL.
Uso de PostgreSQL con Docker
Usar PostgreSQL en un contenedor Docker tiene varias ventajas, entre ellas la facilidad de instalación y la capacidad de desplegar bases de datos rápidamente sin necesidad de configurar manualmente un entorno.
Pasos básicos para usar PostgreSQL con Docker:
-
Obtener la imagen de PostgreSQL: Docker utiliza "imágenes" como plantillas para crear contenedores. La imagen oficial de PostgreSQL está disponible en Docker Hub.
docker pull postgres
-
Crear y ejecutar un contenedor de PostgreSQL:
docker run --name mi_postgres -e POSTGRES_PASSWORD=mi_contraseña -d postgres
Aquí,
--name mi_postgres
le da un nombre al contenedor,-e POSTGRES_PASSWORD=mi_contraseña
establece la contraseña del usuario "postgres" y-d postgres
indica que el contenedor se ejecutará en segundo plano usando la imagenpostgres
. -
Acceder a PostgreSQL: Una vez que el contenedor está en funcionamiento, puedes acceder a PostgreSQL de varias maneras, por ejemplo, usando
psql
, la herramienta de línea de comandos de PostgreSQL.docker exec -it mi_postgres psql -U postgres
-
Persistencia de datos: Para asegurarte de que los datos no se pierdan cuando el contenedor se detenga o elimine, puedes montar un volumen en tu sistema de archivos local.
docker run --name mi_postgres -e POSTGRES_PASSWORD=mi_contraseña -v /ruta/en/tu/maquina:/var/lib/postgresql/data -d postgres
Resumen
- Docker es una herramienta que permite crear y gestionar contenedores, los cuales son unidades portátiles y consistentes de software.
- PostgreSQL es un sistema de gestión de bases de datos relacional.
- Usar PostgreSQL con Docker facilita la configuración y el despliegue de bases de datos, asegurando que sean portátiles y consistentes entre distintos entornos.
Con estos conceptos básicos y pasos, puedes empezar a trabajar con PostgreSQL dentro de contenedores Docker de manera eficiente y sencilla.