Tool.Yun
Handige tools voor ontwikkelaars
Achtergrond van de afbeelding verwijderen
Afbeelding EXIF/Metadata/GPS/JPEG Kwaliteitslezer
Afbeelding bijsnijden
Afbeelding naar SVG (potrace)
Afbeelding vergelijken
Afbeeldingsformaat wijzigen
Afbeeldingskleuromvormer
Camera recorder
Converter voor afbeeldingsformaten
EXIF verwijderen
GIF naar MP4
HEIC-converter
ICO/PNG-converter
OCR-afbeelding en PDF
SVG-voorbeeldweergave
Watermerk
Base64 Hex-array-encoder/-decoder
Base64 bestandconversie
Base64 string encoder/decoder
Basis converter
Converter voor veel eenheden
Csv naar gegevens
Dataopslageenheid converter
E-mailnormalisator
Eigenschappen converter
Energieverbruik- en kostencomputer
Env-variabelen formaatconverter
Excel naar gegevens
Omrekenaar van geografische coördinaten
Romeins cijfer omzetten
Tekst naar UTF-8 binair
Tekst naar Unicode
Torrent naar Magneet
ULID-generator
Unicode-tekens naar Java-entiteiten converter
dBm mW-converter
AGE Cryptografie
Ansible kluis crypt decoderen
Argon2 Hasher
Bcrypt
Bech32 Encoder/Decoder
Bestand Hasher
CRC-calculator
Certificaat-/sleutelparser
ECDSA-sleutelpaargenerator
Ed25519 sleutelpaargenerator
HMAC generator
Hash-tekst
JWT-generator
JWT-parser
Jasypt String Encryption
MVO-generator
Niceware Bytes naar wachtwoordzin
PGP-bestandsversleuteling
PGP-encryptie
PGP-sleutelgenerator
Paseto/PASERK Lokaal
Paseto/PASERK Publiek/Privé
RSA-encryptie
RSA-sleutelpaar generator
RSA/DSA/ECDSA-ondertekenaar en verificateur
SAML-parser
SSL-certificaatconverter
Shamirs geheime delen
Versleutel / ontsleutel tekst
X509-certificaatgenerator
BMI-calculator
BTW-nummervalidator
Compatibiliteit van softwarelicenties
Creditcardcontrole
IBAN validator en parser
IES-verlichtingsrichtlijnen
ISBN-validator en -parser
ISO 3166 Landcodezoeker
ISO 639-zoeker
Kalenderomzetter
Leg het shellcommando uit
Looptempo calculator
Luhn Validator
Online woordenboek
RMB Hoofdletterconverter
SLA-calculator
Telefoon parser en formatter
Unicode-zoekopdracht
Valutacalculator
Aftellen
Chronometer
Cron/Weekdag Alarm
Dagencalculator
Datum+Duurcalculator
Datum/tijd-converter
Duurcalculator
ETA calculator
ICAL-bestandsparser
ICAL-generator
TTL-calculator
Tijdalarm
Tijdzone-omzetter
Weeknummers converter
Welke dag?
iCal-fusie
Docker Compose Validator
Docker Compose naar .env-bestand
Docker Compose naar Docker run converter
Docker Compose naar Quadlets
Docker Compose-formaatconverter
Docker Pangolin-labels
Docker compose naar Kubernetes
Docker inspecteren om Docker uit te voeren
Docker run naar Docker compose converter
Docker run naar Kubernetes
Docker-image-downloader
Docker-run naar Quadlets
Dockerfile Label Generator
Kubernetes RBAC-generator
Traefik Docker Compose Maker
Amortisatiecalculator
ActiveDirectory LDAP-eigenschappenzoeker
Bestandstypedetector
Bounce e-mailparser
Converter voor drijvende-kommagetallen
Cookies-parser
DMARC-rapportanalysator
DNS-propagatietester
DNS-tester
Dode pixeltester
E-mailparser
EMV TLV-decoder
ETH-transactiedecoder
GZip/Deflate-converter
Gevoelige gegevensmasker
HTTPS-tester
Hex-encoder/decoder
Keycode-informatie
Korte URL's Expander
MIME-coderingsconverter
Midden-Endiaanse converter
MongoDB ObjectId-converter
Nmap Command Builder
Outlook MSG-parser
Outlook Safelink-decoder
Parketbestandenlezer
RJ45 Cat6 bedradingsspiekbrief
SMART Raw Converter
Seriële poortconsole
Sharepoint Share URL Decoder
Sneeuwvlok-ID-extractor
TCPDump-generator
Tekstcharsetdetector/-decoder
URL parser
URL-builder
Weerstandscalculator
键盘测试器
Dobbelsteenroller
Kaartkiezer
Muntengooier
Rad van fortuin
BIP39 wachtwoordgenerator
Diceware wachtwoordgenerator
Generator voor willekeurige getallen
NanoIDs-generator
Numeroniem generator
OTP-codegenerator
Pincodegenerator
Token generator
UUID-converter
UUID-generator
Wachtwoordzingenerator
Berichtenpakket naar JSON
CSV naar JSON
JS naar JSON-converter
JSON naar .env
JSON naar C#
JSON naar CSV
JSON naar JS-converter
JSON naar Java Entiteit
JSON naar MessagePack
JSON naar TOML
JSON naar TS
JSON naar XML
JSON naar YAML converter
JSON naar gegevens
JSON om bezwaar te maken
JSON om te gaan
JSON opmaken en formatteren
JSON verkleinen
JSON-afvlakker/ontvlakker
JSON-diff
JSON-editor
JSON-fusie
JSON-linter
JSON-sorteermaster
Jq/JSONPath-tester
Json Escaper/Unescaper
Json naar PHP-Array
Json naar PHP-code
Json naar Python
Json naar SQL DDL
Json naar schema
Json-grootte-analysator
Json-query
Json-stringconverter
ObjGen naar JSON
PHP-Array naar JSON
tools.json-patch.name
Epub naar Markdown
HTML naar markdown
Markdown Lorem Ipsum
Markdown naar DOCX
Markdown naar HTML
Markdown naar data
Markdown naar tekst
Markdown-editor
Markdown-inhoudsopgavegenerator
Markdown-tabelgenerator
Markdown-tabelprettiger
Markdown-verschil
Markdown-voorbeeld
Plakken als Markdown
tools.markdown-format-converter.name
Beeldverhoudingcalculator
Benchmark-builder
Geo-afstandscalculator
Percentage calculator
Acceleratieomvormer
Drukeenheden converter
Energie-eenheden converter
Fitnesscomputer
Frequentieomzetter
Hoekeenheden converter
Kracht-eenheden converter
Lengte-eenheden converter
Massa-eenheden converter
Oppervlakte-eenheden converter
SI-voorvoegselomzetter
Snelheidsomzetter
Temperatuurconverter
Verlichtingssterkteconverter
Vermogenomvormer
Voedsel-energieomzetter
Volume-eenheden converter
Volumestroomomzetter
ARPA-decoder
Apache LogRotate Generator
BIMI DNS-generator
Basis-auth generator
Calculator voor het uitsluiten van IP-subnetten
Chmod calculator
Cloudflare DNS/RDAP-query's
Crontab generator
Curl Command Generator
DKIM DNS-generator
DMARC DNS-generator
DNS-query's
DNSBL-controleur
FStab-generator
Gegevensoverdrachtssnelheidcalculator
Gehele getallen naar IPv4/IPv6
Generator voor afsluitopdrachten
HAS-ontsmettingsmiddel
HDD-calculator
HTAccess-generator
Htpasswd/htaccess-generator
IP-geografische locatie
IPv4 subnetcalculator
IPv4-6/IPRange/CIDR in IP-bereik/CIDR/IP-masker
IPv4-adresconverter
IPv4-bereik uitbreider
IPv4-subnetlister
IPv4/6-bereik naar CIDR(s)-calculator
IPv6 ULA-generator
IPv6-adresconverter
IPv6-subnetcalculator
Iptables-generator
Ipv4/6 CIDR naar IP-bereikcalculator
MAC-adres generator
MAC-adres opzoeken
MAC-adresconverter
Microfoontester
Mijn IP-adres
Multilink-downloader
Nginx-formatter
Optie43 generator
PTR DNS-generator
Ping
Poortnummers
Punycode-converter
RAID-betrouwbaarheidscalculator
RAID-calculator
Rsync-generator
SIP-autorisatie
SPF DNS-generator
Shell-opdrachten formatteren
Shell-opdrachten linearisator
TCP/UDP-poorttester
UFW-commandogenerator
Visuele subnetcalculator
WPA PSK-generator
Wachtwoord sterkte-analyse
Websocket-testen
Whois-controle
Willekeurige poortgenerator
Wireguard-configuratiegenerator
X-VR-SpamCause Decoder
ZPOOL RAID-calculator
ZPool Spiekbriefje
Zxcvbn Wachtwoordsterkte
firewalld opdrachtregelgenerator
tools.restic-command-generator.name
tools.url-redirection-checker.name
ANSI Escape Tester
API-tests
Bestandssplitter
CSS/JS Opmaak & Minimalisatie
Cli-opdracht-editor
Code/Scripts Markeerstift
Database tabelgenerator
Database-creatiebuilder
Databaseverbindingsreeksbouwer
Django Secret Generator
Favicon-generator
Gegevensvervalser
GitIgnore-generator
Gitattributengenerator
HEX-bestandsconverter
Javascript Obfuscator
Javascript Prettifier
Javascript Unobfuscator/Unpacker
Json naar Protobuf
Json naar SQL INSERT
Json naar Typescript
K6 Load Testing Script Generator
Krulconverter
Mailto-generator
Offerte Converter
Open graph meta generator
Picomatch-tester
Pomodoro-timer
SQL opmaken en formatteren
SQL-minifier
SQL-parametergenerator
Stacktrace mooier
String Escaper
Swagger UI-tester
HTML naar PDF
PDF decoderen en ontgrendelen
PDF versleutelen
PDF-compressor
PDF-handtekening checker
PDF-pagina-extractor
PDF-tekstextractor
Pdf Lineariseren/FastWeb
Pdf-concatener
Algemene Regex-spiekbrief
Bash Spiekbriefje
CSS-selectors-spiekbriefje
Docker Compose-spiekbriefje
Docker SWARM-spiekbriefje
Docker-spiekbriefje
Dockerfile-spiekbriefje
Git Semantische Commit Spiekbriefje
Git cheatsheet
JSONPath-syntaxis-spiekbriefje
Jq Spiekbriefje
K8s Spiekbriefje
Markdown-spiekbriefje
Nano Spiekbriefje
Nginx Spiekbriefje
PowerShell-spiekbrief
Regex-spiekbriefje
Sed-spiekbriefje
Spiekbrief voor Zellij-commando's
Spiekbriefje voor Tmux-opdrachten
Spiekbriefje voor schermopdrachten
VIM-spiekbriefje
XPath-syntaxis-spiekbriefje
chmod Commando Spiekbriefje
Cron-expressiebouwer
Barcodegenerator
Barcodelezer
GTIN-validator
QR-code generator
QR-codedecoder
QR-contactgegevensgenerator
WiFi QR-code generator
tools.epc-qrcode-generator.name
TOML Linter
TOML naar JSON
TOML naar YAML
AI Prompt Splitter
ASCII-kunsttekstgenerator
Afbeelding naar ASCII Art
Bestanden inpakken voor AI
Citatiegenerator
Dubbele regelszoeker
Emoji keuze
GPT-token-encoder/-decoder
GPT-tokenschatter
Hoofdletter-omzetter
I en L-controleur
JSON naar TOON
Lettertype vergelijken
Levenshtein-rekenmachine
Lijstconverter
Lijsten vergelijken
Lorem ipsum generator
Mapstructuurdiagram
Morsecode-omzetter
RSVP-lezer
Regex-tester
Rune-converter
Sed Command-generator
Slimme tekstvervanger en regelafbreking
Sociale linkdeler
String obfuscator
TOON naar JSON
Tab naar Spaces
Tekst naar NAVO-alfabet
Tekst naar Unicode-namen
Tekst uit HTML halen
Tekst-diff
Tekststatistieken
Tekstvertaler
Toetsenbordindeling converter
Unicode naar GSM-7
Unicode-formatter
Verschillende woorden
Willekeurige regelkiezer
Zalgo Generator/Banner
Zeemeermin exporteur
Afbeelding naar CSS
Apparaat-informatie
CSS XPath-converter
CSS-eenhedenconverter
CSS-verloopgenerator
Css-prettiger
HTML WYSIWYG-editor
HTML naar XHTML
HTML naar data
HTML-entiteiten
HTML-minifier
HTML-prettiger
HTML-reiniger
HTTP-statuscodes
Kleurcontrastcontrole
Kleurconverter
Kleurenwiel
MIME-types
REM Pixelconverter
SVG placeholder generator
Slugify string
URL-catcher
URL-encoder
URL-reiniger
UTM-URL-generator
Url Tekst Zoeken Fragment Maker
User-agent parser
Binaire rekenmachine
Converter voor wiskundige formaten
Fooiencalculator
Trigonometrische/vergelijkingscurve-visualisator
Wiskunde evaluator
Wiskundige OCR
ObjGen naar HTML
XML formatter
XML naar JSON
XML-linter
XPath-tester
XSLT-tester
YAML naar JSON converter
YAML naar TOML
YAML opmaken en formatteren
YAML-afvlakker/ontvlakker
YAML-fusie

Dockerfile-spiekbriefje

Dockerfile-syntaxis en build-cheatsheet

A Dockerfile is the recipe for an image: each instruction runs in order and most of them add a layer. Layers are cached, so the order you write them in decides how fast your rebuilds are.

# syntax=docker/dockerfile:1
FROM node:22-alpine
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY . .
CMD ["node", "server.js"]

💡 Start the file with # syntax=docker/dockerfile:1 to get the current BuildKit frontend — that is what enables heredocs, cache mounts and build secrets.

📋 Instruction Reference

InstructionPurpose
FROMThe base image, and the start of a build stage
ARGA build-time variable (--build-arg)
ENVAn environment variable, kept in the final image
WORKDIRThe working directory for the instructions that follow
COPYCopy files from the context (or another stage) into the image
ADDLike COPY, but also fetches URLs and unpacks archives
RUNExecute a command at build time and commit the result
CMDDefault command, easily overridden at docker run
ENTRYPOINTThe executable the container always runs
EXPOSEDocument the port the app listens on
USERThe user the following instructions and the container run as
VOLUMEDeclare a path that should be a mount point
HEALTHCHECKHow Docker decides the container is healthy
LABELImage metadata
SHELLChange the shell used by the shell form of RUN/CMD
STOPSIGNALThe signal sent to stop the container
ONBUILDAn instruction that runs when this image is used as a base

🏗 Base Image & Metadata

# pin the base image — 'latest' makes builds irreproducible
FROM node:22-alpine

# name a stage so later stages can copy from it
FROM golang:1.23 AS build

# an ARG before the first FROM can parameterise the base image itself
ARG NODE_VERSION=22
FROM node:${NODE_VERSION}-alpine

# metadata; the OCI keys are the conventional ones
LABEL org.opencontainers.image.source="https://github.com/acme/app"
LABEL org.opencontainers.image.description="Acme API"

📂 Files & Working Directory

# always set an absolute working directory
WORKDIR /app

# copy from the build context
COPY package*.json ./
COPY . .

# copy and set ownership in one step, no extra layer for chown
COPY --chown=node:node . .

# copy with explicit permissions
COPY --chmod=755 entrypoint.sh /usr/local/bin/

# copy from another stage, or straight from another image
COPY --from=build /src/app /usr/local/bin/app
COPY --from=nginx:alpine /etc/nginx/nginx.conf /etc/nginx/nginx.conf

# ADD unpacks archives and fetches URLs — prefer COPY unless you need that
ADD archive.tar.gz /opt/
ADD https://example.com/file.tar.gz /tmp/

# declare a mount point for data that should not live in the image
VOLUME ["/data"]

⚙️ Build Steps

# shell form: runs through /bin/sh -c
RUN apt-get update && apt-get install -y --no-install-recommends curl \
    && rm -rf /var/lib/apt/lists/*

# exec form: no shell, so no globbing or variable expansion
RUN ["npm", "ci", "--omit=dev"]

# heredoc: a readable multi-line script (BuildKit)
RUN <<EOF
set -eux
apk add --no-cache curl
adduser -D appuser
EOF

# cache mount: keep the package cache between builds
RUN --mount=type=cache,target=/root/.npm npm ci

# secret mount: use a credential without baking it into a layer
RUN --mount=type=secret,id=npmrc,target=/root/.npmrc npm ci

# bind mount: read from the context without copying it in
RUN --mount=type=bind,source=package.json,target=package.json npm ci

🚀 Runtime Configuration

# environment variables are visible to the running container
ENV NODE_ENV=production
ENV PATH="/app/bin:$PATH"

# document the port — this does not publish it, -p does
EXPOSE 3000

# drop root as early as you can
RUN adduser -D appuser
USER appuser

# tell Docker how to check the app is alive
HEALTHCHECK --interval=30s --timeout=3s --start-period=20s --retries=3 \
  CMD wget -qO- http://localhost:3000/health || exit 1

# the signal that stops the process cleanly
STOPSIGNAL SIGTERM

# the command the container runs
CMD ["node", "server.js"]

⚔️ CMD vs ENTRYPOINT

CMDENTRYPOINT
PurposeDefault arguments, or the whole default commandThe executable the image is built around
docker run <image> other-cmdReplaced entirelyStill runs; the argument is appended
Override flag—--entrypoint
Typical useCMD ["node", "server.js"]ENTRYPOINT ["python", "app.py"]
# together: ENTRYPOINT is the binary, CMD holds the default arguments
ENTRYPOINT ["python", "app.py"]
CMD ["--port", "8000"]

# docker run image                 → python app.py --port 8000
# docker run image --port 9000     → python app.py --port 9000

⚠️ Prefer the exec form (["cmd", "arg"]). The shell form wraps your process in /bin/sh -c, which swallows SIGTERM and turns graceful shutdown into a ten-second kill.

🧱 Multi-Stage Builds

Several FROM instructions in one file: build with a fat toolchain, ship only the artifact.

# stage 1 — build
FROM node:22-alpine AS build
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY . .
RUN npm run build

# stage 2 — the image that actually ships
FROM nginx:alpine
COPY --from=build /app/dist /usr/share/nginx/html
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]
# a compiled binary on a near-empty base
FROM golang:1.23 AS build
WORKDIR /src
COPY . .
RUN CGO_ENABLED=0 go build -o /out/app ./cmd/app

FROM gcr.io/distroless/static-debian12
COPY --from=build /out/app /app
USER nonroot:nonroot
ENTRYPOINT ["/app"]
# build only up to a named stage — handy for a test or lint stage
docker build --target build -t app:build .

📁 .dockerignore

Everything in the build context is sent to the daemon and busts the cache. Exclude what the build does not need:

.git
node_modules
dist
*.log
.env
Dockerfile
.dockerignore

🧠 Best Practices

  • Order by how often things change: base image, then dependency manifests, then npm ci/pip install, then the source. A source edit should not reinstall dependencies.
  • Pin versions — node:22.11-alpine, not node:latest.
  • One RUN per logical step, chaining installs and cleanup in the same layer (rm -rf /var/lib/apt/lists/*), or the deleted files still weigh on the image.
  • Never bake secrets in. A deleted file stays in the layer below; use --mount=type=secret or build arguments that never reach the final stage.
  • Run as a non-root user and keep the final stage as small as you can (alpine, distroless, scratch).
  • Use COPY, not ADD, unless you specifically want URL fetching or archive extraction.
  • Combine with --platform for multi-arch: docker buildx build --platform linux/amd64,linux/arm64.

🛠 Building & Running

# build from the Dockerfile in this directory
docker build -t my-app .

# build without the cache
docker build --no-cache -t my-app .

# a Dockerfile somewhere else
docker build -f docker/Dockerfile.prod -t my-app .

# pass a build argument
docker build --build-arg NODE_VERSION=20 -t my-app .

# pass a secret (never becomes a layer)
docker build --secret id=npmrc,src=$HOME/.npmrc -t my-app .

# build for another architecture
docker buildx build --platform linux/arm64 -t my-app .

# inspect the layers of the result
docker history my-app

# run it
docker run -p 3000:3000 my-app

📄 Full Example

# syntax=docker/dockerfile:1
FROM node:22-alpine AS deps
WORKDIR /app
COPY package*.json ./
RUN --mount=type=cache,target=/root/.npm npm ci

FROM node:22-alpine AS build
WORKDIR /app
COPY --from=deps /app/node_modules ./node_modules
COPY . .
RUN npm run build

FROM node:22-alpine
LABEL org.opencontainers.image.source="https://github.com/acme/app"
ENV NODE_ENV=production
WORKDIR /app
COPY --from=deps --chown=node:node /app/node_modules ./node_modules
COPY --from=build --chown=node:node /app/dist ./dist
USER node
EXPOSE 3000
HEALTHCHECK --interval=30s CMD wget -qO- http://localhost:3000/health || exit 1
CMD ["node", "dist/server.js"]

📚 Resources

  • Dockerfile reference
  • Building best practices
  • BuildKit mounts (cache, secret, bind)
  • Multi-stage builds