{"id":47,"date":"2019-11-05T22:38:10","date_gmt":"2019-11-05T22:38:10","guid":{"rendered":"https:\/\/www.vandervecken.com\/faucet\/?p=47"},"modified":"2019-11-05T22:53:18","modified_gmt":"2019-11-05T22:53:18","slug":"caching-with-docker-registry","status":"publish","type":"post","link":"https:\/\/faucet.vandervecken.com\/index.php\/2019\/11\/05\/caching-with-docker-registry\/","title":{"rendered":"caching with docker-registry"},"content":{"rendered":"\n<p>Docker based systems are great, but if you live in New Zealand (and in rural New Zealand, like I do), repeated docker pulls to the Internet can be a little painful. Fortunately you can <a href=\"https:\/\/docs.docker.com\/registry\/recipes\/mirror\/\">configure docker-registry to locally cache<\/a>.<\/p>\n\n\n\n<p>First install docker-registry and configure it as a proxy.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"># <code>apt-get install docker-registry<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-preformatted\"><code># vi \/etc\/docker\/registry\/config.yml<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-preformatted\"><code># cat \/etc\/docker\/registry\/config.yml <br> version: 0.1<br> log:<br>   fields:<br>     service: registry<br> storage:<br>   cache:<br>     blobdescriptor: inmemory<br>   filesystem:<br>     rootdirectory: \/var\/lib\/docker-registry<br>   delete:<br>     enabled: true<br> http:<br>   addr: :5000<br>   headers:<br>     X-Content-Type-Options: [nosniff]<br> health:<br>   storagedriver:<br>     enabled: true<br>     interval: 10s<br>     threshold: 3<br><\/code><strong><code> proxy:<br>   remoteurl: https:\/\/registry-1.docker.io<\/code><\/strong><\/pre>\n\n\n\n<pre class=\"wp-block-preformatted\"><code># service docker-registry restart<\/code><br><\/pre>\n\n\n\n<p>Now configure docker to use the proxy.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"><code># vi \/etc\/docker\/daemon.json <\/code><\/pre>\n\n\n\n<pre class=\"wp-block-preformatted\"><code># cat \/etc\/docker\/daemon.json <br> {<br>   \"storage-driver\": \"overlay2\",<br> <\/code><strong><code>  \"registry-mirrors\": [\"http:\/\/localhost:5000\"]<\/code><\/strong><code><br> }<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-preformatted\">#<code> service docker restart<\/code><\/pre>\n\n\n\n<p>Now when you do a docker pull, the cache will be used if the latest image is available locally.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"><code># docker pull faucet\/gauge<br> Using default tag: latest<br> latest: Pulling from faucet\/gauge<br> Digest: sha256:26e2c56800df26deccc6a1d8377c697d7ca2a38cf2d8fc52739bb6b634028298<br> Status: Image is up to date for faucet\/gauge:latest<br> docker.io\/faucet\/gauge:latest<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-preformatted\"><code># grep docker-registry \/var\/log\/syslog|grep gauge<br> Nov  5 22:29:21 finf-gw docker-registry[29624]: time=\"2019-11-05T22:29:21Z\" level=info msg=\"Challenge established with upstream : {https   registry-1.docker.io \/v2\/  %!s(bool=false)  } &amp;{{{%!s(int32=0) %!s(uint32=0)} %!s(uint32=0) %!s(uint32=0) %!s(int32=0) %!s(int32=0)} map[https:\/\/registry-1.docker.io:443\/v2\/:[{bearer map[realm:https:\/\/auth.docker.io\/token service:registry.docker.io]}]]}\" go.version=go1.8.1 http.request.host=\"localhost:5000\" http.request.id=fb8d44dd-193a-4a18-8625-35dc3ea015eb http.request.method=GET http.request.remoteaddr=\"[::1]:49450\" http.request.uri=\/v2\/faucet\/gauge\/manifests\/latest http.request.useragent=\"docker\/19.03.4 go\/go1.12.10 git-commit\/9013bf583a kernel\/5.3.0-19-generic os\/linux arch\/amd64 UpstreamClient(Docker-Client\/19.03.4 (linux))\" instance.id=9bdb53c3-1d48-4015-9708-8f1ddc816651 vars.name=faucet\/gauge vars.reference=latest version=v2.6.2+debian<br> Nov  5 22:29:23 finf-gw docker-registry[29624]: time=\"2019-11-05T22:29:23Z\" level=info msg=\"Adding new scheduler entry for faucet\/gauge@sha256:26e2c56800df26deccc6a1d8377c697d7ca2a38cf2d8fc52739bb6b634028298 with ttl=167h59m59.999997987s\" go.version=go1.8.1 instance.id=9bdb53c3-1d48-4015-9708-8f1ddc816651 version=v2.6.2+debian<br> Nov  5 22:29:23 finf-gw docker-registry[29624]: time=\"2019-11-05T22:29:23Z\" level=info msg=\"response completed\" go.version=go1.8.1 http.request.host=\"localhost:5000\" http.request.id=fb8d44dd-193a-4a18-8625-35dc3ea015eb http.request.method=GET http.request.remoteaddr=\"[::1]:49450\" http.request.uri=\/v2\/faucet\/gauge\/manifests\/latest http.request.useragent=\"docker\/19.03.4 go\/go1.12.10 git-commit\/9013bf583a kernel\/5.3.0-19-generic os\/linux arch\/amd64 UpstreamClient(Docker-Client\/19.03.4 (linux))\" http.response.contenttype=application\/vnd.docker.distribution.manifest.v2+json http.response.duration=3.545613795s http.response.status=200 http.response.written=1582 instance.id=9bdb53c3-1d48-4015-9708-8f1ddc816651 version=v2.6.2+debian<br> Nov  5 22:29:23 finf-gw docker-registry[29624]: ::1 - - [05\/Nov\/2019:22:29:20 +0000] \"GET \/v2\/faucet\/gauge\/manifests\/latest HTTP\/1.1\" 200 1582 \"\" \"docker\/19.03.4 go\/go1.12.10 git-commit\/9013bf583a kernel\/5.3.0-19-generic os\/linux arch\/amd64 UpstreamClient(Docker-Client\/19.03.4 \\(linux\\))\"<br> Nov  5 22:31:51 finf-gw docker-registry[29624]: time=\"2019-11-05T22:31:51Z\" level=info msg=\"response completed\" go.version=go1.8.1 http.request.host=\"localhost:5000\" http.request.id=013a90e2-11e3-44d8-8875-03aca0c54be5 http.request.method=GET http.request.remoteaddr=\"[::1]:49702\" http.request.uri=\/v2\/faucet\/gauge\/manifests\/latest http.request.useragent=\"docker\/19.03.4 go\/go1.12.10 git-commit\/9013bf583a kernel\/5.3.0-19-generic os\/linux arch\/amd64 UpstreamClient(Docker-Client\/19.03.4 (linux))\" http.response.contenttype=application\/vnd.docker.distribution.manifest.v2+json http.response.duration=2.237893853s http.response.status=200 http.response.written=1582 instance.id=9bdb53c3-1d48-4015-9708-8f1ddc816651 version=v2.6.2+debian<br> Nov  5 22:31:51 finf-gw docker-registry[29624]: ::1 - - [05\/Nov\/2019:22:31:49 +0000] \"GET \/v2\/faucet\/gauge\/manifests\/latest HTTP\/1.1\" 200 1582 \"\" \"docker\/19.03.4 go\/go1.12.10 git-commit\/9013bf583a kernel\/5.3.0-19-generic os\/linux arch\/amd64 UpstreamClient(Docker-Client\/19.03.4 \\(linux\\))\"<\/code><\/pre>\n","protected":false},"excerpt":{"rendered":"<p>Docker based systems are great, but if you live in New Zealand (and in rural New Zealand, like I do), repeated docker pulls to the Internet can be a little painful. Fortunately you can configure docker-registry to locally cache. First install docker-registry and configure it as a proxy. # apt-get install docker-registry # vi \/etc\/docker\/registry\/config.yml &hellip; <\/p>\n<p class=\"link-more\"><a href=\"https:\/\/faucet.vandervecken.com\/index.php\/2019\/11\/05\/caching-with-docker-registry\/\" class=\"more-link\">Continue reading<span class=\"screen-reader-text\"> &#8220;caching with docker-registry&#8221;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-47","post","type-post","status-publish","format-standard","hentry","category-uncategorised","entry"],"_links":{"self":[{"href":"https:\/\/faucet.vandervecken.com\/index.php\/wp-json\/wp\/v2\/posts\/47","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/faucet.vandervecken.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/faucet.vandervecken.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/faucet.vandervecken.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/faucet.vandervecken.com\/index.php\/wp-json\/wp\/v2\/comments?post=47"}],"version-history":[{"count":5,"href":"https:\/\/faucet.vandervecken.com\/index.php\/wp-json\/wp\/v2\/posts\/47\/revisions"}],"predecessor-version":[{"id":53,"href":"https:\/\/faucet.vandervecken.com\/index.php\/wp-json\/wp\/v2\/posts\/47\/revisions\/53"}],"wp:attachment":[{"href":"https:\/\/faucet.vandervecken.com\/index.php\/wp-json\/wp\/v2\/media?parent=47"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/faucet.vandervecken.com\/index.php\/wp-json\/wp\/v2\/categories?post=47"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/faucet.vandervecken.com\/index.php\/wp-json\/wp\/v2\/tags?post=47"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}