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.
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 /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.