7,540
edits
Changes
→Minishfit repository
https://github.com/minishift/minishift/issues/817<br>
Ahhoz hogy egy általunk készült docker image-et futtatni tudjunk a minishift klaszteren, elsőként fel kell tölteni azt a minshift image repository-ábaba, ami nem is annyira egyszerű.
Kísérlet képen írtunk egy olyan Java webalkalmazást, ami a GET paraméterben kapott milliszekundum után adja vissza a 200 : 'OK' választ. Az alkalmazás embedded jetty-vel készült, a Docker fájlja az alábbi:
CMD ["java", "-cp", "/home/lib/*:/home/testapp.jar", "com.adam.testapp.App"]
</source>
Az openjdk-11 base image-ből indulunk ki, majd belemásoljuk az összes függőséget, rárakjuk classPath-ra az összes bemásolt jar-t, amjd elindítjuk az alkalmazást a '''com.adam.testapp.App ''' main osztállyal. A cél, hogy az ebből készült image-et másoljuk fel az opensfhit repository-ba, majd készítsünk belőle egy Kubernetes deploymentet-et service-el együtt.
Lépésel:
# Be kell lépni '''oc'''-vel a minisfhit-re, úgy hogy tokent is generáljon a loginhezszerezzünk egy OpenShfit token-t amivel majd be tudunk lépni az OpenShfit docker repository-ba. # A minishit-et futó VM-en a docker klienssel be kell lépni a minisfht-ben futó docker registry-beaz első pontban szerzett token-el.
# Docker-el build-elni kell az image-t.
# A minisfhit-et futtató VM-ről push-olni kell az image-t a minisfhit image registry-be.
Lépjünk be az '''oc login''-al az OpenShift-be. Fontos hogy ne a system hanem a '''developer''' felhasználóval lépjünk be, mert csak neki lesz push joga. {{note|Ha így lépünk be nem jó: # '''oc login -u system:admin'', mert nem keletkezik token. Fontos hogy developer-el lépjünk be, mert a system-nek nincs joga push-olni image-et. }}
<pre>
# oc login
</pre>
Ellenőrizzük, hogy kaptunk e tokent. Ezt az '''oc whoami''' parancs '''-t''' (token) kapcsolójával lehet megtenni. Ha itt nem látjuk a toke-nt akkor dolgozni kell még a belépésen.
<pre>
# oc whoami -t
<pre>
# minishift openshift registry
172.30.1.1:5000
</pre>
Ez a cím a minishift-et futtató VM-en értelmezett IP cím, ezért csak a minishift VM-en futó docker démon-al tudunk rácsatlakozni a repository-ra.
<pre>
# minishift docker-env
# eval $(minishift docker-env)
</pre>
Innentől kezdve minden lokálisan kiadott docker parancs a minishfit vm-en fog futni.
Ezt le tudjuk ellenőrizni, ha listázzuk vagy a futó konténereket vagy az elérhető image-eket:
<pre>
# docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
bitnami/nginx latest ab5cdb60157c 11 hours ago 78.3MB
172.30.1.1:5000/mynamespace/test-app 1.1.0 f984e2105039 23 hours ago 620MB
...
openshift/origin-control-plane v3.11.0 2905f7137f05 4 days ago 829MB
openshift/origin-hyperkube v3.11.0 7f2cb107435c 4 days ago 509MB
openshift/origin-hypershift v3.11.0 7507661b73ff 4 days ago 549MB
...
</pre>
Láthatjuk, hogy csupa openshift-es image van a repóban, tehát már nem az anyagép lokális repository-ját nézzük.
<pre>
# docker login -u developer -p $(oc whoami -t) $(minishift openshift registry)
Login Succeeded
</pre>
Fontos, hogy csak token-el engedi a belépést a registry, jelszóval nem.
Az openshfit-be szánt image-nek a neve az alábbi szintaxist kell kövesse:
<registry-host>:<port>/<névtér>/<image-név>:<tag>
Ahhoz hogy push-olni tudjuk az OpenShift registry-be az image-et a "172.30.1.1:5000/" prefixel kell kezdődjön a neve. Innen fogja tudni a docker, hogy melyik registry-be akarjuk push-olni. A második elem a névtér neve, amihez az image tartozni fog. Az image-ek ugyan úgy névterekbe kerülnek mint minden kubernetes objektum.
<pre>
# docker build -t 172.30.1.1:5000/mynamespace/test-app:1.1.0 .
</pre>
Ellenőrizzük le, hogy bekerült e a test-app a minisfhit VM lokális docker repository-jába: (mivel az anyagépen futó docker kliens át van irányítva, ezért az anyagépen kiadott docker parancsokkal elvégezhető az ellenőrzés)
<pre>
# docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
...
172.30.1.1:5000/mynamespace/test-app 1.1.0 f984e2105039 23 hours ago 620MB
</pre>
Nem maradt más dolgunk, mint hogy a '''docker push''' paranccsal felküldjük az image-t az opensfhit repository-ba. A nevéből fogja tudni a '''docker push''' hogy melyik repository-ba kell küldeni és ott melyik névtérbe.
<pre>
# docker push 172.30.1.1:5000/mynamespace/test-app:1.1.0