{"id":313763,"date":"2020-11-25T15:01:29","date_gmt":"2020-11-25T15:01:29","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=313763"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=313763","title":{"rendered":"\u0421\u0431\u043e\u0440\u043a\u0430 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u043e\u0432 \u0431\u0435\u0437 Docker"},"content":{"rendered":"\n<div class=\"post__text post__text_v2\" id=\"post-content-body\">\n<p>\u041f\u0440\u0438\u0432\u0435\u0442, \u0425\u0430\u0431\u0440. \u041e\u0447\u0435\u043d\u044c \u043c\u043d\u043e\u0433\u043e \u043c\u043d\u043e\u0433\u043e \u0441\u0435\u0439\u0447\u0430\u0441 \u0441\u043b\u044b\u0448\u043d\u043e \u043f\u0440\u043e \u041a\u0443\u0431\u0435\u0440\u043d\u0435\u0442\u0438\u0441 \u0438 Docker. \u041f\u0440\u043e \u043d\u0438\u0445 \u043d\u0435 \u0437\u043d\u0430\u0435\u0442 \u043d\u0430\u0432\u0435\u0440\u043d\u043e\u0435, \u0442\u043e\u043b\u044c\u043a\u043e \u043b\u0435\u043d\u0438\u0432\u044b\u0439. \u041d\u043e \u0435\u0441\u0442\u044c \u0438 \u0434\u0440\u0443\u0433\u0438\u0435 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u044b \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430\u043c\u0438. \u041f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u044e \u043f\u0435\u0440\u0435\u0432\u043e\u0434 <a href=\"https:\/\/blog.alexellis.io\/building-containers-without-docker\/\" rel=\"noopener noreferrer nofollow\">\u0441\u0442\u0430\u0442\u044c\u0438<\/a> \u043e\u0434\u043d\u043e\u0433\u043e \u044d\u043d\u0442\u0443\u0437\u0438\u0430\u0441\u0442\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0440\u0435\u0448\u0438\u043b \u0438\u0437\u0443\u0447\u0438\u0442\u044c \u043f\u043e\u0445\u043e\u0436\u0438\u0435 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b.<\/p>\n<p>\u042f \u0445\u043e\u0447\u0443 \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u0442\u044c \u043e \u0442\u043e\u043c, \u043a\u0430\u043a \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u044b \u0431\u0435\u0437 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f Docker. \u042f \u0431\u0443\u0434\u0443 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c <a href=\"https:\/\/github.com\/openfaas\/\" rel=\"noopener noreferrer nofollow\">OpenFaaS<\/a>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u043e\u0431\u0440\u0430\u0437\u044b \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u043e\u0432 \u0432 \u0444\u043e\u0440\u043c\u0430\u0442\u0435 OCI \u0434\u043b\u044f \u0441\u0432\u043e\u0438\u0445 \u0440\u0430\u0431\u043e\u0447\u0438\u0445 \u043d\u0430\u0433\u0440\u0443\u0437\u043e\u043a. \u041c\u043e\u0436\u043d\u043e \u0441\u043a\u0430\u0437\u0430\u0442\u044c, \u0447\u0442\u043e OpenFaaS \u2014 \u044d\u0442\u043e \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0430 CaaS \u0434\u043b\u044f&nbsp;Kubernetes,&nbsp;\u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0441\u043f\u043e\u0441\u043e\u0431\u043d\u0430 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441\u044b \u0438 \u0431\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u043e \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0442\u044c FaaS \u0438 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b, \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u044e\u0449\u0438\u0435 \u0441\u043e\u0431\u044b\u0442\u0438\u044f\u043c\u0438. \u041d\u0430\u0447\u043d\u0451\u043c \u0441 \u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0430\u0446\u0438\u0438 \u0442\u043e\u0433\u043e, \u043a\u0430\u043a \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u0439 buildkit \u0434\u043b\u044f \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430 \u043a\u043e\u043c\u0430\u043d\u0434\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0438 Docker, \u043f\u043e\u0442\u043e\u043c&nbsp;\u043e\u043f\u0438\u0448\u0435\u043c <a href=\"https:\/\/github.com\/moby\/buildkit\" rel=\"noopener noreferrer nofollow\">buildkit&nbsp;<\/a>\u0430\u0432\u0442\u043e\u043d\u043e\u043c\u043d\u044b\u0439 (\u0442\u043e\u043b\u044c\u043a\u043e \u0432 Linux), \u0430 \u0437\u0430\u0442\u0435\u043c \u2014 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u043e\u0432 Google,&nbsp;<a href=\"https:\/\/github.com\/GoogleContainerTools\/kaniko\" rel=\"noopener noreferrer nofollow\">Kaniko<\/a>.<\/p>\n<h3>\u0410 \u0447\u0442\u043e \u043d\u0435 \u0442\u0430\u043a \u0441 Docker? <\/h3>\n<p>\u0414\u0430 \u0432\u0441\u0451 \u0441 \u043d\u0438\u043c \u0442\u0430\u043a. \u041e\u043d \u0445\u043e\u0440\u043e\u0448\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043d\u0430 armhf, arm64 \u0438 \u043d\u0430 x86_64. \u041e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u043a\u043e\u043c\u0430\u043d\u0434\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0438 Docker \u0441\u0442\u0430\u043b \u043d\u0430\u043c\u043d\u043e\u0433\u043e \u0431\u043e\u043b\u044c\u0448\u0435, \u0447\u0435\u043c \u043f\u0440\u043e\u0441\u0442\u043e \u0441\u0431\u043e\u0440\u043a\u0430\/\u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0430\/\u0437\u0430\u043f\u0443\u0441\u043a, \u0442\u0435\u043f\u0435\u0440\u044c \u043e\u043d \u043f\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0432\u043c\u0435\u0441\u0442\u0435 \u0441 \u0444\u0443\u043d\u043a\u0446\u0438\u044f\u043c\u0438 Docker Swarm \u0438 EE.<\/p>\n<p>\u0410\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u044b Docker <\/p>\n<p>\u0411\u044b\u043b\u043e \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u043f\u044b\u0442\u043e\u043a \u0432\u0435\u0440\u043d\u0443\u0442\u044c Docker \u043a \u0435\u0433\u043e \u043f\u0440\u0438\u0432\u044b\u0447\u043d\u043e\u043c\u0443 \u0432\u0438\u0434\u0443, \u0432 \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u044b \u0432\u0441\u0435 \u0432\u043b\u044e\u0431\u0438\u043b\u0438\u0441\u044c.<\/p>\n<ul>\n<li>\n<p><a href=\"https:\/\/github.com\/docker\/docker\" rel=\"noopener noreferrer nofollow\">Docker <\/a>\u2014 \u0442\u0435\u043f\u0435\u0440\u044c \u0441\u0430\u043c Docker \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 <a href=\"https:\/\/containerd.io\/\" rel=\"noopener noreferrer nofollow\">containerd <\/a>\u0434\u043b\u044f \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u043e\u0432 \u0438 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u0441\u0431\u043e\u0440\u043a\u0443 buildkit \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0432\u044b\u0441\u043e\u043a\u043e\u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u044b\u0445 \u043a\u044d\u0448\u0438\u0440\u0443\u044e\u0449\u0438\u0445 \u0441\u0431\u043e\u0440\u043e\u043a.<\/p>\n<\/li>\n<li>\n<p>\u0421\u043e\u0447\u0435\u0442\u0430\u043d\u0438\u0435 <a href=\"https:\/\/podman.io\/\" rel=\"noopener noreferrer nofollow\">Podman <\/a>\u0438 <a href=\"https:\/\/github.com\/containers\/buildah\" rel=\"noopener noreferrer nofollow\">buildah <\/a>\u2014 \u0434\u0435\u0442\u0438\u0449\u0435 RedHat\/IBM, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u043d\u0430\u0431\u043e\u0440 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432 OSS \u0434\u043b\u044f \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u043e\u0431\u0440\u0430\u0437\u043e\u0432 OCI. Podman \u043f\u043e\u0437\u0438\u0446\u0438\u043e\u043d\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043a\u0430\u043a \u043d\u0435 \u0438\u043c\u0435\u044e\u0449\u0438\u0439 \u0434\u0435\u043c\u043e\u043d\u043e\u0432 \u0438 root-\u043e\u0432, \u043d\u043e \u0432 \u043a\u043e\u043d\u0435\u0447\u043d\u043e\u043c \u0438\u0442\u043e\u0433\u0435 \u0435\u043c\u0443 \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u043c\u043e\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043e\u0432\u0435\u0440\u043b\u0435\u0439\u043d\u044b\u0435 \u0444\u0430\u0439\u043b\u043e\u0432\u044b\u0435 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0441\u043e\u043a\u0435\u0442 UNIX.<\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/github.com\/alibaba\/pouch\" rel=\"noopener noreferrer nofollow\">Pouch <\/a>\u2014 \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u0435\u043c\u044b\u0439 Alibaba \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 \u0441\u0447\u0438\u0442\u0430\u0435\u0442\u0441\u044f \u00ab\u042d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u044b\u043c \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u043d\u044b\u043c \u0434\u0432\u0438\u0436\u043a\u043e\u043c \u043a\u043e\u0440\u043f\u043e\u0440\u0430\u0442\u0438\u0432\u043d\u043e\u0433\u043e \u043a\u043b\u0430\u0441\u0441\u0430\u00bb. \u041e\u043d \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 containerd \u0442\u0430\u043a \u0436\u0435, \u043a\u0430\u043a Docker, \u0438 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u0438\u0437\u043e\u043b\u044f\u0446\u0438\u044e \u043d\u0430 \u0443\u0440\u043e\u0432\u043d\u0435 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e <a href=\"https:\/\/github.com\/opencontainers\/runc\" rel=\"noopener noreferrer nofollow\">runc <\/a>\u0438 \u00ab\u043b\u0435\u0433\u043a\u0438\u0435 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0435 \u043c\u0430\u0448\u0438\u043d\u044b\u00bb, \u0442\u0430\u043a\u0438\u0435 \u043a\u0430\u043a <a href=\"https:\/\/github.com\/hyperhq\/runv\" rel=\"noopener noreferrer nofollow\">runV<\/a>. \u0422\u0430\u043a\u0436\u0435 \u0431\u043e\u043b\u044c\u0448\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u044f \u0443\u0434\u0435\u043b\u044f\u0435\u0442\u0441\u044f <a href=\"https:\/\/github.com\/alibaba\/pouch\/blob\/master\/docs\/architecture.md\" rel=\"noopener noreferrer nofollow\">\u0434\u0438\u0441\u0442\u0440\u0438\u0431\u0443\u0446\u0438\u0438 \u043e\u0431\u0440\u0430\u0437\u043e\u0432 \u0438 \u0438\u0437\u043e\u043b\u044f\u0446\u0438\u0438<\/a>.<\/p>\n<\/li>\n<li>\n<p>\u0410\u0432\u0442\u043e\u043d\u043e\u043c\u043d\u044b\u0439 BuildKit -buildkit \u0431\u044b\u043b \u0441\u043e\u0437\u0434\u0430\u043d <a href=\"https:\/\/twitter.com\/tonistiigi?lang=en\" rel=\"noopener noreferrer nofollow\">\u0422\u044b\u043d\u0438\u0441\u043e\u043c \u0422\u0438\u0439\u0433\u0438<\/a> \u0438\u0437 Docker Inc \u043a\u0430\u043a \u043d\u043e\u0432\u044b\u0439 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u043e\u0432 \u0441 \u0443\u0447\u0435\u0442\u043e\u043c \u043a\u0435\u0448\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0438 \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u0438\u0437\u043c\u0430. buildkit \u0432 \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0435\u0435 \u0432\u0440\u0435\u043c\u044f \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u043a\u0430\u043a \u0434\u0435\u043c\u043e\u043d, \u043d\u043e \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0443\u0432\u0438\u0434\u0435\u0442\u044c, \u043a\u0430\u043a \u043b\u044e\u0434\u0438 \u0443\u0442\u0432\u0435\u0440\u0436\u0434\u0430\u044e\u0442 \u043e\u0431\u0440\u0430\u0442\u043d\u043e\u0435. \u041e\u043d\u0438 \u0440\u0430\u0437\u0432\u0435\u0442\u0432\u043b\u044f\u044e\u0442 (fork) \u0434\u0435\u043c\u043e\u043d\u0430, \u0430 \u0437\u0430\u0442\u0435\u043c \u0443\u0431\u0438\u0432\u0430\u044e\u0442 \u0435\u0433\u043e \u043f\u043e\u0441\u043b\u0435 \u0441\u0431\u043e\u0440\u043a\u0438.<\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/github.com\/genuinetools\/img\" rel=\"noopener noreferrer nofollow\">img <\/a>\u2014 \u0431\u044b\u043b \u043d\u0430\u043f\u0438\u0441\u0430\u043d <a href=\"https:\/\/github.com\/jessfraz\" rel=\"noopener noreferrer nofollow\">\u0414\u0436\u0435\u0441\u0441\u043e\u043c \u0424\u0440\u0435\u0439\u0437\u0435\u043b\u043b\u043e\u043c<\/a> \u0438 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043e\u0431\u043e\u043b\u043e\u0447\u043a\u043e\u0439 \u0434\u043b\u044f buildkit. \u041e\u0434\u043d\u0430\u043a\u043e \u043e\u043d \u043d\u0435 \u0442\u0430\u043a \u0443\u0436 \u0438 \u043a\u0440\u0443\u0442 \u043f\u043e \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044e \u0441 \u0434\u0440\u0443\u0433\u0438\u043c\u0438 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0430\u043c\u0438. \u041f\u0440\u043e\u0435\u043a\u0442 \u0430\u043a\u0442\u0438\u0432\u043d\u043e \u0440\u0430\u0437\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u043b\u0441\u044f \u0434\u043e \u043a\u043e\u043d\u0446\u0430 2018 \u0433\u043e\u0434\u0430, \u043d\u043e \u043f\u043e\u0442\u043e\u043c \u043e\u0431\u0440\u0451\u043b \u043b\u0438\u0448\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0439. \u0415\u0441\u0442\u044c \u043c\u043d\u0435\u043d\u0438\u0435, \u0447\u0442\u043e img \u0438\u043c\u0435\u0435\u0442 \u043b\u0443\u0447\u0448\u0438\u0439 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0439 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 buildctr, \u0447\u0435\u043c \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u043a\u043e\u043c\u0430\u043d\u0434\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0438 buildkit, \u043d\u043e \u0442\u0430\u043a\u0436\u0435 \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u043e\u0442\u043c\u0435\u0442\u0438\u0442\u044c, \u0447\u0442\u043e img \u0432\u044b\u043f\u0443\u0449\u0435\u043d \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f x86_64 \u0438 \u043d\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u0431\u0438\u043d\u0430\u0440\u043d\u0438\u043a\u043e\u0432 \u0434\u043b\u044f armhf\/arm64.<\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/github.com\/ibuildthecloud\/k3c\" rel=\"noopener noreferrer nofollow\">k3c <\/a>\u2014\u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u0439 \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442 Rancher, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 containerd \u0438 buildkit \u0434\u043b\u044f \u0432\u043e\u0441\u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u044c\u043d\u043e\u0433\u043e, \u0442\u0451\u043f\u043b\u043e\u0433\u043e \u043b\u0430\u043c\u043f\u043e\u0432\u043e\u0433\u043e Docker. \u0412\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 \u0441\u0440\u0435\u0434\u044b \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0438 \u0432\u0441\u043a\u043e\u0440\u0435 \u043f\u043b\u0430\u043d\u0438\u0440\u0443\u0435\u0442 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0442\u044c \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u044b ARM.<\/p>\n<\/li>\n<\/ul>\n<p>\u0418\u0437 \u0432\u0441\u0435\u0445 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u0432 \u043c\u043d\u0435 \u0431\u043e\u043b\u044c\u0448\u0435 \u0432\u0441\u0435\u0433\u043e \u043d\u0440\u0430\u0432\u0438\u0442\u0441\u044f k3c, \u043d\u043e \u043e\u043d \u043e\u0447\u0435\u043d\u044c \u043d\u0430\u0438\u0432\u043d\u044b\u0439 \u0438 \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u044f\u0435\u0442 \u0432\u0441\u0451 \u0432 \u043e\u0434\u0438\u043d \u0431\u0438\u043d\u0430\u0440\u043d\u0438\u043a, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u043e\u0436\u0435\u0442 \u043a\u043e\u043d\u0444\u043b\u0438\u043a\u0442\u043e\u0432\u0430\u0442\u044c \u0441 \u0434\u0440\u0443\u0433\u0438\u043c \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u044b\u043c \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0435\u043d\u0438\u0435\u043c, \u0432 \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0435\u0435 \u0432\u0440\u0435\u043c\u044f \u0443 \u043d\u0435\u0433\u043e \u0435\u0441\u0442\u044c \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0435 \u0431\u0438\u043d\u0430\u0440\u043d\u0438\u043a\u0438 containerd \u0438 buildkit. <\/p>\n<p>\u0418\u0442\u0430\u043a, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u043c\u044b \u0438\u0437\u0443\u0447\u0430\u0435\u043c \u00abbuild\u00bb \u0438 \u0445\u043e\u0442\u0438\u043c \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0441\u0442\u0430\u0431\u0438\u043b\u044c\u043d\u044b\u0435 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u044b, \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u043e\u0433\u043e\u0432\u043e\u0440\u0438\u043c \u043f\u0440\u043e: <\/p>\n<ul>\n<li>\n<p>buildkit \u0432 Docker<\/p>\n<\/li>\n<li>\n<p>\u0410\u0432\u0442\u043e\u043d\u043e\u043c\u043d\u044b\u0439 buildkit<\/p>\n<\/li>\n<li>\n<p>Kaniko<\/p>\n<\/li>\n<\/ul>\n<p>\u0412\u0441\u0451 \u0432\u044b\u0448\u0435\u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0435\u043d\u043d\u043e\u0435 (\u0434\u0430 \u0438 \u043c\u043d\u043e\u0433\u043e\u0435 \u0434\u0440\u0443\u0433\u043e\u0435) \u0440\u0435\u0430\u043b\u044c\u043d\u043e, \u0442\u0430\u043a \u043a\u0430\u043a OpenFaaS CLI \u0443\u043c\u0435\u0435\u0442 \u0432\u044b\u0432\u043e\u0434\u0438\u0442\u044c \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0439 \u00ab\u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442 \u0441\u0431\u043e\u0440\u043a\u0438\u00bb, \u0441 \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u043c\u043e\u0436\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u043b\u044e\u0431\u043e\u0439 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440<\/p>\n<h3>\u0421\u043e\u0437\u0434\u0430\u0439\u0442\u0435 \u0442\u0435\u0441\u0442\u043e\u0432\u043e\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435<\/h3>\n<p>\u041d\u0430\u0447\u043d\u0451\u043c \u0441 HTTP Golang middleware, \u044d\u0442\u043e \u043d\u0435\u0447\u0442\u043e \u0441\u0440\u0435\u0434\u043d\u0435\u0435 \u043c\u0435\u0436\u0434\u0443 \u0444\u0443\u043d\u043a\u0446\u0438\u0435\u0439 \u0438 \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441\u043e\u043c, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442, \u043d\u0430\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0443\u043d\u0438\u0432\u0435\u0440\u0441\u0430\u043b\u044c\u043d\u044b\u043c \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c OpenFaaS.<\/p>\n<pre><code>faas-cli template store pull golang-middleware  faas-cli new --lang golang-middleware \\   build-test --prefix=alexellis2<\/code><\/pre>\n<p><code>--lang<\/code> \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u0448\u0430\u0431\u043b\u043e\u043d \u0441\u0431\u043e\u0440\u043a\u0438 <\/p>\n<p><code>build-test<\/code> \u2014 \u044d\u0442\u043e \u0438\u043c\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u0438 <\/p>\n<p><code>--prefix<\/code> \u0438\u043c\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f Docker Hub, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0431\u0443\u0434\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0434\u043b\u044f \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u043d\u0430\u0448\u0435\u0433\u043e \u043e\u0431\u0440\u0430\u0437\u0430 OCI. <\/p>\n<p>\u0423 \u043d\u0430\u0441 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0441\u044f \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0435:<\/p>\n<pre><code>.\/ \u251c\u2500\u2500 build-test \u2502   \u2514\u2500\u2500 handler.go \u2514\u2500\u2500 build-test.yml  1 directory, 2 files<\/code><\/pre>\n<p>\u0422\u0430\u043a \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a, \u0438 \u0435\u0433\u043e \u043b\u0435\u0433\u043a\u043e \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c. \u0414\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u044b \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e <a href=\"https:\/\/stackoverflow.com\/questions\/26217488\/what-is-vendoring\" rel=\"noopener noreferrer nofollow\">\u0432\u0435\u043d\u0434\u043e\u0440\u0438\u043d\u0433\u0430 <\/a>\u0438\u043b\u0438 <a href=\"https:\/\/blog.golang.org\/using-go-modules\" rel=\"noopener noreferrer nofollow\">\u043c\u043e\u0434\u0443\u043b\u0435\u0439 Go<\/a>.<\/p>\n<pre><code>package function  import ( \t\"fmt\" \t\"io\/ioutil\" \t\"net\/http\" )  func Handle(w http.ResponseWriter, r *http.Request) { \tvar input []byte  \tif r.Body != nil { \t\tdefer r.Body.Close()  \t\tbody, _ := ioutil.ReadAll(r.Body)  \t\tinput = body \t}  \tw.WriteHeader(http.StatusOK) \tw.Write([]byte(fmt.Sprintf(\"Hello world, input was: %s\", string(input)))) }<\/code><\/pre>\n<h3>\u0421\u0431\u043e\u0440\u043a\u0430 \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u044b\u043c \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u043c <\/h3>\n<p>\u041d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u044b\u043c\u0438 \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u043c \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u044d\u0442\u043e\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c:<\/p>\n<p><code>faas-cli build -f build-test.yml<\/code> <\/p>\n<p>\u041b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0439 \u043a\u0435\u0448 \u0448\u0430\u0431\u043b\u043e\u043d\u0430 \u0438 Dockerfile \u0442\u0430\u043a\u0436\u0435 \u0434\u043e\u0441\u0442\u0443\u043f\u0435\u043d \u043f\u043e \u0430\u0434\u0440\u0435\u0441\u0443 <\/p>\n<p><code>.\/template\/golang-middleware\/Dockerfile <\/code><\/p>\n<p>\u0412 \u044d\u0442\u043e\u0442 \u0448\u0430\u0431\u043b\u043e\u043d \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u044b \u0442\u0440\u0438 \u043e\u0431\u0440\u0430\u0437\u0430:<\/p>\n<pre><code>FROM openfaas\/of-watchdog:0.7.3 as watchdog FROM golang:1.13-alpine3.11 as build FROM alpine:3.12<\/code><\/pre>\n<p>\u0412 \u0442\u0440\u0430\u0434\u0438\u0446\u0438\u043e\u043d\u043d\u043e\u043c \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440\u0435 \u043a\u0430\u0436\u0434\u044b\u0439 \u0438\u0437 \u043e\u0431\u0440\u0430\u0437\u043e\u0432 \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u0433\u0440\u0443\u0436\u0435\u043d \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e. \u041f\u043e\u0434\u043e\u0436\u0434\u0438\u0442\u0435 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043c\u0438\u043d\u0443\u0442, \u0438 \u0442\u0435\u043f\u0435\u0440\u044c \u0443 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u044d\u0442\u0438 \u043e\u0431\u0440\u0430\u0437\u044b \u0432 \u043d\u0430\u0448\u0435\u0439 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0435. \u041c\u044b \u0442\u0430\u043a\u0436\u0435 \u043c\u043e\u0436\u0435\u043c \u043e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u0438\u0445 \u0432 \u0440\u0435\u0435\u0441\u0442\u0440 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e <code>faas-cli push -f build-test.yml<\/code>.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/960\/e35\/acd\/960e35acdd1051fb317b1ca58887b374.png\" width=\"1663\" height=\"896\"><figcaption><\/figcaption><\/figure>\n<h3>\u0421\u0431\u043e\u0440\u043a\u0430 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e Buildkit \u0438 Docker <\/h3>\n<p>\u042d\u0442\u043e \u043f\u0440\u043e\u0441\u0442\u0435\u0439\u0448\u0438\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u0438\u0437 \u0432\u0441\u0435\u0445 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0445, \u0434\u0430 \u0438 \u0441\u0431\u043e\u0440\u043a\u0430 \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u0442 \u0431\u044b\u0441\u0442\u0440\u043e. <\/p>\n<p><code>DOCKER_BUILDKIT=1 faas-cli build -f build-test.yml <\/code><\/p>\n<p>\u041f\u0440\u0438 \u0442\u0430\u043a\u043e\u043c \u043f\u043e\u0434\u0445\u043e\u0434\u0435 \u0434\u0435\u043c\u043e\u043d Docker \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u0441\u0432\u043e\u0439 \u0441\u0431\u043e\u0440\u0449\u0438\u043a \u043d\u0430 buildkit. Buildkit \u0434\u0430\u0451\u0442 \u0440\u044f\u0434 \u043f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432:<\/p>\n<ul>\n<li>\n<p>\u0411\u043e\u043b\u0435\u0435 \u0441\u043b\u043e\u0436\u043d\u043e\u0435 \u043a\u0435\u0448\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 <\/p>\n<\/li>\n<li>\n<p>\u0415\u0441\u043b\u0438 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0431\u043e\u043b\u0435\u0435 \u043f\u043e\u0437\u0434\u043d\u0438\u0435 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438 \u2014 \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044c \u043e\u0431\u0440\u0430\u0437 &#171;\u0441\u0440\u0435\u0434\u044b \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f&#187; \u0434\u043e \u0442\u043e\u0433\u043e, \u043a\u0430\u043a \u0441\u0431\u043e\u0440\u043a\u0430 \u043d\u0430 \u0443\u0440\u043e\u0432\u043d\u0435 &#171;sdk&#187; \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0430. <\/p>\n<\/li>\n<li>\n<p>\u0421\u0432\u0435\u0440\u0445\u0431\u044b\u0441\u0442\u0440\u0430\u044f \u0441\u0431\u043e\u0440\u043a\u0430 \u0432\u043e \u0432\u0442\u043e\u0440\u043e\u0439 \u0440\u0430\u0437 <\/p>\n<p><null><\/p>\n<li>\n<p><null><\/p>\n<li>\n<p>\u0421 \u043f\u043e\u043c\u043e\u0449\u044c\u044e buildkit \u0432\u0441\u0435 \u0431\u0430\u0437\u043e\u0432\u044b\u0435 \u043e\u0431\u0440\u0430\u0437\u044b \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u0437\u0430\u0433\u0440\u0443\u0436\u0435\u043d\u044b \u0432 \u043d\u0430\u0448\u0443 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u0443\u044e \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 \u0441\u0440\u0430\u0437\u0443, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u043a\u043e\u043c\u0430\u043d\u0434\u044b FROM (\u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0430) \u043d\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u044e\u0442\u0441\u044f \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e.<\/p>\n<\/li>\n<p><\/null><\/li>\n<p><\/null><\/li>\n<\/ul>\n<p>\u0421 \u043f\u043e\u043c\u043e\u0449\u044c\u044e buildkit \u0432\u0441\u0435 \u0431\u0430\u0437\u043e\u0432\u044b\u0435 \u043e\u0431\u0440\u0430\u0437\u044b \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u0437\u0430\u0433\u0440\u0443\u0436\u0435\u043d\u044b \u0432 \u043d\u0430\u0448\u0443 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u0443\u044e \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 \u0441\u0440\u0430\u0437\u0443, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u043a\u043e\u043c\u0430\u043d\u0434\u044b FROM (\u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0430) \u043d\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u044e\u0442\u0441\u044f \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e.<\/p>\n<pre><code>FROM openfaas\/of-watchdog:0.7.3 as watchdog FROM golang:1.13-alpine3.11 as build FROM alpine:3.11<\/code><\/pre>\n<p>\u042d\u0442\u043e\u0442 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0434\u0430\u0436\u0435 \u043d\u0430 Mac, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 buildkit \u043f\u0440\u043e\u043a\u0441\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0447\u0435\u0440\u0435\u0437 \u0434\u0435\u043c\u043e\u043d Docker, \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0449\u0438\u0439 \u043d\u0430 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u043e\u0439 \u043c\u0430\u0448\u0438\u043d\u0435.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/187\/46c\/f94\/18746cf9405fec75e69dc92a4100ac91.png\" width=\"1659\" height=\"891\"><figcaption><\/figcaption><\/figure>\n<h3>\u0421\u0431\u043e\u0440\u043a\u0430 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0430\u0432\u0442\u043e\u043d\u043e\u043c\u043d\u043e\u0433\u043e \u043d\u0430\u0431\u043e\u0440\u0430 Buildkit <\/h3>\n<p>\u0414\u043b\u044f \u0441\u0431\u043e\u0440\u043a\u0438 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0430\u0432\u0442\u043e\u043d\u043e\u043c\u043d\u043e\u0433\u043e Buildkit \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c buildkit \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e \u043d\u0430 \u0445\u043e\u0441\u0442\u0435 Linux, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043c\u044b \u043d\u0435 \u043c\u043e\u0436\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c Mac. <\/p>\n<p><code>faas-cli build<\/code> \u043e\u0431\u044b\u0447\u043d\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u0438\u043b\u0438 \u0440\u0430\u0437\u0432\u0435\u0442\u0432\u043b\u044f\u0435\u0442 <code>docker<\/code>, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043a\u043e\u043c\u0430\u043d\u0434\u0430 \u2014 \u044d\u0442\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u043e\u0431\u043e\u043b\u043e\u0447\u043a\u0430. \u0418\u0442\u0430\u043a, \u0447\u0442\u043e\u0431\u044b \u043e\u0431\u043e\u0439\u0442\u0438 \u044d\u0442\u043e \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435, \u043c\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442 \u0441\u0431\u043e\u0440\u043a\u0438, \u0447\u0442\u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u043a\u043e\u043c\u0430\u043d\u0434\u044b:<\/p>\n<pre><code>faas-cli build -f build-test.yml --shrinkwrap  [0] &gt; Building build-test. Clearing temporary build folder: .\/build\/build-test\/ Preparing .\/build-test\/ .\/build\/build-test\/\/function Building: alexellis2\/build-test:latest with golang-middleware template. Please wait.. build-test shrink-wrapped to .\/build\/build-test\/ [0] &lt; Building build-test done in 0.00s. [0] Worker done.  Total build time: 0.00<\/code><\/pre>\n<p>\u041d\u0430\u0448 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442 \u0442\u0435\u043f\u0435\u0440\u044c \u0434\u043e\u0441\u0442\u0443\u043f\u0435\u043d \u0432 <code>.\/build\/build-test\/<\/code> \u043f\u0430\u043f\u043a\u0435 \u0441 \u043d\u0430\u0448\u0438\u043c \u043a\u043e\u0434\u043e\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0438 \u0448\u0430\u0431\u043b\u043e\u043d\u043e\u043c \u0441 \u0435\u0433\u043e \u0442\u043e\u0447\u043a\u043e\u0439 \u0432\u0445\u043e\u0434\u0430 \u0438 Dockerfile.<\/p>\n<pre><code>.\/build\/build-test\/ \u251c\u2500\u2500 Dockerfile \u251c\u2500\u2500 function \u2502   \u2514\u2500\u2500 handler.go \u251c\u2500\u2500 go.mod \u251c\u2500\u2500 main.go \u2514\u2500\u2500 template.yml  1 directory, 5 files<\/code><\/pre>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c buildkit.<\/p>\n<pre><code>curl -sSLf https:\/\/github.com\/moby\/buildkit\/releases\/download\/v0.6.3\/buildkit-v0.6.3.linux-amd64.tar.gz | sudo tar -xz -C \/usr\/local\/bin\/ --strip-components=1<\/code><\/pre>\n<p>\u0415\u0441\u043b\u0438 \u0432\u044b \u0437\u0430\u0433\u043b\u044f\u043d\u0435\u0442\u0435 \u043d\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443 \u0440\u0435\u043b\u0438\u0437\u043e\u0432, \u0432\u044b \u0442\u0430\u043a\u0436\u0435 \u043d\u0430\u0439\u0434\u0435\u0442\u0435 buildkit, \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0439 \u0434\u043b\u044f armhf \u0438 arm64, \u0438 \u043e\u0442\u043b\u0438\u0447\u043d\u043e \u043f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0438\u0439 \u0434\u043b\u044f \u043c\u0443\u043b\u044c\u0442\u0438\u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u044b. <\/p>\n<p>\u0417\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u0435 \u0434\u0435\u043c\u043e\u043d buildkit \u0432 \u043d\u043e\u0432\u043e\u043c \u043e\u043a\u043d\u0435:<\/p>\n<pre><code>sudo buildkitd  WARN[0000] using host network as the default             INFO[0000] found worker \"l1ltft74h0ek1718gitwghjxy\", labels=map[org.mobyproject.buildkit.worker.executor:oci org.mobyproject.buildkit.worker.hostname:nuc org.mobyproject.buildkit.worker.snapshotter:overlayfs], platforms=[linux\/amd64 linux\/386]  WARN[0000] skipping containerd worker, as \"\/run\/containerd\/containerd.sock\" does not exist  INFO[0000] found 1 workers, default=\"l1ltft74h0ek1718gitwghjxy\"  WARN[0000] currently, only the default worker can be used.  INFO[0000] running server on \/run\/buildkit\/buildkitd.sock <\/code><\/pre>\n<p>\u041d\u0430\u0447\u043d\u0451\u043c \u0441\u0431\u043e\u0440\u043a\u0443, \u043f\u0435\u0440\u0435\u0434\u0430\u0432 \u0443\u043f\u0430\u043a\u043e\u0432\u0430\u043d\u043d\u043e\u0435 \u0432 \u0442\u0435\u0440\u043c\u043e\u0443\u0441\u0430\u0434\u043e\u0447\u043d\u044b\u0439 \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b \u043c\u0435\u0441\u0442\u043e\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0430 \u0441\u0431\u043e\u0440\u043a\u0438. \u041d\u0430\u043c \u043d\u0443\u0436\u043d\u0430 <code>buildctl<\/code>. \u041a\u043e\u043c\u0430\u043d\u0434\u0430 buildctl \u2014 \u044d\u0442\u043e \u043a\u043b\u0438\u0435\u043d\u0442 \u0434\u043b\u044f \u0434\u0435\u043c\u043e\u043d\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0444\u0438\u043a\u0441\u0438\u0440\u0443\u0435\u0442, \u043a\u0430\u043a \u043f\u043e\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u043e\u0431\u0440\u0430\u0437 \u0438 \u0447\u0442\u043e \u0434\u0435\u043b\u0430\u0442\u044c, \u043a\u043e\u0433\u0434\u0430 \u044d\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u0441\u0434\u0435\u043b\u0430\u043d\u043e, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u044d\u043a\u0441\u043f\u043e\u0440\u0442 tar, \u0438\u0433\u043d\u043e\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0441\u0431\u043e\u0440\u043a\u0438 \u0438\u043b\u0438 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0430 \u0435\u0451 \u0432 \u0440\u0435\u0435\u0441\u0442\u0440.<\/p>\n<pre><code>buildctl build --help NAME:    buildctl build - build  USAGE:       To build and push an image using Dockerfile:     $ buildctl build --frontend dockerfile.v0 --opt target=foo --opt build-arg:foo=bar --local context=. --local dockerfile=. --output type=image,name=docker.io\/username\/image,push=true     OPTIONS:    --output value, -o value  Define exports for build result, e.g. --output type=image,name=docker.io\/username\/image,push=true    --progress value          Set type of progress (auto, plain, tty). Use plain to show container output (default: \"auto\")    --trace value             Path to trace file. Defaults to no tracing.    --local value             Allow build access to the local directory    --frontend value          Define frontend used for build    --opt value               Define custom options for frontend, e.g. --opt target=foo --opt build-arg:foo=bar    --no-cache                Disable cache for all the vertices    --export-cache value      Export build cache, e.g. --export-cache type=registry,ref=example.com\/foo\/bar, or --export-cache type=local,dest=path\/to\/dir    --import-cache value      Import build cache, e.g. --import-cache type=registry,ref=example.com\/foo\/bar, or --import-cache type=local,src=path\/to\/dir    --secret value            Secret value exposed to the build. Format id=secretname,src=filepath    --allow value             Allow extra privileged entitlement, e.g. network.host, security.insecure    --ssh value               Allow forwarding SSH agent to the builder. Format default|&lt;id&gt;[=&lt;socket&gt;|&lt;key&gt;[,&lt;key&gt;]]<\/code><\/pre>\n<p>\u0412\u043e\u0442 \u0447\u0442\u043e \u044f \u0441\u0434\u0435\u043b\u0430\u043b, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u044d\u043a\u0432\u0438\u0432\u0430\u043b\u0435\u043d\u0442 \u043a\u043e\u043c\u0430\u043d\u0434\u044b Docker \u0441 <code>DOCKER_BUILDKIT<\/code> \u043f\u0435\u0440\u0435\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435\u043c:<\/p>\n<pre><code>sudo -E buildctl build --frontend dockerfile.v0 \\  --local context=.\/build\/build-test\/ \\  --local dockerfile=.\/build\/build-test\/ \\  --output type=image,name=docker.io\/alexellis2\/build-test:latest,push=true<\/code><\/pre>\n<p>\u041f\u0435\u0440\u0435\u0434 \u0437\u0430\u043f\u0443\u0441\u043a\u043e\u043c \u044d\u0442\u043e\u0439 \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u0432\u0430\u043c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c <code>docker login<\/code> \u0438\u043b\u0438 \u0441\u043e\u0437\u0434\u0430\u0442\u044c <code>$HOME\/.docker\/config.json`<\/code> \u0441 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u043c \u043d\u0430\u0431\u043e\u0440\u043e\u043c \u043d\u0435\u0437\u0430\u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u0443\u0447\u0451\u0442\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445.<\/p>\n<p>\u0412\u044b \u0443\u0432\u0438\u0434\u0438\u0442\u0435 \u043a\u0440\u0430\u0441\u0438\u0432\u0443\u044e \u0430\u043d\u0438\u043c\u0430\u0446\u0438\u044e ASCII \u0434\u043b\u044f \u044d\u0442\u043e\u0439 \u0441\u0431\u043e\u0440\u043a\u0438.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/6c4\/a18\/1cd\/6c4a181cd473a9bf342e5305bf06c91e.png\" width=\"1664\" height=\"761\"><figcaption><\/figcaption><\/figure>\n<h3>\u0421\u0431\u043e\u0440\u043a\u0430 \u0441 img \u0438 buildkit <\/h3>\n<p>\u041f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u044f \u0440\u0430\u043d\u0435\u0435 \u043d\u0438\u043a\u043e\u0433\u0434\u0430 \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b img \u0438 \u043d\u0435 \u0441\u043b\u044b\u0448\u0430\u043b \u043e \u0442\u043e\u043c, \u0447\u0442\u043e\u0431\u044b \u0435\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0438 \u0441 \u043e\u043f\u0446\u0438\u044f\u043c\u0438 \u043f\u043e \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044e \u0441 \u0431\u043e\u043b\u0435\u0435 \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0435\u043d\u043d\u044b\u043c\u0438 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0430\u043c\u0438, \u044f \u0440\u0435\u0448\u0438\u043b \u043f\u043e\u0437\u043d\u0430\u043a\u043e\u043c\u0438\u0442\u044c\u0441\u044f \u0441 \u043d\u0438\u043c. <\/p>\n<p>\u041f\u0435\u0440\u0432\u044b\u0435 \u0432\u043f\u0435\u0447\u0430\u0442\u043b\u0435\u043d\u0438\u044f \u0442\u0430\u043a\u043e\u0432\u044b, \u0447\u0442\u043e \u043c\u0443\u043b\u044c\u0442\u0438\u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430 \u0437\u0434\u0435\u0441\u044c \u043d\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442\u043e\u043c \u0438, \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u044f \u0432\u043e\u0437\u0440\u0430\u0441\u0442 \u043f\u0440\u043e\u0435\u043a\u0442\u0430, \u043a\u0430\u0440\u0434\u0438\u043d\u0430\u043b\u044c\u043d\u044b\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u043c\u0430\u043b\u043e\u0432\u0435\u0440\u043e\u044f\u0442\u043d\u044b. \u0414\u043b\u044f armhf \u0438\u043b\u0438 ARM64 \u043d\u0435\u0442 \u0431\u0438\u043d\u0430\u0440\u043d\u0438\u043a\u043e\u0432.<\/p>\n<p>\u0414\u043b\u044f x86_64\u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0439 \u0432\u0435\u0440\u0441\u0438\u0438 v0.5.7\u043e\u0442 7 \u043c\u0430\u044f 2019, \u0441\u0431\u043e\u0440\u043a\u0430 \u0441 Go 1.11, \u0441 1.13 Go \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0430\u043a\u0442\u0443\u0430\u043b\u044c\u043d\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0435\u0439:<\/p>\n<pre><code>sudo curl -fSL \"https:\/\/github.com\/genuinetools\/img\/releases\/download\/v0.5.7\/img-linux-amd64\" -o \"\/usr\/local\/bin\/img\" \\ \t&amp;&amp; sudo chmod a+x \"\/usr\/local\/bin\/img\"<\/code><\/pre>\n<p>\u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0441\u0431\u043e\u0440\u043a\u0438 \u0432\u044b\u0433\u043b\u044f\u0434\u044f\u0442 \u043a\u0430\u043a \u043f\u043e\u0434\u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e <code>buildctl<\/code>:<\/p>\n<pre><code>img build --help Usage: img build [OPTIONS] PATH  Build an image from a Dockerfile.  Flags:    -b, --backend  backend for snapshots ([auto native overlayfs]) (default: auto)   --build-arg    Set build-time variables (default: [])   -d, --debug    enable debug logging (default: false)   -f, --file     Name of the Dockerfile (Default is 'PATH\/Dockerfile') (default: &lt;none&gt;)   --label        Set metadata for an image (default: [])   --no-cache     Do not use cache when building the image (default: false)   --no-console   Use non-console progress UI (default: false)   --platform     Set platforms for which the image should be built (default: [])   -s, --state    directory to hold the global state (default: \/home\/alex\/.local\/share\/img)   -t, --tag      Name and optionally a tag in the 'name:tag' format (default: [])   --target       Set the target build stage to build (default: &lt;none&gt;)<\/code><\/pre>\n<p>\u0412\u043e\u0442 \u0447\u0442\u043e \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0434\u043b\u044f \u0441\u0431\u043e\u0440\u043a\u0438:<\/p>\n<pre><code>sudo img build -f .\/build\/build-test\/Dockerfile -t alexellis2\/build-test:latest .\/build\/build-test\/<\/code><\/pre>\n<p>\u041f\u043e \u0442\u0435\u043c \u0438\u043b\u0438 \u0438\u043d\u044b\u043c \u043f\u0440\u0438\u0447\u0438\u043d\u0430\u043c <code>img <\/code>\u0444\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0443\u0441\u043f\u0435\u0448\u043d\u0443\u044e \u0441\u0431\u043e\u0440\u043a\u0443. \u042d\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0441\u0432\u044f\u0437\u0430\u043d\u043e \u0441 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u043c\u0438 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f\u043c\u0438, \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u043c\u0438 \u0434\u043b\u044f \u043f\u043e\u043f\u044b\u0442\u043a\u0438 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0431\u0435\u0437 root-\u043f\u0440\u0430\u0432.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/6b8\/295\/a5c\/6b8295a5ccb2e034de40aece333fc07f.png\" width=\"1665\" height=\"897\"><figcaption><\/figcaption><\/figure>\n<pre><code>fatal error: unexpected signal during runtime execution [signal SIGSEGV: segmentation violation code=0x1 addr=0xe5 pc=0x7f84d067c420]  runtime stack: runtime.throw(0xfa127f, 0x2a) \t\/home\/travis\/.gimme\/versions\/go1.11.10.linux.amd64\/src\/runtime\/panic.go:608 +0x72 runtime.sigpanic() \t\/home\/travis\/.gimme\/versions\/go1.11.10.linux.amd64\/src\/runtime\/signal_unix.go:374 +0x2f2  goroutine 529 [syscall]: runtime.cgocall(0xc9d980, 0xc00072d7d8, 0x29) \t\/home\/travis\/.gimme\/versions\/go1.11.10.linux.amd64\/src\/runtime\/cgocall.go:128 +0x5e fp=0xc00072d7a0 sp=0xc00072d768 pc=0x4039ee os\/user._Cfunc_mygetgrgid_r(0x2a, 0xc000232260, 0x7f84a40008c0, 0x400, 0xc0004ba198, 0xc000000000)<\/code><\/pre>\n<h3>\u0421\u0431\u043e\u0440\u043a\u0430 \u0441 Kaniko <\/h3>\n<p>Kaniko \u2014 \u044d\u0442\u043e \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u043e\u0432 Google, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0430\u0446\u0435\u043b\u0435\u043d \u043d\u0430 \u0441\u0431\u043e\u0440\u043a\u0443 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u043e\u0432 \u0432 \u043f\u0435\u0441\u043e\u0447\u043d\u0438\u0446\u0435. \u0412\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0435\u0433\u043e \u043a\u0430\u043a \u043e\u0434\u043d\u043e\u0440\u0430\u0437\u043e\u0432\u044b\u0439 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440 \u0438\u043b\u0438 \u043a\u0430\u043a \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u0431\u0438\u043d\u0430\u0440\u043d\u0438\u043a.<\/p>\n<p>\u042f \u0432\u0437\u0433\u043b\u044f\u043d\u0443\u043b \u043d\u0430 \u0441\u0431\u043e\u0440\u043a\u0443 <a href=\"https:\/\/blog.alexellis.io\/quick-look-at-google-kaniko\/\" rel=\"noopener noreferrer nofollow\">\u0432 \u044d\u0442\u043e\u043c \u0431\u043b\u043e\u0433\u0435<\/a>:<\/p>\n<pre><code>docker run -v $PWD\/build\/build-test:\/workspace \\  -v ~\/.docker\/config.json:\/kaniko\/config.json \\  --env DOCKER_CONFIG=\/kaniko \\  gcr.io\/kaniko-project\/executor:latest \\  -d alexellis2\/build-test:latest<\/code><\/pre>\n<ul>\n<li>\n<p>\u0424\u043b\u0430\u0433 <code>\u2013d<\/code> \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442, \u043a\u0443\u0434\u0430 \u043d\u0443\u0436\u043d\u043e \u043f\u043e\u043c\u0435\u0441\u0442\u0438\u0442\u044c \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u043f\u043e\u0441\u043b\u0435 \u0443\u0441\u043f\u0435\u0448\u043d\u043e\u0439 \u0441\u0431\u043e\u0440\u043a\u0438. <\/p>\n<\/li>\n<li>\n<p><code>-v<\/code> \u0424\u043b\u0430\u0433 \u043f\u0440\u0438\u0432\u044f\u0437\u043a\u0438 \u043c\u043e\u043d\u0442\u0430\u0436\u0430 \u0442\u0435\u043a\u0443\u0449\u0435\u0433\u043e \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0430 \u0432 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440 Kaniko, \u043e\u043d \u0442\u0430\u043a\u0436\u0435 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442 \u0441\u0432\u043e\u0439 <code>config.json<\/code> \u0444\u0430\u0439\u043b \u0434\u043b\u044f \u043f\u0443\u0448\u0430 \u043a \u0443\u0434\u0430\u043b\u0451\u043d\u043d\u043e\u043c\u0443 \u0440\u0435\u0435\u0441\u0442\u0440\u0443.<\/p>\n<p><null><\/p>\n<li>\n<\/li>\n<p><\/null><\/li>\n<\/ul>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/cfd\/d79\/da6\/cfdd79da6fdf224a6b23cbb76e66ea89.png\" width=\"1669\" height=\"904\"><figcaption><\/figcaption><\/figure>\n<p>\u0412 Kaniko \u0435\u0441\u0442\u044c \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 \u043a\u0435\u0448\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f, \u043d\u043e \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0440\u0443\u0447\u043d\u043e\u0435 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 Kaniko \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0432 one-shot \u0440\u0435\u0436\u0438\u043c\u0435, \u0430 \u043d\u0435 \u0441 \u0434\u0435\u043c\u043e\u043d\u043e\u043c, \u043a\u0430\u043a Buildkit.<\/p>\n<h3>\u0418\u0442\u043e\u0433\u0438 \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f<\/h3>\n<ul>\n<li>\n<p>\u0414\u043e\u043a\u0435\u0440 \u2014 \u0442\u0440\u0430\u0434\u0438\u0446\u0438\u043e\u043d\u043d\u044b\u0439. \u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 Docker \u043c\u043e\u0436\u0435\u0442 \u043e\u043a\u0430\u0437\u0430\u0442\u044c\u0441\u044f \u0441\u043b\u043e\u0436\u043d\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0435\u0439 \u0438 \u043d\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044c \u0432\u0430\u0448\u0443 \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u0431\u043e\u043b\u044c\u0448\u0435, \u0447\u0435\u043c \u043e\u0436\u0438\u0434\u0430\u043b\u043e\u0441\u044c. \u041f\u0440\u043e\u0434\u0443\u043a\u0442 \u0441\u0430\u043c\u044b\u0439 \u0441\u0442\u0430\u0440\u044b\u0439 \u0438 \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u044b\u0439, \u043d\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u0441\u0432\u043e\u044e \u0440\u0430\u0431\u043e\u0442\u0443. \u0421\u043b\u0435\u0434\u0438\u0442\u0435 \u0437\u0430 \u0441\u0435\u0442\u0435\u0432\u044b\u043c \u043c\u043e\u0441\u0442\u043e\u043c, \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u044b\u043c Docker, \u043e\u043d \u043c\u043e\u0436\u0435\u0442 \u043a\u043e\u043d\u0444\u043b\u0438\u043a\u0442\u043e\u0432\u0430\u0442\u044c \u0441 \u0434\u0440\u0443\u0433\u0438\u043c\u0438 \u0447\u0430\u0441\u0442\u043d\u044b\u043c\u0438 \u0441\u0435\u0442\u044f\u043c\u0438, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0449\u0438\u043c\u0438 \u0442\u043e\u0442 \u0436\u0435 \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d \u0447\u0430\u0441\u0442\u043d\u044b\u0445 IP-\u0430\u0434\u0440\u0435\u0441\u043e\u0432. <\/p>\n<\/li>\n<li>\n<p>\u0414\u043e\u043a\u0435\u0440 \u0441 buildkit. \u042d\u0442\u043e \u0441\u0430\u043c\u044b\u0439 \u0431\u044b\u0441\u0442\u0440\u044b\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u0441 \u043d\u0430\u0438\u043c\u0435\u043d\u044c\u0448\u0438\u043c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e\u043c \u043e\u0442\u0442\u043e\u043a\u0430 \u0438\u043b\u0438 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439. \u0412\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u043f\u0440\u0435\u0444\u0438\u043a\u0441\u043e\u043c \u043a\u043e\u043c\u0430\u043d\u0434\u044b <code>DOCKER_BUILDKIT=1 <\/code><\/p>\n<\/li>\n<li>\n<p>\u0410\u0432\u0442\u043e\u043d\u043e\u043c\u043d\u044b\u0439 buildkit. \u042d\u0442\u043e\u0442 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u043e\u0442\u043b\u0438\u0447\u043d\u043e \u043f\u043e\u0434\u0445\u043e\u0434\u0438\u0442 \u0434\u043b\u044f \u0441\u0431\u043e\u0440\u043a\u0438 \u0432 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0435 \u0438\u043b\u0438 \u0434\u043b\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u044b, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043d\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f Docker, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u0434\u043b\u044f CI box \u0438\u043b\u0438 runner. \u0415\u043c\u0443 \u043d\u0443\u0436\u0435\u043d \u0445\u043e\u0441\u0442 Linux, \u0438 \u043d\u0435\u0442 \u0445\u043e\u0440\u043e\u0448\u0435\u0433\u043e \u043e\u043f\u044b\u0442\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0435\u0433\u043e \u0432 MacOS. \u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u043f\u0443\u0442\u0435\u043c \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u043e\u0439 \u043c\u0430\u0448\u0438\u043d\u044b \u0438\u043b\u0438 \u0445\u043e\u0441\u0442\u0430 \u0438 \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043f\u043e\u0432\u0435\u0440\u0445 TCP?<\/p>\n<\/li>\n<\/ul>\n<p>\u042f \u0442\u0430\u043a\u0436\u0435 \u0445\u043e\u0442\u0435\u043b \u0431\u044b \u0443\u043f\u043e\u043c\u044f\u043d\u0443\u0442\u044c <a href=\"https:\/\/events19.linuxfoundation.org\/wp-content\/uploads\/2017\/11\/Comparing-Next-Generation-Container-Image-Building-Tools-OSS-Akihiro-Suda.pdf\" rel=\"noopener noreferrer nofollow\">\u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043e\u0431\u0440\u0430\u0437\u043e\u0432 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u043e\u0432 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0433\u043e \u043f\u043e\u043a\u043e\u043b\u0435\u043d\u0438\u044f<\/a>. \u042d\u0442\u043e \u043b\u0443\u0447\u0448\u0438\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u0434\u043b\u044f <a href=\"https:\/\/github.com\/alexellis\/faasd\" rel=\"noopener noreferrer nofollow\">\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439 faasd<\/a>, \u0433\u0434\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0438 \u043f\u043e\u043b\u0430\u0433\u0430\u044e\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430 containerd \u0438 CNI, \u0430 \u043d\u0435 \u043d\u0430 Docker \u0438\u043b\u0438 Kubernetes.<\/p>\n<ul>\n<li>\n<p>Kaniko. \u0422\u043e, \u043a\u0430\u043a \u043c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0438 Kaniko, \u043f\u043e-\u043f\u0440\u0435\u0436\u043d\u0435\u043c\u0443 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043b\u043e \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 Docker, \u043d\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u043b \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0438\u043d\u0430\u0447\u0435.<\/p>\n<\/li>\n<\/ul>\n<h3>\u041f\u043e\u0434\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0438\u0442\u043e\u0433\u043e\u0432<\/h3>\n<p>\u0412\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0441\u0432\u043e\u0439 \u043e\u0431\u044b\u0447\u043d\u044b\u0439 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u043e\u0432 \u0441 OpenFaaS \u0438\u043b\u0438 <code>faas-cli build \u2013shrinkwrap<\/code> \u0438\u043b\u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442 \u0441\u0431\u043e\u0440\u043a\u0438 \u043f\u0440\u0435\u0434\u043f\u043e\u0447\u0438\u0442\u0430\u0435\u043c\u043e\u043c\u0443 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0443. \u0412\u043e\u0442 \u043f\u0440\u0438\u043c\u0435\u0440\u044b \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432 \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u043e\u0432 OpenFaaS:<\/p>\n<ul>\n<li>\n<p><a href=\"https:\/\/www.openfaas.com\/blog\/openfaas-cloudrun\/\" rel=\"noopener noreferrer nofollow\">Google Cloud Build <\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/lucasroesler.com\/2019\/09\/action-packed-functions\/\" rel=\"noopener noreferrer nofollow\">GitHub Actions<\/a> <\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/docs.openfaas.com\/reference\/cicd\/jenkins\/\" rel=\"noopener noreferrer nofollow\">Jenkins <\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/docs.openfaas.com\/reference\/cicd\/gitlab\/\" rel=\"noopener noreferrer nofollow\">GitLab CI<\/a><\/p>\n<\/li>\n<\/ul>\n<p>\u0412 <a href=\"https:\/\/docs.openfaas.com\/openfaas-cloud\/architecture\/\" rel=\"noopener noreferrer nofollow\">\u043e\u0431\u043b\u0430\u043a\u0435 OpenFaaS<\/a> \u043c\u044b \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0432\u0430\u0435\u043c \u043f\u043e\u043b\u043d\u0443\u044e \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0430\u0446\u0438\u044e CI\/CD \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u043f\u043e\u0434\u0445\u043e\u0434\u0430 shrinkwrap \u0438 \u0434\u0435\u043c\u043e\u043d\u0430 buildkit. \u0412\u0441\u0435\u043c \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u043c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f\u043c \u044f \u0431\u044b \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u043e\u0432\u0430\u043b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c Docker \u0438\u043b\u0438 Docker \u0441 buildkit.<\/p>\n<p>\u0423 <a href=\"https:\/\/github.com\/openfaas\/faasd\" rel=\"noopener noreferrer nofollow\">\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439 faasd<\/a> \u043d\u0430 \u0445\u043e\u0441\u0442\u0435 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d \u0442\u043e\u043b\u044c\u043a\u043e containerd docker, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043b\u0443\u0447\u0448\u0438\u043c \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u043c \u0434\u043b\u044f \u043d\u0438\u0445 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0430 buildkit.<\/p>\n<p>\u041c\u044b \u043d\u0435 \u0437\u0430\u0442\u0440\u043e\u043d\u0443\u043b\u0438 \u043e\u0434\u043d\u0443 \u0438\u0437 \u0432\u0430\u0436\u043d\u044b\u0445 \u0447\u0430\u0441\u0442\u0435\u0439 \u0440\u0430\u0431\u043e\u0447\u0435\u0433\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \u2014 \u0440\u0430\u0437\u0432\u0451\u0440\u0442\u044b\u0432\u0430\u043d\u0438\u0435. \u041b\u044e\u0431\u043e\u0439 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440 OCI \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0440\u0430\u0437\u0432\u0435\u0440\u043d\u0443\u0442 \u0432 \u043f\u043b\u043e\u0441\u043a\u043e\u0441\u0442\u0438 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f OpenFaaS \u043f\u043e\u0432\u0435\u0440\u0445 Kubernetes, \u0435\u0441\u043b\u0438 \u043e\u043d <a href=\"https:\/\/docs.openfaas.com\/reference\/workloads\/\" rel=\"noopener noreferrer nofollow\">\u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044e \u0431\u0435\u0441\u0441\u0435\u0440\u0432\u0435\u0440\u043d\u043e\u0439 \u0440\u0430\u0431\u043e\u0447\u0435\u0439 \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0438<\/a>. <\/p>\n<\/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\/529814\/\"> https:\/\/habr.com\/ru\/post\/529814\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"\n<div class=\"post__text post__text_v2\" id=\"post-content-body\">\n<p>\u041f\u0440\u0438\u0432\u0435\u0442, \u0425\u0430\u0431\u0440. \u041e\u0447\u0435\u043d\u044c \u043c\u043d\u043e\u0433\u043e \u043c\u043d\u043e\u0433\u043e \u0441\u0435\u0439\u0447\u0430\u0441 \u0441\u043b\u044b\u0448\u043d\u043e \u043f\u0440\u043e \u041a\u0443\u0431\u0435\u0440\u043d\u0435\u0442\u0438\u0441 \u0438 Docker. \u041f\u0440\u043e \u043d\u0438\u0445 \u043d\u0435 \u0437\u043d\u0430\u0435\u0442 \u043d\u0430\u0432\u0435\u0440\u043d\u043e\u0435, \u0442\u043e\u043b\u044c\u043a\u043e \u043b\u0435\u043d\u0438\u0432\u044b\u0439. \u041d\u043e \u0435\u0441\u0442\u044c \u0438 \u0434\u0440\u0443\u0433\u0438\u0435 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u044b \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430\u043c\u0438. \u041f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u044e \u043f\u0435\u0440\u0435\u0432\u043e\u0434 <a href=\"https:\/\/blog.alexellis.io\/building-containers-without-docker\/\" rel=\"noopener noreferrer nofollow\">\u0441\u0442\u0430\u0442\u044c\u0438<\/a> \u043e\u0434\u043d\u043e\u0433\u043e \u044d\u043d\u0442\u0443\u0437\u0438\u0430\u0441\u0442\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0440\u0435\u0448\u0438\u043b \u0438\u0437\u0443\u0447\u0438\u0442\u044c \u043f\u043e\u0445\u043e\u0436\u0438\u0435 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b.<\/p>\n<p>\u042f \u0445\u043e\u0447\u0443 \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u0442\u044c \u043e \u0442\u043e\u043c, \u043a\u0430\u043a \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u044b \u0431\u0435\u0437 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f Docker. \u042f \u0431\u0443\u0434\u0443 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c <a href=\"https:\/\/github.com\/openfaas\/\" rel=\"noopener noreferrer nofollow\">OpenFaaS<\/a>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u043e\u0431\u0440\u0430\u0437\u044b \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u043e\u0432 \u0432 \u0444\u043e\u0440\u043c\u0430\u0442\u0435 OCI \u0434\u043b\u044f \u0441\u0432\u043e\u0438\u0445 \u0440\u0430\u0431\u043e\u0447\u0438\u0445 \u043d\u0430\u0433\u0440\u0443\u0437\u043e\u043a. \u041c\u043e\u0436\u043d\u043e \u0441\u043a\u0430\u0437\u0430\u0442\u044c, \u0447\u0442\u043e OpenFaaS \u2014 \u044d\u0442\u043e \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0430 CaaS \u0434\u043b\u044f&nbsp;Kubernetes,&nbsp;\u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0441\u043f\u043e\u0441\u043e\u0431\u043d\u0430 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441\u044b \u0438 \u0431\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u043e \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0442\u044c FaaS \u0438 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b, \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u044e\u0449\u0438\u0435 \u0441\u043e\u0431\u044b\u0442\u0438\u044f\u043c\u0438. \u041d\u0430\u0447\u043d\u0451\u043c \u0441 \u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0430\u0446\u0438\u0438 \u0442\u043e\u0433\u043e, \u043a\u0430\u043a \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u0439 buildkit \u0434\u043b\u044f \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430 \u043a\u043e\u043c\u0430\u043d\u0434\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0438 Docker, \u043f\u043e\u0442\u043e\u043c&nbsp;\u043e\u043f\u0438\u0448\u0435\u043c <a href=\"https:\/\/github.com\/moby\/buildkit\" rel=\"noopener noreferrer nofollow\">buildkit&nbsp;<\/a>\u0430\u0432\u0442\u043e\u043d\u043e\u043c\u043d\u044b\u0439 (\u0442\u043e\u043b\u044c\u043a\u043e \u0432 Linux), \u0430 \u0437\u0430\u0442\u0435\u043c \u2014 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u043e\u0432 Google,&nbsp;<a href=\"https:\/\/github.com\/GoogleContainerTools\/kaniko\" rel=\"noopener noreferrer nofollow\">Kaniko<\/a>.<\/p>\n<h3>\u0410 \u0447\u0442\u043e \u043d\u0435 \u0442\u0430\u043a \u0441 Docker? <\/h3>\n<p>\u0414\u0430 \u0432\u0441\u0451 \u0441 \u043d\u0438\u043c \u0442\u0430\u043a. \u041e\u043d \u0445\u043e\u0440\u043e\u0448\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043d\u0430 armhf, arm64 \u0438 \u043d\u0430 x86_64. \u041e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u043a\u043e\u043c\u0430\u043d\u0434\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0438 Docker \u0441\u0442\u0430\u043b \u043d\u0430\u043c\u043d\u043e\u0433\u043e \u0431\u043e\u043b\u044c\u0448\u0435, \u0447\u0435\u043c \u043f\u0440\u043e\u0441\u0442\u043e \u0441\u0431\u043e\u0440\u043a\u0430\/\u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0430\/\u0437\u0430\u043f\u0443\u0441\u043a, \u0442\u0435\u043f\u0435\u0440\u044c \u043e\u043d \u043f\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0432\u043c\u0435\u0441\u0442\u0435 \u0441 \u0444\u0443\u043d\u043a\u0446\u0438\u044f\u043c\u0438 Docker Swarm \u0438 EE.<\/p>\n<p>\u0410\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u044b Docker <\/p>\n<p>\u0411\u044b\u043b\u043e \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u043f\u044b\u0442\u043e\u043a \u0432\u0435\u0440\u043d\u0443\u0442\u044c Docker \u043a \u0435\u0433\u043e \u043f\u0440\u0438\u0432\u044b\u0447\u043d\u043e\u043c\u0443 \u0432\u0438\u0434\u0443, \u0432 \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u044b \u0432\u0441\u0435 \u0432\u043b\u044e\u0431\u0438\u043b\u0438\u0441\u044c.<\/p>\n<ul>\n<li>\n<p><a href=\"https:\/\/github.com\/docker\/docker\" rel=\"noopener noreferrer nofollow\">Docker <\/a>\u2014 \u0442\u0435\u043f\u0435\u0440\u044c \u0441\u0430\u043c Docker \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 <a href=\"https:\/\/containerd.io\/\" rel=\"noopener noreferrer nofollow\">containerd <\/a>\u0434\u043b\u044f \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u043e\u0432 \u0438 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u0441\u0431\u043e\u0440\u043a\u0443 buildkit \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0432\u044b\u0441\u043e\u043a\u043e\u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u044b\u0445 \u043a\u044d\u0448\u0438\u0440\u0443\u044e\u0449\u0438\u0445 \u0441\u0431\u043e\u0440\u043e\u043a.<\/p>\n<\/li>\n<li>\n<p>\u0421\u043e\u0447\u0435\u0442\u0430\u043d\u0438\u0435 <a href=\"https:\/\/podman.io\/\" rel=\"noopener noreferrer nofollow\">Podman <\/a>\u0438 <a href=\"https:\/\/github.com\/containers\/buildah\" rel=\"noopener noreferrer nofollow\">buildah <\/a>\u2014 \u0434\u0435\u0442\u0438\u0449\u0435 RedHat\/IBM, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u043d\u0430\u0431\u043e\u0440 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432 OSS \u0434\u043b\u044f \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u043e\u0431\u0440\u0430\u0437\u043e\u0432 OCI. Podman \u043f\u043e\u0437\u0438\u0446\u0438\u043e\u043d\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043a\u0430\u043a \u043d\u0435 \u0438\u043c\u0435\u044e\u0449\u0438\u0439 \u0434\u0435\u043c\u043e\u043d\u043e\u0432 \u0438 root-\u043e\u0432, \u043d\u043e \u0432 \u043a\u043e\u043d\u0435\u0447\u043d\u043e\u043c \u0438\u0442\u043e\u0433\u0435 \u0435\u043c\u0443 \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u043c\u043e\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043e\u0432\u0435\u0440\u043b\u0435\u0439\u043d\u044b\u0435 \u0444\u0430\u0439\u043b\u043e\u0432\u044b\u0435 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0441\u043e\u043a\u0435\u0442 UNIX.<\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/github.com\/alibaba\/pouch\" rel=\"noopener noreferrer nofollow\">Pouch <\/a>\u2014 \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u0435\u043c\u044b\u0439 Alibaba \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 \u0441\u0447\u0438\u0442\u0430\u0435\u0442\u0441\u044f \u00ab\u042d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u044b\u043c \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u043d\u044b\u043c \u0434\u0432\u0438\u0436\u043a\u043e\u043c \u043a\u043e\u0440\u043f\u043e\u0440\u0430\u0442\u0438\u0432\u043d\u043e\u0433\u043e \u043a\u043b\u0430\u0441\u0441\u0430\u00bb. \u041e\u043d \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 containerd \u0442\u0430\u043a \u0436\u0435, \u043a\u0430\u043a Docker, \u0438 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u0438\u0437\u043e\u043b\u044f\u0446\u0438\u044e \u043d\u0430 \u0443\u0440\u043e\u0432\u043d\u0435 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e <a href=\"https:\/\/github.com\/opencontainers\/runc\" rel=\"noopener noreferrer nofollow\">runc <\/a>\u0438 \u00ab\u043b\u0435\u0433\u043a\u0438\u0435 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0435 \u043c\u0430\u0448\u0438\u043d\u044b\u00bb, \u0442\u0430\u043a\u0438\u0435 \u043a\u0430\u043a <a href=\"https:\/\/github.com\/hyperhq\/runv\" rel=\"noopener noreferrer nofollow\">runV<\/a>. \u0422\u0430\u043a\u0436\u0435 \u0431\u043e\u043b\u044c\u0448\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u044f \u0443\u0434\u0435\u043b\u044f\u0435\u0442\u0441\u044f <a href=\"https:\/\/github.com\/alibaba\/pouch\/blob\/master\/docs\/architecture.md\" rel=\"noopener noreferrer nofollow\">\u0434\u0438\u0441\u0442\u0440\u0438\u0431\u0443\u0446\u0438\u0438 \u043e\u0431\u0440\u0430\u0437\u043e\u0432 \u0438 \u0438\u0437\u043e\u043b\u044f\u0446\u0438\u0438<\/a>.<\/p>\n<\/li>\n<li>\n<p>\u0410\u0432\u0442\u043e\u043d\u043e\u043c\u043d\u044b\u0439 BuildKit -buildkit \u0431\u044b\u043b \u0441\u043e\u0437\u0434\u0430\u043d <a href=\"https:\/\/twitter.com\/tonistiigi?lang=en\" rel=\"noopener noreferrer nofollow\">\u0422\u044b\u043d\u0438\u0441\u043e\u043c \u0422\u0438\u0439\u0433\u0438<\/a> \u0438\u0437 Docker Inc \u043a\u0430\u043a \u043d\u043e\u0432\u044b\u0439 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u043e\u0432 \u0441 \u0443\u0447\u0435\u0442\u043e\u043c \u043a\u0435\u0448\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0438 \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u0438\u0437\u043c\u0430. buildkit \u0432 \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0435\u0435 \u0432\u0440\u0435\u043c\u044f \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u043a\u0430\u043a \u0434\u0435\u043c\u043e\u043d, \u043d\u043e \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0443\u0432\u0438\u0434\u0435\u0442\u044c, \u043a\u0430\u043a \u043b\u044e\u0434\u0438 \u0443\u0442\u0432\u0435\u0440\u0436\u0434\u0430\u044e\u0442 \u043e\u0431\u0440\u0430\u0442\u043d\u043e\u0435. \u041e\u043d\u0438 \u0440\u0430\u0437\u0432\u0435\u0442\u0432\u043b\u044f\u044e\u0442 (fork) \u0434\u0435\u043c\u043e\u043d\u0430, \u0430 \u0437\u0430\u0442\u0435\u043c \u0443\u0431\u0438\u0432\u0430\u044e\u0442 \u0435\u0433\u043e \u043f\u043e\u0441\u043b\u0435 \u0441\u0431\u043e\u0440\u043a\u0438.<\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/github.com\/genuinetools\/img\" rel=\"noopener noreferrer nofollow\">img <\/a>\u2014 \u0431\u044b\u043b \u043d\u0430\u043f\u0438\u0441\u0430\u043d <a href=\"https:\/\/github.com\/jessfraz\" rel=\"noopener noreferrer nofollow\">\u0414\u0436\u0435\u0441\u0441\u043e\u043c \u0424\u0440\u0435\u0439\u0437\u0435\u043b\u043b\u043e\u043c<\/a> \u0438 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043e\u0431\u043e\u043b\u043e\u0447\u043a\u043e\u0439 \u0434\u043b\u044f buildkit. \u041e\u0434\u043d\u0430\u043a\u043e \u043e\u043d \u043d\u0435 \u0442\u0430\u043a \u0443\u0436 \u0438 \u043a\u0440\u0443\u0442 \u043f\u043e \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044e \u0441 \u0434\u0440\u0443\u0433\u0438\u043c\u0438 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0430\u043c\u0438. \u041f\u0440\u043e\u0435\u043a\u0442 \u0430\u043a\u0442\u0438\u0432\u043d\u043e \u0440\u0430\u0437\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u043b\u0441\u044f \u0434\u043e \u043a\u043e\u043d\u0446\u0430 2018 \u0433\u043e\u0434\u0430, \u043d\u043e \u043f\u043e\u0442\u043e\u043c \u043e\u0431\u0440\u0451\u043b \u043b\u0438\u0448\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0439. \u0415\u0441\u0442\u044c \u043c\u043d\u0435\u043d\u0438\u0435, \u0447\u0442\u043e img \u0438\u043c\u0435\u0435\u0442 \u043b\u0443\u0447\u0448\u0438\u0439 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0439 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 buildctr, \u0447\u0435\u043c \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u043a\u043e\u043c\u0430\u043d\u0434\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0438 buildkit, \u043d\u043e \u0442\u0430\u043a\u0436\u0435 \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u043e\u0442\u043c\u0435\u0442\u0438\u0442\u044c, \u0447\u0442\u043e img \u0432\u044b\u043f\u0443\u0449\u0435\u043d \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f x86_64 \u0438 \u043d\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u0431\u0438\u043d\u0430\u0440\u043d\u0438\u043a\u043e\u0432 \u0434\u043b\u044f armhf\/arm64.<\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/github.com\/ibuildthecloud\/k3c\" rel=\"noopener noreferrer nofollow\">k3c <\/a>\u2014\u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u0439 \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442 Rancher, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 containerd \u0438 buildkit \u0434\u043b\u044f \u0432\u043e\u0441\u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u044c\u043d\u043e\u0433\u043e, \u0442\u0451\u043f\u043b\u043e\u0433\u043e \u043b\u0430\u043c\u043f\u043e\u0432\u043e\u0433\u043e Docker. \u0412\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 \u0441\u0440\u0435\u0434\u044b \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0438 \u0432\u0441\u043a\u043e\u0440\u0435 \u043f\u043b\u0430\u043d\u0438\u0440\u0443\u0435\u0442 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0442\u044c \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u044b ARM.<\/p>\n<\/li>\n<\/ul>\n<p>\u0418\u0437 \u0432\u0441\u0435\u0445 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u0432 \u043c\u043d\u0435 \u0431\u043e\u043b\u044c\u0448\u0435 \u0432\u0441\u0435\u0433\u043e \u043d\u0440\u0430\u0432\u0438\u0442\u0441\u044f k3c, \u043d\u043e \u043e\u043d \u043e\u0447\u0435\u043d\u044c \u043d\u0430\u0438\u0432\u043d\u044b\u0439 \u0438 \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u044f\u0435\u0442 \u0432\u0441\u0451 \u0432 \u043e\u0434\u0438\u043d \u0431\u0438\u043d\u0430\u0440\u043d\u0438\u043a, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u043e\u0436\u0435\u0442 \u043a\u043e\u043d\u0444\u043b\u0438\u043a\u0442\u043e\u0432\u0430\u0442\u044c \u0441 \u0434\u0440\u0443\u0433\u0438\u043c \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u044b\u043c \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0435\u043d\u0438\u0435\u043c, \u0432 \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0435\u0435 \u0432\u0440\u0435\u043c\u044f \u0443 \u043d\u0435\u0433\u043e \u0435\u0441\u0442\u044c \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0435 \u0431\u0438\u043d\u0430\u0440\u043d\u0438\u043a\u0438 containerd \u0438 buildkit. <\/p>\n<p>\u0418\u0442\u0430\u043a, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u043c\u044b \u0438\u0437\u0443\u0447\u0430\u0435\u043c \u00abbuild\u00bb \u0438 \u0445\u043e\u0442\u0438\u043c \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0441\u0442\u0430\u0431\u0438\u043b\u044c\u043d\u044b\u0435 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u044b, \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u043e\u0433\u043e\u0432\u043e\u0440\u0438\u043c \u043f\u0440\u043e: <\/p>\n<ul>\n<li>\n<p>buildkit \u0432 Docker<\/p>\n<\/li>\n<li>\n<p>\u0410\u0432\u0442\u043e\u043d\u043e\u043c\u043d\u044b\u0439 buildkit<\/p>\n<\/li>\n<li>\n<p>Kaniko<\/p>\n<\/li>\n<\/ul>\n<p>\u0412\u0441\u0451 \u0432\u044b\u0448\u0435\u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0435\u043d\u043d\u043e\u0435 (\u0434\u0430 \u0438 \u043c\u043d\u043e\u0433\u043e\u0435 \u0434\u0440\u0443\u0433\u043e\u0435) \u0440\u0435\u0430\u043b\u044c\u043d\u043e, \u0442\u0430\u043a \u043a\u0430\u043a OpenFaaS CLI \u0443\u043c\u0435\u0435\u0442 \u0432\u044b\u0432\u043e\u0434\u0438\u0442\u044c \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0439 \u00ab\u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442 \u0441\u0431\u043e\u0440\u043a\u0438\u00bb, \u0441 \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u043c\u043e\u0436\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u043b\u044e\u0431\u043e\u0439 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440<\/p>\n<h3>\u0421\u043e\u0437\u0434\u0430\u0439\u0442\u0435 \u0442\u0435\u0441\u0442\u043e\u0432\u043e\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435<\/h3>\n<p>\u041d\u0430\u0447\u043d\u0451\u043c \u0441 HTTP Golang middleware, \u044d\u0442\u043e \u043d\u0435\u0447\u0442\u043e \u0441\u0440\u0435\u0434\u043d\u0435\u0435 \u043c\u0435\u0436\u0434\u0443 \u0444\u0443\u043d\u043a\u0446\u0438\u0435\u0439 \u0438 \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441\u043e\u043c, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442, \u043d\u0430\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0443\u043d\u0438\u0432\u0435\u0440\u0441\u0430\u043b\u044c\u043d\u044b\u043c \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c OpenFaaS.<\/p>\n<pre><code>faas-cli template store pull golang-middleware  faas-cli new --lang golang-middleware \\   build-test --prefix=alexellis2<\/code><\/pre>\n<p><code>--lang<\/code> \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u0448\u0430\u0431\u043b\u043e\u043d \u0441\u0431\u043e\u0440\u043a\u0438 <\/p>\n<p><code>build-test<\/code> \u2014 \u044d\u0442\u043e \u0438\u043c\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u0438 <\/p>\n<p><code>--prefix<\/code> \u0438\u043c\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f Docker Hub, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0431\u0443\u0434\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0434\u043b\u044f \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u043d\u0430\u0448\u0435\u0433\u043e \u043e\u0431\u0440\u0430\u0437\u0430 OCI. <\/p>\n<p>\u0423 \u043d\u0430\u0441 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0441\u044f \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0435:<\/p>\n<pre><code>.\/ \u251c\u2500\u2500 build-test \u2502   \u2514\u2500\u2500 handler.go \u2514\u2500\u2500 build-test.yml  1 directory, 2 files<\/code><\/pre>\n<p>\u0422\u0430\u043a \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a, \u0438 \u0435\u0433\u043e \u043b\u0435\u0433\u043a\u043e \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c. \u0414\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u044b \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e <a href=\"https:\/\/stackoverflow.com\/questions\/26217488\/what-is-vendoring\" rel=\"noopener noreferrer nofollow\">\u0432\u0435\u043d\u0434\u043e\u0440\u0438\u043d\u0433\u0430 <\/a>\u0438\u043b\u0438 <a href=\"https:\/\/blog.golang.org\/using-go-modules\" rel=\"noopener noreferrer nofollow\">\u043c\u043e\u0434\u0443\u043b\u0435\u0439 Go<\/a>.<\/p>\n<pre><code>package function  import ( \t\"fmt\" \t\"io\/ioutil\" \t\"net\/http\" )  func Handle(w http.ResponseWriter, r *http.Request) { \tvar input []byte  \tif r.Body != nil { \t\tdefer r.Body.Close()  \t\tbody, _ := ioutil.ReadAll(r.Body)  \t\tinput = body \t}  \tw.WriteHeader(http.StatusOK) \tw.Write([]byte(fmt.Sprintf(\"Hello world, input was: %s\", string(input)))) }<\/code><\/pre>\n<h3>\u0421\u0431\u043e\u0440\u043a\u0430 \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u044b\u043c \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u043c <\/h3>\n<p>\u041d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u044b\u043c\u0438 \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u043c \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u044d\u0442\u043e\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c:<\/p>\n<p><code>faas-cli build -f build-test.yml<\/code> <\/p>\n<p>\u041b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0439 \u043a\u0435\u0448 \u0448\u0430\u0431\u043b\u043e\u043d\u0430 \u0438 Dockerfile \u0442\u0430\u043a\u0436\u0435 \u0434\u043e\u0441\u0442\u0443\u043f\u0435\u043d \u043f\u043e \u0430\u0434\u0440\u0435\u0441\u0443 <\/p>\n<p><code>.\/template\/golang-middleware\/Dockerfile <\/code><\/p>\n<p>\u0412 \u044d\u0442\u043e\u0442 \u0448\u0430\u0431\u043b\u043e\u043d \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u044b \u0442\u0440\u0438 \u043e\u0431\u0440\u0430\u0437\u0430:<\/p>\n<pre><code>FROM openfaas\/of-watchdog:0.7.3 as watchdog FROM golang:1.13-alpine3.11 as build FROM alpine:3.12<\/code><\/pre>\n<p>\u0412 \u0442\u0440\u0430\u0434\u0438\u0446\u0438\u043e\u043d\u043d\u043e\u043c \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440\u0435 \u043a\u0430\u0436\u0434\u044b\u0439 \u0438\u0437 \u043e\u0431\u0440\u0430\u0437\u043e\u0432 \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u0433\u0440\u0443\u0436\u0435\u043d \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e. \u041f\u043e\u0434\u043e\u0436\u0434\u0438\u0442\u0435 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043c\u0438\u043d\u0443\u0442, \u0438 \u0442\u0435\u043f\u0435\u0440\u044c \u0443 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u044d\u0442\u0438 \u043e\u0431\u0440\u0430\u0437\u044b \u0432 \u043d\u0430\u0448\u0435\u0439 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0435. \u041c\u044b \u0442\u0430\u043a\u0436\u0435 \u043c\u043e\u0436\u0435\u043c \u043e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u0438\u0445 \u0432 \u0440\u0435\u0435\u0441\u0442\u0440 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e <code>faas-cli push -f build-test.yml<\/code>.<\/p>\n<figure class=\"full-width\"><figcaption><\/figcaption><\/figure>\n<h3>\u0421\u0431\u043e\u0440\u043a\u0430 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e Buildkit \u0438 Docker <\/h3>\n<p>\u042d\u0442\u043e \u043f\u0440\u043e\u0441\u0442\u0435\u0439\u0448\u0438\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u0438\u0437 \u0432\u0441\u0435\u0445 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0445, \u0434\u0430 \u0438 \u0441\u0431\u043e\u0440\u043a\u0430 \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u0442 \u0431\u044b\u0441\u0442\u0440\u043e. <\/p>\n<p><code>DOCKER_BUILDKIT=1 faas-cli build -f build-test.yml <\/code><\/p>\n<p>\u041f\u0440\u0438 \u0442\u0430\u043a\u043e\u043c \u043f\u043e\u0434\u0445\u043e\u0434\u0435 \u0434\u0435\u043c\u043e\u043d Docker \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u0441\u0432\u043e\u0439 \u0441\u0431\u043e\u0440\u0449\u0438\u043a \u043d\u0430 buildkit. Buildkit \u0434\u0430\u0451\u0442 \u0440\u044f\u0434 \u043f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432:<\/p>\n<ul>\n<li>\n<p>\u0411\u043e\u043b\u0435\u0435 \u0441\u043b\u043e\u0436\u043d\u043e\u0435 \u043a\u0435\u0448\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 <\/p>\n<\/li>\n<li>\n<p>\u0415\u0441\u043b\u0438 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0431\u043e\u043b\u0435\u0435 \u043f\u043e\u0437\u0434\u043d\u0438\u0435 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438 \u2014 \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044c \u043e\u0431\u0440\u0430\u0437 &#171;\u0441\u0440\u0435\u0434\u044b \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f&#187; \u0434\u043e \u0442\u043e\u0433\u043e, \u043a\u0430\u043a \u0441\u0431\u043e\u0440\u043a\u0430 \u043d\u0430 \u0443\u0440\u043e\u0432\u043d\u0435 &#171;sdk&#187; \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0430. <\/p>\n<\/li>\n<li>\n<p>\u0421\u0432\u0435\u0440\u0445\u0431\u044b\u0441\u0442\u0440\u0430\u044f \u0441\u0431\u043e\u0440\u043a\u0430 \u0432\u043e \u0432\u0442\u043e\u0440\u043e\u0439 \u0440\u0430\u0437 <\/p>\n<p><null><\/p>\n<li>\n<p><null><\/p>\n<li>\n<p>\u0421 \u043f\u043e\u043c\u043e\u0449\u044c\u044e buildkit \u0432\u0441\u0435 \u0431\u0430\u0437\u043e\u0432\u044b\u0435 \u043e\u0431\u0440\u0430\u0437\u044b \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u0437\u0430\u0433\u0440\u0443\u0436\u0435\u043d\u044b \u0432 \u043d\u0430\u0448\u0443 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u0443\u044e \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 \u0441\u0440\u0430\u0437\u0443, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u043a\u043e\u043c\u0430\u043d\u0434\u044b FROM (\u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0430) \u043d\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u044e\u0442\u0441\u044f \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e.<\/p>\n<\/li>\n<p><\/null><\/li>\n<p><\/null><\/li>\n<\/ul>\n<p>\u0421 \u043f\u043e\u043c\u043e\u0449\u044c\u044e buildkit \u0432\u0441\u0435 \u0431\u0430\u0437\u043e\u0432\u044b\u0435 \u043e\u0431\u0440\u0430\u0437\u044b \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u0437\u0430\u0433\u0440\u0443\u0436\u0435\u043d\u044b \u0432 \u043d\u0430\u0448\u0443 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u0443\u044e \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 \u0441\u0440\u0430\u0437\u0443, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u043a\u043e\u043c\u0430\u043d\u0434\u044b FROM (\u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0430) \u043d\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u044e\u0442\u0441\u044f \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e.<\/p>\n<pre><code>FROM openfaas\/of-watchdog:0.7.3 as watchdog FROM golang:1.13-alpine3.11 as build FROM alpine:3.11<\/code><\/pre>\n<p>\u042d\u0442\u043e\u0442 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0434\u0430\u0436\u0435 \u043d\u0430 Mac, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 buildkit \u043f\u0440\u043e\u043a\u0441\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0447\u0435\u0440\u0435\u0437 \u0434\u0435\u043c\u043e\u043d Docker, \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0449\u0438\u0439 \u043d\u0430 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u043e\u0439 \u043c\u0430\u0448\u0438\u043d\u0435.<\/p>\n<figure class=\"full-width\"><figcaption><\/figcaption><\/figure>\n<h3>\u0421\u0431\u043e\u0440\u043a\u0430 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0430\u0432\u0442\u043e\u043d\u043e\u043c\u043d\u043e\u0433\u043e \u043d\u0430\u0431\u043e\u0440\u0430 Buildkit <\/h3>\n<p>\u0414\u043b\u044f \u0441\u0431\u043e\u0440\u043a\u0438 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0430\u0432\u0442\u043e\u043d\u043e\u043c\u043d\u043e\u0433\u043e Buildkit \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c buildkit \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e \u043d\u0430 \u0445\u043e\u0441\u0442\u0435 Linux, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043c\u044b \u043d\u0435 \u043c\u043e\u0436\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c Mac. <\/p>\n<p><code>faas-cli build<\/code> \u043e\u0431\u044b\u0447\u043d\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u0438\u043b\u0438 \u0440\u0430\u0437\u0432\u0435\u0442\u0432\u043b\u044f\u0435\u0442 <code>docker<\/code>, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043a\u043e\u043c\u0430\u043d\u0434\u0430 \u2014 \u044d\u0442\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u043e\u0431\u043e\u043b\u043e\u0447\u043a\u0430. \u0418\u0442\u0430\u043a, \u0447\u0442\u043e\u0431\u044b \u043e\u0431\u043e\u0439\u0442\u0438 \u044d\u0442\u043e \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435, \u043c\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442 \u0441\u0431\u043e\u0440\u043a\u0438, \u0447\u0442\u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u043a\u043e\u043c\u0430\u043d\u0434\u044b:<\/p>\n<pre><code>faas-cli build -f build-test.yml --shrinkwrap  [0] &gt; Building build-test. Clearing temporary build folder: .\/build\/build-test\/ Preparing .\/build-test\/ .\/build\/build-test\/\/function Building: alexellis2\/build-test:latest with golang-middleware template. Please wait.. build-test shrink-wrapped to .\/build\/build-test\/ [0] &lt; Building build-test done in 0.00s. [0] Worker done.  Total build time: 0.00<\/code><\/pre>\n<p>\u041d\u0430\u0448 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442 \u0442\u0435\u043f\u0435\u0440\u044c \u0434\u043e\u0441\u0442\u0443\u043f\u0435\u043d \u0432 <code>.\/build\/build-test\/<\/code> \u043f\u0430\u043f\u043a\u0435 \u0441 \u043d\u0430\u0448\u0438\u043c \u043a\u043e\u0434\u043e\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0438 \u0448\u0430\u0431\u043b\u043e\u043d\u043e\u043c \u0441 \u0435\u0433\u043e \u0442\u043e\u0447\u043a\u043e\u0439 \u0432\u0445\u043e\u0434\u0430 \u0438 Dockerfile.<\/p>\n<pre><code>.\/build\/build-test\/ \u251c\u2500\u2500 Dockerfile \u251c\u2500\u2500 function \u2502   \u2514\u2500\u2500 handler.go \u251c\u2500\u2500 go.mod \u251c\u2500\u2500 main.go \u2514\u2500\u2500 template.yml  1 directory, 5 files<\/code><\/pre>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c buildkit.<\/p>\n<pre><code>curl -sSLf https:\/\/github.com\/moby\/buildkit\/releases\/download\/v0.6.3\/buildkit-v0.6.3.linux-amd64.tar.gz | sudo tar -xz -C \/usr\/local\/bin\/ --strip-components=1<\/code><\/pre>\n<p>\u0415\u0441\u043b\u0438 \u0432\u044b \u0437\u0430\u0433\u043b\u044f\u043d\u0435\u0442\u0435 \u043d\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443 \u0440\u0435\u043b\u0438\u0437\u043e\u0432, \u0432\u044b \u0442\u0430\u043a\u0436\u0435 \u043d\u0430\u0439\u0434\u0435\u0442\u0435 buildkit, \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0439 \u0434\u043b\u044f armhf \u0438 arm64, \u0438 \u043e\u0442\u043b\u0438\u0447\u043d\u043e \u043f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0438\u0439 \u0434\u043b\u044f \u043c\u0443\u043b\u044c\u0442\u0438\u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u044b. <\/p>\n<p>\u0417\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u0435 \u0434\u0435\u043c\u043e\u043d buildkit \u0432 \u043d\u043e\u0432\u043e\u043c \u043e\u043a\u043d\u0435:<\/p>\n<pre><code>sudo buildkitd  WARN[0000] using host network as the default             INFO[0000] found worker \"l1ltft74h0ek1718gitwghjxy\", labels=map[org.mobyproject.buildkit.worker.executor:oci org.mobyproject.buildkit.worker.hostname:nuc org.mobyproject.buildkit.worker.snapshotter:overlayfs], platforms=[linux\/amd64 linux\/386]  WARN[0000] skipping containerd worker, as \"\/run\/containerd\/containerd.sock\" does not exist  INFO[0000] found 1 workers, default=\"l1ltft74h0ek1718gitwghjxy\"  WARN[0000] currently, only the default worker can be used.  INFO[0000] running server on \/run\/buildkit\/buildkitd.sock <\/code><\/pre>\n<p>\u041d\u0430\u0447\u043d\u0451\u043c \u0441\u0431\u043e\u0440\u043a\u0443, \u043f\u0435\u0440\u0435\u0434\u0430\u0432 \u0443\u043f\u0430\u043a\u043e\u0432\u0430\u043d\u043d\u043e\u0435 \u0432 \u0442\u0435\u0440\u043c\u043e\u0443\u0441\u0430\u0434\u043e\u0447\u043d\u044b\u0439 \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b \u043c\u0435\u0441\u0442\u043e\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0430 \u0441\u0431\u043e\u0440\u043a\u0438. \u041d\u0430\u043c \u043d\u0443\u0436\u043d\u0430 <code>buildctl<\/code>. \u041a\u043e\u043c\u0430\u043d\u0434\u0430 buildctl \u2014 \u044d\u0442\u043e \u043a\u043b\u0438\u0435\u043d\u0442 \u0434\u043b\u044f \u0434\u0435\u043c\u043e\u043d\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0444\u0438\u043a\u0441\u0438\u0440\u0443\u0435\u0442, \u043a\u0430\u043a \u043f\u043e\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u043e\u0431\u0440\u0430\u0437 \u0438 \u0447\u0442\u043e \u0434\u0435\u043b\u0430\u0442\u044c, \u043a\u043e\u0433\u0434\u0430 \u044d\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u0441\u0434\u0435\u043b\u0430\u043d\u043e, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u044d\u043a\u0441\u043f\u043e\u0440\u0442 tar, \u0438\u0433\u043d\u043e\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0441\u0431\u043e\u0440\u043a\u0438 \u0438\u043b\u0438 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0430 \u0435\u0451 \u0432 \u0440\u0435\u0435\u0441\u0442\u0440.<\/p>\n<pre><code>buildctl build --help NAME:    buildctl build - build  USAGE:       To build and push an image using Dockerfile:     $ buildctl build --frontend dockerfile.v0 --opt target=foo --opt build-arg:foo=bar --local context=. --local dockerfile=. --output type=image,name=docker.io\/username\/image,push=true     OPTIONS:    --output value, -o value  Define exports for build result, e.g. --output type=image,name=docker.io\/username\/image,push=true    --progress value          Set type of progress (auto, plain, tty). Use plain to show container output (default: \"auto\")    --trace value             Path to trace file. Defaults to no tracing.    --local value             Allow build access to the local directory    --frontend value          Define frontend used for build    --opt value               Define custom options for frontend, e.g. --opt target=foo --opt build-arg:foo=bar    --no-cache                Disable cache for all the vertices    --export-cache value      Export build cache, e.g. --export-cache type=registry,ref=example.com\/foo\/bar, or --export-cache type=local,dest=path\/to\/dir    --import-cache value      Import build cache, e.g. --import-cache type=registry,ref=example.com\/foo\/bar, or --import-cache type=local,src=path\/to\/dir    --secret value            Secret value exposed to the build. Format id=secretname,src=filepath    --allow value             Allow extra privileged entitlement, e.g. network.host, security.insecure    --ssh value               Allow forwarding SSH agent to the builder. Format default|&lt;id&gt;[=&lt;socket&gt;|&lt;key&gt;[,&lt;key&gt;]]<\/code><\/pre>\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-313763","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/313763","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=313763"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/313763\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=313763"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=313763"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=313763"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}