Aller au contenu

Conteneur de Dev

Exemple#

  • Cet exemple vient de ma configuration pour le développement de O7CLI

Répertoire Dockerfiles#

  • Créer ce répertoire dans le projet
  • Si vous avez besoin de plusieurs images, tous les fichiers seront ici
dockerfiles/linux-debian.dockerfile
FROM python:3.12-slim-bullseye

# https://nodejs.org/en/about/previous-releases
ARG NODE_VERSION=v20.18.0
ARG NODE_DISTRO=linux-x64
SHELL ["/bin/bash", "-c"]

RUN apt update && apt -y upgrade

# Install useful basic packages
RUN apt install -y curl nmap ssh git dnsutils wget unzip zip xz-utils jq ca-certificates gnupg lsb-release vim telnet rsync

# AWS CLI V2 https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html
RUN curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip" \
    && unzip awscliv2.zip \
    && bash ./aws/install \
    && rm awscliv2.zip && rm -r aws

    # AWS CLI Auto Complete
ENV PATH="/usr/local/bin/aws_completer:${PATH}"

# AWS Session Manager plugin for the AWS CLI
RUN curl "https://s3.amazonaws.com/session-manager-downloads/plugin/latest/ubuntu_64bit/session-manager-plugin.deb" -o "session-manager-plugin.deb" \
    && dpkg -i session-manager-plugin.deb \
    && rm session-manager-plugin.deb

# Install Node JS
RUN wget https://nodejs.org/dist/$NODE_VERSION/node-$NODE_VERSION-$NODE_DISTRO.tar.xz && \
mkdir -p /usr/local/lib/nodejs && \
tar -xJvf node-$NODE_VERSION-$NODE_DISTRO.tar.xz -C /usr/local/lib/nodejs && \
rm node-$NODE_VERSION-$NODE_DISTRO.tar.xz
ENV PATH="/usr/local/lib/nodejs/node-$NODE_VERSION-$NODE_DISTRO/bin:${PATH}"

# Install Docker CLI
# Add Docker Official GPG key && set up the repository
RUN mkdir -p /etc/apt/keyrings && \
    curl -fsSL https://download.docker.com/linux/debian/gpg | gpg --dearmor -o /etc/apt/keyrings/docker.gpg && \
    echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/debian  $(lsb_release -cs) stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null
RUN apt update && apt install -y docker-ce-cli


# Install Terraform
RUN wget -O- https://apt.releases.hashicorp.com/gpg | gpg --dearmor | tee /usr/share/keyrings/hashicorp-archive-keyring.gpg && \
    gpg --no-default-keyring --keyring /usr/share/keyrings/hashicorp-archive-keyring.gpg --fingerprint && \
    echo "deb [signed-by=/usr/share/keyrings/hashicorp-archive-keyring.gpg] https://apt.releases.hashicorp.com $(lsb_release -cs) main" | tee /etc/apt/sources.list.d/hashicorp.list && \
    apt update && \
    apt install -y terraform && terraform -install-autocomplete

# Useful Pyhton Lib
RUN pip install --upgrade pip
RUN pip install pytest pytest-cov pytest-mock black pylint ruff python-semantic-release build virtualenv pip-tools mkdocs
RUN pip install sty pandas openpyxl boto3 requests fpdf2


# Install useful node packages
RUN npm install -g sass aws-cdk


RUN mkdir /gito7 &&  mkdir /keys

COPY *.sh /root/scripts/
COPY .bashrc /root

WORKDIR /gito7

#Start the Server !!
CMD ["/bin/bash"]
dockerfiles/.bashrc
export PS1='[\w]> '

alias l='ls -CF'
alias la='ls -A'
alias ll='ls -alF'
alias ls='ls --color=auto'
alias e='env | sort'
alias p='python'
alias n='node'
alias df='diff'

alias ct='pytest --cov=src --cov-report=term --cov-report=html --cov-branch'
alias cl='pylint src/ && echo $?'

alias gs='git status'
alias dc='docker-compose'
alias d='docker'
alias setenv='source setenv.sh'
alias va='source .venv/bin/activate'
alias tff='terraform fmt --recursive'

alias o7='python -m o7cli'

export PATH=/root/scripts:$PATH
export PYTHONPATH=/gito7/o7-util/src:/gito7/o7-pdf/src:/gito7/o7-cli/src

complete -C '/usr/local/bin/aws_completer' aws

echo 'Quick Command:'
echo '   setenv: Set variables in .env'
echo '   e: Show sorted env. variables'
echo '   gs: Git Status'
echo '   dc: docker-compose'
echo '   va: Virtual Environment Activate'
echo '   tff: Terraform Formatting'
echo ''
echo '   ct: Full Unit Test & Coverage'
echo '   cl: Lint all source file'
dockerfiles/setenv.sh
1
2
3
4
5
6
7
8
#!/usr/bin/env bash
# Permet d'avoir plusieurs alias ou raccourcis dans votre environnement.

# Show env vars
grep -v '^#' .env

# Export env vars
export $(grep -v '^#' .env | xargs)

Docker Compose#

  • Dans le répertoire principal du projet
  • Nous allons mettre un fichier docker-compose
docker-compose.yml
version: '3'
services:
  o7d:
    build:
      context: .\dockerfiles
      dockerfile: linux-debian.dockerfile
    image: o7-linux-debian
    stdin_open: true
    tty: true
    privileged: true
    environment:
      - INSIDE_DOCKER=1
      - CHOKIDAR_USEPOLLING=true
      - NODE_ENV=development
    ports:
      - '3000:3000'
      - '5000:5000'
      - '5432:5432'
      - '6379:6379'

    volumes:
      - C:\temp\download:/download
      - C:\temp\gito7:/gito7
      - ~/.aws:/root/.aws
      - ~/.ssh:/root/.ssh
      - //var/run/docker.sock:/var/run/docker.sock

    command: bash

Commandes#

Bash
1
2
3
4
5
6
7
8
# Pour Construire l'image
docker compose build o7d

# Pour démarrer le conteneur de Dev en mode Shell
docker compose run --rm o7d bash

# Pour Permettre que les port soit accessible en mode Shell
docker compose run --service-ports --rm o7d bash