рдбреЙрдХ рдЫрд╡рд┐рдпреЛрдВ рдХреЛ рдХрдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддреАрди рд╕рд░рд▓ рдЯреНрд░рд┐рдХреНрд╕

рдЫрд╡рд┐

рдЬрдм рдбреЙрдХрдЯрд░ рдХрдВрдЯреЗрдирд░ рдмрдирд╛рдиреЗ рдХреА рдмрд╛рдд рдЖрддреА рд╣реИ, рддреЛ рд╣рдореЗрд╢рд╛ рдЫрд╡рд┐рдпреЛрдВ рдХреЗ рдЖрдХрд╛рд░ рдХреЛ рдХрдо рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рдирд╛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд╣реЛрддрд╛ рд╣реИред рдЫрд╡рд┐рдпрд╛рдВ рдЬреЛ рд╕рдорд╛рди рдкрд░рддреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреА рд╣реИрдВ рдФрд░ рдХрдо рд╡рдЬрди рдХрд░рддреА рд╣реИрдВ - рдЕрдзрд┐рдХ рддреЗрдЬрд╝реА рд╕реЗ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдФрд░ рддреИрдирд╛рдд рдХреА рдЬрд╛рддреА рд╣реИрдВред


рд▓реЗрдХрд┐рди рдЬрдм RUN рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рдХрд╛ рдкреНрд░рддреНрдпреЗрдХ рдирд┐рд╖реНрдкрд╛рджрди рдПрдХ рдирдИ рдкрд░рдд рдмрдирд╛рддрд╛ рд╣реИ, рддреЛ рдЖрдХрд╛рд░ рдХреЛ рдХреИрд╕реЗ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдП? рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЖрдк рдЕрднреА рднреА рдЫрд╡рд┐ рдмрдирд╛рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдордзреНрдпрд╡рд░реНрддреА рдХрд▓рд╛рдХреГрддрд┐рдпреЛрдВ рдХреА рдЬрд░реВрд░рдд рд╣реИ ...


рдЖрдк рд╢рд╛рдпрдж рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдЬреНрдпрд╛рджрд╛рддрд░ рдбреЙрдХрд░реЛрдВ рдХреА рдлрд╛рдЗрд▓реЛрдВ рдХреА рдЕрдкрдиреА рдЕрдЬреАрдм рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ рд╣реЛрддреА рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:


 FROM ubuntu RUN apt-get update && apt-get install vim 

рдЕрдЪреНрдЫрд╛, рдпрд╣рд╛рдБ && рдХреНрдпреЛрдВ рд╣реИ? рдХреНрдпрд╛ рдпрд╣рд╛рдВ рджреЛ RUN рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рдЪрд▓рд╛рдирд╛ рдЖрд╕рд╛рди рдирд╣реАрдВ рд╣реИ?


 FROM ubuntu RUN apt-get update RUN apt-get install vim 

рдбреЙрдХрд░ рд╕рдВрд╕реНрдХрд░рдг 1.10 рд╕реЗ рд╢реБрд░реВ рд╣реЛрдХрд░ COPY , ADD рдФрд░ RUN рдСрдкрд░реЗрдЯрд░ рдЫрд╡рд┐ рдореЗрдВ рдПрдХ рдирдИ рдкрд░рдд рдЬреЛрдбрд╝рддреЗ рд╣реИрдВред рдкрд┐рдЫрд▓реЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдПрдХ рдХреЗ рдмрдЬрд╛рдп рджреЛ рдкрд░рддреЗрдВ рдмрдирд╛рдИ рдЧрдИ рдереАрдВред


рдЫрд╡рд┐


рдЧрд┐рдЯреНрд╕ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд░рддреЗрдВред


рдбреЙрдХрд░ рдкрд░рддреЗрдВ рдЫрд╡рд┐ рдХреЗ рдкрд┐рдЫрд▓реЗ рдФрд░ рд╡рд░реНрддрдорд╛рди рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рдмреАрдЪ рдЕрдВрддрд░ рдХреЛ рд╕рдВрд░рдХреНрд╖рд┐рдд рдХрд░рддреА рд╣реИрдВред рдФрд░ рдЬреИрд╕реЗ рдХрд┐ рдХрдорд┐рдЯ рдХрд░рддрд╛ рд╣реИ, рд╡реЗ рдЖрд╕рд╛рди рд╣реЛрддреЗ рд╣реИрдВ рдпрджрд┐ рдЖрдк рдЙрдиреНрд╣реЗрдВ рдЕрдиреНрдп рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдпрд╛ рдЫрд╡рд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рд╕рд╛рдЭрд╛ рдХрд░рддреЗ рд╣реИрдВред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдЬрдм рд░рдЬрд┐рд╕реНрдЯреНрд░реА рд╕реЗ рдПрдХ рдЫрд╡рд┐ рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдХреЗрд╡рд▓ рд▓рд╛рдкрддрд╛ рдкрд░рддреЗрдВ рд▓реЛрдб рдХреА рдЬрд╛рддреА рд╣реИрдВ, рдЬреЛ рдХрдВрдЯреЗрдирд░реЛрдВ рдХреЗ рдмреАрдЪ рдЫрд╡рд┐рдпреЛрдВ рдХреЗ рдЕрд▓рдЧрд╛рд╡ рдХреЛ рд╕рд░рд▓ рдХрд░рддрд╛ рд╣реИред


рд▓реЗрдХрд┐рди рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ, рдкреНрд░рддреНрдпреЗрдХ рдкрд░рдд рд╣реЛрддреА рд╣реИ, рдФрд░ рдЙрдирдореЗрдВ рд╕реЗ рдЕрдзрд┐рдХ, рдЕрдВрддрд┐рдо рдЫрд╡рд┐ рдХреЛ рднрд╛рд░реАред рдЗрд╕ рд╕рдВрдмрдВрдз рдореЗрдВ рдЧрд┐рдЯ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рд╕рдорд╛рди рд╣реИрдВ: рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХрд╛ рдЖрдХрд╛рд░ рдкрд░рддреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЗ рд╕рд╛рде рдмрдврд╝рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕реЗ рдХрдорд┐рдЯреНрд╕ рдХреЗ рдмреАрдЪ рд╕рднреА рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдкрд╣рд▓реЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдПрдХ рд╣реА рдкрдВрдХреНрддрд┐ рдореЗрдВ рдХрдИ RUN рдХрдердиреЛрдВ рдХреЛ рд╕рдВрдпреЛрдЬрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣ рдЕрдЪреНрдЫрд╛ рдЕрднреНрдпрд╛рд╕ рд╣реБрдЖ рдХрд░рддрд╛ рдерд╛ред рд▓реЗрдХрд┐рди рдЕрдм, рдЕрдлрд╕реЛрд╕, рдирд╣реАрдВред


1. рдбреЛрдХрд░-рдЪрд┐рддреНрд░реЛрдВ рдХреА рдЪрд░рдгрдмрджреНрдз рд╡рд┐рдзрд╛рдирд╕рднрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрдИ рдкрд░рддреЛрдВ рдХреЛ рдПрдХ рдореЗрдВ рдорд┐рд▓рд╛рдПрдВ


рдЬрдм Git рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдмрдврд╝рддреА рд╣реИ, рддреЛ рдЖрдк рдкреВрд░реЗ рдмрджрд▓рд╛рд╡ рдХреЗ рдЗрддрд┐рд╣рд╛рд╕ рдХреЛ рдПрдХ рдкреНрд░рддрд┐рдмрджреНрдз рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рднреВрд▓ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ рдбреЙрдХрд░ рдореЗрдВ рдХреБрдЫ рдЗрд╕реА рддрд░рд╣ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ - рдЪрд░рдгрдмрджреНрдз рд╡рд┐рдзрд╛рдирд╕рднрд╛ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗред


рдЪрд▓реЛ рдПрдХ Node.js. рдХрдВрдЯреЗрдирд░ рдмрдирд╛рддреЗ рд╣реИрдВ


index.js рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ:


 const express = require('express') const app = express() app.get('/', (req, res) => res.send('Hello World!')) app.listen(3000, () => { console.log(`Example app listening on port 3000!`) }) 

рдФрд░ package.json :


 { "name": "hello-world", "version": "1.0.0", "main": "index.js", "dependencies": { "express": "^4.16.2" }, "scripts": { "start": "node index.js" } } 

рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд Dockerfile рд╕рд╛рде рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдкреИрдХ рдХрд░реЗрдВ:


 FROM node:8 EXPOSE 3000 WORKDIR /app COPY package.json index.js ./ RUN npm install CMD ["npm", "start"] 

рдПрдХ рдЪрд┐рддреНрд░ рдмрдирд╛рдПрдБ:


 $ docker build -t node-vanilla . 

рдЬрд╛рдВрдЪреЗрдВ рдХрд┐ рд╕рдм рдХреБрдЫ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ:


 $ docker run -p 3000:3000 -ti --rm --init node-vanilla 

рдЕрдм рдЖрдк рд▓рд┐рдВрдХ рдХрд╛ рдЕрдиреБрд╕рд░рдг рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ: http: // localhost: 3000 рдФрд░ "рд╣реИрд▓реЛ рд╡рд░реНрд▓реНрдб!" рджреЗрдЦреЗрдВред


Dockerfile рдЕрдм рд╣рдорд╛рд░реЗ рдкрд╛рд╕ Dockerfile рдФрд░ RUN рдСрдкрд░реЗрдЯрд░ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рд╣рдо рдореВрд▓ рдЫрд╡рд┐ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдХрдо рд╕реЗ рдХрдо рджреЛ рдкрд░рддреЛрдВ рдореЗрдВ рд╡реГрджреНрдзрд┐ рдХреЛ рдареАрдХ рдХрд░рддреЗ рд╣реИрдВ:


 $ docker history node-vanilla IMAGE CREATED BY SIZE 075d229d3f48 /bin/sh -c #(nop) CMD ["npm" "start"] 0B bc8c3cc813ae /bin/sh -c npm install 2.91MB bac31afb6f42 /bin/sh -c #(nop) COPY multi:3071ddd474429e1тАж 364B 500a9fbef90e /bin/sh -c #(nop) WORKDIR /app 0B 78b28027dfbf /bin/sh -c #(nop) EXPOSE 3000 0B b87c2ad8344d /bin/sh -c #(nop) CMD ["node"] 0B <missing> /bin/sh -c set -ex && for key in 6A010тАж 4.17MB <missing> /bin/sh -c #(nop) ENV YARN_VERSION=1.3.2 0B <missing> /bin/sh -c ARCH= && dpkgArch="$(dpkg --printтАж 56.9MB <missing> /bin/sh -c #(nop) ENV NODE_VERSION=8.9.4 0B <missing> /bin/sh -c set -ex && for key in 94AE3тАж 129kB <missing> /bin/sh -c groupadd --gid 1000 node && useтАж 335kB <missing> /bin/sh -c set -ex; apt-get update; apt-geтАж 324MB <missing> /bin/sh -c apt-get update && apt-get installтАж 123MB <missing> /bin/sh -c set -ex; if ! command -v gpg > /тАж 0B <missing> /bin/sh -c apt-get update && apt-get installтАж 44.6MB <missing> /bin/sh -c #(nop) CMD ["bash"] 0B <missing> /bin/sh -c #(nop) ADD file:1dd78a123212328bdтАж 123MB 

рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдЕрдВрддрд┐рдо рдЫрд╡рд┐ рдореЗрдВ рдкрд╛рдВрдЪ рдирдИ рдкрд░рддреЛрдВ рдХреА рд╡реГрджреНрдзрд┐ рд╣реБрдИ рд╣реИ: рд╣рдорд╛рд░реЗ Dockerfile рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рдСрдкрд░реЗрдЯрд░ рдХреЗ рд▓рд┐рдП рдПрдХред рдЖрдЗрдП рдЕрдм рдЪрд░рдгрдмрджреНрдз рдбреЙрдХрд░ рдирд┐рд░реНрдорд╛рдг рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВред рд╣рдо рджреЛ рднрд╛рдЧреЛрдВ рд╕реЗ рдорд┐рд▓рдХрд░ рдПрдХ рд╣реА Dockerfile рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ:


 FROM node:8 as build WORKDIR /app COPY package.json index.js ./ RUN npm install FROM node:8 COPY --from=build /app / EXPOSE 3000 CMD ["index.js"] 

Dockerfile рдХрд╛ рдкрд╣рд▓рд╛ рднрд╛рдЧ рддреАрди рдкрд░рддреЗрдВ рдмрдирд╛рддрд╛ рд╣реИред рдлрд┐рд░ рдкрд░рддреЛрдВ рдХреЛ рд╕рдВрдпреБрдХреНрдд рдФрд░ рджреВрд╕рд░реЗ рдФрд░ рдЕрдВрддрд┐рдо рдЪрд░рдгреЛрдВ рдореЗрдВ рдХреЙрдкреА рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдКрдкрд░ рдХреА рдЫрд╡рд┐ рдореЗрдВ рджреЛ рдФрд░ рдкрд░рддреЗрдВ рдЬреЛрдбрд╝реА рдЧрдИ рд╣реИрдВред рдирддреАрдЬрддрди, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рддреАрди рдкрд░рддреЗрдВ рд╣реИрдВред


рдЫрд╡рд┐


рдЪрд▓реЛ рдЗрд╕реЗ рдЖрдЬрдорд╛рдПрдБред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдПрдХ рдХрдВрдЯреЗрдирд░ рдмрдирд╛рдПрдБ:


 $ docker build -t node-multi-stage . 

рдЗрддрд┐рд╣рд╛рд╕ рдХреА рдЬрд╛рдБрдЪ:


 $ docker history node-multi-stage IMAGE CREATED BY SIZE 331b81a245b1 /bin/sh -c #(nop) CMD ["index.js"] 0B bdfc932314af /bin/sh -c #(nop) EXPOSE 3000 0B f8992f6c62a6 /bin/sh -c #(nop) COPY dir:e2b57dff89be62f77тАж 1.62MB b87c2ad8344d /bin/sh -c #(nop) CMD ["node"] 0B <missing> /bin/sh -c set -ex && for key in 6A010тАж 4.17MB <missing> /bin/sh -c #(nop) ENV YARN_VERSION=1.3.2 0B <missing> /bin/sh -c ARCH= && dpkgArch="$(dpkg --printтАж 56.9MB <missing> /bin/sh -c #(nop) ENV NODE_VERSION=8.9.4 0B <missing> /bin/sh -c set -ex && for key in 94AE3тАж 129kB <missing> /bin/sh -c groupadd --gid 1000 node && useтАж 335kB <missing> /bin/sh -c set -ex; apt-get update; apt-geтАж 324MB <missing> /bin/sh -c apt-get update && apt-get installтАж 123MB <missing> /bin/sh -c set -ex; if ! command -v gpg > /тАж 0B <missing> /bin/sh -c apt-get update && apt-get installтАж 44.6MB <missing> /bin/sh -c #(nop) CMD ["bash"] 0B <missing> /bin/sh -c #(nop) ADD file:1dd78a123212328bdтАж 123MB 

рджреЗрдЦреЗрдВ рдХрд┐ рдХреНрдпрд╛ рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдЖрдХрд╛рд░ рдмрджрд▓ рдЧрдпрд╛ рд╣реИ:


 $ docker images | grep node- node-multi-stage 331b81a245b1 678MB node-vanilla 075d229d3f48 679MB 

рд╣рд╛рдВ, рдпрд╣ рдЫреЛрдЯрд╛ рд╣реЛ рдЧрдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрднреА рддрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдирд╣реАрдВ рд╣реИред


2. рд╣рдо рдбрд┐рд╕реНрдЯреНрд░реЛрд▓реЗрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрдВрдЯреЗрдирд░ рд╕реЗ рд╕рднреА рдЕрдирд╛рд╡рд╢реНрдпрдХ рд╣рдЯрд╛ рджреЗрддреЗ рд╣реИрдВ


рд╡рд░реНрддрдорд╛рди рдЫрд╡рд┐ рд╣рдореЗрдВ Node.js, yarn , npm , bash рдФрд░ рдХрдИ рдЕрдиреНрдп рдЙрдкрдпреЛрдЧреА рдмрд╛рдпрдиреЗрд░реА рдкреНрд░рджрд╛рди рдХрд░рддреА рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрд╣ рдЙрдмрдВрдЯреВ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдЗрд╕реЗ рддреИрдирд╛рдд рдХрд░рддреЗ рд╣реБрдП, рд╣рдореЗрдВ рдХрдИ рдЙрдкрдпреЛрдЧреА рдмрд╛рдпрдиреЗрд░рд┐рдЬрд╝ рдФрд░ рдЙрдкрдпреЛрдЧрд┐рддрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдкреВрд░реНрдг рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдорд┐рд▓рддрд╛ рд╣реИред


рд╣рд╛рд▓рд╛рдВрдХрд┐, рдХрдВрдЯреЗрдирд░ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдореЗрдВ рдЙрдирдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рдХреЗрд╡рд▓ рдирд┐рд░реНрднрд░рддрд╛ рдХреА рдЬрд░реВрд░рдд рд╣реИ Node.js.


рдбреЙрдХрдЯрд░ рдХрдВрдЯреЗрдирд░реЛрдВ рдХреЛ рдПрдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рд╕рдВрдЪрд╛рд▓рди рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рдЗрд╕реЗ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдХрд░рдгреЛрдВ рдХрд╛ рдиреНрдпреВрдирддрдо рдЖрд╡рд╢реНрдпрдХ рд╕реЗрдЯ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдЗрд╕рдХреЗ рд▓рд┐рдП рд╕рдВрдкреВрд░реНрдг рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред


рддреЛ рд╣рдо Node.js. рдХреЛ рдЫреЛрдбрд╝рдХрд░ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рдм рдХреБрдЫ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ


рд▓реЗрдХрд┐рди рдХреИрд╕реЗ?


Google рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдХ рд╕рдорд╛рди рд╕рдорд╛рдзрд╛рди рдХреЗ рд╕рд╛рде рдЖрдпрд╛ рд╣реИ - GoogleCloudPlatform / distroless ред


рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреЗ рд▓рд┐рдП рд╡рд┐рд╡рд░рдг рдкрдврд╝рддрд╛ рд╣реИ:


рдбрд┐рд╕реНрдЯреНрд░реЛрд▓реЗрд╕ рдЫрд╡рд┐рдпреЛрдВ рдореЗрдВ рдХреЗрд╡рд▓ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдФрд░ рдЙрд╕рдХреА рдирд┐рд░реНрднрд░рддрд╛рдПрдВ рд╣реЛрддреА рд╣реИрдВред рдХреЛрдИ рдкреИрдХреЗрдЬ рдореИрдиреЗрдЬрд░, рд╢реЗрд▓ рдпрд╛ рдЕрдиреНрдп рдкреНрд░реЛрдЧреНрд░рд╛рдо рдирд╣реАрдВ рд╣реИрдВ рдЬреЛ рдЖрдорддреМрд░ рдкрд░ рдорд╛рдирдХ рд▓рд┐рдирдХреНрд╕ рд╡рд┐рддрд░рдг рдореЗрдВ рдкрд╛рдП рдЬрд╛рддреЗ рд╣реИрдВред


рдпрд╣ рд╡рд╣реА рд╣реИ рдЬреЛ рдЖрдкрдХреЛ рдЪрд╛рд╣рд┐рдП!


рдирдИ рдЫрд╡рд┐ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП Dockerfile рдЪрд▓рд╛рдПрдВ:


 FROM node:8 as build WORKDIR /app COPY package.json index.js ./ RUN npm install FROM gcr.io/distroless/nodejs COPY --from=build /app / EXPOSE 3000 CMD ["index.js"] 

рд╣рдо рд╣рдореЗрд╢рд╛ рдХреА рддрд░рд╣ рдЫрд╡рд┐ рдПрдХрддреНрд░ рдХрд░рддреЗ рд╣реИрдВ:


 $ docker build -t node-distroless . 

рдЖрд╡реЗрджрди рдареАрдХ рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдХрдВрдЯреЗрдирд░ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП:


 $ docker run -p 3000:3000 -ti --rm --init node-distroless 

рдФрд░ http: // localhost: 3000 рдкрд░ рдЬрд╛рдПрдВ ред рдХреНрдпрд╛ рдЕрддрд┐рд░рд┐рдХреНрдд рдмрд╛рдпрдиреЗрд░рд┐рдЬрд╝ рдХреЗ рдмрд┐рдирд╛ рдЫрд╡рд┐ рдЖрд╕рд╛рди рд╣реЛ рдЧрдИ рд╣реИ?


 $ docker images | grep node-distroless node-distroless 7b4db3b7f1e5 76.7MB 

рдмрд╕ рдРрд╕реЗ рд╣реА! рдЕрдм рдЗрд╕рдХрд╛ рд╡рдЬрди рдХреЗрд╡рд▓ 76.7 рдПрдордмреА рд╣реИ, рдЬрд┐рддрдирд╛ рдХрд┐ 600 рдПрдордмреА рдХрдо!


рд╕рдм рдХреБрдЫ рд╢рд╛рдВрдд рд╣реИ, рд▓реЗрдХрд┐рди рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд┐рдВрджреБ рд╣реИред рдЬрдм рдХрдВрдЯреЗрдирд░ рдЪрд▓ рд░рд╣рд╛ рд╣реИ, рдФрд░ рдЖрдкрдХреЛ рдЗрд╕рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рдЖрдк рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрдиреЗрдХреНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:


 $ docker exec -ti <insert_docker_id> bash 

рдПрдХ рдЪрд▓ рд░рд╣реЗ рдХрдВрдЯреЗрдирд░ рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░рдирд╛ рдФрд░ bash рд╢реБрд░реВ рдХрд░рдирд╛ SSH рд╕рддреНрд░ рдмрдирд╛рдиреЗ рдХреЗ рд╕рдорд╛рди рд╣реИред


рд▓реЗрдХрд┐рди рдЪреВрдВрдХрд┐ рдбрд┐рд╕реНрдЯреНрд░реЛрд▓реЗрд╕ рдореВрд▓ рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдХрд╛ рдПрдХ рд╕реНрдЯреНрд░рд┐рдк-рдбрд╛рдЙрди рд╕рдВрд╕реНрдХрд░рдг рд╣реИ, рдЗрд╕рд▓рд┐рдП рдХреЛрдИ рдЕрддрд┐рд░рд┐рдХреНрдд рдмрд╛рдпрдиреЗрд░рд┐рдЬрд╝ рдирд╣реАрдВ рд╣реИрдВ, рди рд╣реА, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдПрдХ рд╢реЗрд▓!


рд╢реЗрд▓ рдирд╣реАрдВ рд╣реЛрдиреЗ рдкрд░ рдПрдХ рдЪрд▓ рд░рд╣реЗ рдХрдВрдЯреЗрдирд░ рд╕реЗ рдХреИрд╕реЗ рдЬреБрдбрд╝реЗрдВ?


рд╕рдмрд╕реЗ рджрд┐рд▓рдЪрд╕реНрдк рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдХреБрдЫ рднреА рдирд╣реАрдВред


рдпрд╣ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдХреЗрд╡рд▓ рдПрдХ рдХрдВрдЯреЗрдирд░ рдореЗрдВ рдмрд╛рдпрдиреЗрд░рд┐рдЬрд╝ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдФрд░ рдХреЗрд╡рд▓ рд╡рд╣реА рд▓реЙрдиреНрдЪ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ Node.js рд╣реИ:


 $ docker exec -ti <insert_docker_id> node 

рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдЗрд╕рдореЗрдВ рдПрдХ рдкреНрд▓рд╕ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЕрдЧрд░ рдХреБрдЫ рд╣рдорд▓рд╛рд╡рд░ рдХрдВрдЯреЗрдирд░ рддрдХ рдкрд╣реБрдВрдЪ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рд╢реЗрд▓ рдХреА рдкрд╣реБрдВрдЪ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдмрд╣реБрдд рдХрдо рдиреБрдХрд╕рд╛рди рдкрд╣реБрдВрдЪрд╛рдПрдЧрд╛ред рджреВрд╕рд░реЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ, рдХрдо рдмрд╛рдпрдиреЗрд░рд┐рдЬрд╝ - рдХрдо рд╡рдЬрди рдФрд░ рдЙрдЪреНрдЪ рд╕реБрд░рдХреНрд╖рд╛ред рд▓реЗрдХрд┐рди, рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рдбрд┐рдмрдЧрд┐рдВрдЧ рдХреА рдХреАрдордд рдкрд░ред


рдпрд╣рд╛рдВ рдпрд╣ рдзреНрдпрд╛рди рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдпрд╣ рдЙрддреНрдкрд╛рджреЛрдВ рдХреЛ рдкрд░реНрдпрд╛рд╡рд░рдг рдкрд░ рдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдФрд░ рдбрд┐рдмрдЧрд┐рдВрдЧ рдХреЗ рд▓рд╛рдпрдХ рдирд╣реАрдВ рд╣реИред рдмреЗрд╣рддрд░ рд░реВрдк рд╕реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рд▓реЙрдЧрд┐рдВрдЧ рдФрд░ рдирд┐рдЧрд░рд╛рдиреА рдкреНрд░рдгрд╛рд▓рд┐рдпреЛрдВ рдкрд░ рднрд░реЛрд╕рд╛ рдХрд░рдирд╛ рдмреЗрд╣рддрд░ рд╣реИред


рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдЕрдЧрд░ рд╣рдореЗрдВ рдЕрднреА рднреА рдбрд┐рдмрдЧрд┐рдВрдЧ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдФрд░ рдлрд┐рд░ рднреА рд╣рдо рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рдбреЙрдХ рдХреА рдЫрд╡рд┐ рд╕рдмрд╕реЗ рдЫреЛрдЯреА рд╣реЛ?


3. рдЕрд▓реНрдкрд╛рдЗрди рдХреЗ рд╕рд╛рде рдЖрдзрд╛рд░ рдЫрд╡рд┐рдпреЛрдВ рдХреЛ рдХрдо рдХрд░реЗрдВ


рдЖрдк рдЕрд▓реНрдкрд╛рдЗрди рдЫрд╡рд┐ рдХреЗ рд╕рд╛рде рдЕрдирд┐рдпрдВрддреНрд░рдг рдХреЛ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВред


рдЕрд▓реНрдкрд╛рдЗрди рд▓рд┐рдирдХреНрд╕ рдПрдХ рд╕реБрд░рдХреНрд╖рд╛-рдЙрдиреНрдореБрдЦ, рд╣рд▓реНрдХреЗ рд╡рд┐рддрд░рдг рд╣реИ рдЬреЛ рдорд╕рд▓ рд▓рд┐рдмрд╛рд╕ рдФрд░ рдмрд┐рдЬреАрдмреЙрдХреНрд╕ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИред рд▓реЗрдХрд┐рди рд╣рдо рдПрдХ рд╢рдмреНрдж рдирд╣реАрдВ рд▓реЗрдВрдЧреЗ, рдмрд▓реНрдХрд┐ рдЗрд╕рдХреА рдЬрд╛рдБрдЪ рдХрд░реЗрдВрдЧреЗред


node:8-alpine рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ Dockerfile рдЪрд▓рд╛рдПрдВ node:8-alpine :


 FROM node:8 as build WORKDIR /app COPY package.json index.js ./ RUN npm install FROM node:8-alpine COPY --from=build /app / EXPOSE 3000 CMD ["npm", "start"] 

рдПрдХ рдЪрд┐рддреНрд░ рдмрдирд╛рдПрдБ:


 $ docker build -t node-alpine . 

рдЖрдХрд╛рд░ рдХреА рдЬрд╛рдБрдЪ рдХрд░реЗрдВ:


 $ docker images | grep node-alpine node-alpine aa1f85f8e724 69.7MB 

рдЖрдЙрдЯрдкреБрдЯ рдкрд░, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ 69.7MB рд╣реИ - рдпрд╣ рдПрдХ рдЕрдирд┐рдпрдВрддреНрд░рд┐рдд рдЫрд╡рд┐ рд╕реЗ рднреА рдХрдо рд╣реИред


рдЖрдЗрдП рдЬрд╛рдВрдЪреЗрдВ рдХрд┐ рдХреНрдпрд╛ рдПрдХ рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдХрдВрдЯреЗрдирд░ рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ (рдбрд┐рд╕реНрдЯреНрд░реЛрд▓реНрд╕ рдХреА рдЫрд╡рд┐ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдо рдРрд╕рд╛ рдирд╣реАрдВ рдХрд░ рд╕рдХреЗ)ред


рдХрдВрдЯреЗрдирд░ рд▓реЙрдиреНрдЪ рдХрд░реЗрдВ:


 $ docker run -p 3000:3000 -ti --rm --init node-alpine Example app listening on port 3000! 

рдФрд░ рдХрдиреЗрдХреНрдЯ рдХрд░реЗрдВ:


 $ docker exec -ti 9d8e97e307d7 bash OCI runtime exec failed: exec failed: container_linux.go:296: starting container process caused "exec: \"bash\": executable file not found in $PATH": unknown 

рдЕрд╕рдлрд▓ред рд▓реЗрдХрд┐рди рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдХрдВрдЯреЗрдирд░ рдореЗрдВ sh ...


 $ docker exec -ti 9d8e97e307d7 sh / # 

рдмрд╣реБрдд рдмрдврд╝рд┐рдпрд╛! рд╣рдо рдХрдВрдЯреЗрдирд░ рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдореЗрдВ рдХрд╛рдордпрд╛рдм рд░рд╣реЗ, рдФрд░ рд╕рд╛рде рд╣реА рдЗрд╕рдХреА рдЫрд╡рд┐ рднреА рдЫреЛрдЯреА рд╣реИред рд▓реЗрдХрд┐рди рдпрд╣рд╛рдБ рдХреБрдЫ рдмрд╛рд░реАрдХрд┐рдпрд╛рдБ рдереАрдВред


рдЕрд▓реНрдкрд╛рдЗрди рдЫрд╡рд┐рдпрд╛рдВ muslc рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИрдВ, C. рдХреЗ рд▓рд┐рдП рдПрдХ рд╡реИрдХрд▓реНрдкрд┐рдХ рдорд╛рдирдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╣реИред рдЬрдмрдХрд┐ рдЕрдзрд┐рдХрд╛рдВрд╢ рд▓рд┐рдирдХреНрд╕ рд╡рд┐рддрд░рдг, рдЬреИрд╕реЗ рдЙрдмрдВрдЯреВ, рдбреЗрдмрд┐рдпрди рдФрд░ CentOS, glibc рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИрдВред рдпрд╣ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдпреЗ рджреЛрдиреЛрдВ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХрд░реНрдиреЗрд▓ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╣реА рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВред


рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЙрдирдХреЗ рдкрд╛рд╕ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд▓рдХреНрд╖реНрдп рд╣реИрдВ: рдЧреНрд▓рд┐рдмрдХ рд╕рдмрд╕реЗ рдЖрдо рдФрд░ рддреЗрдЬрд╝ рд╣реИ, рдЬрдмрдХрд┐ рдорд╕рд▓рдХ рдХрдо рдЬрдЧрд╣ рд▓реЗрддрд╛ рд╣реИ рдФрд░ рдПрдХ рд╕реБрд░рдХреНрд╖рд╛ рдЙрдкрд╛рдп рдХреЗ рд╕рд╛рде рд▓рд┐рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЬрдм рдХреЛрдИ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╕рдВрдХрд▓рд┐рдд рдХрд░рддрд╛ рд╣реИ, рдПрдХ рдирд┐рдпрдо рдХреЗ рд░реВрдк рдореЗрдВ, рдпрд╣ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕реА рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рд▓рд┐рдП рд╕рдВрдХрд▓рд┐рдд рдХрд░рддрд╛ рд╣реИред рдпрджрд┐ рдЖрдкрдХреЛ рдЗрд╕реЗ рдХрд┐рд╕реА рдЕрдиреНрдп рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рд╕рд╛рде рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рдЖрдкрдХреЛ рдлрд┐рд░ рд╕реЗ рдХрдВрдкрд╛рдЗрд▓ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред


рджреВрд╕рд░реЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ, рдЕрд▓реНрдкрд╛рдЗрди рдЪрд┐рддреНрд░реЛрдВ рдкрд░ рдХрдВрдЯреЗрдирд░реЛрдВ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рдд рдШрдЯрдирд╛рдУрдВ рдХреЛ рдЬрдиреНрдо рджреЗ рд╕рдХрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдореЗрдВ рдкреНрд░рдпреБрдХреНрдд рдорд╛рдирдХ рд╕реА рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдЕрд▓рдЧ рд╣реИред рдЕрдВрддрд░ рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдЬрдм precompiled рдмрд╛рдпрдиреЗрд░рд┐рдЬрд╝ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИ, рдЬреИрд╕реЗ рдХрд┐ C ++ рдХреЗ рд▓рд┐рдП рдиреЛрдбреНрд╕ред


рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╕рдорд╛рдкреНрдд рдкреНрд░реЗрдд рдкреИрдХреЗрдЬ рдЕрд▓реНрдкрд╛рдЗрди рдкрд░ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред


рддреЛ рдореВрд▓ рдЫрд╡рд┐ рдХреНрдпрд╛ рдЪреБрдирдирд╛ рд╣реИ?


рдЕрд▓реНрдкрд╛рдЗрди, рдЕрдирд┐рдпрдВрддреНрд░рд┐рдд рдпрд╛ рд╡реЗрдирд┐рд▓рд╛ рджреЗрдЦреЛ - рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рд╕реНрдерд┐рддрд┐ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдирд┐рд░реНрдгрдп рд▓реЗрдирд╛ рдмреЗрд╣рддрд░ рд╣реИред


рдпрджрд┐ рдЖрдк рдареЗрд╕ рд╕реЗ рдирд┐рдкрдЯ рд░рд╣реЗ рд╣реИрдВ рдФрд░ рд╕реБрд░рдХреНрд╖рд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ, рддреЛ рд╢рд╛рдпрдж рдЕрдирд┐рдпрдВрддреНрд░рдг рд╕рдмрд╕реЗ рдЙрдкрдпреБрдХреНрдд рд╣реЛрдЧрд╛ред


рдбреЙрдХрд░ рдЫрд╡рд┐ рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рдкреНрд░рддреНрдпреЗрдХ рдмрд╛рдЗрдирд░реА рдкреВрд░реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреА рд╕реНрдерд┐рд░рддрд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдЬреЛрдЦрд┐рдо рдЬреЛрдбрд╝рддрд╛ рд╣реИред рдХрдВрдЯреЗрдирд░ рдореЗрдВ рдХреЗрд╡рд▓ рдПрдХ рдмрд╛рдЗрдирд░реА рд╕реНрдерд╛рдкрд┐рдд рд╣реЛрдиреЗ рд╕реЗ рдЗрд╕ рдЬреЛрдЦрд┐рдо рдХреЛ рдХрдо рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред


рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рдХреЛрдИ рд╣рдорд▓рд╛рд╡рд░ рдХрд┐рд╕реА рд╡рд┐рдЪрд▓рд┐рдд рдЫрд╡рд┐ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЪрд▓ рд░рд╣реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рднреЗрджреНрдпрддрд╛ рдкрд╛ рд╕рдХрддрд╛ рд╣реИ, рддреЛ рд╡рд╣ рдХрдВрдЯреЗрдирд░ рдореЗрдВ рд╢реЗрд▓ рдирд╣реАрдВ рдЪрд▓рд╛ рд╕рдХрддрд╛ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╡рд╣рд╛рдВ рдирд╣реАрдВ рдерд╛!


рдпрджрд┐ рдХрд┐рд╕реА рдХрд╛рд░рдгрд╡рд╢ docker рдХреА рдЫрд╡рд┐ рдХрд╛ рдЖрдХрд╛рд░ рдЖрдкрдХреЗ рд▓рд┐рдП рдЕрддреНрдпрдВрдд рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ, рддреЛ рдпрд╣ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЕрд▓реНрдкрд╛рдЗрди-рдЖрдзрд╛рд░рд┐рдд рдЫрд╡рд┐рдпреЛрдВ рдкрд░ рдЕрдзрд┐рдХ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИред


рд╡реЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЫреЛрдЯреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди, рд╕рдВрдЧрддрддрд╛ рдХреА рдХреАрдордд рдкрд░ред рдЕрд▓реНрдкрд╛рдЗрди рдПрдХ рдЕрд▓рдЧ рдорд╛рдирдХ рд╕реА рд▓рд╛рдЗрдмреНрд░реЗрд░реА, рдорд╕реНрдХреЗрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдХрднреА-рдХрднреА рд╕рдорд╕реНрдпрд╛рдПрдВ рдкреЙрдк рдЕрдк рд╣реЛ рдЬрд╛рдПрдВрдЧреАред рдЙрджрд╛рд╣рд░рдг рд▓рд┐рдВрдХ рдкрд░ рджреЗрдЦреЗ рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ: https://github.com/grpc/grpc/issues/8528 рдФрд░ https://github.com/grpc/grpc/issues/6126 ред


рд╡реЗрдирд┐рд▓рд╛ рдЫрд╡рд┐рдпрд╛рдВ рдкрд░реАрдХреНрд╖рдг рдФрд░ рд╡рд┐рдХрд╛рд╕ рдХреЗ рд▓рд┐рдП рдЖрджрд░реНрд╢ рд╣реИрдВред


рд╣рд╛рдВ, рд╡реЗ рдмрдбрд╝реЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЙрдмрдВрдЯреВ рд╕реНрдерд╛рдкрд┐рдд рдХреЗ рд╕рд╛рде рдПрдХ рдкреВрд░реНрдг рдорд╢реАрди рдкрд░ рдЬрд┐рддрдирд╛ рд╕рдВрднрд╡ рд╣реЛ рдЙрддрдирд╛ рджрд┐рдЦрддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдУрдПрд╕ рдореЗрдВ рд╕рднреА рдмрд╛рдпрдиреЗрд░рд┐рдЬрд╝ рдЙрдкрд▓рдмреНрдз рд╣реИрдВред


рдкреНрд░рд╛рдкреНрдд рдбреЛрдХрд░ рдЫрд╡рд┐рдпреЛрдВ рдХреЗ рдЖрдХрд╛рд░ рдХреЛ рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рд▓рд┐рдЦреЗрдВ:


node:8 681 рдПрдордмреА
node:8 678MB рд╡реГрджреНрдзрд┐рд╢реАрд▓ рдирд┐рд░реНрдорд╛рдг рдХреЗ рд╕рд╛рде node:8
gcr.io/distroless/nodejs 76.7MB
node:8-alpine 69.7 рдПрдордмреА


рдЕрдиреБрд╡рд╛рджрдХ рд╕реЗ рд╢рдмреНрдж рдЬреБрджрд╛ рдХрд░рдирд╛


рд╣рдорд╛рд░реЗ рдмреНрд▓реЙрдЧ рдкрд░ рдЕрдиреНрдп рд▓реЗрдЦ рдкрдврд╝реЗрдВ:


рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдореЗрдВ рд╕реНрдЯреЗрдЯрдлрд╝реБрд▓ рдмреИрдХрдЕрдк


рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рд╡рд┐рд╖рдо рд╡реЗрдм рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдирд╛


рд░реЗрдбрдорд╛рдЗрди рдХреЗ рд▓рд┐рдП рдЯреЗрд▓реАрдЧреНрд░рд╛рдо рдмреЙрдЯред рдЕрдкрдиреЗ рдФрд░ рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЬреАрд╡рди рдХреЛ рд╕рд░рд▓ рдХреИрд╕реЗ рдмрдирд╛рдПрдВ

Source: https://habr.com/ru/post/hi437372/


All Articles