0% encontró este documento útil (0 votos)
101 vistas3 páginas

Flask Usando Docker

Este documento describe cómo crear e implementar una aplicación Flask usando contenedores Docker. Explica cómo lanzar contenedores para una base de datos MariaDB y un cliente MySQL, y cómo crear una imagen personalizada con Flask, Python y otras dependencias usando un Dockerfile. También cubre cómo crear y ejecutar un contenedor basado en esta imagen que enlaza con la base de datos y mapea el directorio de trabajo del host para persistencia de datos.

Cargado por

Jose Lizana
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
101 vistas3 páginas

Flask Usando Docker

Este documento describe cómo crear e implementar una aplicación Flask usando contenedores Docker. Explica cómo lanzar contenedores para una base de datos MariaDB y un cliente MySQL, y cómo crear una imagen personalizada con Flask, Python y otras dependencias usando un Dockerfile. También cubre cómo crear y ejecutar un contenedor basado en esta imagen que enlaza con la base de datos y mapea el directorio de trabajo del host para persistencia de datos.

Cargado por

Jose Lizana
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 3

Flask usando Docker

Hemos de recordar que entre los posibles parámetros del comando docker, build
crea una imagen y run lanza un contenedor basado en una imagen.

Lanzamos contenedor MariaDB

$ docker run --name db -c MYSQL_ROOT_PASSWORD=test -d -p 3306:3306


mariadb

Lanzamos contenedor con cliente MySQL

Si queremos instalar un cliente MySQL y ejecutar consultas desde el mismo,


creamos contenedor basado en imagen mariadb 1 .

$ docker run --name mysql-client -it --link db:mysql --rm mariadb sh -c


'exec mysql -uroot -ptest -hmysql'

Este comando lanza un contenedor basado en la imagen mariadb y deja abierta una
consola interactiva (-it) donde se lanzado el establecimiento de una conexión (sh -c
'exec...') a la base de datos del contenedor llamado db (--link db:mysql, que crea un
enlace de red llamado mysql al contenedor con nombre db). Como se puede
observar, la conexión se realiza con usuario root, contraseña test y a la máquina o
host mysql.

Creación de imagen con flask y python

Crearemos una carpeta de trabajo para nuestra aplicación, por ejemplo en


~/apps/my_app. A continuación crearemos una imagen personalizada a partir de
una imagen Centos. Para ello crearemos en el directorio de trabajo dos archivos;
Dockerfile y requirements.txt. El primero contendrá un script para la ejecución de
comandos dentro de la imagen en el momento de su creación personalizada desde
otra imagen (en este caso una del repositorio de docker). El archivo
requirements.txt estará relacionado con los paquetes flask que se instalarán dentro
de la imagen.

Contenido de ~/apps/my_app

joseliza@debian:~/apps/my_app$ ls
Dockerfile requirements.txt

Archivo Dockerfile

FROM centos:latest

# Instalación de paquetes
RUN yum swap -y fakesystemd systemd && \
yum install -y systemd-devel
RUN yum install -y python-setuptools mysql-connector-python mysql-devel
gcc python-devel git
RUN easy_install pip

# Se crea usuario NO root (nombre asociado a la aplicación que voy a


desarrollar)
RUN useradd my_app

# Directorio de trabajo en los contenedores basados en esta imagen


WORKDIR /home/my_app

# Otros paquetes requeridos


ADD requirements.txt /home/my_app
RUN pip install -r requirements.txt

# Copiamos archivo de trabajo en host anfitrión hacia el directorio de


# trabajo en los contenedores basados en esta imagen
ADD . /home/my_app

# Cambiamos propietario y grupo de trabajo del WORKDIR


RUN chown -R my_app:my_app ./

# El usuario con el que se ejecutarán las instrucciones a partir de ahora


# será my_app
USER my_app

# Puerto de escucha
EXPOSE 5000

#CMD [ "python", "./your-daemon-or-script.py" ]

Archivo requirements.txt

flask
mysql-python
flask-sqlalchemy
flask-script
flask-wtf
flask-migrate
py-bcrypt
python-slugify
flask-markdown
flask-uploads

Para crear una imagen a partir del Dockerfile anterior

Situados en ~/apps/my_app ejecutamos el siguiente comando:

$ docker build -t my_app_img .


No olvidar el punto final que indica que se tome el Dockerfile del directorio actual
como script de creación de la imagen.

Para lanzar un contenedor basado en la imagen anterior

Además de crear un contenedor basado en la imagen anterior, conseguiremos


persistencia de datos al mapear el directorio de trabajo con el argumento -v.
Además, con --link enlazaremos el contenedor con el contenedor basado en
mariadb llamado db y que debe estar ejecutándose:

$ docker run -id -p 5000:5000 -v ~/apps/my_app:/home/my_app --name


my_app_cont --link db:mysql my_app_img bash

Para ejecutar un terminal interactivo (en el shell /bin/bash) en el contenedor


en ejecución llamado db

$ docker exec -it db /bin/bash

1. Imagen oficial mariadb del repositorio https://hub.docker.com/.

También podría gustarte