mirror of https://github.com/OWASP/Nettacker.git
54 lines
1.9 KiB
Docker
54 lines
1.9 KiB
Docker
### Multi-stage Dockerfile
|
|
# Define the base image only once as a build argument
|
|
ARG PYTHON_IMAGE=python:3.11.13-slim
|
|
|
|
### Build stage
|
|
FROM ${PYTHON_IMAGE} AS builder
|
|
### Install OS dependencies and poetry package manager
|
|
RUN apt-get update && \
|
|
apt-get install -y gcc libssl-dev && \
|
|
apt-get clean && \
|
|
rm -rf /var/lib/apt/lists/* && \
|
|
pip install --upgrade pip poetry
|
|
|
|
WORKDIR /usr/src/owaspnettacker
|
|
|
|
# Copy dependency files first to maximize Docker cache usage for installing dependencies
|
|
COPY poetry.lock pyproject.toml ./
|
|
|
|
# Install dependencies
|
|
RUN poetry config virtualenvs.in-project true && \
|
|
poetry install --no-cache --no-root --without dev --without test
|
|
|
|
# Now copy the rest of the required source code
|
|
COPY nettacker nettacker
|
|
COPY nettacker.py README.md ./
|
|
|
|
# Build the project only after all code is present
|
|
RUN poetry build
|
|
|
|
### Runtime stage - start from a clean Python image
|
|
FROM ${PYTHON_IMAGE} AS runtime
|
|
WORKDIR /usr/src/owaspnettacker
|
|
|
|
# OCI Labels (attach to final image)
|
|
LABEL org.opencontainers.image.title="OWASP Nettacker" \
|
|
org.opencontainers.image.description="Automated Penetration Testing Framework" \
|
|
org.opencontainers.image.url="https://owasp.org/nettacker" \
|
|
org.opencontainers.image.source="https://github.com/OWASP/Nettacker" \
|
|
org.opencontainers.image.licenses="Apache-2.0"
|
|
|
|
### Bring from 'builder' just the virtualenv and the packaged Nettacker as a wheel
|
|
COPY --from=builder /usr/src/owaspnettacker/.venv ./.venv
|
|
COPY --from=builder /usr/src/owaspnettacker/dist/*.whl .
|
|
|
|
ENV PATH=/usr/src/owaspnettacker/.venv/bin:$PATH
|
|
### Use pip inside the venv to install just the nettacker wheel saving 50%+ space
|
|
RUN pip install --no-deps --no-cache-dir nettacker-*.whl && \
|
|
rm -f nettacker-*.whl
|
|
|
|
### We now have Nettacker installed in the virtualenv with 'nettacker' command which is the new entrypoint
|
|
ENV docker_env=true
|
|
ENTRYPOINT [ "nettacker" ]
|
|
CMD ["--help"]
|