рдбрдХрд░рдорд╛ рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛

Andrey Kopylov, рд╣рд╛рдореНрд░реЛ CTO, рдорд╛рдпрд╛ рдЧрд░реНрдЫ, рд╕рдХреНрд░рд┐рдп рд░реВрдкрдорд╛ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрджрдЫ рд░ рдбрдХрд░рд▓рд╛рдИ рдмрдврд╛рд╡рд╛ рджрд┐рдиреНрдЫред рдирдпрд╛рдБ рд▓реЗрдЦрдорд╛, рдЙрдирд▓реЗ рдбрдХрд░рдорд╛ рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛рд╣рд░реВ рдХрд╕рд░реА рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрдиреЗ рднрдиреЗрд░ рдмрддрд╛рдЙрдБрдЫрдиреНред рддрд┐рдиреАрд╣рд░реВрд╕рдБрдЧ рд╕рд╣реА рдХрд╛рдо рдЧрд░реНрдиреБрд╣реЛрд╕реН, рдХрд┐рди рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛рд╣рд░реВрд▓рд╛рдИ рд░реВрдЯ рдЕрдзрд┐рдХрд╛рд░рд╣рд░реВ рдЫреЛрдбреНрдиреБ рд╣реБрдБрджреИрди рд░ рдбрдХрд░рдлрд╛рдЗрд▓рдорд╛ рдмреЗрдореЗрд▓ рд╕реВрдЪрдХрд╣рд░реВрдХреЛ рд╕рдорд╕реНрдпрд╛ рдХрд╕рд░реА рд╕рдорд╛рдзрд╛рди рдЧрд░реНрдиреЗред

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

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

рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрджреИ

рдХрдиреНрдЯреЗрдирд░рдорд╛ рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрдиреБ рд▓рд┐рдирдХреНрд╕ рд╡рд┐рддрд░рдгрдорд╛ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрдиреБ рднрдиреНрджрд╛ рдлрд░рдХ рдЫреИрдиред рдпрджреНрдпрдкрд┐, рдЖрджреЗрд╢рд╣рд░реВ рдлрд░рдХ рдЖрдзрд╛рд░ рдЫрд╡рд┐рд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐ рднрд┐рдиреНрди рд╣реБрди рд╕рдХреНрдЫрдиреНред

рдбреЗрдмрд┐рдпрди-рдЖрдзрд╛рд░рд┐рдд рд╡рд┐рддрд░рдгрд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐, рддрдкрд╛рдИрдВрд▓реЗ рдбрдХрд░рдлрд╛рдЗрд▓рдорд╛ рдирд┐рдореНрди рдердкреНрди рдЖрд╡рд╢реНрдпрдХ рдЫ:

RUN groupadd --gid 2000 node 
  && useradd --uid 2000 --gid node --shell /bin/bash --create-home node

рдЕрд▓реНрдкрд╛рдЗрди рдХреЛ рд▓рд╛рдЧреА:

RUN addgroup -g 2000 node 
    && adduser -u 2000 -G node -s /bin/sh -D node

рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛рдмрд╛рдЯ рдЪрд▓рд┐рд░рд╣реЗрдХреЛ рдкреНрд░рдХреНрд░рд┐рдпрд╛рд╣рд░реВ

UID 2000 рдХреЛ рд╕рд╛рде рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛рдХреЛ рд░реВрдкрдорд╛ рд╕рдмреИ рдкрдЫрд┐рд▓реНрд▓рд╛ рдкреНрд░рдХреНрд░рд┐рдпрд╛рд╣рд░реВ рдЪрд▓рд╛рдЙрди, рдЪрд▓рд╛рдЙрдиреБрд╣реЛрд╕реН:

USER 2000

рдиреЛрдб рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛рдХреЛ рд░реВрдкрдорд╛ рд╕рдмреИ рдкрдЫрд┐рд▓реНрд▓рд╛ рдкреНрд░рдХреНрд░рд┐рдпрд╛рд╣рд░реВ рдЪрд▓рд╛рдЙрди, рдЪрд▓рд╛рдЙрдиреБрд╣реЛрд╕реН:

USER node

рдпрд╕рдорд╛ рдердк рдкрдвреНрдиреБрд╣реЛрд╕реН рдХрд╛рдЧрдЬрд╛рдд.

рдорд╛рдЙрдиреНрдЯ рднреЛрд▓реНрдпреБрдорд╣рд░реВ

рдХрдиреНрдЯреЗрдирд░ рднрд┐рддреНрд░ рднреЛрд▓реНрдпреБрдорд╣рд░реВ рдорд╛рдЙрдиреНрдЯ рдЧрд░реНрджрд╛, рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛рд▓рд╛рдИ рдлрд╛рдЗрд▓рд╣рд░реВ рдкрдвреНрди рд░/рд╡рд╛ рд▓реЗрдЦреНрдиреЗ рдХреНрд╖рдорддрд╛ рдкреНрд░рджрд╛рди рдЧрд░реНрдиреБрд╣реЛрд╕реНред рдпреЛ рдЧрд░реНрдирдХреЛ рд▓рд╛рдЧрд┐, рдХрдиреНрдЯреЗрдирд░рдорд╛ рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛рдХреЛ UID (GID) рд░ рдХрдиреНрдЯреЗрдирд░ рдмрд╛рд╣рд┐рд░рдХрд╛ рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛ рдЬреЛрд╕рдБрдЧ рдлрд╛рдЗрд▓ рдкрд╣реБрдБрдЪ рдЧрд░реНрди рдЙрдкрдпреБрдХреНрдд рдЕрдиреБрдорддрд┐рд╣рд░реВ рдЫрдиреН рдорд┐рд▓реНрдиреБрдкрд░реНрдЫред рдпрд╕ рдЕрд╡рд╕реНрдерд╛рдорд╛, рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛ рдирд╛рдорд╣рд░реВ рдлрд░рдХ рдкрд░реНрджреИрдиред

рдкреНрд░рд╛рдп: рд▓рд┐рдирдХреНрд╕ рдХрдореНрдкреНрдпреБрдЯрд░рдорд╛, рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛рдХреЛ UID рд░ GID 1000 рдмрд░рд╛рдмрд░ рд╣реБрдиреНрдЫред рдпреА рдкрд╣рд┐рдЪрд╛рдирдХрд░реНрддрд╛рд╣рд░реВ рдХрдореНрдкреНрдпреБрдЯрд░рдХреЛ рдкрд╣рд┐рд▓реЛ рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛рд▓рд╛рдИ рддреЛрдХрд┐рдПрдХрд╛ рд╣реБрдиреНрдЫрдиреНред

рдЖрдлреНрдиреЛ рдкрд╣рд┐рдЪрд╛рдирдХрд░реНрддрд╛ рдкрддреНрддрд╛ рд▓рдЧрд╛рдЙрди рд╕рдЬрд┐рд▓реЛ рдЫ:

id

рддрдкрд╛рдИрдВрд▓реЗ рдЖрдлреНрдиреЛ рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛рдХреЛ рдмрд╛рд░реЗрдорд╛ рд╡рд┐рд╕реНрддреГрдд рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрдиреБрд╣реБрдиреЗрдЫред
рддрдкрд╛рдИрдВрдХреЛ рдкрд╣рд┐рдЪрд╛рдирдХрд░реНрддрд╛рдХреЛ рд╕рд╛рде рдЙрджрд╛рд╣рд░рдгрд╣рд░реВрдмрд╛рдЯ 2000 рд▓рд╛рдИ рдмрджрд▓реНрдиреБрд╣реЛрд╕реН рд░ рд╕рдмреИ рдХреБрд░рд╛ рдареАрдХ рд╣реБрдиреЗрдЫред

рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛рд▓рд╛рдИ UID рд░ GID рдЕрд╕рд╛рдЗрди рдЧрд░реНрджреИ

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

RUN usermod -u 1000 node 
  && groupmod -g 1000 node

рдпрджрд┐ рддрдкрд╛рдЗрдБ рдЕрд▓реНрдкрд╛рдЗрди рдЖрдзрд╛рд░ рдЫрд╡рд┐ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрджреИ рд╣реБрдиреБрд╣реБрдиреНрдЫ рднрдиреЗ, рддрдкрд╛рдЗрдБ рдЫрд╛рдпрд╛ рдкреНрдпрд╛рдХреЗрдЬ рд╕реНрдерд╛рдкрдирд╛ рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдЫ:

RUN apk add тАФno-cache shadow

рдЫрд╡рд┐ рдирд┐рд░реНрдорд╛рдг рдЧрд░реНрджрд╛ рдХрдиреНрдЯреЗрдирд░ рднрд┐рддреНрд░ рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛ рдЖрдИрдбреА рдкрд╛рд╕ рдЧрд░реНрджреИ

рдпрджрд┐ рддрдкрд╛рдИрдВрдХреЛ рдЖрдИрдбреА рд░ рдкрд░рд┐рдпреЛрдЬрдирд╛рдорд╛ тАЛтАЛтАЛтАЛрдХрд╛рдо рдЧрд░реНрдиреЗ рд╕рдмреИ рд╡реНрдпрдХреНрддрд┐рд╣рд░реВрдХреЛ рдЖрдИрдбреА рдореЗрд▓ рдЦрд╛рдиреНрдЫ рднрдиреЗ, рддреНрдпрд╕рдкрдЫрд┐ рдпреЛ рдЖрдИрдбреА рдбрдХрд░рдлрд╛рдЗрд▓рдорд╛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдЧрд░реНрдиреБрд╣реЛрд╕реНред рдпрджреНрдпрдкрд┐, рдкреНрд░рд╛рдпрдГ рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛ рдЖрдИрдбреАрд╣рд░реВ рдореЗрд▓ рдЦрд╛рдБрджреИрдирдиреНред

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

рдЫрд╡рд┐ рдирд┐рд░реНрдорд╛рдг рд╣реБрдБрджрд╛ рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛ рд╕рд┐рд░реНрдЬрдирд╛ рд╣реБрдиреБрдкрд░реНрджрдЫред рддреНрдпрд╣рд┐ рдкреНрд░рдХреНрд░рд┐рдпрд╛рд╣рд░реВ рд╕реБрд░реВ рдЧрд░рд┐рдПрдХрд╛ рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛рд╣рд░реВ рдирд┐рд░реНрдзрд╛рд░рдг рдЧрд░реНрдирдорд╛ рд▓рд╛рдЧреВ рд╣реБрдиреНрдЫред рдпрд╕рдХреЛ рдорддрд▓рдм рд╣рд╛рдореАрд▓реЗ рдХрдиреНрдЯреЗрдирд░ рднрд┐рддреНрд░ UID (GID) рдкрд╛рд╕ рдЧрд░реНрдиреБрдкрд░реНрдЫред

Dockerfile рдорд╛ рдмрд╛рд╣реНрдп рдЪрд░ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди рдирд┐рд░реНрджреЗрд╢рдирд╣рд░реВ рдкреНрд░рдпреЛрдЧ рдЧрд░рд┐рдиреНрдЫ ENV ╨╕ рдПрдЖрд░рдЬреАред рдирд┐рд░реНрджреЗрд╢рдирд╣рд░реВрдХреЛ рд╡рд┐рд╕реНрддреГрдд рддреБрд▓рдирд╛ рдпрд╣рд╛рдБ.

рдбрдХрд░рдлрд╛рдЗрд▓

ARG UID=1000
ARG GID=1000
ENV UID=${UID}
ENV GID=${GID}
RUN usermod -u $UID node 
  && groupmod -g $GID node

рддрдкрд╛рдИрдВ рдпрд╕ рдкреНрд░рдХрд╛рд░рдХреЛ рдбрдХрд░-рдХрдореНрдкреЛрдЬ рдорд╛рд░реНрдлрдд рддрд░реНрдХрд╣рд░реВ рдкрд╛рд╕ рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ:

рдбрдХрд░-рд░рдЪрдирд╛

build:
  context: ./src/backend
  args:
    UID: 1000
    GID: 1000

PS рдбрдХрд░рдХреЛ рд╕рдмреИ рдЬрдЯрд┐рд▓рддрд╛рд╣рд░реВ рдорд╛рд╕реНрдЯрд░ рдЧрд░реНрди, рдХрд╛рдЧрдЬрд╛рдд рд╡рд╛ рд▓реЗрдЦрд╣рд░реВ рдкрдвреНрди рдкрд░реНрдпрд╛рдкреНрдд рдЫреИрдиред рддрдкрд╛рдИрдВрд▓реЗ рдзреЗрд░реИ рдЕрднреНрдпрд╛рд╕ рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдЫ, рддрдкрд╛рдИрдВрд▓реЗ рдбрдХрд░рдХреЛ рд▓рд╛рдЧрд┐ рдорд╣рд╕реБрд╕ рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдЫред

рд╕реНрд░реЛрдд: www.habr.com

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдердкреНрди