{"id":6149,"date":"2019-06-30T00:45:12","date_gmt":"2019-06-29T22:45:12","guid":{"rendered":"https:\/\/u-labs.de\/portal\/?p=6149"},"modified":"2019-06-30T00:53:36","modified_gmt":"2019-06-29T22:53:36","slug":"docker-images-auf-eigene-registry-pushen","status":"publish","type":"post","link":"https:\/\/u-labs.de\/portal\/docker-images-auf-eigene-registry-pushen\/","title":{"rendered":"Docker-Images auf eigene Registry pushen"},"content":{"rendered":"<p>Im folgenden Artikel m\u00f6chten wir anhand eines Dockerfiles ein Image bauen, taggen und zu einer Registry pushen. Hierbei wird eine selbst-gehostete Registry auf Basis des offiziellen Images von Docker verwendet. Dies kann beispielsweise zur Bereitstellung von Images innerhalb eines Kubernetes-Clusters dienen. Grunds\u00e4tzlich k\u00f6nnen auch Drittanbieter-Registrys wie z.B. der Docker-Hub genutzt werden, sofern man dies m\u00f6chte.<\/p>\n<h2 class=\"wp-block-heading\">Push-Skript erstellen<\/h2>\n<p>Grunds\u00e4tzlich k\u00f6nnen alle Befehle direkt in der Konsole ausgef\u00fchrt werden. Allerdings ben\u00f6tigen wir verschiedene Infos wie z.B. das Image-Name oder den Tag mehrfach. Ich empfehle daher, ein kleines Shell-Skript anzulegen. Dies erleichtert auch das Deployment, da dort festgehalten und versioniert wird, welche Tags\/Versionen existieren. Zun\u00e4chst die Meta-Informationen:<\/p>\n<div class=\"wp-block-syntaxhighlighter-code \">\n<pre class=\"brush: bash; title: ; notranslate\" title=\"\">\nname=my-app\ntag=0.1.4\nfullTag=${name}:${tag}\nregistryUrl=localhost:5000\n<\/pre>\n<\/div>\n<p>Nun wird das Docker-Image erstellt, getaggt und in unsere Registry gepusht:<\/p>\n<div class=\"wp-block-syntaxhighlighter-code \">\n<pre class=\"brush: bash; title: ; notranslate\" title=\"\">\ndocker build -t ${fullTag} .\nif &#x5B; $? != 0 ]; then\n    echo &quot;Fehler beim erstellen des Images&quot;\n    exit 1\nfi\n \ndocker login -u &quot;admin&quot; -p &quot; &quot; ${registryUrl}\ndocker tag ${fullTag} ${registryUrl}\/${fullTag}\ndocker push ${registryUrl}\/${fullTag}\necho &quot;Image gepusht: ${fullTag}&quot;\n<\/pre>\n<\/div>\n<p>Im Beispiel wird eine lokale Docker-Registry ohne Authentifizierung genutzt. Fragen wir unsere Registry ab, zeigt sie das soeben erstellte Repo: <\/p>\n<div class=\"wp-block-syntaxhighlighter-code \">\n<pre class=\"brush: plain; title: ; notranslate\" title=\"\">\n$ curl http:\/\/localhost:5000\/v2\/_catalog\n{&quot;repositories&quot;:&#x5B;&quot;my-app&quot;]}\n<\/pre>\n<\/div>\n<p>Auch die gepushten Tags lassen sich abfragen:<\/p>\n<div class=\"wp-block-syntaxhighlighter-code \">\n<pre class=\"brush: plain; title: ; notranslate\" title=\"\">\n$ curl http:\/\/localhost:5000\/v2\/my-app\/tags\/list\n{&quot;name&quot;:&quot;my-app&quot;,&quot;tags&quot;:&#x5B;&quot;0.1.4&quot;]}\n<\/pre>\n<\/div>\n<h2 class=\"wp-block-heading\">Proxy f\u00fcr Build setzen<\/h2>\n<p>Dockerfiles laden nicht selten verschiedene Pakete aus dem Internet herunter. In Unternehmensnetzwerken stellt dies ein Problem dar: Meist besitzen die Systeme keinen direkten Internetzugang. Hierf\u00fcr kommt ein Proxy zum Einsatz. Damit die Verbindung hergestellt werden kann, ist es n\u00f6tig, den Proxy entsprechend f\u00fcr jede Anwendung zu setzen. <\/p>\n<p>Linux besitzt hierzu die Umgebungsvariablen http_proxy und https_proxy. Nicht alle Anwendungen ber\u00fccksichtigen diese, aber viele. Dazu geh\u00f6ren auch verbreitete CLI-Werkzeuge wie curl oder wget. \u00dcber Buildargumente k\u00f6nnen wir diese Variablen von au\u00dfen f\u00fcr den Container setzen:<\/p>\n<div class=\"wp-block-syntaxhighlighter-code \">\n<pre class=\"brush: bash; title: ; notranslate\" title=\"\">\ndocker build --build-arg http_proxy=${http_proxy}\\\n    --build-arg https_proxy=${https_proxy} \\\n    --build-arg no_proxy=localhost,127.0.0.1 \\\n    -t ${fullTag} .\n<\/pre>\n<\/div>\n<p>Obwohl traditionell in Linux eher die kleingeschriebene Variante genutzt wird, empfehle ich aus Erfahrung, beide zu setzen. Es gibt zwar wenige Programme, welche nur die gro\u00dfgeschriebene Variante unterst\u00fctzen. Aber wenn man eines erwischt, kann das zu einer langen Fehlersuche f\u00fchren. Dar\u00fcber hinaus ist zu empfehlen, die Firmen-Domain f\u00fcr den Proxy auszuschlie\u00dfen. Die Adresse des Proxy-Servers sowie jegliche andere Hostnamen werden am besten als FQDN angegeben.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Im folgenden Artikel m\u00f6chten wir anhand eines Dockerfiles ein Image bauen, taggen und zu einer Registry pushen. Hierbei wird eine selbst-gehostete Registry auf Basis des offiziellen Images von Docker verwendet. Dies kann beispielsweise zur Bereitstellung von Images innerhalb eines Kubernetes-Clusters dienen. Grunds\u00e4tzlich k\u00f6nnen auch Drittanbieter-Registrys wie z.B. der Docker-Hub genutzt werden, sofern man dies m\u00f6chte. &#8230;<\/p>\n","protected":false},"author":5,"featured_media":6159,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[74,5,78],"tags":[497,721,719,722],"class_list":["post-6149","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-linux","category-news","category-software","tag-docker","tag-image","tag-kubernetes","tag-registry"],"_links":{"self":[{"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/posts\/6149","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/users\/5"}],"replies":[{"embeddable":true,"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/comments?post=6149"}],"version-history":[{"count":4,"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/posts\/6149\/revisions"}],"predecessor-version":[{"id":6160,"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/posts\/6149\/revisions\/6160"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/media\/6159"}],"wp:attachment":[{"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/media?parent=6149"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/categories?post=6149"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/tags?post=6149"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}