Рубрики
Без рубрики

Dockerizar un Prokeecto Django

Rideuccion docker es una herramienta que como desarrolladores Debemos Estar Dispuestos A … Помечено с Python, Docker.

Docker es una herramienta que como desarrolladores debemos Estar despuestos a a.ruestres a.ruestres hacer el despenegue de nuestras yplicaciones de una manera rápida y sencilla ademas de hacer que nuestros proyectos Sean fáciles de distribile. Continuación Vamos a Descubrir Como Dockerizar Nuestra App En Django.

Elegir Nuestras Images Y El Espacio de Trabajo

Lo primero es saber que imágenes necesitamos y para eello lo primero ES Una Imagen de Con La Que Podremos Usar El Lenguaje.

Python – Docker Hub

Lo Siguiente Es Una Imagen Para Montar Nuestra Base DE DETOS, PARA ESTE EJERCICIO DECIDí USAR MYSQL EN SU VERSINEN 5.7

mysql.

Creamos Una Carpeta La Cual Va Увелищение Nuestro Proyecto.

~/ $ mkdir dockerproject
~/ $ cd dockerproject
~/dockerproject $

Действительное зависимость

PARA NuESTRO PREETOO EN Django Necesitamos LAS Libritherías Корректировки Ademas del Instruptador de lenguaje python, asi que que eccesitamos diestir las offenceencias de nuestro ProyeCto.

Crowsos un Archivo de Nombre Trancy.txt en nuestro Epsacio de Trabajo El Cual Tiene Conevener La Versión de django que vamos usar y el client para mysql.

Django>=3.0,<4.0
mysqlclient>=2.0

El cliente de mysql es necesario ya que no se enceentra en las librisherías por defecto para La Versión 3 De Python, Asi Que Lo Agregaremos Maluemente.

Nuestro Servidor de Python

Doctro de la Carpeta Vamos Crage Archivo De Nombre Dockerfile, ESTA Sera Nuestra Imagen Местные де-Питона En La Cual Podremos Definer Serie de Inicio de Nuestro NecesaRias Para El Inicio de Nuestro.

Определенность базы Imagen.

FROM python:3

Crowsos Nuestro Directionio De Trabajo.

WORKDIR /code

Ahora Necesitaremos Instalar Django Y El Cliente de Mysql Para Python, EN ESTE PASO USAREMOS Эль Архиво де требования.

COPY requirements.txt /code/

EN ESTE Punto PodeMos Instalar Las Concepenceias Con Siguiente Instrucción.

RUN pip install -r requirements.txt

Y poner una copia deestro cóestigo en la carpeta en la que nos encontramos docro deesestro directorio de trabajo en al al de docker

COPY . /code/

Al Final Deberíamos de Tenerer unchivo Como El Siguiente Dockerfile

FROM python:3

WORKDIR /code

COPY requirements.txt /code/

RUN pip install -r requirements.txt

COPY . /code/

Con El Siguiente Comando En La Terminal PodeMos Comprubar Que Nuestra Imagen Se Puede Procesar Forrecte.

~/dockerproject $ docker build .
[+] Building 0.4s (10/10) FINISHED
 => [internal] load build definition from Dockerfile                                                       0.0s
 => => transferring dockerfile: 31B                                                                        0.0s
 => [internal] load .dockerignore                                                                          0.0s
 => => transferring context: 2B                                                                            0.0s
 => [internal] load metadata for docker.io/library/python:3                                                0.0s
 => [1/5] FROM docker.io/library/python:3                                                                  0.0s
 => [internal] load build context                                                                          0.1s
 => => transferring context: 2.43kB                                                                        0.0s
 => CACHED [2/5] WORKDIR /code                                                                             0.0s
 => CACHED [3/5] COPY requirements.txt /code/                                                              0.0s
 => CACHED [4/5] RUN pip install -r requirements.txt                                                       0.0s
 => CACHED [5/5] COPY . /code/                                                                             0.0s
 => exporting to image                                                                                     0.1s
 => => exporting layers                                                                                    0.0s
 => => writing image sha256:13e36e422c69799feb5105373d4b04d78c683c7527294be29c80a7940a6374b4               0.0s

Ahora PodeMos Comprobarar Que Las Concepenceias SE Instalaron Forrecte Con El Hash De La Imagen Que Nos Devualve El Comando Antiory Y Con Siguiente Instrucción. Si ToDo Esta Veranto Python Debería de Regrezear La Versión de django Instalada

~/dockerproject $ docker run 13e36e422c69799feb5105373d4b04d78c683c7527294be29c80a7940a6374b4 python -m django --version
3.2

CREAR EL PREETO

PARA EL SIGUIIETE PASO PODEMOS CREAR EL PREECTO DESDE NUESTRO CONTENDOR ASI Que Ejecutaremos El Siguiente Comando. El Comando Puede Variar El El Parámetro Directorio Active Y El Cual TE DEJO EJEMPLOS PARA Linux y Windows.

~/dockerproject $ docker run -it --volume :/code  python -m django startproject dockerproject .
Windows $ docker run -it --volume %cd%:/code  python -m django startproject dockerproject .
Linux $ docker run -it --volume $(pwd):/code  python -m django startproject dockerproject .

AL FINALIZAR TOUTENDREMOS UN NUEVO Directionio Con El Nombre del ProyeCto que oniene los archivos de configuración del proyecto y un enchivo de nombre Manage.py que nos permitirá ejecutar comando de django de nuestro ProyeCto.

Ahora TeneMos que Petirle Django Que Conexión de Base DE DETOS VA A USAR Y ESTO LO PODREMOS HACER CON ARCHIVO de Configuración/dockerProject/setting.py en la linea 76 con la constante базы данных.

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'project',
        'USER': 'root',
        'PASSWORD': 'password',
        'HOST': 'docker_python_db',
        'PORT': 3306
    }
}

Docker Compose

PARA UNA GESTION MAS LIMPIA de Los Contenedes de Nuestro ProyeCto Usaremos Docker Compose.

Creamos El Archivo Docker-Compose.yml en El Cual diestiremos los servicios para nuestro proyecto.

Primero doversimos que versión de составляют vamos usar.

version: '3.8'

Después Softimos Los Servicios Que Vamos Usar, EN Primary Lugar Nuestro Servidor Web.

# version
web:
    container_name: ${PROJECT_NAME}_web
    build: .
    working_dir: /code
    command: python manage.py runserver 0.0.0.0:8000
    volumes:
      - .:/code
    ports:
      - '8085:8000'
    expose:
      - '8000'
    links:
      - mysql
    networks:
      backend:
        ipv4_address: 192.20.0.5

Expricando un Poco La Diversición de Este Servicio Vamos Poner Como Nombre del Contenedor El Nombre del Proyecto Mas La Terminación _Web. EL Contenedor SE VA A Genera Desde El Contexto Del Mismo Directionio En Cual SE Enter Countra Nuestra Imagen en dockerfile. EL Directionio de Trabajo Sera/Code y el comando que se estará ejecutando el cual va a ser:

command: python manage.py runserver 0.0.0.0:8000

Este Comando INICIARA EL Servidor de Test Que проверенно Django, ESTE SERA EL Comando Que Se Estará Ejecutando EN Эль Ciclo de Vida del Contendedor. Después Con Valumes Vamos A PediR A Docker Compose que Cree Una Copia de Nuestro Directionio Detro del Directorio de Trabajo del Contenedor y Esto Nos Servirá Para La Ejecución del Código En El Concented.

Con Ports le indearmos el mapa de puertos de nuestro host y el contededor, en este caso mapeamos el puerto 8085 de nuestro host al puerto 8000 del contenedor y el cual es as usado para el servidor.

La Instrucción Вылучить NOS Perious Agregar Metadata Que Para Saber EN Que Puerto Se Estará Publanando La Alplicación.

La Inucucción Links NoS Premite Ligar A Esta Servicio El Que Se Esta Distaiendo, En Otras Palabras Nos Perious Diverire Que El Servicio Web Va A Interactuar Con Mysql.

Заключительные сети определяют La Red Por La Cual SE Comunicaran Los Diferentes Servicios. ENA ESTA PARTE ESCESTAMOS UNA DIRECCION IP FIJA.

Ahora PodeMos Añadir El Servicio de Mysql Para Nuestra Base de Datos.

# web
mysql:
    container_name: ${PROJECT_NAME}_db
    image: 'mysql:5.7'
    volumes:
      - './database/data:/var/lib/mysql'
    ports:
      - '3308:3306'
    networks:
      backend:
        ipv4_address: 192.20.0.6
    environment:
      MYSQL_DATABASE: project
      MYSQL_ROOT_PASSWORD: password

Aquí diformos el nombre del contended, que ashera asa la Imagen mysql: 5.7 y que astará montando deaword de la carpeta ./database/data en/var/lib/mysql este paso nos permitirá mantener la base de detos que se cree en EL Contenedor de mysql y asi Нет тендер que diredir la base de datos cada que iniciamos los servicios. MAPEAMES EL PUERTO 3308 AL 3306 QUE USA MYSQL EN EL Contender y Diamentimos La Red A La Que Estará Conectada Con Su recessiva IP. Финаменная пункт EL Contendor de Mysql PodeMos DESIR DOS Переменные DE Entorno MySQL_DATATABASE NOS DEANITE DEASIR LA BASE DE DESOS QUE SE CREARA CUANDO EL SERVICION IICIE Y ADEMAS MYSQL_ROOT_PASSWORD QUE DEAFINE LA CONTRASEANA DEL USUARIO ROOT.

COMO ULTIMO CON DOCKER-COMPOSE DOAPIMOS LA RED BARDENG QUE SE USO EN LOS SERVICIOOS ANDOWERES. La Red Backend USARA EL Driver Bridge Y UNA Configuración Donde Las Direcciones IP Tendrán Una Mascara de 24 y Empezaran Con 192.20.0.

# version
# services
networks:
  backend:
    driver: bridge
    ipam:
      config:
        - subnet: 192.20.0.0/24

AL Final Tendrías unch enchivo docker-compose.yml como el siguiente:

version: '3.8'

services:

  web:
    container_name: ${PROJECT_NAME}_web
    build: .
    working_dir: /code
    command: python manage.py runserver 0.0.0.0:8000
    volumes:
      - .:/code
    ports:
      - '8085:8000'
    expose:
      - '8000'
    links:
      - mysql
    networks:
      backend:
        ipv4_address: 192.20.0.5

  mysql:
    container_name: ${PROJECT_NAME}_db
    image: 'mysql:5.7'
    volumes:
      - './database/data:/var/lib/mysql'
    ports:
      - '3308:3306'
    networks:
      backend:
        ipv4_address: 192.20.0.6
    environment:
      MYSQL_DATABASE: project
      MYSQL_ROOT_PASSWORD: password

networks:
  backend:
    driver: bridge
    ipam:
      config:
        - subnet: 192.20.0.0/24

Necesitamos Defirr Nuestra Variable de Entorno Para El Nombre del ProReecto. Para Esto Crowsos unchivo .env EN Nuestro Directorio De Trabajo El Cual Tiene Que Senver Lo Siguiente:

###< docker ###
PROJECT_NAME=docker_python
###> docker ###

PARA Comprobar que ToDo Funciona Forrecte Iniando Los Servicios Con El Comando:

~/dockerproject $ docker-compose up -d

Si Todo Esta Prevento Al IR Nuestro Navegador E INDUCIR localhost: 8085 Podremos ver una pantalla como la siguiente:

Миграции

COMO ULTIMO Podemos correr las migraciones en la base de datos, Estas Migraciones Serán Las Migraciones del Modulo Admin de django, Para Este Paso Podremos Usar El Siguiente Comando:

~/dockerproject $ docker exec -it docker_python_web bash

EL CUAT EJECUTA EL COMANDO BASH EL EL CONDENDER WEB, DESDE EL QUE PODREMOS EJECUTAR LAS MIGRACIONES CON:

root@: /code# python manage.py migrate

Docker Es Siempre Una Excelente Opción Para La Distribución de Nuestras AlipaCions, PodeMos Persicizar Una Imagen Местные Y Adecuarla a Nuestas Necesidades, Ademas Con Solo Instalar Docker Tendremos Una Serie de Herramientas Paras Para uns desarrollo Mas Rapido y En Este Caso Sin Tener que Instalar Python EN Nuestra ComputaDora Podremos IICARIAR UN PREECTO EN DJANGO.

Puedes Consultar El Código RU:

Adgaray/Docker-Python

Это скелет для докеренного проекта Python

Оригинал: “https://dev.to/adgaray/dockerizar-un-proyecto-django-2np3”