Clojure-funktionaalinen ohjelmointi ja JVM-backend-kehitys · Oppitunti

Kontitus Dockerilla

Opitte paketoimaan Clojure-sovelluksia Docker-kontteihin yhdenmukaista käyttöönottoa varten eri ympäristöissä.

Oppitunti 2/412 vaihetta

Kontitus Dockerilla on ilmainen Clojure-funktionaalinen ohjelmointi ja JVM-backend-kehitys-oppitunti CoddyKitissä. Tämä on oppitunti 2/4. Voit lukea koko oppitunnin alta ilmaiseksi ja harjoitella sen jälkeen käytännössä selaimessa sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla. Oppitunti kuuluu Clojure-funktionaalinen ohjelmointi ja JVM-backend-kehitys-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. Clojure-funktionaalinen ohjelmointi ja JVM-backend-kehitys-kurssilla on yhteensä 4 oppituntia.

Mikä Docker on

Docker auttaa paketoimaan sovellukset ja kaikki niiden riippuvuudet standardoituihin yksiköihin, joita kutsutaan konteiksi. Ajattele sitä kevyenä virtuaalikoneena, joka on kuitenkin paljon tehokkaampi!

Clojure-kehittäjille Docker varmistaa, että sovellus toimii täsmälleen samalla tavalla omalla koneellasi, työtoverisi koneella tai pilvessä. ”Toimii minun koneellani” -ongelmat jäävät historiaan!

Levykuvat ja kontit

Dockerin ytimessä on kaksi keskeistä käsitettä:

  • Levykuvat: Ne ovat vain luku -muotoisia malleja, eräänlaisia sovelluksen piirustuksia. Ne sisältävät koodin, kirjastot ja suoritusympäristön.
  • Kontit: Ne ovat levykuvan suoritettavia instansseja. Voit käynnistää, pysäyttää, siirtää tai poistaa kontin vaikuttamatta levykuvaan.

Dockerfile on komentosarja, joka kertoo Dockerille, kuinka levykuva rakennetaan.

Dockerfilen aloittaminen

Jokainen Dockerfile alkaa FROM-ohjeella. Se määrittää pohjalevykuvan, jonka päälle sovellus rakennetaan. Clojurea varten OpenJDK-levykuva (Java-kehityspaketti) on erinomainen valinta.

WORKDIR-ohje määrittää levykuvan seuraavien komentojen oletushakemiston.

FROM openjdk:17-jdk-slim
WORKDIR /app

Projektin riippuvuudet (deps.edn)

Clojure-verkkosovelluksemme tarvitsee kirjaston HTTP-pyyntöjen käsittelyyn. Käytämme Ringin Jetty-sovitinta. Tämä riippuvuus ilmoitetaan deps.edn-tiedostossa, jota Clojure käyttää riippuvuuksien hallintaan.

Määrittelemme kartan, jossa avaimet ovat kirjastojen nimiä ja arvot ilmoittavat niiden version. Näin Clojure tietää, mistä tarvittava koodi etsitään ja ladataan.

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

Yksinkertainen verkkosovelluksemme

Kirjoitetaan nyt minimaalinen Clojure-verkkopalvelin. Tämä tiedosto, src/server.clj, toimii sovelluksemme aloituspisteenä. Se käynnistää porttia 3000 kuuntelevan Jetty-palvelimen ja vastaa tekstillä "Hello from Docker!".

Kokeilkaa sen suorittamista ensin paikallisesti (kun olette määrittäneet deps.edn-tiedoston ja suorittaneet komennon clojure -P):

(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}))

Koodin kopioiminen ja riippuvuuksien asentaminen

Seuraavaksi kopioimme deps.edn-tiedoston ja lähdekoodin säilöön. On hyvä käytäntö kopioida deps.edn ensin ja suorittaa clojure -P. Jos deps.edn ei muutu, Docker voi käyttää tätä kerrosta uudelleen, mikä nopeuttaa koontiversioiden tekemistä.

Sen jälkeen kopioimme projektin loput tiedostot.

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

Dockerfilen viimeistely

Verkkosovellusta varten Dockerille on ilmoitettava, mitä porttia sovelluksemme kuuntelee. EXPOSE-käsky dokumentoi tämän. CMD puolestaan määrittää suoritettavan komennon, kun säilö käynnistyy, ja käynnistää Clojure-sovelluksemme.

Clojure-sovelluksemme suorittaa server-nimiavaruuden -main-funktion.

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

Imagen koonti

Kun Dockerfile ja Clojure-projektimme ovat valmiit, voimme muodostaa Docker-imagen. Siirtykää projektin juurihakemistoon (jossa sijaitsevat Dockerfile, deps.edn ja src) ja suorittakaa tämä komento:

  • -t antaa imagelle nimen ja valinnaisen version.
  • . kertoo Dockerille, että Dockerfile etsitään nykyisestä hakemistosta.
docker build -t my-clojure-web-app .

Säilön suorittaminen

Kun image on muodostettu, voitte suorittaa sen säilönä. Käytämme -p-valitsinta yhdistämään isäntäkoneen portin (esimerkiksi 8080) säilön sisäiseen porttiin (3000, jota sovelluksemme käyttää).

Kun säilö on käynnissä, avatkaa selaimessa osoite http://localhost:8080 nähdäksesi Clojure-sovelluksenne!

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

Miksi käyttää säilöjä?

Clojure-sovellusten suorittaminen säilöissä tarjoaa monia etuja:

  • Yhdenmukaisuus: Sovellus toimii samalla tavalla kaikkialla.
  • Eristys: Säilöt eristävät sovelluksen muista sovelluksista ja isäntäjärjestelmästä.
  • Siirrettävyys: Sovelluksen siirtäminen ympäristöstä toiseen on helppoa.
  • Skaalautuvuus: Sovelluksesta voi käynnistää nopeasti useita instansseja.

Tämä yksinkertaistaa huomattavasti Clojure-palveluiden käyttöönottoa ja hallintaa.

Dockerfilen komentojen tarkistus

Mitkä seuraavista Dockerfilen käskyistä on kuvattu oikein?

Kertaus: Docker ja Clojure

Olette oppineet, miten Docker auttaa paketoimaan Clojure-sovelluksia yhdenmukaista käyttöönottoa varten. Käsittelimme seuraavat aiheet:

  • Imagejen ja säilöjen peruskäsitteet.
  • Dockerfilen kirjoittaminen keskeisillä käskyillä, kuten FROM, WORKDIR, COPY, RUN, EXPOSE ja CMD.
  • Docker-imagen muodostaminen ja sen suorittaminen säilönä.

Nämä tiedot ovat olennaisia vankkojen Clojure-mikropalveluiden käyttöönotossa!

Aloita maksutta

Opi Clojure tekoälytuutorin avulla — ilmaiseksi

Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.

Kurssit
12
Oppitunnit
48

Usein kysytyt kysymykset

Onko oppitunti ”Kontitus Dockerilla” ilmainen?

Kyllä – oppitunnin ”Kontitus Dockerilla” koko tekstin voi lukea täällä verkossa ilmaiseksi. Jos haluat harjoitella interaktiivisesti sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla sekä avata koko Clojure-funktionaalinen ohjelmointi ja JVM-backend-kehitys-kurssin, päivitä CoddyKit PROhon. Clojure-funktionaalinen ohjelmointi ja JVM-backend-kehitys-kurssilla on yhteensä 4 oppituntia.

Mitä opin oppitunnilla ”Kontitus Dockerilla”?

Opitte paketoimaan Clojure-sovelluksia Docker-kontteihin yhdenmukaista käyttöönottoa varten eri ympäristöissä. Harjoittelet Clojure-funktionaalinen ohjelmointi ja JVM-backend-kehitys-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.

Tarvitsenko kokemusta aloittaakseni Clojure-funktionaalinen ohjelmointi ja JVM-backend-kehitys-opiskelun?

Aiempi kokemus ei ole tarpeen. CoddyKitin Clojure-funktionaalinen ohjelmointi ja JVM-backend-kehitys-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 2/4.

Kuinka kauan ”Kontitus Dockerilla”-oppitunnin suorittaminen kestää?

Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.

Voinko kirjoittaa ja suorittaa koodia tällä Clojure-funktionaalinen ohjelmointi ja JVM-backend-kehitys-oppitunnilla?

Kyllä. Jokainen Clojure-funktionaalinen ohjelmointi ja JVM-backend-kehitys-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.

Kaikki tämän kurssin oppitunnit

  1. Clojure-mikropalvelujen suunnittelu
  2. Kontitus Dockerilla
  3. Käyttöönotto pilvialustoille
  4. Palveluiden etsintä ja API-yhdyskäytävät
← Takaisin: Clojure-funktionaalinen ohjelmointi ja JVM-backend-kehitys