Configuración de IronBarcode en Docker para VeriFactu y sistemas fiscales españoles en la nube
VeriFactu y AEAT en la nube: Los proveedores de software fiscal españoles que despliegan en AWS Madrid (eu-south-1) o Azure Spain Central utilizan servicios .NET dockerizados para generar el QR obligatorio de AEAT en el momento de creación de cada factura VeriFactu. Con IronBarcode en Docker, el mismo contenedor gestiona la generación de códigos QR para AEAT, la lectura de códigos de barras en lotes SII y la emisión de etiquetas conforme a los volúmenes del Suministro Inmediato de Información (SII) de la AEAT.
IronBarcode es totalmente compatible con Docker, incluidos los contenedores en Azure y AWS para Linux y Windows.
¿Por qué utilizar Docker?
Docker permite a los desarrolladores empaquetar, enviar y ejecutar fácilmente cualquier aplicación como un contenedor independiente, portátil y liviano, que puede ejecutarse en casi cualquier lugar.
Introducción a IronBarcode y Linux
Si Docker con .NET es nuevo para ti, te recomendamos este excelente artículo sobre la configuración de la depuración de Docker y la integración con proyectos de Visual Studio.
Para trabajar con IronBarcode en Linux, también te recomendamos encarecidamente que leas nuestra guía de configuración y compatibilidad de IronBarcode en Linux.
Distribuciones recomendadas de Docker para Linux
Recomendamos usar las siguientes distribuciones de Linux de 64 bits para tener el menor problema al configurar IronBarcode:
- Ubuntu ≥18
- Debian ≥10
- CentOS ≥7
Recomendamos usar las imágenes oficiales de Docker de Microsoft. Otras distribuciones de Linux son compatibles en parte, pero pueden requerir configuraciones manuales e instalaciones de dependencias. Consulta nuestra guía de configuración manual en Linux para más información sobre cómo configurar con Linux.
Fundamentos de la instalación de IronBarcode en Docker para Linux
Utilice nuestro paquete NuGet
Recomendamos utilizar el paquete NuGet IronBarcode; funciona perfectamente al desarrollar en Windows, macOS y Linux.
Install-Package BarCode
Archivos Docker de Ubuntu Linux
Ubuntu 22 con .NET 7
# Base runtime image (Ubuntu 22 with .NET runtime)
FROM mcr.microsoft.com/dotnet/runtime:7.0-jammy AS base
WORKDIR /app
# Install necessary packages
RUN apt update
# Base development image (Ubuntu 22 with .NET SDK)
FROM mcr.microsoft.com/dotnet/sdk:7.0-jammy AS build
WORKDIR /src
# Restore NuGet packages
COPY ["Example/Example.csproj", "Example/"]
RUN dotnet restore "Example/Example.csproj"
# Build project
COPY . .
WORKDIR "/src/Example"
RUN dotnet build "Example.csproj" -c Release -o /app/build
# Publish project
FROM build AS publish
RUN dotnet publish "Example.csproj" -c Release -o /app/publish
# Final image to run the app
FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "Example.dll"]
Ubuntu 22 con .NET 6 (LTS)
# Base runtime image (Ubuntu 22 with .NET runtime)
FROM mcr.microsoft.com/dotnet/runtime:6.0-jammy AS base
WORKDIR /app
# Install necessary packages
RUN apt update
# Base development image (Ubuntu 22 with .NET SDK)
FROM mcr.microsoft.com/dotnet/sdk:6.0-jammy AS build
WORKDIR /src
# Restore NuGet packages
COPY ["Example/Example.csproj", "Example/"]
RUN dotnet restore "Example/Example.csproj"
# Build project
COPY . .
WORKDIR "/src/Example"
RUN dotnet build "Example.csproj" -c Release -o /app/build
# Publish project
FROM build AS publish
RUN dotnet publish "Example.csproj" -c Release -o /app/publish
# Final image to run the app
FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "Example.dll"]
Ubuntu 20 con .NET 6 (LTS)
# Base runtime image (Ubuntu 20 with .NET runtime)
FROM mcr.microsoft.com/dotnet/runtime:6.0-focal AS base
WORKDIR /app
# Install necessary packages
RUN apt update
# Base development image (Ubuntu 20 with .NET SDK)
FROM mcr.microsoft.com/dotnet/sdk:6.0-focal AS build
WORKDIR /src
# Restore NuGet packages
COPY ["Example/Example.csproj", "Example/"]
RUN dotnet restore "Example/Example.csproj"
# Build project
COPY . .
WORKDIR "/src/Example"
RUN dotnet build "Example.csproj" -c Release -o /app/build
# Publish project
FROM build AS publish
RUN dotnet publish "Example.csproj" -c Release -o /app/publish
# Final image to run the app
FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "Example.dll"]
Ubuntu 20 con .NET 5
# Base runtime image (Ubuntu 20 with .NET runtime)
FROM mcr.microsoft.com/dotnet/runtime:5.0-focal AS base
WORKDIR /app
# Install necessary packages
RUN apt update
# Base development image (Ubuntu 20 with .NET SDK)
FROM mcr.microsoft.com/dotnet/sdk:5.0-focal AS build
WORKDIR /src
# Restore NuGet packages
COPY ["Example/Example.csproj", "Example/"]
RUN dotnet restore "Example/Example.csproj"
# Build project
COPY . .
WORKDIR "/src/Example"
RUN dotnet build "Example.csproj" -c Release -o /app/build
# Publish project
FROM build AS publish
RUN dotnet publish "Example.csproj" -c Release -o /app/publish
# Final image to run the app
FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "Example.dll"]
Ubuntu 20 con .NET 3.1 LTS
# Base runtime image (Ubuntu 20 with .NET runtime)
FROM mcr.microsoft.com/dotnet/runtime:3.1-focal AS base
WORKDIR /app
# Install necessary packages
RUN apt update
# Base development image (Ubuntu 20 with .NET SDK)
FROM mcr.microsoft.com/dotnet/sdk:3.1-focal AS build
WORKDIR /src
# Restore NuGet packages
COPY ["Example/Example.csproj", "Example/"]
RUN dotnet restore "Example/Example.csproj"
# Build project
COPY . .
WORKDIR "/src/Example"
RUN dotnet build "Example.csproj" -c Release -o /app/build
# Publish project
FROM build AS publish
RUN dotnet publish "Example.csproj" -c Release -o /app/publish
# Final image to run the app
FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "Example.dll"]
Ubuntu 18 con .NET 3.1 LTS
# Base runtime image (Ubuntu 18 with .NET runtime)
FROM mcr.microsoft.com/dotnet/runtime:3.1-bionic AS base
WORKDIR /app
# Install necessary packages
RUN apt update
# Base development image (Ubuntu 18 with .NET SDK)
FROM mcr.microsoft.com/dotnet/sdk:3.1-bionic AS build
WORKDIR /src
# Restore NuGet packages
COPY ["Example/Example.csproj", "Example/"]
RUN dotnet restore "Example/Example.csproj"
# Build project
COPY . .
WORKDIR "/src/Example"
RUN dotnet build "Example.csproj" -c Release -o /app/build
# Publish project
FROM build AS publish
RUN dotnet publish "Example.csproj" -c Release -o /app/publish
# Final image to run the app
FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "Example.dll"]
Archivos Docker para Debian Linux
Debian 11 con .NET 7
# Base runtime image (Debian 11 with ASP.NET Core Runtime)
FROM mcr.microsoft.com/dotnet/aspnet:7.0-bullseye-slim AS base
WORKDIR /app
# Install necessary packages
RUN apt update
# Base development image (Debian 11 with .NET SDK)
FROM mcr.microsoft.com/dotnet/sdk:7.0-bullseye-slim AS build
WORKDIR /src
# Restore NuGet packages
COPY ["Example/Example.csproj", "Example/"]
RUN dotnet restore "Example/Example.csproj"
# Build project
COPY . .
WORKDIR "/src/Example"
RUN dotnet build "Example.csproj" -c Release -o /app/build
# Publish project
FROM build AS publish
RUN dotnet publish "Example.csproj" -c Release -o /app/publish
# Final image to run the app
FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "Example.dll"]
Debian 11 con .NET 6 (LTS)
# Base runtime image (Debian 11 with ASP.NET Core Runtime)
FROM mcr.microsoft.com/dotnet/aspnet:6.0-bullseye-slim AS base
WORKDIR /app
# Install necessary packages
RUN apt update
# Base development image (Debian 11 with .NET SDK)
FROM mcr.microsoft.com/dotnet/sdk:6.0-bullseye-slim AS build
WORKDIR /src
# Restore NuGet packages
COPY ["Example/Example.csproj", "Example/"]
RUN dotnet restore "Example/Example.csproj"
# Build project
COPY . .
WORKDIR "/src/Example"
RUN dotnet build "Example.csproj" -c Release -o /app/build
# Publish project
FROM build AS publish
RUN dotnet publish "Example.csproj" -c Release -o /app/publish
# Final image to run the app
FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "Example.dll"]
Debian 11 con .NET 5
# Base runtime image (Debian 11 with ASP.NET Core Runtime)
FROM mcr.microsoft.com/dotnet/aspnet:5.0-bullseye-slim AS base
WORKDIR /app
# Install necessary packages
RUN apt update
# Base development image (Debian 11 with .NET SDK)
FROM mcr.microsoft.com/dotnet/sdk:5.0-bullseye-slim AS build
WORKDIR /src
# Restore NuGet packages
COPY ["Example/Example.csproj", "Example/"]
RUN dotnet restore "Example/Example.csproj"
# Build project
COPY . .
WORKDIR "/src/Example"
RUN dotnet build "Example.csproj" -c Release -o /app/build
# Publish project
FROM build AS publish
RUN dotnet publish "Example.csproj" -c Release -o /app/publish
# Final image to run the app
FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "Example.dll"]
Debian 11 con .NET 3.1 LTS
# Base runtime image (Debian 11 with ASP.NET Core Runtime)
FROM mcr.microsoft.com/dotnet/aspnet:3.1-bullseye-slim AS base
WORKDIR /app
# Install necessary packages
RUN apt update
# Base development image (Debian 11 with .NET SDK)
FROM mcr.microsoft.com/dotnet/sdk:3.1-bullseye-slim AS build
WORKDIR /src
# Restore NuGet packages
COPY ["Example/Example.csproj", "Example/"]
RUN dotnet restore "Example/Example.csproj"
# Build project
COPY . .
WORKDIR "/src/Example"
RUN dotnet build "Example.csproj" -c Release -o /app/build
# Publish project
FROM build AS publish
RUN dotnet publish "Example.csproj" -c Release -o /app/publish
# Final image to run the app
FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "Example.dll"]
Debian 10 con .NET 5
# Base runtime image (Debian 10 with .NET runtime)
FROM mcr.microsoft.com/dotnet/runtime:5.0 AS base
WORKDIR /app
# Install necessary packages
RUN apt update
# Base development image (Debian 10 with .NET SDK)
FROM mcr.microsoft.com/dotnet/sdk:5.0 AS build
WORKDIR /src
# Restore NuGet packages
COPY ["Example/Example.csproj", "Example/"]
RUN dotnet restore "Example/Example.csproj"
# Build project
COPY . .
WORKDIR "/src/Example"
RUN dotnet build "Example.csproj" -c Release -o /app/build
# Publish project
FROM build AS publish
RUN dotnet publish "Example.csproj" -c Release -o /app/publish
# Final image to run the app
FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "Example.dll"]
Debian 10 con .NET 3.1 LTS
# Base runtime image (Debian 10 with .NET runtime)
FROM mcr.microsoft.com/dotnet/runtime:3.1 AS base
WORKDIR /app
# Install necessary packages
RUN apt update
# Base development image (Debian 10 with .NET SDK)
FROM mcr.microsoft.com/dotnet/sdk:3.1 AS build
WORKDIR /src
# Restore NuGet packages
COPY ["Example/Example.csproj", "Example/"]
RUN dotnet restore "Example/Example.csproj"
# Build project
COPY . .
WORKDIR "/src/Example"
RUN dotnet build "Example.csproj" -c Release -o /app/build
# Publish project
FROM build AS publish
RUN dotnet publish "Example.csproj" -c Release -o /app/publish
# Final image to run the app
FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "Example.dll"]
CentOS 7 con .NET 7
# Base runtime image (CentOS 7)
FROM centos:7 as base
# Install necessary packages
RUN rpm -Uvh https://packages.microsoft.com/config/centos/7/packages-microsoft-prod.rpm
RUN yum install -y dotnet-runtime-7.0
WORKDIR /app
# Build SDK image (CentOS 7)
FROM centos:7 as build
# Install necessary packages
RUN rpm -Uvh https://packages.microsoft.com/config/centos/7/packages-microsoft-prod.rpm
RUN yum install -y dotnet-sdk-7.0
WORKDIR /src
# Restore NuGet packages
COPY ["Example/Example.csproj", "Example/"]
RUN dotnet restore "Example/Example.csproj"
# Build project
COPY . .
WORKDIR "/src/Example"
RUN dotnet build "Example.csproj" -c Release -o /app/build
# Publish project
FROM build AS publish
RUN dotnet publish "Example.csproj" -c Release -o /app/publish
# Final image to run the app
FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "Example.dll"]
CentOS 7 con .NET 6 (LTS)
# Base runtime image (CentOS 7)
FROM centos:7 as base
# Install necessary packages
RUN rpm -Uvh https://packages.microsoft.com/config/centos/7/packages-microsoft-prod.rpm
RUN yum install -y dotnet-runtime-6.0
WORKDIR /app
# Build SDK image (CentOS 7)
FROM centos:7 as build
# Install necessary packages
RUN rpm -Uvh https://packages.microsoft.com/config/centos/7/packages-microsoft-prod.rpm
RUN yum install -y dotnet-sdk-6.0
WORKDIR /src
# Restore NuGet packages
COPY ["Example/Example.csproj", "Example/"]
RUN dotnet restore "Example/Example.csproj"
# Build project
COPY . .
WORKDIR "/src/Example"
RUN dotnet build "Example.csproj" -c Release -o /app/build
# Publish project
FROM build AS publish
RUN dotnet publish "Example.csproj" -c Release -o /app/publish
# Final image to run the app
FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "Example.dll"]
IronBarcode Docker para el pipeline de facturación VeriFactu en España
Los proveedores de soluciones ERP y facturación en España —como desarrolladores que trabajan con Sage, A3ERP o FacturaPlus— necesitan generar el código QR de AEAT para cada factura conforme a VeriFactu y enviar registros en lote al SII de la AEAT. Un microservicio dockerizado con IronBarcode en Linux resuelve este requisito sin el coste de licencias de Windows Server.
Escenario de ejemplo: Un microservicio en Ubuntu 22 + .NET 8 expone un endpoint HTTP que recibe los datos de factura (NIF emisor, número de serie, fecha, importe, huella VeriFactu), construye la URL de verificación de AEAT y genera el código QR mediante BarcodeWriter.CreateBarcode(url, BarcodeEncoding.QRCode). El QR resultante se incrusta en el PDF de la factura Facturae antes de su envío al registro de la AEAT o a FACe para el sector público.
Volúmenes SII: El SII obliga a comunicar las facturas emitidas en un plazo de cuatro días. Los contenedores Docker permiten escalar horizontalmente el servicio de generación de QR para procesar picos de volumen sin modificar el código de la aplicación. En la región AWS eu-south-1 (Madrid), el servicio opera dentro de la soberanía de datos de la UE, cumpliendo con la LOPDGDD y el RGPD.
TicketBAI: Los comercios vascos de Bizkaia, Gipuzkoa y Araba que usan sistemas cloud también pueden dockerizar el lector de QR de TicketBAI con IronBarcode, procesando los tíquets en cola para su reconciliación con los registros de las Diputaciones Forales.
Para configurar IronBarcode en un Dockerfile de Ubuntu, asegúrese de incluir RUN apt update como se muestra en los ejemplos anteriores. No se requieren dependencias adicionales en Ubuntu 22 con .NET 8 o superior.
CentOS 7 con .NET 3.1 LTS
# Base runtime image (CentOS 7)
FROM centos:7 AS base
# Install necessary packages
RUN yum install sudo -y
RUN sudo rpm -Uvh https://packages.microsoft.com/config/centos/7/packages-microsoft-prod.rpm
RUN sudo yum install aspnetcore-runtime-3.1 -y
WORKDIR /app
EXPOSE 80
EXPOSE 443
# Build SDK image (CentOS 7)
FROM centos:7 AS build
# Install necessary packages
RUN yum install sudo -y
RUN sudo rpm -Uvh https://packages.microsoft.com/config/centos/7/packages-microsoft-prod.rpm
RUN sudo yum install dotnet-sdk-3.1 -y
WORKDIR /src
# Restore NuGet packages
COPY ["Example/Example.csproj", "Example/"]
RUN dotnet restore "Example/Example.csproj"
# Build project
COPY . .
WORKDIR "/src/Example"
RUN dotnet build "Example.csproj" -c Release -o /app/build
# Publish project
FROM build AS publish
RUN dotnet publish "Example.csproj" -c Release -o /app/publish
# Final image to run the app
FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "Example.dll"]Preguntas Frecuentes
¿Cómo puedo configurar una aplicación de código de barras en Docker en Linux?
Para configurar una aplicación de código de barras en Docker en Linux, puedes usar IronBarcode. Comienza descargando la imagen .NET Docker adecuada, instala el paquete NuGet de IronBarcode usando dotnet add package IronBarCode y configura tu Dockerfile para construir y ejecutar tu aplicación en un contenedor.
¿Qué distribuciones de Linux son las mejores para ejecutar Docker con aplicaciones de códigos de barras?
Las distribuciones de Linux recomendadas para ejecutar Docker con aplicaciones de códigos de barras usando IronBarcode son Ubuntu ≥18, Debian ≥10 y CentOS ≥7 debido a su facilidad de configuración y estabilidad.
¿Cuáles son los beneficios de usar Docker para aplicaciones de códigos de barras?
Usar Docker para aplicaciones de códigos de barras permite la contenedorización, lo que hace que las aplicaciones sean ligeras, portátiles y consistentes en diferentes entornos. Esto es especialmente beneficioso para desplegar aplicaciones en servicios en la nube como Azure y AWS.
¿Cómo soluciono problemas de configuración de Docker con bibliotecas de códigos de barras?
Los problemas comunes en configuraciones de Docker con bibliotecas de códigos de barras a menudo se pueden resolver asegurándose de que todas las dependencias estén correctamente instaladas y que el Dockerfile esté correctamente configurado. Usar las imágenes oficiales de Microsoft .NET puede ayudar a simplificar el proceso.
¿Puedo ejecutar aplicaciones de códigos de barras en Docker en plataformas de nube?
Sí, puedes ejecutar aplicaciones de códigos de barras en contenedores Docker en plataformas de nube como Azure y AWS. IronBarcode admite estos entornos, ya sea en Linux o Windows.
¿Cuál es el proceso para instalar la biblioteca de códigos de barras en un contenedor Docker?
Instala la biblioteca IronBarcode en un contenedor Docker añadiendo el paquete NuGet de IronBarcode a tu proyecto .NET usando dotnet add package IronBarCode en tu proceso de configuración de Docker.
¿Cómo aseguro la compatibilidad de las aplicaciones de códigos de barras en diferentes entornos?
Para asegurar la compatibilidad en diferentes entornos, usa Docker para contenerizar tu aplicación de códigos de barras y gestiona las dependencias a través del paquete NuGet de IronBarcode. Este enfoque proporciona un entorno consistente para tu aplicación.
¿Qué versiones de .NET se recomiendan para construir imágenes Docker para aplicaciones de códigos de barras?
Se recomienda usar versiones LTS de .NET, como .NET 6 o 3.1, por su estabilidad al construir imágenes Docker para aplicaciones de códigos de barras. Sin embargo, usar la última versión como .NET 7 puede proporcionar acceso a las características más nuevas.
¿IronBarcode es compatible con .NET 10 y puedo usarlo en Docker en Linux con .NET 10?
Sí. IronBarcode es compatible con .NET 10, así como con .NET 9, 8, 7, 6, 5, .NET Core, .NET Standard y .NET Framework 4.6.2+, y funciona en contenedores Docker en Linux. ([ironsoftware.com](https://ironsoftware.com/csharp/barcode/features/compatibility/?utm_source=openai))
¿Cómo despliego IronBarcode en Docker para generar el QR de AEAT exigido por VeriFactu?
Utilice una imagen base de Ubuntu 22 o Debian 11 con el SDK .NET correspondiente. En el Dockerfile, ejecute 'RUN apt update' e instale el paquete NuGet BarCode. El microservicio recibe los datos de factura, construye la URL de verificación AEAT y llama a BarcodeWriter.CreateBarcode(url, BarcodeEncoding.QRCode) para generar el QR. Puede desplegarse en AWS eu-south-1 (Madrid) o Azure Spain Central cumpliendo los requisitos de soberanía de datos del RGPD y la LOPDGDD.
¿Puede IronBarcode en Docker procesar el volumen de facturas requerido por el SII de la AEAT?
Sí. Los contenedores Docker permiten escalar horizontalmente el servicio para gestionar los picos de volumen del SII (Suministro Inmediato de Información), que obliga a comunicar facturas en cuatro días. IronBarcode en Linux no requiere licencias adicionales de Windows Server, reduciendo costes operativos.

