SIENTIAPDE-1308: Initial Docker setup, improved .dockerignore, updated README, and minor fixes.

This commit is contained in:
Bruno Domingues
2025-11-04 14:07:37 -03:00
parent 9f56a128e6
commit d9d3df5723
5 changed files with 321 additions and 2 deletions

204
.dockerignore Normal file
View File

@@ -0,0 +1,204 @@
# Git
.git
.gitignore
.gitattributes
# Documentation
*.md
docs/
README*
# Tests and development
tests/
.pytest_cache/
.coverage
htmlcov/
.tox/
.nox/
.mypy_cache/
.pyre/
coverage.xml
*.cover
.hypothesis/
# Python cache and compiled files
__pycache__/
*.py[cod]
*$py.class
*.so
.Python
build/
develop-eggs/
dist/
downloads/
eggs/
.eggs/
lib/
lib64/
parts/
sdist/
var/
wheels/
*.egg-info/
.installed.cfg
*.egg
MANIFEST
# Virtual environments
venv/
env/
ENV/
.venv/
.env/
# IDE and editors
.vscode/
.idea/
*.swp
*.swo
*~
.DS_Store
Thumbs.db
# OS files
.dockerignore
.dockerignore.dockerignore
# CI/CD
.github/
.gitlab-ci.yml
.travis.yml
.circleci/
Jenkinsfile
# Local configuration
.env
.env.local
.env.*.local
config/local/
*.local
# Logs
*.log
logs/
npm-debug.log*
yarn-debug.log*
yarn-error.log*
# Runtime data
pids/
*.pid
*.seed
*.pid.lock
# Temporary files
tmp/
temp/
*.tmp
*.temp
# Node.js (if any frontend tools)
node_modules/
npm-debug.log*
# Database
*.db
*.sqlite
*.sqlite3
# Jupyter Notebook
.ipynb_checkpoints
# pyenv
.python-version
# pipenv
Pipfile.lock
# PEP 582
__pypackages__/
# Celery
celerybeat-schedule
celerybeat.pid
# SageMath parsed files
*.sage.py
# Spyder project settings
.spyderproject
.spyproject
# Rope project settings
.ropeproject
# mkdocs documentation
/site
# Backup files
*.bak
*.backup
*.old
# Local development scripts
scripts/local/
dev-*
# Docker files (excluding the main ones)
docker-compose*.yml
docker-compose*.yaml
Dockerfile.*
!Dockerfile
# Helm charts (already in .gitignore but reinforcing)
charts/
# Kubernetes manifests
k8s/
kube-*
# Terraform
*.tfstate
*.tfstate.*
.terraform/
# Monitoring and profiling
*.prof
*.profile
.perf
# Security
*.pem
*.key
*.crt
*.p12
secrets/
*.secret
# Large binaries and datasets
*.bin
*.pkl
*.pickle
*.joblib
data/
datasets/
models/pre-trained/
# Build artifacts
build/
dist/
target/
out/
# Package manager lock files (keeping requirements.txt)
package-lock.json
yarn.lock
Pipfile.lock
# Local tools
tools/local/
bin/local/
# Cache directories
.cache/
cache/

78
Dockerfile Normal file
View File

@@ -0,0 +1,78 @@
# Multi-stage build for optimized Python application
FROM python:3.11-slim AS builder
# Set build-time environment variables
ENV PYTHONDONTWRITEBYTECODE=1 \
PYTHONUNBUFFERED=1 \
PIP_NO_CACHE_DIR=1 \
PIP_DISABLE_PIP_VERSION_CHECK=1
# Install build dependencies only
RUN apt-get update && apt-get install -y \
build-essential \
curl \
git \
&& rm -rf /var/lib/apt/lists/* && \
apt-get clean
# Configure SSH to trust GitHub host key
RUN mkdir -p ~/.ssh && \
ssh-keyscan -t rsa github.com >> ~/.ssh/known_hosts && \
chmod 600 ~/.ssh/known_hosts
# Create virtual environment
RUN python -m venv /opt/venv
ENV PATH="/opt/venv/bin:$PATH"
# Upgrade pip and wheel for better caching
RUN pip install --upgrade pip setuptools wheel
# Copy requirements files for better Docker layer caching
COPY requirements.txt requirements-dev.txt ./
# Install only production dependencies with no cache
RUN --mount=type=ssh echo "=== Installing dependencies ===" && \
pip install --no-cache-dir -r requirements.txt && \
echo "=== Dependencies installed successfully ===" && \
pip list | wc -l && \
echo "=== Cleaning cache files ===" && \
find /opt/venv -type d -name __pycache__ -exec rm -rf {} + 2>/dev/null || true && \
find /opt/venv -name "*.pyc" -delete 2>/dev/null || true && \
rm -rf /root/.cache/pip/* && \
echo "=== Cleaning venv site-packages ===" && \
find /opt/venv/lib/python3.11/site-packages/ -type f -name "*.md" -delete 2>/dev/null || true && \
echo "=== Stripping .so files ===" && \
find /opt/venv -name "*.so" -exec strip {} + 2>/dev/null || true
# Production stage using python-slim for better functionality
FROM python:3.11-slim AS production
# Set environment variables
ENV PYTHONDONTWRITEBYTECODE=1 \
PYTHONUNBUFFERED=1 \
PATH="/opt/venv/bin:$PATH" \
POD_ID=unknown \
HOME="/app"
# Copy virtual environment from builder stage
COPY --from=builder /opt/venv /opt/venv
# Set working directory
WORKDIR /app
# Copy application code
COPY . .
# Create necessary directories for runtime file creation
RUN mkdir -p /app/model_manager/reports /app/logs /app/temp /app/models /app/data && \
chmod 755 /app/model_manager/reports /app/logs /app/temp /app/models /app/data
# Create non-root user
RUN groupadd -r appuser && useradd -r -g appuser appuser && \
chown -R appuser:appuser /app
# Switch to non-root user
USER appuser
# Set entrypoint for proper signal handling and PID 1
ENTRYPOINT ["/opt/venv/bin/python", "-m", "model_manager.worker.worker"]

View File

@@ -1031,6 +1031,34 @@ For support and questions:
- Open an issue in the project repository - Open an issue in the project repository
- Contact the development team - Contact the development team
## Docker
### Create image
```shell
$ docker build --ssh default --no-cache --progress=plain -t aignosi.azurecr.io/sientia-dataops-model-manager:0.0.0 .
```
### Create container
```shell
$ docker run --env-file .env --network="host" --name sientia-dataops-model-manager -d aignosi.azurecr.io/sientia-dataops-model-manager:0.0.0
$ docker logs -f sientia-dataops-model-manager
```
### Login using access token
```shell
$ docker login -u bruno-aignosi -p LD/IyZ4vtDI7khRYnH4HzfdTx3toorg6hlCetJM54n+ACRDim3xO aignosi.azurecr.io
```
### Push image to repository
```shell
$ docker push aignosi.azurecr.io/sientia-dataops-model-manager:0.0.0
```
--- ---
**Note**: The Model Manager system is designed for production use in industrial ML environments. Ensure proper security configuration and network isolation for production deployments. **Note**: The Model Manager system is designed for production use in industrial ML environments. Ensure proper security configuration and network isolation for production deployments.

View File

@@ -168,3 +168,14 @@ directory = "htmlcov"
[tool.bandit] [tool.bandit]
exclude_dirs = ["tests", "venv", ".venv"] exclude_dirs = ["tests", "venv", ".venv"]
skips = ["B101", "B601"] # Skip assert and shell injection in controlled environments skips = ["B101", "B601"] # Skip assert and shell injection in controlled environments
[tool.deptry]
known_first_party = [
"model_manager"
]
requirements_files = [
"requirements.txt"
]
requirements_files_dev = [
"requirements-dev.txt"
]

View File

@@ -1,7 +1,5 @@
- Criar o dashboard do grafana. - Criar o dashboard do grafana.
- Atualizar a lib do sientia-dataops-library para a versão 1.5.2.
- Atualizar o .github/workflows/quality-gate.yml para usar os pipelines genéricos do github; - Atualizar o .github/workflows/quality-gate.yml para usar os pipelines genéricos do github;
Criar um workflow para fazer o deploy no suse. Criar um workflow para fazer o deploy no suse.
Criar um workflow para criar o release no github. Criar um workflow para criar o release no github.