📦 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
- Construire :
docker compose build --no-cache - Lancer :
docker compose up -d --force-recreate - Se connecter dans le container :
docker compose exec app bash - Compiler (depuis le container) :
cobc -c -free -Wall hello.cob - Executer (depuis le container) :
./helloRETOUR SUR COBOL REUSSI !