Agregar paquetes adicionales a Reward

En varias ocasiones encontré que para algún proyecto en el que usaba “Reward” como entorno de desarrollo local era necesario agregar paquetes.

Por ejemplo para poder correr magepack es necesario tener todas las librerías de Chromium que no están en la imagen por defecto.

Hasta antes de la versión 0.4.0 de “Reward” era necesario agregarlas ejecutando los comandos en cada ocasión en que lanzábamos el entorno del proyecto.

Para usar magepack (pero también para critical CSS) tenia que ejecutar dentro del contenedor cada vez:

sudo apt-get update
sudo apt-get install -y \
    libx11-xcb1 \
    libxcomposite-dev \
    libxcursor1 \
    libxdamage1 \
    libxi6 \
    libxtst-dev \
    libnss3 \
    libcups2 \
    libxss1 \
    libxrandr2 \
    libasound2 \
    libatk1.0-0 \
    libatk-bridge2.0-0 \
    libpangocairo-1.0-0 \
    libgtk-3-0

Bien, no parece ser nada muy complicado, pero no es lo ideal y es poco deseable si lo que necesitamos es darle a cada desarrollador la posibilidad de montar el entorno local con la menor cantidad de operaciones y conocimientos posible.

A partir de de la versión 0.4.0 (0.4.1 es la versión actual en el momento de escribir este post) hay un mecanismo que nos permite que cada proyecto tenga su propio Dockerfile.

La realidad es que mi escenario es bastante simple pero el potencial de esta nueva funcionalidad permite una flexibilidad muy grande y que solucionaría escenarios mucho mas complejos sin necesidad de crear nuevas imágenes.

No solo el conocimiento y tiempo para crear un Dockerfile es mucho menor que el necesario para crear una imagen sino que la facilidad del mantenimiento y modificación es mucho mas fácil en el caso del Dockerfile.

Bien retomando el ejemplo veamos como se implementa.

Primero creamos un archivo “reward-env.yml” dentro de la carpeta “.reward”

$ mkdir .rewards
$ nano .reward/reward-env.yml

Cuyo contenido será:

version: "3.5"
services:
  php-fpm:
    build:
      context: .
      dockerfile: .reward/Dockerfile

Para el próximo paso necesitamos averiguar, si no lo conocemos, cual imagen utiliza nuestro proyecto, lo haremos con el siguiente comando:

$reward env config

Buscamos en la respuesta la linea que corresponde a “php-fpm > image”

Luego creamos, también dentro de “.reward”, el archivo “Dockerfile

$ nano .reward/Dockerfile

Cuyo contenido será (para el ejemplo propuesto de magepack):

Notese que en “FROM” use el valor obtenido de la “image”

FROM docker.io/rewardenv/php-fpm:8.1-magento2

USER root

RUN apt-get update && apt-get install -y \
    libx11-xcb1 \
    libxcomposite-dev \
    libxcursor1 \
    libxdamage1 \
    libxi6 \
    libxtst-dev \
    libnss3 \
    libcups2 \
    libxss1 \
    libxrandr2 \
    libasound2 \
    libatk1.0-0 \
    libatk-bridge2.0-0 \
    libpangocairo-1.0-0 \
    libgtk-3-0

USER www-data

Cuando tenemos todo listo lanzamos el entorno con el parámetro “–buil”

$ reward env up --build

Veremos como al levantar el entorno se ejecutan los comandos contenidos en el Dockerfile y nuestro entorno queda preparado para usarlos desde el primer momento.

Enlace a la documentación de Reward: https://rewardenv.readthedocs.io/en/latest/customization/additional-packages.html

Leave a Reply

Your email address will not be published. Required fields are marked *