Ejecutar múltiples comandos en Docker-Compose

Isaac Tony 15 febrero 2024
Ejecutar múltiples comandos en Docker-Compose

Docker facilita a los desarrolladores la creación, prueba e implementación de aplicaciones sin preocuparse por las dependencias al envolverlas en unidades estandarizadas llamadas contenedores. Docker-compose es una herramienta esencial avanzada para administrar aplicaciones de varios contenedores.

Puede definir instrucciones para administrar servicios que se basan en varios contenedores de Docker mediante docker-compose.

Además de poder administrar más de un contenedor, docker-compose también ofrece otros beneficios, como entornos aislados para sus servicios de aplicaciones y conservación de datos de volumen al crear contenedores.

Ejecutar múltiples comandos en Docker-Compose

Docker-compose se ejecuta en el motor Docker, instalado junto con Docker en máquinas Mac y Windows. El siguiente comando le permite verificar si docker-compose está configurado correctamente en su máquina.

$ docker-compose version
Docker Compose version v2.2.3

En el siguiente ejemplo, exploraremos cómo configurar una aplicación Django, PostgreSQL usando docker-compose. Exploraremos cómo ejecutar múltiples comandos en docker-compose.

Primero, crearemos un Dockerfile simple con entradas simples, como se muestra a continuación. El archivo describe los comandos que se ejecutarán para crear nuestra imagen de Docker.

FROM python:3
ENV PYTHONDONTWRITEBYTECODE=1
ENV PYTHONUNBUFFERED=1
WORKDIR /tonyloi
COPY requirements.txt /code/
RUN pip install -r requirements.txt
COPY . /tonyloi/

El Dockerfile define Python3 como la imagen base; sin embargo, también hemos definido un archivo requirements.txt para indicar otros requisitos necesarios para que el proyecto funcione.

Django>=3.0,<4.0
psycopg2>=2.8

Ahora que tiene estos dos archivos en su lugar, puede crear el archivo docker-compose.yml en el directorio raíz de este proyecto. Este archivo describe los servicios de la aplicación que pretendemos construir: la base de datos y el servidor web.

Además de esto, también definiremos las imágenes de Docker utilizadas por estos servicios y cualquier otro volumen de Docker que desee montar. Finalmente, también necesitamos especificar los puertos que expondrán los servicios.

Dado que esta es una aplicación de Django, también debemos especificar comandos que nos permitirán ejecutar migraciones e iniciar el servidor de desarrollo. Hay un par de formas de hacer esto, ya sea usando sh o bash.

En este caso, usaremos sh debido a su disponibilidad en sistemas basados en Unix.

docker-compose.yml:

version: "3.9"

services:
  DB:
    image: Postgres
    volumes:
      - ./data/db:/var/lib/postgresql/data
    environment:
      - POSTGRES_DB=postgres
      - POSTGRES_USER=postgres
      - POSTGRES_PASSWORD=postgres
  web:
    build: .
    command: >
      sh -c "
             python manage.py migrate &&
             python manage.py runserver 0.0.0.0:8080"
    volumes:

      - .:/tonyloi
    ports:
      - "8080:8080"
    environment:
      - POSTGRES_NAME=postgres
      - POSTGRES_USER=postgres
      - POSTGRES_PASSWORD=password
    depends_on:
      - DB

Ejecutaremos el comando docker-compose run a continuación para crear este proyecto Django. Antes de ejecutar este comando, debe asegurarse de estar en el directorio raíz.

De lo contrario, navegue hasta el directorio raíz usando el comando cd.

~/django_app$ sudo docker-compose run web Django-admin startproject new_app .

Ejecución de Docker-Compose

Producción :

Successfully built 00a4c8d65c91
Successfully tagged django_app_web:latest
WARNING: Image for service web was built because it did not already exist. To rebuild this image you must use `docker-compose build` or `docker-compose up --build`.
Creating django_app_db_1 ... done
Creating django_app_web_run ... done

Este comando usa los archivos docker-compose y Docker para crear un proyecto Django. En este caso, hemos llamado al proyecto nueva_aplicación.

Ahora puede navegar al proyecto y listar los archivos del proyecto.

isaac@DESKTOP-HV44HT6:~/django_app$ cd new_app
isaac@DESKTOP-HV44HT6:~/django_app/new_app$ ls
__init__.py  asgi.py  settings.py  urls.py  wsgi.py
isaac@DESKTOP-HV44HT6:~/django_app/new_app$

Este artículo destacó cómo uno podría ejecutar múltiples comandos en el archivo docker-compose usando sh. Alternativamente, también puede usar bash -c como se muestra a continuación.

command: bash -c "
   python manage.py migrate  &&
   python manage.py runserver 0.0.0.0:8080
 "

Podemos terminar de crear el resto de la aplicación Django configurando los ajustes de la base de datos en el archivo settings.py.

Django usa SQLite durante el desarrollo por defecto; por lo tanto, necesitamos las configuraciones necesarias a continuación ya que usamos PostgreSQL. Asegúrese de reemplazar la base de datos y el nombre de usuario con los suyos propios.

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql',
        'NAME': os.environ.get('postgres'),
        'USER': os.environ.get('postgres'),
        'PASSWORD': os.environ.get('enter_your database'),
        'HOST': 'db',
        'PORT': 5432,
    }
}

Finalmente, para iniciar, la aplicación ejecuta el comando sudo docker-compose up en el directorio principal del proyecto. Inicia el servidor de desarrollo en http://0.0.0.0:8080/ como especificamos en el archivo docker-compose.

~/django_app$ sudo docker-compose up

Docker-Compose Up

Autor: Isaac Tony
Isaac Tony avatar Isaac Tony avatar

Isaac Tony is a professional software developer and technical writer fascinated by Tech and productivity. He helps large technical organizations communicate their message clearly through writing.

LinkedIn

Artículo relacionado - Docker Compose