Arg

ARG

En un Dockerfile, la instrucción ARG se utiliza para definir variables de construcción que se pueden pasar en tiempo de compilación (build-time). Estas variables pueden ser utilizadas durante la construcción de la imagen, pero no están disponibles en los contenedores que se crean a partir de la imagen.

Por ejemplo, si defines ARG WWWGROUP en un Dockerfile, estás declarando una variable llamada WWWGROUP que puede recibir un valor durante la construcción de la imagen. Aquí es cómo podría verse en un contexto:

ARG WWWGROUP=www-data
RUN groupadd -g $WWWGROUP mygroup

En este ejemplo:

  • ARG WWWGROUP=www-data: Define la variable WWWGROUP con un valor predeterminado de www-data.
  • RUN groupadd -g $WWWGROUP mygroup: Crea un grupo con el ID o nombre del valor de WWWGROUP.

Esto te permite pasar diferentes valores para WWWGROUP cuando construyes la imagen, lo que hace que el Dockerfile sea más flexible. Puedes sobrescribir el valor de WWWGROUP al ejecutar el comando docker build con el flag --build-arg, así:

docker build --build-arg WWWGROUP=1001 -t myimage .

Ejemplo en RC:

Dockerfile:

ARG WWWGROUP

// Utiliza esta variable para correr varios comandos utilizando su valor

RUN groupadd --force -g $WWWGROUP sail
RUN useradd -ms /bin/bash --no-user-group -g $WWWGROUP -u 1337 sail

docker-compose:

Al construir la imagen, se le da un valor a este argumento, en este caso lo coge de las variables de entorno.

    laravel.test:
        build:
            context: ./docker/8.3
            dockerfile: Dockerfile
            args:
                WWWGROUP: '${WWWGROUP}'
        image: rc-feeder-8.3/app
        extra_hosts:
            - 'host.docker.internal:host-gateway'
        ports:
            - '${APP_PORT:-80}:80'
            - '${VITE_PORT:-5173}:${VITE_PORT:-5173}'
        environment:
            WWWUSER: '${WWWUSER}'
            LARAVEL_SAIL: 1
            XDEBUG_MODE: '${SAIL_XDEBUG_MODE:-off}'
            XDEBUG_CONFIG: '${SAIL_XDEBUG_CONFIG:-client_host=host.docker.internal}'
            IGNITION_LOCAL_SITES_PATH: '${PWD}'
            SUPERVISOR_PHP_COMMAND: "/usr/bin/php -d variables_order=EGPCS /var/www/html/artisan serve --host=0.0.0.0 --port=80"
            SUPERVISOR_PHP_USER: "sail"
        volumes:
            - '.:/var/www/html'
            #- './docker/8.2/xdebug.ini:/etc/php/8.2/mods-available/xdebug.ini'
        networks:
            - sail
        depends_on:
            - redis-node-1
            - redis-node-2
            - redis-node-3
            - redis-node-4
            - redis-node-5
            - redis-node-6
            - mailpit
            - pgsql
            - mysql