Przejdź do głównej zawartości

1. Konfiguracja środowiska

Na początku, należy upewnić się, że mamy dostępne narzędzie Docker.

Przykłady w tutorialu będą zakładały, że wykonujemy je w środowisku Linux ($ na początku przykładu oznacza, że jest to komenda to wykonania w terminalu bash).

W środowisku Windows możemy użyć WSL2 lub użyć alternatywnych narzędzi które wykonują to samo zadanie co przedstawione przykłady.

Utworzenie projektu

Pracę zaczynamy w dowolnie wybranym pustym folderze.

trapdef.json

Tworzymy tam plik trapdef.json z następującą zawartością:

{
"$schema": "https://raw.githubusercontent.com/TrapTech/trapdef-schema/main/TrapDef.schema.json",
"def": "1.0",
"private": true,
"name": "My tutorial trap",
"identifier": "my-tutorial-trap",
"authors": ["Me :)"],
"version": "0.0.1",
"supportedRunners": ["Docker"],
"dockerRunnerDefinition": {
"dockerComposePath": "./docker-compose.yml",
"imagesPath": "./images.tar"
}
}

O możliwej zawartości trapdef.json możesz przeczytać więcej tutaj.

docker-compose.yml

Następnie tworzymy w folderze plik docker-compose.yml, który będzie określał, jak uruchomić naszą pułapkę.

version: "3.1"

services:
trap:
image: my-tutorial-trap
build: .
ports:
- ${TRAP_EXPOSE_PORT}:80
environment:
- TRAP_LOG_ENDPOINT
- TRAP_LOG_TOKEN
- TRAPCLI_DISABLE_SSL_VALIDATION

Zauważ, że w pliku trapdef.json ścieżka do tego pliku (w stosunku do trapdef.json) jest określona w polu dockerComposePath.

Tworzona pułapka będzie uruchamiała tylko jeden kontener, ale pamiętaj że można tutaj zdefiniowac wiele kontenerów do uruchomienia - jeśli np. nasza pułapka potrzebuje bazy danych MySQL, możemy ją uruchomić jako dodatkowy kontener.

informacja

docker-compose.yml jest definicją używaną przez narzędzie docker compose, i w pułapkach TrapInit jest używana analogicznie - tzn. uruchomienie pułapki na podstawie definicji wykonuje takie same operacje jak docker-compose up.

Dockerfile

Pułapki TrapInit są uruchamiane jako obrazy Docker. Aby więc zbudować obraz naszej pułapki, musimy go zdefiniować za pomocą Dockerfile.

Ten tutorial zakłada już podstawową znajomość narzędzia Docker. Jeśli chcesz dowiedzieć się więcej na temat tego narzędzia, sprawdź dokumentację Docker'a.

Nasza pułapka będzie napisana w języku Python, dlatego też tworzony Dockerfile jest dostosowany dla aplikacji Python. Należy także zwrócić uwagę, że instalowane jest narzędzie TrapCLI, zgodnie z przykładem.

Utwórz w folderze definicji plik Dockerfile z następującą zawartością:


FROM curlimages/curl as trapcli

# Download and install TrapCLI
ARG TRAPCLI_VERSION=1.2.2
RUN curl -f https://downloads.traptech.pl/data/TrapCLI-musl-v${TRAPCLI_VERSION} -o /home/curl_user/TrapCLI \
&& chmod +x /home/curl_user/TrapCLI

FROM python:3.10-alpine

WORKDIR /app

COPY requirements.txt /app
RUN pip install -r requirements.txt

# These packages are needed on alpine to run TrapCLI
RUN apk add ca-certificates zlib libgcc libstdc++
COPY --from=trapcli /home/curl_user/TrapCLI /usr/bin/TrapCLI

COPY app.py /app

EXPOSE 80

# Run TrapCLI as a background process (necessary for health ping and certain functions),
# and the python trap as a foreground process.
CMD TrapCLI daemon & python app.py

Ten plik nie jest określony w trapdef.json i nie będziemy go zawierać w końcowej paczce pułapki. To dlatego, że zamiast tego będziemy dodawać do paczki zbudowane obrazy.

Mamy już wszystko potrzebne do rozpoczęcia pracy. Aktualnie nie jesteśmy w stanie zbudować pułapki, ponieważ brakuje wymaganego kodu źródłowego. Pisanie logiki pułapki rozpoczniemy w następnym etapie.