{"id":321236,"date":"2021-04-11T15:00:18","date_gmt":"2021-04-11T15:00:18","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=321236"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=321236","title":{"rendered":"Traefik, docker \u0438 docker registry"},"content":{"rendered":"\n<div class=\"post__text post__text_v2\" id=\"post-content-body\">\n<h3>\u041f\u043e\u0434 \u043a\u0430\u0442\u043e\u043c \u0432\u044b \u0443\u0432\u0438\u0434\u0438\u0442\u0435:<\/h3>\n<ol>\n<li>\n<p>\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f Traefik \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043e\u0431\u0440\u0430\u0442\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u043a\u0441\u0438 \u0434\u043b\u044f \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u0438\u0437\u0430\u0446\u0438\u0438 \u0442\u0440\u0430\u0444\u0438\u043a\u0430 \u0432\u043d\u0443\u0442\u0440\u044c docker \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u043e\u0432.<\/p>\n<\/li>\n<li>\n<p>\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 Traefik \u0434\u043b\u044f \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f Let\u2019s Encrypt \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0432<\/p>\n<\/li>\n<li>\n<p>\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 Traefik \u0434\u043b\u044f \u0440\u0430\u0437\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a docker registry \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 basic auth<\/p>\n<\/li>\n<li>\n<p>\u0412\u0441\u0435 \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0435\u043d\u043d\u043e\u0435 \u0432\u044b\u0448\u0435 \u0431\u0443\u0434\u0435\u0442 \u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0442\u044c\u0441\u044f \u0438\u0441\u043a\u043b\u044e\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0432\u043d\u0443\u0442\u0440\u0438 docker-compose.yml \u0438 \u043d\u0435 \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0445 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0445 \u0444\u0430\u0439\u043b\u043e\u0432 \u0432\u043d\u0443\u0442\u0440\u044c \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u043e\u0432.<\/p>\n<\/li>\n<\/ol>\n<h3>\u0410\u043a\u0442\u0443\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0432\u043e\u043f\u0440\u043e\u0441\u0430<\/h3>\n<p>\u041f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0432\u0441\u0435 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0435\u0441\u0442\u044c \u0432 \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442\u0435, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0445&nbsp; \u0444\u0430\u0439\u043b\u043e\u0432 \u0441 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f\u043c\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0443\u0436\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u0441\u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440 \u043f\u0440\u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0435. \u041c\u044b \u043d\u0430\u0448\u043b\u0438 \u0441\u043f\u043e\u0441\u043e\u0431 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0432\u0441\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0438\u0441\u043a\u043b\u044e\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0432\u043d\u0443\u0442\u0440\u0438 compose \u0444\u0430\u0439\u043b\u0430.<\/p>\n<p>\u041f\u043e\u043c\u0438\u043c\u043e \u044d\u0442\u043e\u0433\u043e \u0432 \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442\u0435 \u043c\u0430\u043b\u043e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u043d\u0430 \u0442\u0435\u043c\u0443 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f traefik \u0434\u043b\u044f \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044f \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a docker registry. \u041e\u043f\u0438\u0441\u0430\u043d\u043d\u0443\u044e \u043d\u0438\u0436\u0435 \u0442\u0435\u0445\u043d\u0438\u043a\u0443 \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0434\u043b\u044f \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044f \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a \u043b\u044e\u0431\u043e\u043c\u0443 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044e, \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u044e\u0449\u0435\u043c\u0443 Rest API.<\/p>\n<h3>\u041f\u043e\u0438\u0441\u043a \u0440\u0435\u0448\u0435\u043d\u0438\u044f<\/h3>\n<p>\u0412\u043e\u0442 <a href=\"https:\/\/docs.docker.com\/registry\/deploying\/\" rel=\"noopener noreferrer nofollow\"><u>\u0441\u0441\u044b\u043b\u043a\u0430 <\/u><\/a>\u043d\u0430 \u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u0443\u044e \u0441\u0442\u0430\u0442\u044c\u044e \u043f\u043e \u0440\u0430\u0437\u0432\u0435\u0440\u0442\u044b\u0432\u0430\u043d\u0438\u044e docker registry. \u041a\u0440\u0443\u0442\u0438\u043c \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443 \u0432\u043d\u0438\u0437 \u0438 \u0432\u0438\u0434\u0438\u043c \u043f\u0440\u0438\u043c\u0435\u0440 \u0440\u0430\u0437\u0432\u0435\u0440\u0442\u044b\u0432\u0430\u043d\u0438\u044f \u0447\u0435\u0440\u0435\u0437 docker-compose. \u042f \u043f\u0435\u0440\u0435\u043f\u0435\u0447\u0430\u0442\u0430\u044e \u043f\u0440\u0438\u043c\u0435\u0440 \u043d\u0438\u0436\u0435:<\/p>\n<pre><code class=\"xml\">registry:   restart: always   image: registry:2   ports:     - 5000:5000   environment:     REGISTRY_HTTP_TLS_CERTIFICATE: \/certs\/domain.crt     REGISTRY_HTTP_TLS_KEY: \/certs\/domain.key     REGISTRY_AUTH: htpasswd     REGISTRY_AUTH_HTPASSWD_PATH: \/auth\/htpasswd     REGISTRY_AUTH_HTPASSWD_REALM: Registry Realm   volumes:     - \/path\/data:\/var\/lib\/registry     - \/path\/certs:\/certs     - \/path\/auth:\/auth<\/code><\/pre>\n<p>\u041d\u0430\u043c \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u044e\u0442 \u0442\u0435\u0440\u043c\u0438\u043d\u0438\u0440\u043e\u0432\u0430\u0442\u044c https \u0442\u0440\u0430\u0444\u0438\u043a \u043f\u0440\u044f\u043c\u043e \u0432\u043d\u0443\u0442\u0440\u0438 \u0441\u0435\u0440\u0432\u0438\u0441\u0430 registry, \u0447\u0435\u0433\u043e \u043c\u044b \u0434\u0435\u043b\u0430\u0442\u044c \u043d\u0435 \u0431\u0443\u0434\u0435\u043c. \u041c\u044b \u043d\u0435 \u0441\u0442\u0430\u043d\u0435\u043c \u0443\u0441\u043b\u043e\u0436\u043d\u044f\u0442\u044c \u0441\u0435\u0431\u0435 \u0436\u0438\u0437\u043d\u044c \u0438 \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u044b \u0432\u043d\u0443\u0442\u0440\u044c \u0441\u0435\u0440\u0432\u0438\u0441\u0430. \u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e \u0443 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u0434\u0440\u0443\u0433\u0438\u0435 https \u0441\u0435\u0440\u0432\u0438\u0441\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u0442\u0430\u043a\u0436\u0435 \u043d\u0443\u0436\u043d\u044b \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u044b, \u0442\u0430\u043a \u0447\u0442\u043e \u0443 \u043d\u0430\u0441 \u0443\u0436\u0435 \u0435\u0441\u0442\u044c \u0435\u0434\u0438\u043d\u0430\u044f \u0442\u043e\u0447\u043a\u0430 \u0432\u0445\u043e\u0434\u0430, \u0433\u0434\u0435 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u044f \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0432 \u0434\u043b\u044f \u043d\u043e\u0432\u044b\u0445 \u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e let&#8217;s encrypt &#8212; \u044d\u0442\u043e \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440 \u0441 traefik.<\/p>\n<p>\u0422\u0430\u043a\u0436\u0435 \u043d\u0430\u043c \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u044e\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0431\u0430\u0437\u043e\u0432\u0443\u044e \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u044e \u0434\u043b\u044f \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a registry, \u043e\u0434\u043d\u0430\u043a\u043e \u043d\u0435 \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u044e\u0442 \u0441\u043f\u043e\u0441\u043e\u0431\u0430 \u0440\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u043f\u0440\u0430\u0432 \u0434\u043e\u0441\u0442\u0443\u043f\u0430. \u0422\u043e \u0435\u0441\u0442\u044c \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u0431\u0443\u0434\u0435\u0442 \u0438\u043c\u0435\u0442\u044c \u043f\u043e\u043b\u043d\u044b\u0439 \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u0441\u0435\u0440\u0432\u0438\u0441\u0443,&nbsp; \u0441\u043c\u043e\u0436\u0435\u0442 \u0447\u0438\u0442\u0430\u0442\u044c \u0438 \u043f\u0438\u0441\u0430\u0442\u044c \u0432 \u043b\u044e\u0431\u043e\u043c&nbsp; \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0438. \u041d\u0430 \u0441\u0430\u0439\u0442\u0435 \u0435\u0441\u0442\u044c <a href=\"https:\/\/docs.docker.com\/registry\/recipes\/nginx\/\" rel=\"noopener noreferrer nofollow\"><u>\u043f\u0440\u0438\u043c\u0435\u0440 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f nginx<\/u><\/a>, \u043d\u043e \u0438 \u0442\u0430\u043c \u043c\u044b \u0432\u0438\u0434\u0438\u043c \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0433\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u0441 \u043f\u043e\u043b\u043d\u044b\u043c\u0438 \u043f\u0440\u0430\u0432\u0430\u043c\u0438.<\/p>\n<p>\u0412 \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442\u0435 \u043c\u044b \u043d\u0430\u0445\u043e\u0434\u0438\u043c <a href=\"https:\/\/mindtrove.info\/control-read-write-access-docker-private-registry\/\" rel=\"noopener noreferrer nofollow\"><u>\u0438\u0434\u0435\u0430\u043b\u044c\u043d\u044b\u0439 \u043f\u0440\u0438\u043c\u0435\u0440 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f nginx<\/u><\/a> \u0434\u043b\u044f \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u0438 \u0438 \u0440\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u043f\u0440\u0430\u0432 \u0434\u043e\u0441\u0442\u0443\u043f\u0430. \u041c\u044b \u0441\u0434\u0435\u043b\u0430\u0435\u043c \u0442\u043e \u0436\u0435 \u0441\u0430\u043c\u043e\u0435, \u043d\u043e \u0447\u0435\u0440\u0435\u0437 traefik.<\/p>\n<p>\u0418\u0442\u0430\u043a, \u043f\u0440\u0438\u0441\u0442\u0443\u043f\u0430\u0435\u043c. <\/p>\n<h3>\u0411\u0430\u0437\u043e\u0432\u0430\u044f \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f Registry<\/h3>\n<p>\u0421\u043f\u0435\u0440\u0432\u0430 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u043c \u0441\u0435\u0440\u0432\u0438\u0441 registry \u0447\u0435\u0440\u0435\u0437 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 compose \u0444\u0430\u0439\u043b. \u0421\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u043d\u043e\u0432\u0443\u044e \u043f\u0430\u043f\u043a\u0443 \u201cregistry&#187;, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c compose \u0444\u0430\u0439\u043b:<\/p>\n<pre><code class=\"bash\">mkdir registry cd registry nano docker-compose.yml<\/code><\/pre>\n<p>\u0412\u0441\u0442\u0430\u0432\u0438\u043c \u0432 \u0444\u0430\u0439\u043b \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0435 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 \u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u043c:<\/p>\n<pre><code>version: '2.4' services:   registry:     restart: always     image: registry:2     ports:       - 5000:5000<\/code><\/pre>\n<p>\u0417\u0430\u043f\u0443\u0441\u0442\u0438\u043c \u0441\u0435\u0440\u0432\u0438\u0441<\/p>\n<pre><code>docker-compose up -d<\/code><\/pre>\n<p>\u041e\u0442\u043a\u0440\u043e\u0435\u043c \u0432 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0435 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443 <a href=\"http:\/\/168.119.212.25:5000\/v2\/_catalog\" rel=\"noopener noreferrer nofollow\"><u>http:\/\/&lt;IP&gt;:5000\/v2\/_catalog<\/u><\/a> , \u0433\u0434\u0435 &lt;IP&gt; &#8212; \u044d\u0442\u043e ip \u0430\u0434\u0440\u0435\u0441 \u0434\u043e\u043a\u0435\u0440 \u043c\u0430\u0448\u0438\u043d\u044b.&nbsp;<br \/>\u0412 \u043e\u0442\u0432\u0435\u0442 \u0443\u0432\u0438\u0434\u0438\u043c \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443 \u0441 \u0442\u0435\u043a\u0441\u0442\u043e\u043c:<\/p>\n<pre><code>{\"repositories\":[]}<\/code><\/pre>\n<p>\u0417\u043d\u0430\u0447\u0438\u0442, \u0432\u0441\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442. \u0415\u0441\u043b\u0438 \u044d\u0442\u043e \u043d\u0435 \u0442\u0430\u043a &#8212; \u043f\u0440\u043e\u0432\u0435\u0440\u044c\u0442\u0435 firewall.<\/p>\n<h3>\u0411\u0430\u0437\u043e\u0432\u0430\u044f \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f Traefik<\/h3>\n<p>\u0417\u043d\u0430\u043a\u043e\u043c\u0441\u0442\u0432\u043e \u0441 traefik \u043d\u0430\u0447\u043d\u0435\u043c \u0441 \u0431\u0430\u0437\u043e\u0432\u043e\u0439 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438.&nbsp;<br \/>\u041f\u043e\u0437\u0436\u0435 \u043c\u044b \u0434\u043e\u0431\u0430\u0432\u0438\u043c SSL, \u0441\u0436\u0430\u0442\u0438\u0435 \u0442\u0440\u0430\u0444\u0438\u043a\u0430 \u0438 \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u044e \u0441 \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0435\u0439.<\/p>\n<p>\u0421\u043f\u0435\u0440\u0432\u0430 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u043c \u0441\u0435\u0440\u0432\u0438\u0441 registry \u0447\u0435\u0440\u0435\u0437 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 compose \u0444\u0430\u0439\u043b. \u0421\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u043d\u043e\u0432\u0443\u044e \u043f\u0430\u043f\u043a\u0443 \u201cregistry&#187;, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c compose \u0444\u0430\u0439\u043b:<\/p>\n<pre><code>mkdir traefik cd traefik nano docker-compose.yml<\/code><\/pre>\n<p>\u0412\u0441\u0442\u0430\u0432\u0438\u043c \u0432 \u0444\u0430\u0439\u043b \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0435 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 \u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u043c:<\/p>\n<pre><code>version: \"2.4\"   services:     traefik:     image: \"traefik:v2.4\"     container_name: \"traefik\"     command:       - \"--api.insecure=true\"     ports:       - \"8080:8080\"<\/code><\/pre>\n<details class=\"spoiler\">\n<summary>\u0420\u0430\u0437\u0431\u0435\u0440\u0435\u043c \u043a\u0430\u0436\u0434\u0443\u044e \u043d\u043e\u0432\u0443\u044e \u0441\u0442\u0440\u043e\u043a\u0443 (\u043d\u0430\u0436\u0430\u0442\u044c)<\/summary>\n<div class=\"spoiler__content\">\n<pre><code>command: - \"--api.insecure=true\"<\/code><\/pre>\n<p>\u0427\u0435\u0440\u0435\u0437 command \u043f\u0435\u0440\u0435\u0434\u0430\u044e\u0442\u0441\u044f \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u043d\u0430\u0448\u0435\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f. <br \/>\u0412\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u0434\u043e\u0441\u0442\u0443\u043f \u043a dashboard \u0432 insecure \u0440\u0435\u0436\u0438\u043c\u0435. \u042d\u0442\u043e \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442, \u0447\u0442\u043e dashboard \u0431\u0443\u0434\u0435\u0442 \u0434\u043e\u0441\u0442\u0443\u043f\u0435\u043d \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e \u0432 \u0442\u043e\u0447\u043a\u0435 \u0432\u0445\u043e\u0434\u0430 \u0441 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435\u043c traefik. \u0415\u0441\u043b\u0438 \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u0430\u044f \u0442\u043e\u0447\u043a\u0430 \u0432\u0445\u043e\u0434\u0430 traefik \u043d\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043d\u0430, \u043e\u043d\u0430 \u0431\u0443\u0434\u0435\u0442 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0430 \u043d\u0430 \u043f\u043e\u0440\u0442\u0443 8080. <\/p>\n<pre><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;- \"8080:8080\"<\/code><\/pre>\n<p>\u041f\u0435\u0440\u0435\u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0441 \u043f\u043e\u0440\u0442\u0430 8080 \u043d\u0430 docker \u043c\u0430\u0448\u0438\u043d\u0435 \u0432 \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u044b\u0439 \u043f\u043e\u0440\u0442 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430 traefik. \u042d\u0442\u0430 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u0442\u0430\u043a\u0436\u0435 \u043a\u0430\u043a \u0438 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0430\u044f \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u0430, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043f\u0430\u0441\u0442\u044c \u0432 dashboard traefik<\/p>\n<\/div>\n<\/details>\n<p>\u0417\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u043d\u0430\u0448 \u0441\u0435\u0440\u0432\u0438\u0441:<\/p>\n<pre><code class=\"bash\">docker-compose up -d<\/code><\/pre>\n<p>\u041e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u043c \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443 \u0441 IP \u0430\u0434\u0440\u0435\u0441\u043e\u043c \u0434\u043e\u043a\u0435\u0440 \u043c\u0430\u0448\u0438\u043d\u044b \u0438 \u043f\u043e\u0440\u0442\u043e\u043c 8080:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/13b\/f29\/201\/13bf2920195d4ffe23da99efe030e536.png\" width=\"1313\" height=\"745\"><figcaption><\/figcaption><\/figure>\n<h2>\u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 Registry \u043a Traefik (\u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u0434\u043e\u043c\u0435\u043d\u0430)  <\/h2>\n<p>\u041c\u044b \u043c\u043e\u0433\u043b\u0438 \u0431\u044b \u0443\u043f\u0440\u043e\u0441\u0442\u0438\u0442\u044c \u0441\u0435\u0431\u0435 \u0437\u0430\u0434\u0430\u0447\u0443, \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u0438\u0432 \u043e\u0431\u0430 \u0441\u0435\u0440\u0432\u0438\u0441\u0430 \u0432 \u043e\u0434\u043d\u043e\u043c compose \u0444\u0430\u0439\u043b\u0435, \u043d\u043e \u043c\u044b \u043d\u0435 \u0431\u0443\u0434\u0435\u043c \u044d\u0442\u043e\u0433\u043e \u0434\u0435\u043b\u0430\u0442\u044c, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u0431\u043e\u043b\u0435\u0435 \u0441\u043b\u043e\u0436\u043d\u044b\u0439 \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u0439 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f.&nbsp;<br \/>\u0412 \u0441\u043b\u0443\u0447\u0430\u0435 \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f \u043d\u0430\u043c \u043d\u0435 \u043f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u0431\u044b \u043f\u0440\u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c \u043e\u0431\u0449\u0438\u0435 \u0441\u0435\u0442\u0438.<\/p>\n<p><strong>\u041d\u043e\u0432\u044b\u0439 compose \u0434\u043b\u044f Traefik: <\/strong><\/p>\n<pre><code>Version: \"2.4\"   services:     traefik:     image: \"traefik:v2.4\"     container_name: \"traefik\"     command:       - \"--api.insecure=true\"       - \"--providers.docker=true\"       - \"--providers.docker.exposedbydefault=false\"     ports:       - \"80:80\"       - \"8080:8080\"     networks:       - registry_default     volumes:       - \"\/var\/run\/docker.sock:\/var\/run\/docker.sock:ro\" networks:   registry_default:     external: true<\/code><\/pre>\n<details class=\"spoiler\">\n<summary>\u0420\u0430\u0437\u0431\u0435\u0440\u0435\u043c \u043a\u0430\u0436\u0434\u0443\u044e \u043d\u043e\u0432\u0443\u044e \u0441\u0442\u0440\u043e\u043a\u0443 (\u043d\u0430\u0436\u0430\u0442\u044c)<\/summary>\n<div class=\"spoiler__content\">\n<pre><code>- \"--providers.docker=true\"<\/code><\/pre>\n<p>\u0412\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u0434\u043e\u043a\u0435\u0440 \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440. \u041f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e traefik \u0431\u0443\u0434\u0435\u0442 \u0441\u043b\u0435\u0434\u0438\u0442\u044c \u0437\u0430 \u043f\u043e\u044f\u0432\u043b\u0435\u043d\u0438\u0435\u043c \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0445 \u043c\u0435\u0442\u043e\u043a \u043d\u0430 \u0434\u0440\u0443\u0433\u0438\u0445 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430\u0445 \u0438 \u043f\u0435\u0440\u0435\u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0442\u044c \u0432\u0441\u0435 \u0441\u043e\u0433\u043b\u0430\u0441\u043d\u043e \u044d\u0442\u0438\u043c \u043c\u0435\u0442\u043a\u0430\u043c.<\/p>\n<pre><code>- \"--providers.docker.exposedbydefault=false\"<\/code><\/pre>\n<p>\u0417\u0430\u043f\u0440\u0435\u0449\u0430\u0435\u043c \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 HTTP \u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432 \u0438 HTTP \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u043e\u0432 \u0432 traefik. \u0415\u0441\u043b\u0438 \u044d\u0442\u043e\u0433\u043e \u043d\u0435 \u0441\u0434\u0435\u043b\u0430\u0442\u044c, \u0442\u043e traefik \u043e\u043f\u0443\u0431\u043b\u0438\u043a\u0443\u0435\u0442 \u0432\u0441\u0435 docker \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u044b, \u0432 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0435\u0441\u0442\u044c expose \u043f\u043e\u0440\u0442\u0430 \u043d\u0430\u0440\u0443\u0436\u0443 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438. \u0412 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0434\u043e\u043c\u0435\u043d\u043d\u043e\u0433\u043e \u0438\u043c\u0435\u043d\u0438 \u043e\u043d \u0431\u0443\u0434\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0438\u043c\u044f \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430.&nbsp;<\/p>\n<p>\u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u0431\u0435\u0437 \u044d\u0442\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0438 \u043c\u044b \u043d\u0435\u044f\u0432\u043d\u043e \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u043c \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u044b\u0439 \u0434\u043e\u0441\u0442\u0443\u043f \u043a\u043e \u0432\u0441\u0435\u043c \u0441\u0432\u043e\u0438\u043c \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430\u043c! \u0412\u0441\u0435, \u0447\u0442\u043e \u043d\u0443\u0436\u043d\u043e \u0434\u043b\u044f \u0430\u0442\u0430\u043a\u0438 &#8212; \u0443\u0433\u0430\u0434\u0430\u0442\u044c \u0438\u043c\u044f \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430! \u042f \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u043b \u044d\u0442\u0443 \u0442\u0435\u043e\u0440\u0438\u044e \u043d\u0430 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0435: \u043f\u043e\u0441\u043b\u0435 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0432 \u0444\u0430\u0439\u043b hosts \u0441\u0442\u0440\u043e\u043a\u0438 \u201cIP_\u0434\u043e\u043a\u0435\u0440_\u043c\u0430\u0448\u0438\u043d\u044b \u0438\u043c\u044f_\u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430\u201d, \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0430 \u201chttp:\/\/\u0438\u043c\u044f_\u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430&#187; \u043e\u0442\u043a\u0440\u044b\u043b\u0430\u0441\u044c \u0432 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0435.<\/p>\n<pre><code>- \"80:80\"<\/code><\/pre>\n<p>\u041f\u0435\u0440\u0435\u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e\u0433\u043e \u0432\u0435\u0431 \u043f\u043e\u0440\u0442\u0430 80 (http) \u043d\u0430 docker \u043c\u0430\u0448\u0438\u043d\u0435 \u0432 \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u044b\u0439 \u043f\u043e\u0440\u0442 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430 traefik. \u042d\u0442\u043e \u043d\u0443\u0436\u043d\u043e \u0434\u043b\u044f \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0438 \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u0438\u0437\u0430\u0446\u0438\u0438 \u043f\u043e\u043b\u0435\u0437\u043d\u043e\u0433\u043e \u0442\u0440\u0430\u0444\u0438\u043a\u0430.<\/p>\n<pre><code>    networks:       - registry_default networks:   registry_default:     external: true<\/code><\/pre>\n<p>\u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u043a \u043a\u043e\u043c\u043c\u0443\u0442\u0430\u0442\u043e\u0440\u0443, \u043e\u0431\u0441\u043b\u0443\u0436\u0438\u0432\u0430\u044e\u0449\u0435\u043c\u0443 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u044b \u0438\u0437 \u0434\u0440\u0443\u0433\u043e\u0433\u043e compose \u0444\u0430\u0439\u043b\u0430. \u0414\u0435\u043b\u043e \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e compose \u0444\u0430\u0439\u043b\u0430 \u0441\u043e\u0437\u0434\u0430\u0435\u0442\u0441\u044f \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0439 \u043a\u043e\u043c\u043c\u0443\u0442\u0430\u0442\u043e\u0440 \u0441 \u0438\u043c\u0435\u043d\u0435\u043c \u201c\u0438\u043c\u044f_\u0440\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u0439_\u043f\u0430\u043f\u043a\u0438_default, \u0442\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u0441\u0435\u0440\u0432\u0438\u0441\u044b \u0432\u043d\u0443\u0442\u0440\u0438 \u043e\u0434\u043d\u043e\u0433\u043e compose \u0444\u0430\u0439\u043b\u0430 \u043c\u043e\u0433\u0443\u0442 \u043b\u0435\u0433\u043a\u043e \u0434\u0440\u0443\u0433 \u0441 \u0434\u0440\u0443\u0433\u043e\u043c \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c.<\/p>\n<pre><code>volumes:   - \"\/var\/run\/docker.sock:\/var\/run\/docker.sock:ro\"<\/code><\/pre>\n<p>\u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u043c docker.sock \u0434\u043e\u043a\u0435\u0440 \u043c\u0430\u0448\u0438\u043d\u044b \u0432\u043d\u0443\u0442\u0440\u044c \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430 traefik. \u042d\u0442\u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e, \u0447\u0442\u043e\u0431\u044b traefik \u043c\u043e\u0433 \u043e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u0442\u044c \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0432 \u0447\u0443\u0436\u0438\u0445 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430\u0445. \u041e\u043d \u0431\u0443\u0434\u0435\u0442 \u043f\u0435\u0440\u0435\u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0442\u044c \u0441\u0432\u043e\u044e \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044e \u043d\u0430 \u043b\u0435\u0442\u0443, \u0438\u0441\u0445\u043e\u0434\u044f \u0438\u0437 \u043c\u0435\u0442\u043e\u043a, \u043f\u0440\u0438\u043d\u0430\u0434\u043b\u0435\u0436\u0430\u0449\u0438\u0445 \u0434\u0440\u0443\u0433\u0438\u043c \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430\u043c.<\/p>\n<\/div>\n<\/details>\n<p><strong>\u041d\u043e\u0432\u044b\u0439 compose \u0434\u043b\u044f Registry: <\/strong><\/p>\n<pre><code>version: '2.4' services:   registry:     restart: always     image: registry:2     ports:       - 5000:5000     labels:       - \"traefik.enable=true\"       - \"traefik.http.routers.registry.rule=Host(`&lt;REGISTRY.FQDN&gt;`)\"<\/code><\/pre>\n<details class=\"spoiler\">\n<summary>\u0420\u0430\u0437\u0431\u0435\u0440\u0435\u043c \u043a\u0430\u0436\u0434\u0443\u044e \u043d\u043e\u0432\u0443\u044e \u0441\u0442\u0440\u043e\u043a\u0443 (\u043d\u0430\u0436\u0430\u0442\u044c)<\/summary>\n<div class=\"spoiler__content\">\n<pre><code>- \"traefik.enable=true\"<\/code><\/pre>\n<p>\u042d\u0442\u0430 \u043c\u0435\u0442\u043a\u0430 \u043e\u043f\u043e\u0432\u0435\u0449\u0430\u0435\u0442 traefik, \u0447\u0442\u043e \u0434\u0430\u043d\u043d\u044b\u0439 \u0441\u0435\u0440\u0432\u0438\u0441 \u043d\u0443\u0436\u043d\u043e \u043e\u043f\u0443\u0431\u043b\u0438\u043a\u043e\u0432\u0430\u0442\u044c<\/p>\n<pre><code>- \"traefik.http.routers.registry.rule=Host(`&lt;REGISTRY.FQDN&gt;`)\"<\/code><\/pre>\n<p>\u042d\u0442\u0430 \u043c\u0435\u0442\u043a\u0430 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 traefik, \u0447\u0442\u043e \u0434\u043e\u043c\u0435\u043d\u043d\u043e\u0435 \u0438\u043c\u044f &lt;REGISTRY.FQDN&gt; \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0441\u0432\u044f\u0437\u0430\u0442\u044c \u0441 \u0434\u0430\u043d\u043d\u044b\u043c \u0441\u0435\u0440\u0432\u0438\u0441\u043e\u043c. \u0417\u0430\u043f\u0440\u043e\u0441\u044b, \u0432 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0430\u0445 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0431\u0443\u0434\u0435\u0442 \u0443\u043a\u0430\u0437\u0430\u043d\u043e \u0434\u0430\u043d\u043d\u043e\u0435 \u0438\u043c\u044f, \u0431\u0443\u0434\u0443\u0442 \u043f\u0435\u0440\u0435\u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u044b \u0432 \u0442\u0435\u043a\u0443\u0449\u0438\u0439 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440.<\/p>\n<pre><code>- \"traefik.http.services.registry.loadbalancer.server.port=5000\"<\/code><\/pre>\n<p>\u041c\u044b \u0442\u0430\u043a\u0436\u0435 \u043c\u043e\u0436\u0435\u043c \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u043f\u043e\u0440\u0442, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u043f\u0435\u0440\u0435\u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d \u0442\u0440\u0430\u0444\u0438\u043a, \u043d\u043e \u0432 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u044d\u0442\u043e \u0434\u0435\u043b\u0430\u0442\u044c \u043d\u0435 \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e. \u0415\u0441\u043b\u0438 docker \u0444\u0430\u0439\u043b \u043d\u0430\u0448\u0435\u0433\u043e \u0441\u0435\u0440\u0432\u0438\u0441\u0430 \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u0442 \u043d\u0430\u0440\u0443\u0436\u0443 \u0432\u0441\u0435\u0433\u043e \u043b\u0438\u0448\u044c 1 \u043f\u043e\u0440\u0442, \u044d\u0442\u043e\u0442 \u043f\u043e\u0440\u0442 \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0431\u0440\u0430\u043d \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438.&nbsp;<\/p>\n<\/div>\n<\/details>\n<p>\u041f\u0435\u0440\u0435\u0437\u0430\u043f\u0443\u0441\u0442\u0438\u043c \u043e\u0431\u0430 \u043d\u0430\u0448\u0438\u0445 \u0441\u0435\u0440\u0432\u0438\u0441\u0430:<\/p>\n<pre><code>docker-compose up -d<\/code><\/pre>\n<p>\u041e\u0442\u043a\u0440\u043e\u0435\u043c \u0432 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0435 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443 <u>http:\/\/&lt;REGISTRY.FQDN&gt;:5000\/v2\/_catalog<\/u> , \u0433\u0434\u0435 &lt;REGISTRY.FQDN&gt; &#8212; \u044d\u0442\u043e \u043f\u043e\u043b\u043d\u043e\u0435 \u0434\u043e\u043c\u0435\u043d\u043d\u043e\u0435 \u0438\u043c\u044f \u043d\u0430\u0448\u0435\u0433\u043e \u0441\u0435\u0440\u0432\u0438\u0441\u0430, \u043e\u043f\u0438\u0441\u0430\u043d\u043d\u043e\u0435 \u0432 \u043c\u0435\u0442\u043a\u0435 compose \u0444\u0430\u0439\u043b\u0430.<\/p>\n<p>\u0412 \u043e\u0442\u0432\u0435\u0442 \u0443\u0432\u0438\u0434\u0438\u043c \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443 \u0432 \u0442\u0435\u043a\u0441\u0442\u043e\u043c:<\/p>\n<pre><code>{\"repositories\":[]}<\/code><\/pre>\n<p>\u0417\u043d\u0430\u0447\u0438\u0442 \u0432\u0441\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442.<\/p>\n<h3>\u0414\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 SSL (\u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 https)<\/h3>\n<p>\u041c\u044b \u0431\u0443\u0434\u0435\u043c \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u044c \u0438 \u043f\u0440\u043e\u0434\u043b\u044f\u0442\u044c SSL \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u044b \u0447\u0435\u0440\u0435\u0437 Let&#8217;s Encrypt. <\/p>\n<p><strong>\u041d\u043e\u0432\u044b\u0439 compose \u0434\u043b\u044f Traefik:<\/strong><\/p>\n<pre><code>version: \"2.4\"   services:     traefik:     image: \"traefik:v2.4\"     container_name: \"traefik\"     command:       - \"--api.insecure=true\"       - \"--providers.docker=true\"       - \"--providers.docker.exposedbydefault=false\"       - \"--entrypoints.web.address=:80\"       - \"--entrypoints.web.http.redirections.entryPoint.to=websecure\"       - \"--entrypoints.websecure.address=:443\"       - \"--certificatesresolvers.myresolver.acme.httpchallenge=true\"       - \"--certificatesresolvers.myresolver.acme.httpchallenge.entrypoint=web\"       - \"--certificatesresolvers.myresolver.acme.email=&lt;EMAIL&gt;\"       - \"--certificatesresolvers.myresolver.acme.storage=\/letsencrypt\/acme.json\"     ports:       - \"80:80\"       - \"443:443\"       - \"8080:8080\"     networks:       - registry_default     volumes:       - \"letsencrypt:\/letsencrypt\"       - \"\/var\/run\/docker.sock:\/var\/run\/docker.sock:ro\" volumes:   letsencrypt: networks:   registry_default:     external: true<\/code><\/pre>\n<details class=\"spoiler\">\n<summary>\u0420\u0430\u0437\u0431\u0435\u0440\u0435\u043c \u043a\u0430\u0436\u0434\u0443\u044e \u043d\u043e\u0432\u0443\u044e \u0441\u0442\u0440\u043e\u043a\u0443 (\u043d\u0430\u0436\u0430\u0442\u044c)<\/summary>\n<div class=\"spoiler__content\">\n<pre><code>- \"--entrypoints.web.address=:80\"<\/code><\/pre>\n<p>\u041c\u0435\u043d\u044f\u0435\u043c \u0438\u043c\u044f \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e\u0433\u043e entrypoint \u0441 http \u043d\u0430 web \u0434\u043b\u044f \u0443\u0434\u043e\u0431\u0441\u0442\u0432\u0430.<\/p>\n<pre><code>- \"--entrypoints.web.http.redirections.entryPoint.to=websecure\"<\/code><\/pre>\n<p>\u0414\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u043f\u0435\u0440\u0435\u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0442\u0440\u0430\u0444\u0438\u043a\u0430 \u0441 entrypoint web \u043d\u0430 websecure. \u0414\u0440\u0443\u0433\u0438\u043c\u0438 \u0441\u043b\u043e\u0432\u0430\u043c\u0438 \u043f\u0435\u0440\u0435\u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0441 HTTP \u043d\u0430 HTTPS<\/p>\n<pre><code>- \"--entrypoints.websecure.address=:443\"<\/code><\/pre>\n<p>\u0421\u043e\u0437\u0434\u0430\u0435\u043c \u043d\u043e\u0432\u044b\u0439 entrypoint \u043d\u0430 443 \u043f\u043e\u0440\u0442\u0443 \u0441 \u0438\u043c\u0435\u043d\u0435\u043c websecure<\/p>\n<pre><code>- \"--certificatesresolvers.myresolver.acme.httpchallenge=true\"<\/code><\/pre>\n<p>\u041d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u043c \u0440\u0435\u0436\u0438\u043c \u0432\u044b\u0434\u0430\u0447\u0438 \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0432 Let\u2019s Encrypt \u0447\u0435\u0440\u0435\u0437 http challenge<\/p>\n<pre><code>- \"--certificatesresolvers.myresolver.acme.httpchallenge.entrypoint=web\"<\/code><\/pre>\n<p>\u041d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u043c entrypoint \u0434\u043b\u044f http challenge<\/p>\n<pre><code>- \"--certificatesresolvers.myresolver.acme.email=&lt;EMAIL&gt;\"<\/code><\/pre>\n<p>\u041d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u043c &lt;email&gt; \u0430\u0434\u0440\u0435\u0441 \u0434\u043b\u044f \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u0438 \u0432 \u0446\u0435\u043d\u0442\u0440\u0435 \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438<\/p>\n<pre><code>- \"--certificatesresolvers.myresolver.acme.storage=\/letsencrypt\/acme.json\"<\/code><\/pre>\n<p>\u041c\u0435\u043d\u044f\u0435\u043c \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e\u0435 \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0444\u0430\u0439\u043b\u0430 acme.json. \u0412 \u044d\u0442\u043e\u0442 \u0444\u0430\u0439\u043b \u0431\u0443\u0434\u0443\u0442 \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c\u0441\u044f \u0432\u044b\u0434\u0430\u043d\u043d\u044b\u0435 \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u044b. \u0414\u0435\u043b\u043e \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e\u0435 \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0444\u0430\u0439\u043b\u0430 \u201c\/acme.json&#187; \u0432 \u043a\u043e\u0440\u043d\u0435 \u043d\u0435 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0445\u0440\u0430\u043d\u0438\u0442\u044c \u044d\u0442\u043e\u0442 \u0444\u0430\u0439\u043b \u043d\u0430 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u043e\u043c \u0442\u043e\u043c\u0435.<\/p>\n<pre><code>- \"443:443\"<\/code><\/pre>\n<p>\u041f\u0435\u0440\u0435\u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e\u0433\u043e \u0432\u0435\u0431 \u043f\u043e\u0440\u0442\u0430 443 (https) \u043d\u0430 docker \u043c\u0430\u0448\u0438\u043d\u0435 \u0432 \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u044b\u0439 \u043f\u043e\u0440\u0442 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430 traefik. \u042d\u0442\u043e \u043d\u0443\u0436\u043d\u043e \u0434\u043b\u044f \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0438 \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u0438\u0437\u0430\u0446\u0438\u0438 \u043f\u043e\u043b\u0435\u0437\u043d\u043e\u0433\u043e \u0442\u0440\u0430\u0444\u0438\u043a\u0430.<\/p>\n<pre><code>&nbsp;&nbsp;&nbsp;&nbsp;volumes:  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;- \"letsencrypt:\/letsencrypt\"  volumes:  &nbsp;&nbsp;letsencrypt:<\/code><\/pre>\n<p>\u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0442\u043e\u043c \u0434\u043b\u044f \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e\u0433\u043e \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f SSL \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0432. \u0422\u0435\u043f\u0435\u0440\u044c \u0434\u0430\u0436\u0435 \u043f\u043e\u0441\u043b\u0435 \u043f\u0435\u0440\u0435\u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430 \u043d\u0430\u043c \u043d\u0435 \u043f\u0440\u0438\u0434\u0435\u0442\u0441\u044f \u0437\u0430\u043d\u043e\u0432\u043e \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u044c \u0432\u0441\u0435 \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u044b.<br \/>\u0418\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0442\u043e\u043c \u0431\u0443\u0434\u0435\u0442 \u0445\u0440\u0430\u043d\u0438\u0442\u044c\u0441\u044f \u0437\u0434\u0435\u0441\u044c: \/var\/lib\/docker\/volumes\/&lt;\u0438\u043c\u044f \u0442\u043e\u043c\u0430&gt;<\/p>\n<\/div>\n<\/details>\n<p><strong>\u041d\u043e\u0432\u044b\u0439 compose \u0434\u043b\u044f Registry:<\/strong><\/p>\n<pre><code>version: '2.4' services:   registry:     restart: always     image: registry:2     ports:       - 5000:5000     labels:       - \"traefik.enable=true\"       - \"traefik.http.routers.registry.rule=Host(`&lt;REGISTRY.FQDN&gt;`)\"       - \"traefik.http.routers.registry.entrypoints=websecure\"       - \"traefik.http.routers.registry.tls.certresolver=myresolver\"<\/code><\/pre>\n<details class=\"spoiler\">\n<summary>\u0420\u0430\u0437\u0431\u0435\u0440\u0435\u043c \u043a\u0430\u0436\u0434\u0443\u044e \u043d\u043e\u0432\u0443\u044e \u0441\u0442\u0440\u043e\u043a\u0443 (\u043d\u0430\u0436\u0430\u0442\u044c)<\/summary>\n<div class=\"spoiler__content\">\n<pre><code>- \"traefik.http.routers.registry.entrypoints=websecure\"<\/code><\/pre>\n<p>\u041c\u0435\u043d\u044f\u0435\u043c entrypoint \u0441\u043e \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e\u0433\u043e http (web) \u043d\u0430 websecure<\/p>\n<pre><code>- \"traefik.http.routers.registry.tls.certresolver=myresolver\"<\/code><\/pre>\n<p>\u0417\u0430\u0434\u0430\u0435\u043c \u0438\u043c\u044f \u0440\u0435\u0437\u043e\u043b\u0432\u0435\u0440\u0430 \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b SSL \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0432<\/p>\n<\/div>\n<\/details>\n<p>\u041f\u0435\u0440\u0435\u0437\u0430\u043f\u0443\u0441\u0442\u0438\u043c \u043e\u0431\u0430 \u043d\u0430\u0448\u0438\u0445 \u0441\u0435\u0440\u0432\u0438\u0441\u0430:<\/p>\n<pre><code>docker-compose up -d<\/code><\/pre>\n<p>\u041e\u0442\u043a\u0440\u043e\u0435\u043c \u0432 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0435 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443 <u>http:\/\/&lt;REGISTRY.FQDN&gt;:5000\/v2\/_catalog<\/u> , \u0433\u0434\u0435 &lt;REGISTRY.FQDN&gt; &#8212; \u044d\u0442\u043e \u043f\u043e\u043b\u043d\u043e\u0435 \u0434\u043e\u043c\u0435\u043d\u043d\u043e\u0435 \u0438\u043c\u044f \u043d\u0430\u0448\u0435\u0433\u043e \u0441\u0435\u0440\u0432\u0438\u0441\u0430, \u043e\u043f\u0438\u0441\u0430\u043d\u043d\u043e\u0435 \u0432 \u043c\u0435\u0442\u043a\u0435 compose \u0444\u0430\u0439\u043b\u0430.<\/p>\n<p>\u041c\u044b \u0443\u0432\u0438\u0434\u0438\u043c, \u0447\u0442\u043e:<\/p>\n<ul>\n<li>\n<p>\u0441\u0445\u0435\u043c\u0430 \u0441\u043c\u0435\u043d\u0438\u043b\u0430\u0441\u044c \u0441 http \u043d\u0430 https \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438<\/p>\n<\/li>\n<li>\n<p>\u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435 \u0437\u0430\u0449\u0438\u0449\u0435\u043d\u043e \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u043c \u0432\u044b\u0434\u0430\u043d\u043d\u044b\u043c Let&#8217;s Encrypt<\/p>\n<\/li>\n<\/ul>\n<p>\u0412 \u0441\u043b\u0443\u0447\u0430\u0435 \u043f\u0440\u043e\u0431\u043b\u0435\u043c \u0441 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435\u043c \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u0430, traefik \u0431\u0443\u0434\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0441\u0430\u043c\u043e-\u043f\u043e\u0434\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0439 \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442. \u0415\u0441\u043b\u0438 \u044d\u0442\u043e \u043f\u0440\u043e\u0438\u0437\u043e\u0448\u043b\u043e, \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043a\u043e\u043c\u0430\u043d\u0434\u0443<code> docker logs traefik<\/code> \u0434\u043b\u044f \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0430 \u043b\u043e\u0433\u043e\u0432.<\/p>\n<h3>\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u0434\u043e\u043c\u0435\u043d\u0430 \u0438 SSL \u0434\u043b\u044f dashboard<\/h3>\n<p>\u041a\u0430\u043a \u043d\u0438 \u0441\u0442\u0440\u0430\u043d\u043d\u043e, \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u0438\u0437\u0430\u0446\u0438\u044f \u0442\u0440\u0430\u0444\u0438\u043a\u0430 \u0432\u043e \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u0439 <strong>dashboard <\/strong>\u043e\u0442\u043b\u0438\u0447\u0430\u0435\u0442\u0441\u044f \u043e\u0442 \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u0438\u0437\u0430\u0446\u0438\u0438 \u0442\u0440\u0430\u0444\u0438\u043a\u0430 \u0432\u043e \u0432\u043d\u0435\u0448\u043d\u0438\u0435 \u0441\u0435\u0440\u0432\u0438\u0441\u044b, \u0437\u0430\u043f\u0443\u0449\u0435\u043d\u043d\u044b\u0435 \u0432 \u0434\u043e\u043a\u0435\u0440 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430\u0445. \u042f \u043f\u043e\u0442\u0440\u0430\u0442\u0438\u043b \u043d\u0435 \u043c\u0430\u043b\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438, \u043f\u044b\u0442\u0430\u044f\u0441\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0442\u0435 \u0436\u0435 \u043f\u0440\u0430\u0432\u0438\u043b\u0430, \u0447\u0442\u043e \u0438 \u0440\u0430\u043d\u044c\u0448\u0435.<\/p>\n<p><strong>\u041d\u043e\u0432\u044b\u0439 compose \u0434\u043b\u044f Traefik:<\/strong><\/p>\n<pre><code>version: \"2.4\"   services:     traefik:     image: \"traefik:v2.4\"     container_name: \"traefik\"     command:       - \"--api.insecure=true\"       - \"--providers.docker=true\"       - \"--providers.docker.exposedbydefault=false\"       - \"--entrypoints.web.address=:80\"       - \"--entrypoints.web.http.redirections.entryPoint.to=websecure\"       - \"--entrypoints.websecure.address=:443\"       - \"--certificatesresolvers.myresolver.acme.httpchallenge=true\"       - \"--certificatesresolvers.myresolver.acme.httpchallenge.entrypoint=web\"       - \"--certificatesresolvers.myresolver.acme.email=&lt;EMAIL&gt;\"       - \"--certificatesresolvers.myresolver.acme.storage=\/letsencrypt\/acme.json\"     ports:       - \"80:80\"       - \"443:443\"       - \"8080:8080\"     networks:       - registry_default     volumes:       - \"letsencrypt:\/letsencrypt\"       - \"\/var\/run\/docker.sock:\/var\/run\/docker.sock:ro\"     labels:       - \"traefik.enable=true\"       - \"traefik.http.routers.traefik.rule=Host(`&lt;TRAEFIK.FQDN&gt;`)\"       - \"traefik.http.routers.traefik.entrypoints=websecure\"       - \"traefik.http.routers.traefik.tls.certresolver=myresolver\"       - \"traefik.http.routers.traefik.service=api@internal\" volumes:   letsencrypt: networks:   registry_default:     external: true<\/code><\/pre>\n<details class=\"spoiler\">\n<summary>\u0420\u0430\u0437\u0431\u0435\u0440\u0435\u043c \u043a\u0430\u0436\u0434\u0443\u044e \u043d\u043e\u0432\u0443\u044e \u0441\u0442\u0440\u043e\u043a\u0443 (\u043d\u0430\u0436\u0430\u0442\u044c)<\/summary>\n<div class=\"spoiler__content\">\n<pre><code>labels:   - \"traefik.enable=true\"   - \"traefik.http.routers.traefik.rule=Host(`&lt;TRAEFIK.FQDN&gt;`)\"   - \"traefik.http.routers.traefik.entrypoints=websecure\"   - \"traefik.http.routers.traefik.tls.certresolver=myresolver\"<\/code><\/pre>\n<p>\u0420\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u0443\u0435\u043c \u0440\u043e\u0443\u0442\u0435\u0440 \u0434\u043b\u044f \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0442\u0440\u0430\u0444\u0438\u043a\u0430 \u0434\u043e\u043c\u0435\u043d\u0430 &lt;traefik.fqdn&gt; \u0432\u043e \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u0439 dashboard.<\/p>\n<pre><code>- \"traefik.http.routers.traefik.service=api@internal\"<\/code><\/pre>\n<p>\u042f\u0432\u043d\u043e \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u043c \u0438\u043c\u044f \u0441\u0435\u0440\u0432\u0438\u0441\u0430 \u0432 \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u043f\u0435\u0440\u0435\u043d\u0430\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u0442\u0440\u0430\u0444\u0438\u043a.<\/p>\n<p>api@internal &#8212; \u044d\u0442\u043e \u0437\u0430\u0440\u0435\u0437\u0435\u0440\u0432\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0435 \u0438\u043c\u044f \u0441\u0435\u0440\u0432\u0438\u0441\u0430. \u041f\u0435\u0440\u0435\u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0432 dashboard \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0431\u0435\u0437 \u044d\u0442\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0438.<\/p>\n<p>\u041c\u044b \u043d\u0435 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u043b\u0438 \u043f\u043e\u0434\u043e\u0431\u043d\u0443\u044e \u0441\u0442\u0440\u043e\u043a\u0443 \u0432 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0435 registry, \u0442\u0430\u043a \u043a\u0430\u043a \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u044f \u0438\u043c\u0435\u043d\u0438 \u0441\u0435\u0440\u0432\u0438\u0441\u0430 \u0438 \u043f\u0440\u0438\u0432\u044f\u0437\u043a\u0430 \u0440\u043e\u0443\u0442\u0435\u0440\u0430 \u043a \u0441\u0435\u0440\u0432\u0438\u0441\u0443 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u043b\u0430\u0441\u044c \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438.<\/p>\n<\/div>\n<\/details>\n<p>\u041f\u0435\u0440\u0435\u0437\u0430\u043f\u0443\u0441\u0442\u0438\u043c traefik:<\/p>\n<pre><code>docker-compose up -d<\/code><\/pre>\n<p>\u041e\u0442\u043a\u0440\u043e\u0435\u043c \u0432 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0435 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443 <u>http:\/\/&lt;TRAEFIK.FQDN&gt;<\/u>, \u0433\u0434\u0435 &lt;TRAEFIK.FQDN&gt; &#8212; \u044d\u0442\u043e \u043f\u043e\u043b\u043d\u043e\u0435 \u0434\u043e\u043c\u0435\u043d\u043d\u043e\u0435 \u0438\u043c\u044f \u043d\u0430\u0448\u0435\u0433\u043e \u0434\u043b\u044f \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a traefik dashboard, \u043e\u043f\u0438\u0441\u0430\u043d\u043d\u043e\u0435 \u0432 \u043c\u0435\u0442\u043a\u0435 compose \u0444\u0430\u0439\u043b\u0430.<\/p>\n<h3>\u0414\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0441\u0436\u0430\u0442\u0438\u044f \u0442\u0440\u0430\u0444\u0438\u043a\u0430<\/h3>\n<p>\u0421\u0436\u0430\u0442\u0438\u0435 \u0441\u0438\u043b\u044c\u043d\u043e \u0443\u0441\u043a\u043e\u0440\u044f\u0435\u0442 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0443 \u0441\u0430\u0439\u0442\u043e\u0432 \u043d\u0430 \u043a\u043b\u0438\u0435\u043d\u0442\u0435. \u041e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u043d\u0443\u0436\u043d\u043e \u0432\u043a\u043b\u044e\u0447\u0430\u0442\u044c.<\/p>\n<p><strong>\u041d\u043e\u0432\u044b\u0439 compose \u0434\u043b\u044f Traefik:<\/strong><\/p>\n<pre><code>version: \"2.4\"   services:     traefik:     image: \"traefik:v2.4\"     container_name: \"traefik\"     command:       - \"--api.insecure=true\"       - \"--providers.docker=true\"       - \"--providers.docker.exposedbydefault=false\"       - \"--entrypoints.web.address=:80\"       - \"--entrypoints.web.http.redirections.entryPoint.to=websecure\"       - \"--entrypoints.websecure.address=:443\"       - \"--certificatesresolvers.myresolver.acme.httpchallenge=true\"       - \"--certificatesresolvers.myresolver.acme.httpchallenge.entrypoint=web\"       - \"--certificatesresolvers.myresolver.acme.email=&lt;email&gt;\"       - \"--certificatesresolvers.myresolver.acme.storage=\/letsencrypt\/acme.json\"     ports:       - \"80:80\"       - \"443:443\"       - \"8080:8080\"     networks:       - registry_default     volumes:       - \"letsencrypt:\/letsencrypt\"       - \"\/var\/run\/docker.sock:\/var\/run\/docker.sock:ro\"     labels:       - \"traefik.http.middlewares.traefik-compress.compress=true\"       - \"traefik.enable=true\"       - \"traefik.http.routers.traefik.rule=Host(`&lt;TRAEFIK.FQDN&gt;`)\"       - \"traefik.http.routers.traefik.entrypoints=websecure\"       - \"traefik.http.routers.traefik.tls.certresolver=myresolver\"       - \"traefik.http.routers.traefik.service=api@internal\"       - \"traefik.http.routers.traefik.middlewares=traefik-compress\" volumes:   letsencrypt: networks:   registry_default:     external: true<\/code><\/pre>\n<details class=\"spoiler\">\n<summary>\u0420\u0430\u0437\u0431\u0435\u0440\u0435\u043c \u043a\u0430\u0436\u0434\u0443\u044e \u043d\u043e\u0432\u0443\u044e \u0441\u0442\u0440\u043e\u043a\u0443 (\u043d\u0430\u0436\u0430\u0442\u044c)<\/summary>\n<div class=\"spoiler__content\">\n<pre><code>- \"traefik.http.middlewares.traefik-compress.compress=true\"<\/code><\/pre>\n<p>\u0420\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u0443\u0435\u043c \u043d\u043e\u0432\u044b\u0439 middleware \u0441 \u0438\u043c\u0435\u043d\u0435\u043c traefik-compress \u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u0435\u0439 \u0441\u0436\u0430\u0442\u0438\u044f \u0442\u0440\u0430\u0444\u0438\u043a\u0430. \u042d\u0442\u043e\u0442 middleware \u043c\u044b \u0437\u0430\u0442\u0435\u043c \u0441\u043c\u043e\u0436\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0432 \u043b\u044e\u0431\u043e\u043c \u0441\u0442\u043e\u0440\u043e\u043d\u043d\u0435\u043c \u0434\u043e\u043a\u0435\u0440 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0435.  <\/p>\n<pre><code>- \"traefik.http.routers.traefik.middlewares=traefik-compress\"<\/code><\/pre>\n<p>\u0414\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c middleware \u0441 \u0438\u043c\u0435\u043d\u0435\u043c traefik-compress \u0432 \u0446\u0435\u043f\u043e\u0447\u043a\u0443 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0442\u0440\u0430\u0444\u0438\u043a\u0430 \u0434\u043b\u044f \u0441\u0435\u0440\u0432\u0438\u0441\u0430 traefik  <\/p>\n<\/div>\n<\/details>\n<p><strong>\u041d\u043e\u0432\u044b\u0439 compose \u0434\u043b\u044f Registry:<\/strong><\/p>\n<pre><code>version: '2.4' services:   registry:     restart: always     image: registry:2     ports:       - 5000:5000     labels:       - \"traefik.enable=true\"       - \"traefik.http.routers.registry.rule=Host(`&lt;REGISTRY.FQDN&gt;`)\"       - \"traefik.http.routers.registry.entrypoints=websecure\"       - \"traefik.http.routers.registry.tls.certresolver=myresolver\"       - \"traefik.http.routers.registry.middlewares=traefik-compress\"<\/code><\/pre>\n<details class=\"spoiler\">\n<summary>\u0420\u0430\u0437\u0431\u0435\u0440\u0435\u043c \u043a\u0430\u0436\u0434\u0443\u044e \u043d\u043e\u0432\u0443\u044e \u0441\u0442\u0440\u043e\u043a\u0443 (\u043d\u0430\u0436\u0430\u0442\u044c)<\/summary>\n<div class=\"spoiler__content\">\n<pre><code>- \"traefik.http.routers.registry.middlewares=traefik-compress\"<\/code><\/pre>\n<p>\u0414\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c middleware \u0441 \u0438\u043c\u0435\u043d\u0435\u043c traefik-compress \u0432 \u0446\u0435\u043f\u043e\u0447\u043a\u0443 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0442\u0440\u0430\u0444\u0438\u043a\u0430 \u0434\u043b\u044f \u0441\u0435\u0440\u0432\u0438\u0441\u0430 registry  <\/p>\n<\/div>\n<\/details>\n<h3>\u0414\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 basic \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u0438 \u0434\u043b\u044f \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a Dashboard<\/h3>\n<p>\u0421\u043d\u0430\u0447\u0430\u043b\u0430 \u043c\u044b \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u043c\u0441\u044f \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043a\u043e\u043c\u0431\u0438\u043d\u0430\u0446\u0438\u044e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u0438 \u043f\u0430\u0440\u043e\u043b\u044f \u0434\u043b\u044f \u0431\u0430\u0437\u043e\u0432\u043e\u0439 \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438 \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c htpasswd. \u0415\u0441\u043b\u0438 \u043e\u043d \u0443 \u0432\u0430\u0441 \u043d\u0435 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d, \u0432\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u044d\u0442\u043e (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0434\u043b\u044f \u0441\u0435\u0440\u0432\u0435\u0440\u0430 Ubuntu):<\/p>\n<pre><code>apt-get install apache2-utils<\/code><\/pre>\n<p>\u041c\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u044d\u043a\u0440\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043a\u0430\u0436\u0434\u044b\u0439 \u0441\u0438\u043c\u0432\u043e\u043b \u201c$\u201d \u0432 \u043d\u0430\u0448\u0435\u043c \u0437\u0430\u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u043c \u043f\u0430\u0440\u043e\u043b\u0435 (\u0437\u0430\u043c\u0435\u043d\u0438\u0442\u044c $ \u043d\u0430 $$), \u0435\u0441\u043b\u0438 \u043c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u043f\u0430\u0440\u043e\u043b\u044c \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e \u0432 docker-compose.yml<\/p>\n<pre><code>echo $(htpasswd -nbB USER \"PASS\") | sed -e s\/\\\\$\/\\\\$\\\\$\/g<\/code><\/pre>\n<p>\u041f\u0440\u0438\u043c\u0435\u0440 \u0432\u044b\u0432\u043e\u0434\u0430 \u043a\u043e\u043c\u0430\u043d\u0434\u044b (\u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0437\u043d\u044b\u0439 \u043f\u0440\u0438 \u043a\u0430\u0436\u0434\u043e\u043c \u0437\u0430\u043f\u0443\u0441\u043a\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u044b):<\/p>\n<pre><code>USER:$$2y$$05$$iPGcI0PwxkDoOZUlGPkIFe31e47F5vewcjlhzhgf0EHo45H.dFyKW<\/code><\/pre>\n<p>\u0412\u044b\u0432\u043e\u0434 \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u043d\u0443\u0436\u043d\u043e \u043f\u043e\u043c\u0435\u0441\u0442\u0438\u0442\u044c \u0432 \u043d\u0430\u0448 docker-compose.yml \u0432\u043d\u0443\u0442\u0440\u044c traefik \u043c\u0435\u0442\u043a\u0438, \u0437\u0430\u043c\u0435\u043d\u0438\u0432&nbsp; <code>&lt;USER-PASSWORD-OUTPUT&gt;<\/code> \u0432 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u043d\u0438\u0436\u0435.<\/p>\n<p><strong>\u041d\u043e\u0432\u044b\u0439 compose \u0434\u043b\u044f Registry:<\/strong><\/p>\n<pre><code>version: \"2.4\"   services:     traefik:     image: \"traefik:v2.4\"     container_name: \"traefik\"     command:       - \"--api.insecure=true\"       - \"--providers.docker=true\"       - \"--providers.docker.exposedbydefault=false\"       - \"--entrypoints.web.address=:80\"       - \"--entrypoints.web.http.redirections.entryPoint.to=websecure\"       - \"--entrypoints.websecure.address=:443\"       - \"--certificatesresolvers.myresolver.acme.httpchallenge=true\"       - \"--certificatesresolvers.myresolver.acme.httpchallenge.entrypoint=web\"       - \"--certificatesresolvers.myresolver.acme.email=&lt;EMAIL&gt;\"       - \"--certificatesresolvers.myresolver.acme.storage=\/letsencrypt\/acme.json\"     ports:       - \"80:80\"       - \"443:443\"       - \"8080:8080\"     networks:       - registry_default     volumes:       - \"letsencrypt:\/letsencrypt\"       - \"\/var\/run\/docker.sock:\/var\/run\/docker.sock:ro\"     labels:       - \"traefik.http.middlewares.traefik-compress.compress=true\"       - \"traefik.http.middlewares.auth.basicauth.users=&lt;USER-PASSWORD-OUTPUT&gt;\"       - \"traefik.enable=true\"       - \"traefik.http.routers.traefik.rule=Host(`&lt;TRAEFIK.FQDN&gt;`)\"       - \"traefik.http.routers.traefik.entrypoints=websecure\"       - \"traefik.http.routers.traefik.tls.certresolver=myresolver\"       - \"traefik.http.routers.traefik.service=api@internal\"       - \"traefik.http.routers.traefik.middlewares=traefik-compress,auth\" volumes:   letsencrypt: networks:   registry_default:     external: true<\/code><\/pre>\n<details class=\"spoiler\">\n<summary>\u0420\u0430\u0437\u0431\u0435\u0440\u0435\u043c \u043a\u0430\u0436\u0434\u0443\u044e \u043d\u043e\u0432\u0443\u044e \u0441\u0442\u0440\u043e\u043a\u0443 (\u043d\u0430\u0436\u0430\u0442\u044c)<\/summary>\n<div class=\"spoiler__content\">\n<pre><code>- \"traefik.http.middlewares.auth.basicauth.users=&lt;USER-PASSWORD-OUTPUT&gt;\"<\/code><\/pre>\n<p>\u0420\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u0443\u0435\u043c \u043d\u043e\u0432\u044b\u0439 middleware \u0441 \u0438\u043c\u0435\u043d\u0435\u043c auth \u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u0435\u0439 \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u0438. \u042d\u0442\u043e\u0442 middleware \u043c\u044b \u0437\u0430\u0442\u0435\u043c \u0441\u043c\u043e\u0436\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0432 \u043b\u044e\u0431\u043e\u043c \u0441\u0442\u043e\u0440\u043e\u043d\u043d\u0435\u043c \u0434\u043e\u043a\u0435\u0440 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0435.  <\/p>\n<pre><code>- \"traefik.http.routers.traefik.middlewares=traefik-compress,auth\"<\/code><\/pre>\n<p>\u0414\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c middleware \u0441 \u0438\u043c\u0435\u043d\u0435\u043c auth \u0432 \u0446\u0435\u043f\u043e\u0447\u043a\u0443 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0442\u0440\u0430\u0444\u0438\u043a\u0430 \u0434\u043b\u044f \u0441\u0435\u0440\u0432\u0438\u0441\u0430 traefik  <\/p>\n<\/div>\n<\/details>\n<p><strong><em>\u0412\u043d\u0438\u043c\u0430\u043d\u0438\u0435<\/em><\/strong><em>: \u0415\u0441\u043b\u0438 \u0432\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0441\u0440\u0435\u0434\u044b (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 .env \u0444\u0430\u0439\u043b) \u0432 \u0432\u0430\u0448\u0435\u043c docker-compose.yml \u0432\u043c\u0435\u0441\u0442\u043e \u043f\u0440\u044f\u043c\u043e\u0433\u043e \u0443\u043a\u0430\u0437\u0430\u043d\u0438\u044f <\/em>&lt;USER-PASSWORD-OUTPUT&gt;<em>, \u0442\u043e&nbsp; \u0432\u044b \u043d\u0435 \u0434\u043e\u043b\u0436\u043d\u044b \u044d\u043a\u0440\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u0442\u044c $.&nbsp; \u0413\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u044f \u043f\u0430\u0440\u043e\u043b\u044f \u0432 \u044d\u0442\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u0442\u0430\u043a:<\/em>&nbsp;<\/p>\n<pre><code>echo $(htpasswd -nbB &lt;USER&gt; \"&lt;PASS&gt;\")<\/code><\/pre>\n<p>\u041f\u043e\u0441\u043b\u0435 \u043f\u0435\u0440\u0435\u0437\u0430\u043f\u0443\u0441\u043a\u0430 docker \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430 (docker-compose up -d) \u043c\u044b \u0443\u0432\u0438\u0434\u0438\u043c \u043e\u043a\u043d\u043e \u0431\u0430\u0437\u043e\u0432\u043e\u0439 \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u0438, \u043a\u043e\u0433\u0434\u0430 \u043e\u0442\u043a\u0440\u043e\u0435\u043c dashboard traefik \u0432 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0435. <\/p>\n<h2>\u0420\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u043f\u0440\u0430\u0432 \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439 Registry<\/h2>\n<p><strong>\u041d\u043e\u0432\u044b\u0439 compose \u0434\u043b\u044f Registry:<\/strong><\/p>\n<pre><code>version: '2.4' services:   registry:     restart: always     image: registry:2     ports:       - 5000:5000     labels:       - \"traefik.enable=true\"       - \"traefik.http.routers.registry.rule=Host(`REGISTRY.FQDN`) &amp;&amp; Method(`POST`, `PUT`, `DELETE`, `PATCH`)\"       - \"traefik.http.routers.registry.entrypoints=websecure\"       - \"traefik.http.routers.registry.tls.certresolver=myresolver\"       - \"traefik.http.routers.registry.service=registry\"       - \"traefik.http.services.registry.loadbalancer.server.port=5000\"       - \"traefik.http.routers.registry.middlewares=auth-registry,traefik-compress\"       - \"traefik.http.middlewares.auth-registry.basicauth.users=&lt;ADMIN-PASSWORD-OUTPUT&gt;\"       - \"traefik.http.routers.guest-registry.rule=Host(`REGISTRY.FQDN`) &amp;&amp; Method(`GET`, `HEAD`)\"       - \"traefik.http.routers.guest-registry.entrypoints=websecure\"       - \"traefik.http.routers.guest-registry.tls.certresolver=myresolver\"       - \"traefik.http.routers.guest-registry.service=guest-registry\"       - \"traefik.http.services.guest-registry.loadbalancer.server.port=5000\"       - \"traefik.http.routers.guest-registry.middlewares=aguest-registry,traefik-compress\"       - \"traefik.http.middlewares.aguest-registry.basicauth.users=&lt;USER-PASSWORD-OUTPUT&gt;\" <\/code><\/pre>\n<p>\u0417\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u0443\u0435\u043c \u043d\u0430 \u044d\u0442\u043e\u043c \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0435 2 \u043d\u0430\u0431\u043e\u0440\u0430 \u0440\u043e\u0443\u0442\u0435\u0440\u043e\u0432 \u0438 \u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432:<\/p>\n<ul>\n<li>\n<p><code>registry<\/code> &#8212; \u0440\u043e\u0443\u0442\u0435\u0440 \u0438 \u0441\u0435\u0440\u0432\u0438\u0441 \u0441 \u0442\u0430\u043a\u0438\u043c \u0438\u043c\u0435\u043d\u0435\u043c \u0431\u0443\u0434\u0443\u0442 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0442\u044c \u043f\u043e\u043b\u043d\u044b\u0439 \u0434\u043e\u0441\u0442\u0443\u043f (\u0447\u0442\u0435\u043d\u0438\u0435\\\u0437\u0430\u043f\u0438\u0441\u044c)<\/p>\n<\/li>\n<li>\n<p><code>guest-registry<\/code> &#8212; \u0440\u043e\u0443\u0442\u0435\u0440 \u0438 \u0441\u0435\u0440\u0432\u0438\u0441 \u0441 \u0442\u0430\u043a\u0438\u043c \u0438\u043c\u0435\u043d\u0435\u043c \u0431\u0443\u0434\u0443\u0442 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0442\u044c \u0433\u043e\u0441\u0442\u0435\u0432\u043e\u0439 \u0434\u043e\u0441\u0442\u0443\u043f (\u0447\u0442\u0435\u043d\u0438\u0435)<\/p>\n<\/li>\n<\/ul>\n<p>\u0422\u0430\u043a \u0436\u0435 \u043c\u044b \u0441\u043e\u0437\u0434\u0430\u0435\u043c \u043e\u0434\u043d\u043e\u0438\u043c\u0435\u043d\u043d\u044b\u0435 middleware \u0434\u043b\u044f basic \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u0438 \u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0438\u0445 \u0432 \u0440\u043e\u0443\u0442\u0435\u0440\u044b.<\/p>\n<p>\u0412\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0437\u0430\u043c\u0435\u0442\u0438\u0442\u044c, \u0447\u0442\u043e \u043c\u044b \u0434\u043e\u0431\u0430\u0432\u0438\u043b\u0438 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0433\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u0432 \u043e\u0431\u0430 \u043d\u0430\u0431\u043e\u0440\u0430 \u043f\u0440\u0430\u0432\u0438\u043b. \u042d\u0442\u043e \u0441\u0434\u0435\u043b\u0430\u043d\u043e \u043f\u043e\u0442\u043e\u043c\u0443, \u0447\u0442\u043e \u043d\u0430\u0431\u043e\u0440\u044b \u043c\u0435\u0442\u043e\u0434\u043e\u0432 \u043d\u0435 \u043f\u0435\u0440\u0435\u0441\u0435\u043a\u0430\u044e\u0442\u0441\u044f. \u0415\u0441\u043b\u0438 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0438\u0445 \u043f\u0435\u0440\u0435\u0441\u0435\u043a\u0430\u044e\u0449\u0438\u043c\u0438\u0441\u044f &#8212; \u0440\u043e\u0443\u0442\u0438\u043d\u0433 \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u043a\u0430\u043a \u0437\u0430\u0434\u0443\u043c\u0430\u043d\u043e.<\/p>\n<p>\u041f\u0435\u0440\u0435\u0437\u0430\u043f\u0443\u0441\u0442\u0438\u043c registry:<\/p>\n<pre><code>docker-compose up -d<\/code><\/pre>\n<details class=\"spoiler\">\n<summary>\u041f\u0440\u043e\u0432\u0435\u0434\u0435\u043c \u043f\u0440\u043e\u0441\u0442\u0443\u044e \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0443 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e Postman<\/summary>\n<div class=\"spoiler__content\">\n<p>\u0410\u0432\u0442\u043e\u0440\u0438\u0437\u043e\u0432\u044b\u0432\u0430\u0435\u043c\u0441\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u043c \u0441 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u043d\u044b\u043c\u0438 \u043f\u0440\u0430\u0432\u0430\u043c\u0438.<\/p>\n<p>\u0414\u0435\u043b\u0430\u0435\u043c Get \u0437\u0430\u043f\u0440\u043e\u0441 &#8212; \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/751\/deb\/1f6\/751deb1f619c791bfc854558331af5d8.png\" width=\"938\" height=\"485\"><figcaption><\/figcaption><\/figure>\n<p>\u0414\u0435\u043b\u0430\u0435\u043c Post \u0437\u0430\u043f\u0440\u043e\u0441 &#8212; 401.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/6bf\/085\/8e9\/6bf0858e9c6eb9f7c02a4c56006613f2.png\" width=\"935\" height=\"465\"><figcaption><\/figcaption><\/figure>\n<p>\u0410\u0432\u0442\u043e\u0440\u0438\u0437\u043e\u0432\u044b\u0432\u0430\u0435\u043c\u0441\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u043c \u0441 \u043f\u043e\u043b\u043d\u044b\u043c\u0438 \u043f\u0440\u0430\u0432\u0430\u043c\u0438.<\/p>\n<p>\u0414\u0435\u043b\u0430\u0435\u043c Get \u0437\u0430\u043f\u0440\u043e\u0441 &#8212; \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/c20\/843\/e81\/c20843e814856c55b1014993821d1875.png\" width=\"935\" height=\"484\"><figcaption><\/figcaption><\/figure>\n<p>\u0414\u0435\u043b\u0430\u0435\u043c Post \u0437\u0430\u043f\u0440\u043e\u0441 &#8212; \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442. \u0410\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u044f \u043f\u0440\u043e\u0439\u0434\u0435\u043d\u0430, \u043d\u043e \u0441\u0430\u043c \u0437\u0430\u043f\u0440\u043e\u0441 \u043e\u0442\u043a\u043b\u043e\u043d\u044f\u0435\u0442\u0441\u044f registry, \u0442\u0430\u043a \u043a\u0430\u043a \u043d\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0434\u043e\u043f\u0443\u0441\u0442\u0438\u043c\u044b\u043c. \u041c\u044b \u043d\u0435 \u0441\u0442\u0430\u043b\u0438 \u043f\u043e\u0434\u0431\u0438\u0440\u0430\u0442\u044c \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u0439 \u0437\u0430\u043f\u0440\u043e\u0441 \u0434\u043b\u044f \u044d\u043a\u043e\u043d\u043e\u043c\u0438\u0438 \u0432\u0440\u0435\u043c\u0435\u043d\u0438.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/4d4\/2cb\/760\/4d42cb76030f4558e830e4c72090da7f.png\" width=\"934\" height=\"475\"><figcaption><\/figcaption><\/figure>\n<\/div>\n<\/details>\n<h2>\u0417\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435<\/h2>\n<p>\u041d\u0430 \u043c\u043e\u0439 \u0432\u0437\u0433\u043b\u044f\u0434 traefik \u0433\u043e\u0440\u0430\u0437\u0434\u043e \u0443\u0434\u043e\u0431\u043d\u0435\u0435 \u043a\u043b\u0430\u0441\u0441\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e nginx, \u0435\u0441\u043b\u0438 \u043c\u044b \u0436\u0438\u0432\u0435\u043c \u0432\u043d\u0443\u0442\u0440\u0438 docker \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u043e\u0432.<\/p>\n<p>\u0415\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u0430\u044f \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430, \u0441 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043c\u044b \u0441\u0442\u043e\u043b\u043a\u043d\u0443\u043b\u0438\u0441\u044c \u043f\u0440\u0438 \u043c\u0438\u0433\u0440\u0430\u0446\u0438\u0438 \u043d\u0430 traefik &#8212; \u044d\u0442\u043e \u043d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043e\u0442\u0440\u0438\u0446\u0430\u043d\u0438\u044f \u0432 \u043f\u0440\u0430\u0432\u0438\u043b\u0430\u0445 \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u0438\u0437\u0430\u0446\u0438\u0438. \u041f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435 \u043e \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0435 \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u043f\u043e <a href=\"https:\/\/stackoverflow.com\/questions\/58488055\/regex-how-to-match-a-substring-that-does-not-contain-a-fixed-string-regex-in-tr\" rel=\"noopener noreferrer nofollow\">\u0441\u0441\u044b\u043b\u043a\u0435<\/a>.<\/p>\n<\/div>\n<p> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/post\/551792\/\"> https:\/\/habr.com\/ru\/post\/551792\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"\n<div class=\"post__text post__text_v2\" id=\"post-content-body\">\n<h3>\u041f\u043e\u0434 \u043a\u0430\u0442\u043e\u043c \u0432\u044b \u0443\u0432\u0438\u0434\u0438\u0442\u0435:<\/h3>\n<ol>\n<li>\n<p>\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f Traefik \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043e\u0431\u0440\u0430\u0442\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u043a\u0441\u0438 \u0434\u043b\u044f \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u0438\u0437\u0430\u0446\u0438\u0438 \u0442\u0440\u0430\u0444\u0438\u043a\u0430 \u0432\u043d\u0443\u0442\u0440\u044c docker \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u043e\u0432.<\/p>\n<\/li>\n<li>\n<p>\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 Traefik \u0434\u043b\u044f \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f Let\u2019s Encrypt \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0432<\/p>\n<\/li>\n<li>\n<p>\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 Traefik \u0434\u043b\u044f \u0440\u0430\u0437\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a docker registry \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 basic auth<\/p>\n<\/li>\n<li>\n<p>\u0412\u0441\u0435 \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0435\u043d\u043d\u043e\u0435 \u0432\u044b\u0448\u0435 \u0431\u0443\u0434\u0435\u0442 \u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0442\u044c\u0441\u044f \u0438\u0441\u043a\u043b\u044e\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0432\u043d\u0443\u0442\u0440\u0438 docker-compose.yml \u0438 \u043d\u0435 \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0445 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0445 \u0444\u0430\u0439\u043b\u043e\u0432 \u0432\u043d\u0443\u0442\u0440\u044c \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u043e\u0432.<\/p>\n<\/li>\n<\/ol>\n<h3>\u0410\u043a\u0442\u0443\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0432\u043e\u043f\u0440\u043e\u0441\u0430<\/h3>\n<p>\u041f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0432\u0441\u0435 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0435\u0441\u0442\u044c \u0432 \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442\u0435, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0445&nbsp; \u0444\u0430\u0439\u043b\u043e\u0432 \u0441 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f\u043c\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0443\u0436\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u0441\u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440 \u043f\u0440\u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0435. \u041c\u044b \u043d\u0430\u0448\u043b\u0438 \u0441\u043f\u043e\u0441\u043e\u0431 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0432\u0441\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0438\u0441\u043a\u043b\u044e\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0432\u043d\u0443\u0442\u0440\u0438 compose \u0444\u0430\u0439\u043b\u0430.<\/p>\n<p>\u041f\u043e\u043c\u0438\u043c\u043e \u044d\u0442\u043e\u0433\u043e \u0432 \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442\u0435 \u043c\u0430\u043b\u043e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u043d\u0430 \u0442\u0435\u043c\u0443 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f traefik \u0434\u043b\u044f \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044f \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a docker registry. \u041e\u043f\u0438\u0441\u0430\u043d\u043d\u0443\u044e \u043d\u0438\u0436\u0435 \u0442\u0435\u0445\u043d\u0438\u043a\u0443 \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0434\u043b\u044f \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044f \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a \u043b\u044e\u0431\u043e\u043c\u0443 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044e, \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u044e\u0449\u0435\u043c\u0443 Rest API.<\/p>\n<h3>\u041f\u043e\u0438\u0441\u043a \u0440\u0435\u0448\u0435\u043d\u0438\u044f<\/h3>\n<p>\u0412\u043e\u0442 <a href=\"https:\/\/docs.docker.com\/registry\/deploying\/\" rel=\"noopener noreferrer nofollow\"><u>\u0441\u0441\u044b\u043b\u043a\u0430 <\/u><\/a>\u043d\u0430 \u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u0443\u044e \u0441\u0442\u0430\u0442\u044c\u044e \u043f\u043e \u0440\u0430\u0437\u0432\u0435\u0440\u0442\u044b\u0432\u0430\u043d\u0438\u044e docker registry. \u041a\u0440\u0443\u0442\u0438\u043c \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443 \u0432\u043d\u0438\u0437 \u0438 \u0432\u0438\u0434\u0438\u043c \u043f\u0440\u0438\u043c\u0435\u0440 \u0440\u0430\u0437\u0432\u0435\u0440\u0442\u044b\u0432\u0430\u043d\u0438\u044f \u0447\u0435\u0440\u0435\u0437 docker-compose. \u042f \u043f\u0435\u0440\u0435\u043f\u0435\u0447\u0430\u0442\u0430\u044e \u043f\u0440\u0438\u043c\u0435\u0440 \u043d\u0438\u0436\u0435:<\/p>\n<pre><code class=\"xml\">registry:   restart: always   image: registry:2   ports:     - 5000:5000   environment:     REGISTRY_HTTP_TLS_CERTIFICATE: \/certs\/domain.crt     REGISTRY_HTTP_TLS_KEY: \/certs\/domain.key     REGISTRY_AUTH: htpasswd     REGISTRY_AUTH_HTPASSWD_PATH: \/auth\/htpasswd     REGISTRY_AUTH_HTPASSWD_REALM: Registry Realm   volumes:     - \/path\/data:\/var\/lib\/registry     - \/path\/certs:\/certs     - \/path\/auth:\/auth<\/code><\/pre>\n<p>\u041d\u0430\u043c \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u044e\u0442 \u0442\u0435\u0440\u043c\u0438\u043d\u0438\u0440\u043e\u0432\u0430\u0442\u044c https \u0442\u0440\u0430\u0444\u0438\u043a \u043f\u0440\u044f\u043c\u043e \u0432\u043d\u0443\u0442\u0440\u0438 \u0441\u0435\u0440\u0432\u0438\u0441\u0430 registry, \u0447\u0435\u0433\u043e \u043c\u044b \u0434\u0435\u043b\u0430\u0442\u044c \u043d\u0435 \u0431\u0443\u0434\u0435\u043c. \u041c\u044b \u043d\u0435 \u0441\u0442\u0430\u043d\u0435\u043c \u0443\u0441\u043b\u043e\u0436\u043d\u044f\u0442\u044c \u0441\u0435\u0431\u0435 \u0436\u0438\u0437\u043d\u044c \u0438 \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u044b \u0432\u043d\u0443\u0442\u0440\u044c \u0441\u0435\u0440\u0432\u0438\u0441\u0430. \u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e \u0443 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u0434\u0440\u0443\u0433\u0438\u0435 https \u0441\u0435\u0440\u0432\u0438\u0441\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u0442\u0430\u043a\u0436\u0435 \u043d\u0443\u0436\u043d\u044b \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u044b, \u0442\u0430\u043a \u0447\u0442\u043e \u0443 \u043d\u0430\u0441 \u0443\u0436\u0435 \u0435\u0441\u0442\u044c \u0435\u0434\u0438\u043d\u0430\u044f \u0442\u043e\u0447\u043a\u0430 \u0432\u0445\u043e\u0434\u0430, \u0433\u0434\u0435 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u044f \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0432 \u0434\u043b\u044f \u043d\u043e\u0432\u044b\u0445 \u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e let&#8217;s encrypt &#8212; \u044d\u0442\u043e \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440 \u0441 traefik.<\/p>\n<p>\u0422\u0430\u043a\u0436\u0435 \u043d\u0430\u043c \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u044e\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0431\u0430\u0437\u043e\u0432\u0443\u044e \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u044e \u0434\u043b\u044f \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a registry, \u043e\u0434\u043d\u0430\u043a\u043e \u043d\u0435 \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u044e\u0442 \u0441\u043f\u043e\u0441\u043e\u0431\u0430 \u0440\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u043f\u0440\u0430\u0432 \u0434\u043e\u0441\u0442\u0443\u043f\u0430. \u0422\u043e \u0435\u0441\u0442\u044c \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u0431\u0443\u0434\u0435\u0442 \u0438\u043c\u0435\u0442\u044c \u043f\u043e\u043b\u043d\u044b\u0439 \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u0441\u0435\u0440\u0432\u0438\u0441\u0443,&nbsp; \u0441\u043c\u043e\u0436\u0435\u0442 \u0447\u0438\u0442\u0430\u0442\u044c \u0438 \u043f\u0438\u0441\u0430\u0442\u044c \u0432 \u043b\u044e\u0431\u043e\u043c&nbsp; \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0438. \u041d\u0430 \u0441\u0430\u0439\u0442\u0435 \u0435\u0441\u0442\u044c <a href=\"https:\/\/docs.docker.com\/registry\/recipes\/nginx\/\" rel=\"noopener noreferrer nofollow\"><u>\u043f\u0440\u0438\u043c\u0435\u0440 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f nginx<\/u><\/a>, \u043d\u043e \u0438 \u0442\u0430\u043c \u043c\u044b \u0432\u0438\u0434\u0438\u043c \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0433\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u0441 \u043f\u043e\u043b\u043d\u044b\u043c\u0438 \u043f\u0440\u0430\u0432\u0430\u043c\u0438.<\/p>\n<p>\u0412 \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442\u0435 \u043c\u044b \u043d\u0430\u0445\u043e\u0434\u0438\u043c <a href=\"https:\/\/mindtrove.info\/control-read-write-access-docker-private-registry\/\" rel=\"noopener noreferrer nofollow\"><u>\u0438\u0434\u0435\u0430\u043b\u044c\u043d\u044b\u0439 \u043f\u0440\u0438\u043c\u0435\u0440 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f nginx<\/u><\/a> \u0434\u043b\u044f \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u0438 \u0438 \u0440\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u043f\u0440\u0430\u0432 \u0434\u043e\u0441\u0442\u0443\u043f\u0430. \u041c\u044b \u0441\u0434\u0435\u043b\u0430\u0435\u043c \u0442\u043e \u0436\u0435 \u0441\u0430\u043c\u043e\u0435, \u043d\u043e \u0447\u0435\u0440\u0435\u0437 traefik.<\/p>\n<p>\u0418\u0442\u0430\u043a, \u043f\u0440\u0438\u0441\u0442\u0443\u043f\u0430\u0435\u043c. <\/p>\n<h3>\u0411\u0430\u0437\u043e\u0432\u0430\u044f \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f Registry<\/h3>\n<p>\u0421\u043f\u0435\u0440\u0432\u0430 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u043c \u0441\u0435\u0440\u0432\u0438\u0441 registry \u0447\u0435\u0440\u0435\u0437 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 compose \u0444\u0430\u0439\u043b. \u0421\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u043d\u043e\u0432\u0443\u044e \u043f\u0430\u043f\u043a\u0443 \u201cregistry&#187;, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c compose \u0444\u0430\u0439\u043b:<\/p>\n<pre><code class=\"bash\">mkdir registry cd registry nano docker-compose.yml<\/code><\/pre>\n<p>\u0412\u0441\u0442\u0430\u0432\u0438\u043c \u0432 \u0444\u0430\u0439\u043b \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0435 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 \u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u043c:<\/p>\n<pre><code>version: '2.4' services:   registry:     restart: always     image: registry:2     ports:       - 5000:5000<\/code><\/pre>\n<p>\u0417\u0430\u043f\u0443\u0441\u0442\u0438\u043c \u0441\u0435\u0440\u0432\u0438\u0441<\/p>\n<pre><code>docker-compose up -d<\/code><\/pre>\n<p>\u041e\u0442\u043a\u0440\u043e\u0435\u043c \u0432 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0435 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443 <a href=\"http:\/\/168.119.212.25:5000\/v2\/_catalog\" rel=\"noopener noreferrer nofollow\"><u>http:\/\/&lt;IP&gt;:5000\/v2\/_catalog<\/u><\/a> , \u0433\u0434\u0435 &lt;IP&gt; &#8212; \u044d\u0442\u043e ip \u0430\u0434\u0440\u0435\u0441 \u0434\u043e\u043a\u0435\u0440 \u043c\u0430\u0448\u0438\u043d\u044b.&nbsp;<br \/>\u0412 \u043e\u0442\u0432\u0435\u0442 \u0443\u0432\u0438\u0434\u0438\u043c \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443 \u0441 \u0442\u0435\u043a\u0441\u0442\u043e\u043c:<\/p>\n<pre><code>{\"repositories\":[]}<\/code><\/pre>\n<p>\u0417\u043d\u0430\u0447\u0438\u0442, \u0432\u0441\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442. \u0415\u0441\u043b\u0438 \u044d\u0442\u043e \u043d\u0435 \u0442\u0430\u043a &#8212; \u043f\u0440\u043e\u0432\u0435\u0440\u044c\u0442\u0435 firewall.<\/p>\n<h3>\u0411\u0430\u0437\u043e\u0432\u0430\u044f \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f Traefik<\/h3>\n<p>\u0417\u043d\u0430\u043a\u043e\u043c\u0441\u0442\u0432\u043e \u0441 traefik \u043d\u0430\u0447\u043d\u0435\u043c \u0441 \u0431\u0430\u0437\u043e\u0432\u043e\u0439 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438.&nbsp;<br \/>\u041f\u043e\u0437\u0436\u0435 \u043c\u044b \u0434\u043e\u0431\u0430\u0432\u0438\u043c SSL, \u0441\u0436\u0430\u0442\u0438\u0435 \u0442\u0440\u0430\u0444\u0438\u043a\u0430 \u0438 \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u044e \u0441 \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0435\u0439.<\/p>\n<p>\u0421\u043f\u0435\u0440\u0432\u0430 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u043c \u0441\u0435\u0440\u0432\u0438\u0441 registry \u0447\u0435\u0440\u0435\u0437 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 compose \u0444\u0430\u0439\u043b. \u0421\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u043d\u043e\u0432\u0443\u044e \u043f\u0430\u043f\u043a\u0443 \u201cregistry&#187;, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c compose \u0444\u0430\u0439\u043b:<\/p>\n<pre><code>mkdir traefik cd traefik nano docker-compose.yml<\/code><\/pre>\n<p>\u0412\u0441\u0442\u0430\u0432\u0438\u043c \u0432 \u0444\u0430\u0439\u043b \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0435 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 \u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u043c:<\/p>\n<pre><code>version: \"2.4\"   services:     traefik:     image: \"traefik:v2.4\"     container_name: \"traefik\"     command:       - \"--api.insecure=true\"     ports:       - \"8080:8080\"<\/code><\/pre>\n<details class=\"spoiler\">\n<summary>\u0420\u0430\u0437\u0431\u0435\u0440\u0435\u043c \u043a\u0430\u0436\u0434\u0443\u044e \u043d\u043e\u0432\u0443\u044e \u0441\u0442\u0440\u043e\u043a\u0443 (\u043d\u0430\u0436\u0430\u0442\u044c)<\/summary>\n<div class=\"spoiler__content\">\n<pre><code>command: - \"--api.insecure=true\"<\/code><\/pre>\n<p>\u0427\u0435\u0440\u0435\u0437 command \u043f\u0435\u0440\u0435\u0434\u0430\u044e\u0442\u0441\u044f \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u043d\u0430\u0448\u0435\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f. <br \/>\u0412\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u0434\u043e\u0441\u0442\u0443\u043f \u043a dashboard \u0432 insecure \u0440\u0435\u0436\u0438\u043c\u0435. \u042d\u0442\u043e \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442, \u0447\u0442\u043e dashboard \u0431\u0443\u0434\u0435\u0442 \u0434\u043e\u0441\u0442\u0443\u043f\u0435\u043d \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e \u0432 \u0442\u043e\u0447\u043a\u0435 \u0432\u0445\u043e\u0434\u0430 \u0441 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435\u043c traefik. \u0415\u0441\u043b\u0438 \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u0430\u044f \u0442\u043e\u0447\u043a\u0430 \u0432\u0445\u043e\u0434\u0430 traefik \u043d\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043d\u0430, \u043e\u043d\u0430 \u0431\u0443\u0434\u0435\u0442 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0430 \u043d\u0430 \u043f\u043e\u0440\u0442\u0443 8080. <\/p>\n<pre><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;- \"8080:8080\"<\/code><\/pre>\n<p>\u041f\u0435\u0440\u0435\u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0441 \u043f\u043e\u0440\u0442\u0430 8080 \u043d\u0430 docker \u043c\u0430\u0448\u0438\u043d\u0435 \u0432 \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u044b\u0439 \u043f\u043e\u0440\u0442 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430 traefik. \u042d\u0442\u0430 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u0442\u0430\u043a\u0436\u0435 \u043a\u0430\u043a \u0438 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0430\u044f \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u0430, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043f\u0430\u0441\u0442\u044c \u0432 dashboard traefik<\/p>\n<\/div>\n<\/details>\n<p>\u0417\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u043d\u0430\u0448 \u0441\u0435\u0440\u0432\u0438\u0441:<\/p>\n<pre><code class=\"bash\">docker-compose up -d<\/code><\/pre>\n<p>\u041e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u043c \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443 \u0441 IP \u0430\u0434\u0440\u0435\u0441\u043e\u043c \u0434\u043e\u043a\u0435\u0440 \u043c\u0430\u0448\u0438\u043d\u044b \u0438 \u043f\u043e\u0440\u0442\u043e\u043c 8080:<\/p>\n<figure class=\"full-width\"><figcaption><\/figcaption><\/figure>\n<h2>\u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 Registry \u043a Traefik (\u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u0434\u043e\u043c\u0435\u043d\u0430)  <\/h2>\n<p>\u041c\u044b \u043c\u043e\u0433\u043b\u0438 \u0431\u044b \u0443\u043f\u0440\u043e\u0441\u0442\u0438\u0442\u044c \u0441\u0435\u0431\u0435 \u0437\u0430\u0434\u0430\u0447\u0443, \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u0438\u0432 \u043e\u0431\u0430 \u0441\u0435\u0440\u0432\u0438\u0441\u0430 \u0432 \u043e\u0434\u043d\u043e\u043c compose \u0444\u0430\u0439\u043b\u0435, \u043d\u043e \u043c\u044b \u043d\u0435 \u0431\u0443\u0434\u0435\u043c \u044d\u0442\u043e\u0433\u043e \u0434\u0435\u043b\u0430\u0442\u044c, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u0431\u043e\u043b\u0435\u0435 \u0441\u043b\u043e\u0436\u043d\u044b\u0439 \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u0439 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f.&nbsp;<br \/>\u0412 \u0441\u043b\u0443\u0447\u0430\u0435 \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f \u043d\u0430\u043c \u043d\u0435 \u043f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u0431\u044b \u043f\u0440\u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c \u043e\u0431\u0449\u0438\u0435 \u0441\u0435\u0442\u0438.<\/p>\n<p><strong>\u041d\u043e\u0432\u044b\u0439 compose \u0434\u043b\u044f Traefik: <\/strong><\/p>\n<pre><code>Version: \"2.4\"   services:     traefik:     image: \"traefik:v2.4\"     container_name: \"traefik\"     command:       - \"--api.insecure=true\"       - \"--providers.docker=true\"       - \"--providers.docker.exposedbydefault=false\"     ports:       - \"80:80\"       - \"8080:8080\"     networks:       - registry_default     volumes:       - \"\/var\/run\/docker.sock:\/var\/run\/docker.sock:ro\" networks:   registry_default:     external: true<\/code><\/pre>\n<details class=\"spoiler\">\n<summary>\u0420\u0430\u0437\u0431\u0435\u0440\u0435\u043c \u043a\u0430\u0436\u0434\u0443\u044e \u043d\u043e\u0432\u0443\u044e \u0441\u0442\u0440\u043e\u043a\u0443 (\u043d\u0430\u0436\u0430\u0442\u044c)<\/summary>\n<div class=\"spoiler__content\">\n<pre><code>- \"--providers.docker=true\"<\/code><\/pre>\n<p>\u0412\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u0434\u043e\u043a\u0435\u0440 \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440. \u041f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e traefik \u0431\u0443\u0434\u0435\u0442 \u0441\u043b\u0435\u0434\u0438\u0442\u044c \u0437\u0430 \u043f\u043e\u044f\u0432\u043b\u0435\u043d\u0438\u0435\u043c \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0445 \u043c\u0435\u0442\u043e\u043a \u043d\u0430 \u0434\u0440\u0443\u0433\u0438\u0445 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430\u0445 \u0438 \u043f\u0435\u0440\u0435\u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0442\u044c \u0432\u0441\u0435 \u0441\u043e\u0433\u043b\u0430\u0441\u043d\u043e \u044d\u0442\u0438\u043c \u043c\u0435\u0442\u043a\u0430\u043c.<\/p>\n<pre><code>- \"--providers.docker.exposedbydefault=false\"<\/code><\/pre>\n<p>\u0417\u0430\u043f\u0440\u0435\u0449\u0430\u0435\u043c \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 HTTP \u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432 \u0438 HTTP \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u043e\u0432 \u0432 traefik. \u0415\u0441\u043b\u0438 \u044d\u0442\u043e\u0433\u043e \u043d\u0435 \u0441\u0434\u0435\u043b\u0430\u0442\u044c, \u0442\u043e traefik \u043e\u043f\u0443\u0431\u043b\u0438\u043a\u0443\u0435\u0442 \u0432\u0441\u0435 docker \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u044b, \u0432 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0435\u0441\u0442\u044c expose \u043f\u043e\u0440\u0442\u0430 \u043d\u0430\u0440\u0443\u0436\u0443 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438. \u0412 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0434\u043e\u043c\u0435\u043d\u043d\u043e\u0433\u043e \u0438\u043c\u0435\u043d\u0438 \u043e\u043d \u0431\u0443\u0434\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0438\u043c\u044f \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430.&nbsp;<\/p>\n<p>\u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u0431\u0435\u0437 \u044d\u0442\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0438 \u043c\u044b \u043d\u0435\u044f\u0432\u043d\u043e \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u043c \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u044b\u0439 \u0434\u043e\u0441\u0442\u0443\u043f \u043a\u043e \u0432\u0441\u0435\u043c \u0441\u0432\u043e\u0438\u043c \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430\u043c! \u0412\u0441\u0435, \u0447\u0442\u043e \u043d\u0443\u0436\u043d\u043e \u0434\u043b\u044f \u0430\u0442\u0430\u043a\u0438 &#8212; \u0443\u0433\u0430\u0434\u0430\u0442\u044c \u0438\u043c\u044f \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430! \u042f \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u043b \u044d\u0442\u0443 \u0442\u0435\u043e\u0440\u0438\u044e \u043d\u0430 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0435: \u043f\u043e\u0441\u043b\u0435 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0432 \u0444\u0430\u0439\u043b hosts \u0441\u0442\u0440\u043e\u043a\u0438 \u201cIP_\u0434\u043e\u043a\u0435\u0440_\u043c\u0430\u0448\u0438\u043d\u044b \u0438\u043c\u044f_\u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430\u201d, \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0430 \u201chttp:\/\/\u0438\u043c\u044f_\u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430&#187; \u043e\u0442\u043a\u0440\u044b\u043b\u0430\u0441\u044c \u0432 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0435.<\/p>\n<pre><code>- \"80:80\"<\/code><\/pre>\n<p>\u041f\u0435\u0440\u0435\u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e\u0433\u043e \u0432\u0435\u0431 \u043f\u043e\u0440\u0442\u0430 80 (http) \u043d\u0430 docker \u043c\u0430\u0448\u0438\u043d\u0435 \u0432 \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u044b\u0439 \u043f\u043e\u0440\u0442 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430 traefik. \u042d\u0442\u043e \u043d\u0443\u0436\u043d\u043e \u0434\u043b\u044f \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0438 \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u0438\u0437\u0430\u0446\u0438\u0438 \u043f\u043e\u043b\u0435\u0437\u043d\u043e\u0433\u043e \u0442\u0440\u0430\u0444\u0438\u043a\u0430.<\/p>\n<pre><code>    networks:       - registry_default networks:   registry_default:     external: true<\/code><\/pre>\n<p>\u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u043a \u043a\u043e\u043c\u043c\u0443\u0442\u0430\u0442\u043e\u0440\u0443, \u043e\u0431\u0441\u043b\u0443\u0436\u0438\u0432\u0430\u044e\u0449\u0435\u043c\u0443 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u044b \u0438\u0437 \u0434\u0440\u0443\u0433\u043e\u0433\u043e compose \u0444\u0430\u0439\u043b\u0430. \u0414\u0435\u043b\u043e \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e compose \u0444\u0430\u0439\u043b\u0430 \u0441\u043e\u0437\u0434\u0430\u0435\u0442\u0441\u044f \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0439 \u043a\u043e\u043c\u043c\u0443\u0442\u0430\u0442\u043e\u0440 \u0441 \u0438\u043c\u0435\u043d\u0435\u043c \u201c\u0438\u043c\u044f_\u0440\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u0439_\u043f\u0430\u043f\u043a\u0438_default, \u0442\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u0441\u0435\u0440\u0432\u0438\u0441\u044b \u0432\u043d\u0443\u0442\u0440\u0438 \u043e\u0434\u043d\u043e\u0433\u043e compose \u0444\u0430\u0439\u043b\u0430 \u043c\u043e\u0433\u0443\u0442 \u043b\u0435\u0433\u043a\u043e \u0434\u0440\u0443\u0433 \u0441 \u0434\u0440\u0443\u0433\u043e\u043c \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c.<\/p>\n<pre><code>volumes:   - \"\/var\/run\/docker.sock:\/var\/run\/docker.sock:ro\"<\/code><\/pre>\n<p>\u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u043c docker.sock \u0434\u043e\u043a\u0435\u0440 \u043c\u0430\u0448\u0438\u043d\u044b \u0432\u043d\u0443\u0442\u0440\u044c \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430 traefik. \u042d\u0442\u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e, \u0447\u0442\u043e\u0431\u044b traefik \u043c\u043e\u0433 \u043e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u0442\u044c \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0432 \u0447\u0443\u0436\u0438\u0445 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430\u0445. \u041e\u043d \u0431\u0443\u0434\u0435\u0442 \u043f\u0435\u0440\u0435\u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0442\u044c \u0441\u0432\u043e\u044e \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044e \u043d\u0430 \u043b\u0435\u0442\u0443, \u0438\u0441\u0445\u043e\u0434\u044f \u0438\u0437 \u043c\u0435\u0442\u043e\u043a, \u043f\u0440\u0438\u043d\u0430\u0434\u043b\u0435\u0436\u0430\u0449\u0438\u0445 \u0434\u0440\u0443\u0433\u0438\u043c \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430\u043c.<\/p>\n<\/div>\n<\/details>\n<p><strong>\u041d\u043e\u0432\u044b\u0439 compose \u0434\u043b\u044f Registry: <\/strong><\/p>\n<pre><code>version: '2.4' services:   registry:     restart: always     image: registry:2     ports:       - 5000:5000     labels:       - \"traefik.enable=true\"       - \"traefik.http.routers.registry.rule=Host(`&lt;REGISTRY.FQDN&gt;`)\"<\/code><\/pre>\n<details class=\"spoiler\">\n<summary>\u0420\u0430\u0437\u0431\u0435\u0440\u0435\u043c \u043a\u0430\u0436\u0434\u0443\u044e \u043d\u043e\u0432\u0443\u044e \u0441\u0442\u0440\u043e\u043a\u0443 (\u043d\u0430\u0436\u0430\u0442\u044c)<\/summary>\n<div class=\"spoiler__content\">\n<pre><code>- \"traefik.enable=true\"<\/code><\/pre>\n<p>\u042d\u0442\u0430 \u043c\u0435\u0442\u043a\u0430 \u043e\u043f\u043e\u0432\u0435\u0449\u0430\u0435\u0442 traefik, \u0447\u0442\u043e \u0434\u0430\u043d\u043d\u044b\u0439 \u0441\u0435\u0440\u0432\u0438\u0441 \u043d\u0443\u0436\u043d\u043e \u043e\u043f\u0443\u0431\u043b\u0438\u043a\u043e\u0432\u0430\u0442\u044c<\/p>\n<pre><code>- \"traefik.http.routers.registry.rule=Host(`&lt;REGISTRY.FQDN&gt;`)\"<\/code><\/pre>\n<p>\u042d\u0442\u0430 \u043c\u0435\u0442\u043a\u0430 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 traefik, \u0447\u0442\u043e \u0434\u043e\u043c\u0435\u043d\u043d\u043e\u0435 \u0438\u043c\u044f &lt;REGISTRY.FQDN&gt; \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0441\u0432\u044f\u0437\u0430\u0442\u044c \u0441 \u0434\u0430\u043d\u043d\u044b\u043c \u0441\u0435\u0440\u0432\u0438\u0441\u043e\u043c. \u0417\u0430\u043f\u0440\u043e\u0441\u044b, \u0432 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0430\u0445 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0431\u0443\u0434\u0435\u0442 \u0443\u043a\u0430\u0437\u0430\u043d\u043e \u0434\u0430\u043d\u043d\u043e\u0435 \u0438\u043c\u044f, \u0431\u0443\u0434\u0443\u0442 \u043f\u0435\u0440\u0435\u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u044b \u0432 \u0442\u0435\u043a\u0443\u0449\u0438\u0439 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440.<\/p>\n<pre><code>- \"traefik.http.services.registry.loadbalancer.server.port=5000\"<\/code><\/pre>\n<p>\u041c\u044b \u0442\u0430\u043a\u0436\u0435 \u043c\u043e\u0436\u0435\u043c \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u043f\u043e\u0440\u0442, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u043f\u0435\u0440\u0435\u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d \u0442\u0440\u0430\u0444\u0438\u043a, \u043d\u043e \u0432 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u044d\u0442\u043e \u0434\u0435\u043b\u0430\u0442\u044c \u043d\u0435 \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e. \u0415\u0441\u043b\u0438 docker \u0444\u0430\u0439\u043b \u043d\u0430\u0448\u0435\u0433\u043e \u0441\u0435\u0440\u0432\u0438\u0441\u0430 \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u0442 \u043d\u0430\u0440\u0443\u0436\u0443 \u0432\u0441\u0435\u0433\u043e \u043b\u0438\u0448\u044c 1 \u043f\u043e\u0440\u0442, \u044d\u0442\u043e\u0442 \u043f\u043e\u0440\u0442 \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0431\u0440\u0430\u043d \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438.&nbsp;<\/p>\n<\/div>\n<\/details>\n<p>\u041f\u0435\u0440\u0435\u0437\u0430\u043f\u0443\u0441\u0442\u0438\u043c \u043e\u0431\u0430 \u043d\u0430\u0448\u0438\u0445 \u0441\u0435\u0440\u0432\u0438\u0441\u0430:<\/p>\n<pre><code>docker-compose up -d<\/code><\/pre>\n<p>\u041e\u0442\u043a\u0440\u043e\u0435\u043c \u0432 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0435 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443 <u>http:\/\/&lt;REGISTRY.FQDN&gt;:5000\/v2\/_catalog<\/u> , \u0433\u0434\u0435 &lt;REGISTRY.FQDN&gt; &#8212; \u044d\u0442\u043e \u043f\u043e\u043b\u043d\u043e\u0435 \u0434\u043e\u043c\u0435\u043d\u043d\u043e\u0435 \u0438\u043c\u044f \u043d\u0430\u0448\u0435\u0433\u043e \u0441\u0435\u0440\u0432\u0438\u0441\u0430, \u043e\u043f\u0438\u0441\u0430\u043d\u043d\u043e\u0435 \u0432 \u043c\u0435\u0442\u043a\u0435 compose \u0444\u0430\u0439\u043b\u0430.<\/p>\n<p>\u0412 \u043e\u0442\u0432\u0435\u0442 \u0443\u0432\u0438\u0434\u0438\u043c \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443 \u0432 \u0442\u0435\u043a\u0441\u0442\u043e\u043c:<\/p>\n<pre><code>{\"repositories\":[]}<\/code><\/pre>\n<p>\u0417\u043d\u0430\u0447\u0438\u0442 \u0432\u0441\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442.<\/p>\n<h3>\u0414\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 SSL (\u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 https)<\/h3>\n<p>\u041c\u044b \u0431\u0443\u0434\u0435\u043c \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u044c \u0438 \u043f\u0440\u043e\u0434\u043b\u044f\u0442\u044c SSL \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u044b \u0447\u0435\u0440\u0435\u0437 Let&#8217;s Encrypt. <\/p>\n<p><strong>\u041d\u043e\u0432\u044b\u0439 compose \u0434\u043b\u044f Traefik:<\/strong><\/p>\n<pre><code>version: \"2.4\"   services:     traefik:     image: \"traefik:v2.4\"     container_name: \"traefik\"     command:       - \"--api.insecure=true\"       - \"--providers.docker=true\"       - \"--providers.docker.exposedbydefault=false\"       - \"--entrypoints.web.address=:80\"       - \"--entrypoints.web.http.redirections.entryPoint.to=websecure\"       - \"--entrypoints.websecure.address=:443\"       - \"--certificatesresolvers.myresolver.acme.httpchallenge=true\"       - \"--certificatesresolvers.myresolver.acme.httpchallenge.entrypoint=web\"       - \"--certificatesresolvers.myresolver.acme.email=&lt;EMAIL&gt;\"       - \"--certificatesresolvers.myresolver.acme.storage=\/letsencrypt\/acme.json\"     ports:       - \"80:80\"       - \"443:443\"       - \"8080:8080\"     networks:       - registry_default     volumes:       - \"letsencrypt:\/letsencrypt\"       - \"\/var\/run\/docker.sock:\/var\/run\/docker.sock:ro\" volumes:   letsencrypt: networks:   registry_default:     external: true<\/code><\/pre>\n<details class=\"spoiler\">\n<summary>\u0420\u0430\u0437\u0431\u0435\u0440\u0435\u043c \u043a\u0430\u0436\u0434\u0443\u044e \u043d\u043e\u0432\u0443\u044e \u0441\u0442\u0440\u043e\u043a\u0443 (\u043d\u0430\u0436\u0430\u0442\u044c)<\/summary>\n<div class=\"spoiler__content\">\n<pre><code>- \"--entrypoints.web.address=:80\"<\/code><\/pre>\n<p>\u041c\u0435\u043d\u044f\u0435\u043c \u0438\u043c\u044f \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e\u0433\u043e entrypoint \u0441 http \u043d\u0430 web \u0434\u043b\u044f \u0443\u0434\u043e\u0431\u0441\u0442\u0432\u0430.<\/p>\n<pre><code>- \"--entrypoints.web.http.redirections.entryPoint.to=websecure\"<\/code><\/pre>\n<p>\u0414\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u043f\u0435\u0440\u0435\u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0442\u0440\u0430\u0444\u0438\u043a\u0430 \u0441 entrypoint web \u043d\u0430 websecure. \u0414\u0440\u0443\u0433\u0438\u043c\u0438 \u0441\u043b\u043e\u0432\u0430\u043c\u0438 \u043f\u0435\u0440\u0435\u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0441 HTTP \u043d\u0430 HTTPS<\/p>\n<pre><code>- \"--entrypoints.websecure.address=:443\"<\/code><\/pre>\n<p>\u0421\u043e\u0437\u0434\u0430\u0435\u043c \u043d\u043e\u0432\u044b\u0439 entrypoint \u043d\u0430 443 \u043f\u043e\u0440\u0442\u0443 \u0441 \u0438\u043c\u0435\u043d\u0435\u043c websecure<\/p>\n<pre><code>- \"--certificatesresolvers.myresolver.acme.httpchallenge=true\"<\/code><\/pre>\n<p>\u041d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u043c \u0440\u0435\u0436\u0438\u043c \u0432\u044b\u0434\u0430\u0447\u0438 \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0432 Let\u2019s Encrypt \u0447\u0435\u0440\u0435\u0437 http challenge<\/p>\n<pre><code>- \"--certificatesresolvers.myresolver.acme.httpchallenge.entrypoint=web\"<\/code><\/pre>\n<p>\u041d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u043c entrypoint \u0434\u043b\u044f http challenge<\/p>\n<pre><code>- \"--certificatesresolvers.myresolver.acme.email=&lt;EMAIL&gt;\"<\/code><\/pre>\n<p>\u041d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u043c &lt;email&gt; \u0430\u0434\u0440\u0435\u0441 \u0434\u043b\u044f \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u0438 \u0432 \u0446\u0435\u043d\u0442\u0440\u0435 \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438<\/p>\n<pre><code>- \"--certificatesresolvers.myresolver.acme.storage=\/letsencrypt\/acme.json\"<\/code><\/pre>\n<p>\u041c\u0435\u043d\u044f\u0435\u043c \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e\u0435 \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0444\u0430\u0439\u043b\u0430 acme.json. \u0412 \u044d\u0442\u043e\u0442 \u0444\u0430\u0439\u043b \u0431\u0443\u0434\u0443\u0442 \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c\u0441\u044f \u0432\u044b\u0434\u0430\u043d\u043d\u044b\u0435<\/p>\n<\/div>\n<\/details>\n<\/details>\n<\/p>\n<\/div>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-321236","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/321236","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=321236"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/321236\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=321236"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=321236"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=321236"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}