Explorá

Composer / 4 min de lectura

Cómo construir una imagen de Docker con Alpine Linux, PHP y Node

docker logo

Docker se ha convertido en una solución popular para construir y desplegar aplicaciones en entornos de desarrollo y sistemas operativos. Debido a su efectividad y popularidad, algunos pueden preguntarse cómo construir una imagen Docker con Alpine Linux. Este post te va a dar la respuesta, paso a paso.

Construir una imagen Docker que sea a la vez liviana y completa en funcionalidades es un logro significativo en entornos de desarrollo web. Vamos a ampliar nuestra guía anterior para incluir el Dockerfile completo y explicar el razonamiento detrás de cada paso.

Esta imagen Docker, que suma apenas 34,7MB en su forma comprimida, es un claro contraste con los tamaños combinados de las imágenes de Node (381,8 MB) y Composer (46,23 MB), haciéndola una candidata ideal para un uso eficiente en pipelines.

Recorramos los pasos para construir una imagen Docker en Alpine Linux con PHP 8.2.10 y Node 18.17.1, uno por uno.

Cómo Construir una Imagen Docker en Alpine Linux: Guía Paso a Paso

Paso 1: La Imagen Base

FROM amd64/alpine:3.18.4

Comenzamos con amd64/alpine:3.18.4, una distribución de Linux mínima que es reconocida por su pequeño tamaño.

Paso 2: Obteniendo lo Esencial

# Establecer zona horaria
RUN echo "UTC" > /etc/timezone

# Instalar herramientas esenciales
RUN apk add --no-cache zip unzip curl

En este paso, configuramos la zona horaria a UTC e instalamos herramientas esenciales como zip, unzip y curl para operaciones básicas de archivos y transferencia de datos.

Paso 3: Instalando Bash

# Instalando bash
RUN apk add bash
RUN sed -i 's/bin/ash/bin/bash/g' /etc/passwd

Alpine Linux viene con ash por defecto. En este paso, instalamos bash para capacidades mejoradas de scripting y cambiamos la shell predeterminada a Bash.

Paso 4: Instalando PHP 8.2.10 y Node 18.17.1

# Instalar PHP 8.2.10 y Node 18.17.1
RUN apk add --no-cache php82 
    php82-phar 
    php82-curl 
    php82-openssl 
    php82-mbstring 
    php82-tokenizer 
    php82-xml 
    php82-xmlwriter 
    php82-xmlreader 
    php82-simplexml 
    php82-dom 
    nodejs   
    npm  
    git

Este paso instala PHP 8.2.10 y sus extensiones, junto con Node 18.17.1 y git. Estos son críticos para tareas de desarrollo web moderno.

Paso 5: Instalando Composer 2.6.4

# Instalando Composer
RUN curl -sS https://getcomposer.org/installer -o composer-setup.php
RUN php composer-setup.php --install-dir=/usr/local/bin --filename=composer
RUN rm -rf composer-setup.php

Composer gestiona las dependencias PHP. El script de instalación se descarga, se ejecuta y luego se elimina para mantener limpia la imagen.

Paso 6: Configurando PHP

# Configurar PHP
RUN mkdir -p /run/php/
RUN touch /run/php/php8.2-fpm.pid

Este paso prepara los directorios y archivos necesarios para el funcionamiento de PHP.

Paso 7: Finalizando el Dockerfile

# Exponer puerto 3000
EXPOSE 3000/tcp

# Establecer directorio de trabajo
WORKDIR /media

Este es el último paso

Exponemos el puerto 3000 para la aplicación y definimos /media como el directorio de trabajo.

El Dockerfile Completo

Aquí está todo el código que necesitas para construir una imagen Docker con Alpine Linux, PHP 8.2.10 y Node 18.17.1, sin comentarios:

FROM amd64/alpine:3.18.4

# Esenciales
RUN echo "UTC" > /etc/timezone
RUN apk add --no-cache zip unzip curl

# Instalando bash
RUN apk add bash
RUN sed -i 's/bin/ash/bin/bash/g' /etc/passwd

# Instalando PHP 8.2.10 y Node 18.17.1
RUN apk add --no-cache php82 
    php82-phar 
    php82-curl 
    php82-openssl 
    php82-mbstring 
    php82-tokenizer 
    php82-xml 
    php82-xmlwriter 
    php82-xmlreader 
    php82-simplexml 
    php82-dom 
    nodejs   
    npm  
    git

RUN ln -s /usr/bin/php82 /usr/bin/php

# Instalando Composer 2.6.4
RUN curl -sS https://getcomposer.org/installer -o composer-setup.php
RUN php composer-setup.php --install-dir=/usr/local/bin --filename=composer
RUN rm -rf composer-setup.php

# Configurar PHP
RUN mkdir -p /run/php/
RUN touch /run/php/php8.2-fpm.pid

EXPOSE 3000/tcp

WORKDIR /media

Despliegue en Docker Hub

¿Tenés curiosidad sobre cómo automatizar el despliegue de tus imágenes al registro de Docker? Solo revisá nuestro post sobre automatización CI/CD.

Un Extra

Aquí tenés un ejemplo de archivo Docker-Compose para utilizar esta imagen. Solo creá un archivo docker-compose.yml y pegá el siguiente código.

version: "3.9"
services:
  builder:
    container_name: your-project
    image: whitecanvas/builder:1.0.4 #MACOS whitecanvas/builder-v8:1.0.4
    volumes:
      - ./:/media/
    extra_hosts:
      - "yoursite.local:192.168.1.6"
    command:  
      - sh
    tty: true
    networks:
      - project
networks:
  project:

Finalmente, ejecutá el siguiente comando en tu CLI para liberar al Kraken.

docker compose up -d

Conclusión

Esta imagen Docker, disponible en Docker Hub, es un testimonio de la utilización eficiente de recursos. Con su tamaño compacto y conjunto de herramientas completas, es perfecta para su despliegue en pipelines donde la rapidez y eficiencia son cruciales.

El desglose detallado del Dockerfile debería ayudarte a desplegar tu proyecto en Alpine Linux utilizando PHP 8.2.10 y Node 18.17.1. ¡Buena suerte!

Si encontraste este post útil, leé nuestro blog para más consejos, trucos y guías sobre WordPress.