Docker útmutató Java-hoz

1. Áttekintés

Ebben a cikkben egy másik jól bevált platformspecifikus API-t veszünk szemügyre - Java API kliens a Dockerhez.

A cikk során megértjük, hogyan lehet csatlakozni egy futó Docker démonhoz, és milyen fontos funkciókat kínál az API a Java fejlesztőknek.

2. Maven-függőség

Először hozzá kell adnunk a fő függőséget pom.xml fájl:

 com.github.docker-java docker-java 3.0.14 

A cikk írásakor az API legújabb verziója a 3.0.14. Minden kiadás megtekinthető a GitHub kiadási oldalán vagy a Maven tárházban.

3. A Docker Client használata

DockerClient itt létesíthetünk kapcsolatot a Docker motor / démon és az alkalmazásunk között.

Alapértelmezés szerint a Docker démon csak a unix: ///var/run/docker.sock fájl. Helyileg tudunk kommunikálni a Docker motor hallgatja a Unix aljzatot, hacsak másképp nincs beállítva.

Itt alkalmazzuk a DockerClientBuilder osztály létrehozásához kapcsolatot az alapértelmezett beállítások elfogadásával:

DockerClient dockerClient = DockerClientBuilder.getInstance (). Build ();

Hasonlóképpen, két lépésben megnyithatunk egy kapcsolatot:

DefaultDockerClientConfig.Builder config = DefaultDockerClientConfig.createDefaultConfigBuilder (); DockerClient dockerClient = DockerClientBuilder .getInstance (config) .build ();

Mivel a motorok más jellemzőkre támaszkodhatnak, az ügyfél különböző feltételekkel is konfigurálható.

Például az építő elfogad egy szerver URL-t, vagyis frissíthetjük a kapcsolat értékét, ha a motor elérhető a 2375-ös porton:

DockerClient dockerClient = DockerClientBuilder.getInstance ("tcp: //docker.baeldung.com: 2375") .build ();

Ne feledje, hogy elő kell állnunk a kapcsolati karakterlánc unix: // vagy tcp: // a csatlakozás típusától függően.

Ha tovább lépünk, a fejlettebb konfigurációhoz juthatunk a DefaultDockerClientConfig osztály:

DefaultDockerClientConfig config = DefaultDockerClientConfig.createDefaultConfigBuilder () .withRegistryEmail ("[e-mail védett]") .withRegistryPassword ("baeldung") .withRegistryUsername ("baeldung" / cockert (baeldung "/ock_docker / homeDocker / home) /withDocker /. "/home/baeldung/.docker/") .withDockerTlsVerify ("1") .withDockerHost ("tcp: //docker.baeldung.com: 2376") .build (); DockerClient dockerClient = DockerClientBuilder.getInstance (config) .build ();

Hasonlóképpen, ugyanazt a megközelítést hajthatjuk végre a Tulajdonságok:

Tulajdonságok tulajdonságai = új Tulajdonságok (); properties.setProperty ("register.email", "[email protected]"); properties.setProperty ("register.password", "baeldung"); properties.setProperty ("register.username", "baaldung"); tulajdonságok.setProperty ("DOCKER_CERT_PATH", "/home/baeldung/.docker/certs"); tulajdonságok.setProperty ("DOCKER_CONFIG", "/home/baeldung/.docker/"); properties.setProperty ("DOCKER_TLS_VERIFY", "1"); tulajdonságok.setProperty ("DOCKER_HOST", "tcp: //docker.baeldung.com: 2376"); DefaultDockerClientConfig config = DefaultDockerClientConfig.createDefaultConfigBuilder () .withProperties (tulajdonságok) .build (); DockerClient dockerClient = DockerClientBuilder.getInstance (config) .build ();

Egy másik választás, hacsak nem konfiguráljuk a motor beállításait a forráskódban, az a megfelelő környezeti változók beállítása, hogy csak a DockerClient a projektben:

export DOCKER_CERT_PATH = / home / baeldung / .docker / certs export DOCKER_CONFIG = / home / baeldung / .docker / export DOCKER_TLS_VERIFY = 1 export DOCKER_HOST = tcp: //docker.baeldung.com: 2376

4. Konténerkezelés

Az API számos lehetőséget kínál számunkra a tárolók kezelésével kapcsolatban. Nézzük meg mindegyiket.

4.1. Tartályok felsorolása

Most, hogy létrejött a kapcsolat, felsorolhatjuk az összes futó tárolót, amelyek a Docker gazdagépen találhatók:

Listakonténerek = dockerClient.listContainersCmd (). Exec ();

Feltéve, hogy a futó tárolók megjelenítése nem vonzza a szükségletet, a tárolók lekérdezéséhez felhasználhatjuk a kínált lehetőségeket.

Ebben az esetben a „kilép” állapotú tárolókat jelenítjük meg:

Listakonténerek = dockerClient.listContainersCmd () .withShowSize (true) .withShowAll (true) .withStatusFilter ("exited"). Exec ()

Ez egyenértékű:

$ docker ps -a -s -f állapot = kilépett # vagy $ docker konténer ls -a -s -s -f állapot = kilépett

4.2. Hozzon létre egy tárolót

A konténer létrehozása a createContainerCmd módszer. Bonyolultabb nyilatkozatot deklarálhatunk felhasználásávala rendelkezésre álló módszerekval vel" előtag.

Tegyük fel, hogy van egy dokkmunkásteremt parancs, amely meghatározza a gazdagéptől függő MongoDB tárolót, amely belső figyelést hallgat a 27017 porton:

$ docker create --name mongo \ --hostname = baeldung \ -e MONGO_LATEST_VERSION = 3.6 \ -p 9999: 27017 \ -v / Users / baeldung / mongo / data / db: / data / db \ mongo: 3.6 --bind_ip_all

Programozottan indíthatjuk ugyanazt a tárolót és annak konfigurációit:

CreateContainerResponse container = dockerClient.createContainerCmd ("mongo: 3.6") .withCmd ("- bind_ip_all") .WithName ("mongo") .wostHameName ("baeldung") .withEnv ("MONGO_LATEST_. parse ("9999: 27017")) .withBinds (Bind.parse ("/ Felhasználók / baeldung / mongo / data / db: / data / db")). exec ();

4.3. Indítson el, állítson le és öljön meg egy konténert

A konténer létrehozása után elindíthatjuk, leállíthatjuk és megölhetjük név vagy azonosító szerint:

dockerClient.startContainerCmd (container.getId ()). exec (); dockerClient.stopContainerCmd (container.getId ()). exec (); dockerClient.killContainerCmd (container.getId ()). exec ();

4.4. Vizsgáljon meg egy konténert

A inspectContainerCmd módszer a Húr argumentum, amely a tároló nevét vagy azonosítóját jelöli. Ezzel a módszerrel közvetlenül megfigyelhetjük a konténer metaadatait:

InspectContainerResponse container = dockerClient.inspectContainerCmd (container.getId ()). Exec ();

4.5. Pillanatkép egy konténerről

Hasonló a dokkoló elkötelezi magát paranccsal létrehozhatunk egy új képet a kötelezettségCmd módszer.

Példánkban a forgatókönyv az, korábban futtattunk egy alpine: 3.6 konténert, amelynek azonosítója „3464bb547f88” és telepítve van git a tetején.

Most egy új pillanatképet szeretnénk létrehozni a tárolóból:

Karakterlánc-pillanatképId = dockerClient.commitCmd ("3464bb547f88") .withAuthor ("Baeldung <[e-mail védett]>") .withEnv ("SNAPSHOT_YEAR = 2018") .withMessage ("git támogatás hozzáadása" .withCmd ("git" verzió ") .withRepository (" alpine ") .withTag (" 3.6.git "). exec ();

Mivel az új képünk együtt volt git továbbra is a gazdagépen marad, a Docker gazdagépen kereshetünk rá:

$ docker image ls alpine --format "tábla {{.Repository}} {{.Tag}}" REPOSITORY TAG alpine 3.6.git

5. Képkezelés

Néhány alkalmazható parancsot kapunk a képműveletek kezelésére.

5.1. Sorolja fel a képeket

Az összes rendelkezésre álló kép felsorolásához, beleértve a Docker gazdagépen lógó képeket is, alkalmaznunk kell a listImagesCmd módszer:

Képek listája = dockerClient.listImagesCmd (). Exec ();

Ha két képünk van a Docker Hoston, meg kellene szereznünk a Kép objektumok futás közben. A keresett képek a következők:

$ docker image ls --format "tábla {{.Repository}} {{.Tag}}" REPOSITORY TAG alpine 3.6 mongo 3.6

E mellett a köztes képek megtekintéséhez kifejezetten meg kell kérnünk:

Képek listája = dockerClient.listImagesCmd () .withShowAll (true) .exec ();

Ha csak a lógó képeket jeleníti meg, a withDanglingFilter módszert kell figyelembe venni:

Képek listája = dockerClient.listImagesCmd () .wangDanglingFilter (true) .exec ();

5.2. Készítsen képet

Koncentráljunk a kép API-n keresztül történő elkészítésének módjára. A buildImageCmd metódus Docker képeket épít egy Docker fájlból. A projektünkben már van egy Dockerfile, amely egy alpesi képet ad git telepítve:

FROM alpine: 3.6 RUN apk - frissítés add git openssh && \ rm -rf / var / lib / apt / lists / * && \ rm / var / cache / apk / * ENTRYPOINT ["git"] CMD ["--help "]

Az új kép gyorsítótár használata nélkül készül, és az építési folyamat megkezdése előtt a Docker motor minden esetben megpróbálja meghúzni a alpesi: 3.6. Ha minden jól megy, akkor látnunk kell a képet a megadott névvel,alpesi: git:

Karakterlánc imageId = dockerClient.buildImageCmd () .withDockerfile (új fájl ("elérési út / Dockerfile")) .withPull (true) .withNoCache (true) .withTag ("alpine: git") .exec (új BuildImageResultCallback ( .awaitImageId ();

5.3. Vizsgáljon meg egy képet

A képnek köszönhetően ellenőrizhetjük az alacsony szintű információkat inspectImageCmd módszer:

InspectImageResponse image = dockerClient.inspectImageCmd ("161714540c41"). Exec ();

5.4. Kép megcímkézése

Címke hozzáadása a képünkhöz meglehetősen egyszerű a dokkmunkáscímke parancsot, tehát az API sem kivétel. Ugyanezt a szándékot megvalósíthatjuk a tagImageCmd módszer is. Docker-kép címkézése azonosítóval 161714540c41 a baeldung / alpine tárolóba git segítségével:

Karakterlánc imageId = "161714540c41"; Karakterlánc = "baeldung / alpine"; Karakterlánc = "git"; dockerClient.tagImageCmd (imageId, adattár, címke) .exec ();

Felsorolnánk az újonnan létrehozott képet, és ott van:

$ docker image ls --format "tábla {{.Repository}} {{.Tag}}" REPOSITORY TAG "baeldung / alpine git

5.5. Nyomjon egy képet

Mielőtt képet küldene egy nyilvántartási szolgáltatásnak, a dokkoló klienst konfigurálni kell a szolgáltatással való együttműködésre, mert a regiszterekkel való munkát előzetesen hitelesíteni kell.

Mivel feltételezzük, hogy az ügyfelet a Docker Hub alkalmazással konfigurálták, megnyomhatjuk a baeldung / alpesi kép a baeldung DockerHub fiókba:

dockerClient.pushImageCmd ("baeldung / alpine") .withTag ("git") .exec (új PushImageResultCallback ()) .awaitCompletion (90, TimeUnit.SECONDS);

Be kell tartanunk a folyamat időtartamát. A példában 90 másodpercet várunk.

5.6. Húzza a képet

Képek letöltéséhez a rendszerleíró adatbázisból használjuk a pullImageCmd módszer. Ezenkívül, ha a képet privát nyilvántartásból veszik ki, az ügyfélnek ismernie kell a hitelesítő adatainkat, különben a folyamat kudarccal végződik. Ugyanaz, mint a kép húzása, megadunk egy visszahívást és egy rögzített időszakot a kép húzásához:

dockerClient.pullImageCmd ("baeldung / alpine") .withTag ("git") .exec (új PullImageResultCallback ()) .awaitCompletion (30, TimeUnit.SECONDS);

Annak ellenőrzéséhez, hogy az említett kép létezik-e a Docker gazdagépen, miután meghúzta:

$ docker images baeldung / alpine --format "tábla {{.Repository}} {{.Tag}}" TÁROLÓTAG címke baeldung / alpine git

5.7. Távolítson el egy képet

Egy másik egyszerű funkció a többiek között a removeImageCmd módszer. Eltávolíthatunk egy képet rövid vagy hosszú azonosítóval:

dockerClient.removeImageCmd ("beaccc8687ae"). exec ();

5.8. Keresés a nyilvántartásban

Kép kereséséhez a Docker Hubról az ügyfél a searchImagesCmd metódus String értéket vesz fel, amely kifejez egy kifejezést. Itt egy olyan nevhez kapcsolódó képeket tárunk fel, amelyJáva' a Docker Hubban:

List elemek = dockerClient.searchImagesCmd ("Java"). Exec ();

A kimenet az első 25 kapcsolódó képet adja vissza a SearchItem tárgyakat.

6. Kötetkezelés

Ha a Java-projekteknek kölcsönhatásba kell lépniük a Dockerrel a kötetekhez, akkor ezt a szakaszt is figyelembe kell vennünk. Röviden áttekintjük a Docker Java API által biztosított kötetek alapvető technikáit.

6.1. Kötetek felsorolása

Az összes rendelkezésre álló kötet, beleértve a megnevezett és névtelen felsorolást is, a következőket tartalmazza:

ListVolumesResponse volumeResponse = dockerClient.listVolumesCmd (). Exec (); Listakötetek = volumeResponse.getVolumes ();

6.2. Vizsgáljon meg egy kötetet

A inspectVolumeCmd módszer a kötet részletes információinak megjelenítésére szolgáló űrlap. A kötetet rövid azonosítójának megadásával ellenőrizzük:

InspectVolumeResponse volume = dockerClient.inspectVolumeCmd ("0220b87330af5"). Exec ();

6.3. Hozzon létre egy kötetet

Az API két különböző lehetőséget kínál egy kötet létrehozásához. A nem arg createVolumeCmd metódus létrehoz egy kötetet, ahol a nevet a Docker adja:

CreateVolumeResponse unnamedVolume = dockerClient.createVolumeCmd (). Exec ();

Az alapértelmezett viselkedés helyett a segítő módszer hívott withNév segítségével beállíthatunk egy nevet egy kötethez:

CreateVolumeResponse namedVolume = dockerClient.createVolumeCmd (). WithName ("myNamedVolume"). Exec ();

6.4. Távolítson el egy kötetet

A Docker gazdagépről intuitív módon törölhetünk egy kötetet a removeVolumeCmd módszer. Fontos megjegyezni, hogy nem törölhetünk egy kötetet egy tárolóból, ha használatban van. Eltávolítjuk a kötetet, myNamedVolume, a kötetlistából:

dockerClient.removeVolumeCmd ("myNamedVolume"). exec ();

7. Hálózatkezelés

Utolsó szakaszunk a hálózati feladatok API-val történő kezeléséről szól.

7.1. Hálózatok felsorolása

Megjeleníthetjük a hálózati egységek listáját a hagyományos API módszerek egyikével kezdve lista:

List hálózatok = dockerClient.listNetworksCmd (). Exec ();

7.2. Hozzon létre egy hálózatot

A megfelelője dokkoló hálózat létrehozása parancsot a createNetworkCmd módszer. Ha harminc félünk van vagy egyedi hálózati illesztőprogramunk van, akkor a a sofőrrel metódus elfogadhatja őket a beépített illesztőprogramok mellett. Esetünkben hozzunk létre egy hídhálózatot, amelynek a neve baeldung:

CreateNetworkResponse networkResponse = dockerClient.createNetworkCmd () .withName ("baeldung") .withDriver ("híd"). Exec ();

Ezenkívül egy hálózati egység létrehozása az alapértelmezett beállításokkal nem oldja meg a problémát, más segítő módszereket is alkalmazhatunk egy fejlett hálózat felépítéséhez. Így, hogy az alapértelmezett alhálózatot felülírja egy egyéni értékkel:

CreateNetworkResponse networkResponse = dockerClient.createNetworkCmd () .withName ("baeldung") .withIpam (új Ipam () .withConfig (új Config () .withSubnet ("172.36.0.0/16") .withIpRange (" ))) .Wriver ("híd"). exec ();

Ugyanaz a parancs, amelyet a dokkmunkás parancs:

$ docker hálózat létrehozása \ --subnet = 172.36.0.0 / 16 \ --ip-range = 172.36.5.0 / 24 \ baeldung

7.3. Ellenőrizze a hálózatot

A hálózat alacsony szintű részleteinek megjelenítésére az API is kiterjed:

Hálózati hálózat = dockerClient.inspectNetworkCmd (). WithNetworkId ("baeldung"). Exec ();

7.4. Hálózat eltávolítása

A. Segítségével biztonságosan eltávolíthatunk egy hálózati egységet annak nevével vagy azonosítójával removeNetworkCmd módszer:

dockerClient.removeNetworkCmd ("baeldung"). exec ();

8. Következtetés

Ebben a kiterjedt oktatóanyagban feltártuk a Java Docker API kliens, valamint számos bevezetési megközelítés a telepítési és kezelési forgatókönyvekhez.

A cikkben bemutatott összes példa megtalálható a GitHub oldalon.


$config[zx-auto] not found$config[zx-overlay] not found