mkdevs

[ TWITTER ] [ FACEBOOK ] [ GITHUB ] [ LINKEDIN ]

Bienvenue sur mkdevs



📦 Boilerplate : Docker & Cobol

Si vous voulez re-développer ou découvrir Cobol sous Docker sur un système Linux (Debian, Ubuntu, etc.), je vous propose ici un petit environnement sous Docker et docker compose

Dans cet article, je vous partage la configuration que j'utilise dans mes boilerplates Python, NodeJs pour aligner les utilisateurs de l'hôte et du conteneur mais ici j'utiliserai une base Debian Trixie-slim pour avoir une image minimalist, mais sur laquelle il est plus facile d'installer Cobol car Alpine utilise musl libc au lieu de la traditionnelle glibc que l'on retrouve sous Debian et dérivés.

Les fichiers de l'environnement Docker

1. Le Dockerfile.dev

Nous utilisons l'image debian:trixie-slim.

# [PROJECT_ROOT_PATH]/docker/app/Dockerfile.dev
FROM debian:trixie-slim

ARG UID=1000
ARG GID=1000
ARG USERNAME=developer
ARG COMMENT="Developer"
ARG SHELL=/bin/bash
ARG TIMEZONE=UTC

# 1. Installation des dépendances système
# Pas besoin de dépôts spécifiques, GnuCOBOL est dans le repo principal de Trixie.
RUN apt-get update && apt-get install -y --no-install-recommends \
    gnucobol \
    build-essential \
    binutils \
    curl \
    git \
    sudo \
    tzdata \
    libffi-dev \
    ca-certificates \
    && apt-get clean \
    && rm -rf /var/lib/apt/lists/*

# 2. Création et configuration de l'utilisateur
# Sur Debian, groupadd et useradd sont déjà présents.
RUN groupadd -g "${GID}" "${USERNAME}" \
    && useradd -u "${UID}" -g "${GID}" -m -s "${SHELL}" -c "${COMMENT}" "${USERNAME}" \
    && echo "${USERNAME} ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers.d/${USERNAME} \
    && chmod 0440 /etc/sudoers.d/${USERNAME}

# 3. Configuration de l'environnement
USER ${USERNAME}
WORKDIR /home/${USERNAME}

# On définit le fuseau horaire (optionnel mais utile pour le COBOL qui gère les dates)
ENV TZ=${TIMEZONE}

# Commande par défaut
CMD ["bash"]

2. Le Docker Compose

Pour injecter vos identifiants personnels, on utilise les variables d'environnement dans le fichier docker-compose.yml.

# [PROJECT_ROOT_PATH]/docker-compose.yml
services:
  app:
    build:
      context: ./docker/app
      dockerfile: Dockerfile.dev
      args:
        UID: ${UID:-1000}
        GID: ${GID:-1000}
        USERNAME: ${USERNAME:-developer}
    container_name: cobapp
    hostname: cobapp
    tty: true
    stdin_open: true
    volumes:
      - ./sources/app:/home/${USERNAME:-developer}/app
    user: "${USERNAME:-developer}"
    working_dir: "/home/${USERNAME:-developer}/app"
    env_file:
      - .env
    networks:
      - boilerplate-network

networks:
    boilerplate-network:
        name: boilerplate-network-${ENVIRONMENT}
        driver: bridge

3. Le fichier .env

Avant de lancer votre projet, vous renseignez vos propres identifiants (que vous pouvez trouver en tapant id -u et id -g dans votre terminal).

ENVIRONMENT=dev

UID=1000
GID=1000
USERNAME=mike

Comment utiliser