Functioneel programmeren met Clojure en backendontwikkeling op de JVM · Les

Containerisatie met Docker

Leer uw Clojure-applicaties in Docker-containers te verpakken voor consistente deployment in verschillende omgevingen.

Les 2 van 412 stappen

Containerisatie met Docker is een gratis Functioneel programmeren met Clojure en backendontwikkeling op de JVM-les op CoddyKit. Dit is les 2 van 4. Je kunt de volledige les hieronder gratis lezen en daarna in de browser praktisch oefenen met een ingebouwde code-editor en een AI-begeleider die 24/7 beschikbaar is. Deze les maakt deel uit van het leertraject Functioneel programmeren met Clojure en backendontwikkeling op de JVM. Je voortgang wordt gesynchroniseerd op het web en in de CoddyKit-app. De cursus Functioneel programmeren met Clojure en backendontwikkeling op de JVM bevat in totaal 4 lessen.

Wat is Docker?

Met Docker kun je je toepassingen en al hun afhankelijkheden verpakken in gestandaardiseerde eenheden die containers worden genoemd. Zie het als een lichtgewicht virtuele machine, maar dan veel efficiënter!

Voor Clojure-ontwikkelaars zorgt Docker ervoor dat je toepassing op jouw computer, op de computer van een teamgenoot of in de cloud precies hetzelfde draait. Geen problemen meer met "het werkt op mijn computer"!

Images versus containers

De kern van Docker bestaat uit twee belangrijke concepten:

  • Images: dit zijn alleen-lezen-sjablonen, vergelijkbaar met een bouwtekening voor je toepassing. Ze bevatten je code, bibliotheken en runtime.
  • Containers: dit zijn uitvoerbare instanties van een image. Je kunt een container starten, stoppen, verplaatsen of verwijderen zonder het image te beïnvloeden.

Een Dockerfile is een script dat Docker vertelt hoe het een image moet bouwen.

Je Dockerfile beginnen

Elke Dockerfile begint met een FROM-instructie. Deze specificeert het basisimage waarop je toepassing wordt gebouwd. Voor Clojure is een OpenJDK-image (Java Development Kit) een uitstekende keuze.

De WORKDIR-instructie stelt de standaardmap in voor volgende opdrachten in het image.

FROM openjdk:17-jdk-slim
WORKDIR /app

Projectafhankelijkheden (deps.edn)

Onze Clojure-webapp heeft een bibliotheek nodig om HTTP-verzoeken af te handelen. We gebruiken de Jetty-adapter van Ring. Deze afhankelijkheid staat in je deps.edn-bestand, dat Clojure gebruikt voor afhankelijkheidsbeheer.

We definiëren een kaart waarin de sleutels bibliotheeknamen zijn en de waarden hun versie aangeven. Zo weet Clojure hoe het de benodigde code kan vinden en downloaden.

{:deps {ring/ring-jetty-adapter {:mvn/version "1.9.5"}}}

Onze eenvoudige webapp

Laten we nu een minimale Clojure-webserver schrijven. Dit bestand, src/server.clj, wordt het startpunt van onze applicatie. Het start een Jetty-server die naar poort 3000 luistert en reageert met "Hello from Docker!".

Probeer deze eerst lokaal uit te voeren (nadat je deps.edn hebt ingesteld en clojure -P hebt uitgevoerd):

(ns server
  (:require [ring.adapter.jetty :as jetty])
  (:gen-class))

(defn handler [request]
  {:status 200
   :headers {"Content-Type" "text/plain"}
   :body "Hello from Clojure in Docker!"})

(defn -main []
  (println "Starting server on port 3000...")
  (jetty/run-jetty handler {:port 3000 :join? false}))

Code kopiëren en afhankelijkheden installeren

Vervolgens kopiëren we deps.edn en de broncode naar de container. Het is een goede gewoonte om eerst deps.edn te kopiëren en clojure -P uit te voeren. Als deps.edn niet verandert, kan Docker deze laag opnieuw gebruiken, waardoor builds sneller worden.

Daarna kopiëren we de overige projectbestanden.

FROM openjdk:17-jdk-slim
WORKDIR /app
COPY deps.edn .
RUN clojure -P
COPY src src

De Dockerfile voltooien

Voor een webapp moeten we Docker vertellen naar welke poort onze applicatie luistert. De instructie EXPOSE documenteert dit. Vervolgens geeft CMD aan welke opdracht moet worden uitgevoerd wanneer de container start, zodat onze Clojure-applicatie wordt gestart.

Onze Clojure-applicatie voert de functie -main uit in de namespace server.

FROM openjdk:17-jdk-slim
WORKDIR /app
COPY deps.edn .
RUN clojure -P
COPY src src
EXPOSE 3000
CMD ["clojure", "-M", "-m", "server"]

Je image bouwen

Nu de Dockerfile en ons Clojure-project klaar zijn, kunnen we de Docker-image bouwen. Ga naar de hoofdmap van je project (waar Dockerfile, deps.edn en src staan) en voer deze opdracht uit:

  • -t voorziet je image van een naam en optioneel een versienummer.
  • . vertelt Docker dat het de Dockerfile in de huidige map moet zoeken.
docker build -t my-clojure-web-app .

Je container uitvoeren

Nadat de image is gebouwd, kun je deze als container uitvoeren. We gebruiken de optie -p om een poort op je hostcomputer (bijvoorbeeld 8080) te koppelen aan de poort in de container (3000, zoals die door onze applicatie wordt blootgesteld).

Open na het uitvoeren je browser op http://localhost:8080 om je Clojure-applicatie te bekijken!

docker run -p 8080:3000 my-clojure-web-app

Waarom containers gebruiken?

Het containeriseren van je Clojure-applicaties biedt veel voordelen:

  • Consistentie: Je app werkt overal hetzelfde.
  • Isolatie: Containers isoleren je app van andere apps en het hostsysteem.
  • Draagbaarheid: Verplaats je app eenvoudig tussen verschillende omgevingen.
  • Schaalbaarheid: Start snel meerdere instanties van je app.

Dit maakt de implementatie en het beheer van Clojure-services veel eenvoudiger.

Controle van Dockerfile-opdrachten

Welke van de volgende Dockerfile-instructies zijn correct beschreven?

Samenvatting: Docker voor Clojure

Je hebt geleerd hoe Docker helpt om Clojure-applicaties te verpakken voor een consistente implementatie. We hebben het volgende behandeld:

  • De basisbegrippen Images en Containers.
  • Het schrijven van een Dockerfile met belangrijke instructies zoals FROM, WORKDIR, COPY, RUN, EXPOSE en CMD.
  • Het bouwen van een Docker-image en deze uitvoeren als container.

Deze kennis is essentieel voor het implementeren van robuuste Clojure-microservices!

Gratis beginnen

Leer Clojure met een AI-tutor — gratis

Schrijf echte code en voer die uit in je browser, krijg direct hulp van een AI-tutor die 24/7 beschikbaar is en ga verder waar je gebleven bent op het web of in de app.

Cursussen
12
Lessen
48

Veelgestelde vragen

Is de les “Containerisatie met Docker” gratis?

Ja — de volledige tekst van “Containerisatie met Docker” kun je hier gratis op het web lezen. Als je interactief wilt oefenen met een ingebouwde code-editor en een AI-begeleider die 24/7 beschikbaar is, en de rest van de cursus Functioneel programmeren met Clojure en backendontwikkeling op de JVM wilt ontgrendelen, kun je upgraden naar CoddyKit PRO. De cursus Functioneel programmeren met Clojure en backendontwikkeling op de JVM bevat in totaal 4 lessen.

Wat leer ik in “Containerisatie met Docker”?

Leer uw Clojure-applicaties in Docker-containers te verpakken voor consistente deployment in verschillende omgevingen. Je oefent met Functioneel programmeren met Clojure en backendontwikkeling op de JVM door code rechtstreeks in de browser uit te voeren. Een AI-begeleider die 24/7 beschikbaar is beantwoordt je vragen terwijl je de les doorwerkt.

Heb ik ervaring nodig om met Functioneel programmeren met Clojure en backendontwikkeling op de JVM te beginnen?

Ervaring vooraf is niet nodig. Functioneel programmeren met Clojure en backendontwikkeling op de JVM op CoddyKit is opgebouwd voor beginners tot gevorderden, zodat je hier of bij het begin kunt starten en in je eigen tempo kunt leren. Dit is les 2 van 4.

Hoe lang duurt de les “Containerisatie met Docker”?

De meeste lessen van CoddyKit duren ongeveer 5–10 minuten. Elke les is kort en interactief, zodat je gestaag vooruitgaat en op het web en in de app precies verdergaat waar je was gebleven.

Kan ik code schrijven en uitvoeren in deze les over Functioneel programmeren met Clojure en backendontwikkeling op de JVM?

Ja. Elke les over Functioneel programmeren met Clojure en backendontwikkeling op de JVM bevat een ingebouwde code-editor, zodat je rechtstreeks in je browser echte code kunt schrijven en uitvoeren en direct feedback van AI krijgt — lokale installatie is niet nodig.

Alle lessen in deze cursus

  1. Clojure-microservices ontwerpen
  2. Containerisatie met Docker
  3. Deployen naar cloudplatforms
  4. Servicediscovery en API-gateways
← Terug naar Functioneel programmeren met Clojure en backendontwikkeling op de JVM