αž’αŸ’αž“αž€αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αž“αŸ…αž€αŸ’αž“αž»αž„ Docker

Andrey KopylovCTO αžšαž”αžŸαŸ‹αž™αžΎαž„ αžŸαŸ’αžšαž‘αžΆαž‰αŸ‹ αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹ αž“αž·αž„αž•αŸ’αžŸαž–αŸ’αžœαž•αŸ’αžŸαžΆαž™ Docker αž™αŸ‰αžΆαž„αžŸαž€αž˜αŸ’αž˜αŸ” αž“αŸ…αž€αŸ’αž“αž»αž„αž’αžαŸ’αžαž”αž‘αžαŸ’αž˜αžΈαž˜αž½αž™ αž‚αžΆαžαŸ‹αž–αž“αŸ’αž™αž›αŸ‹αž–αžΈαžšαž”αŸ€αž”αž”αž„αŸ’αž€αžΎαžαž’αŸ’αž“αž€αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αž“αŸ…αž€αŸ’αž“αž»αž„ Docker αŸ” αž€αžΆαžšαž„αžΆαžšαžαŸ’αžšαžΉαž˜αžαŸ’αžšαžΌαžœαž‡αžΆαž˜αž½αž™αž–αž½αž€αž‚αŸ αž αŸαžαž»αž’αŸ’αžœαžΈαž”αžΆαž“αž‡αžΆαž’αŸ’αž“αž€αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αž˜αž·αž“αž‚αž½αžšαž‘αž»αž€αžŸαž·αž‘αŸ’αž’αž·αž‡αžΆ root αž“αž·αž„αžšαž”αŸ€αž”αžŠαŸ„αŸ‡αžŸαŸ’αžšαžΆαž™αž”αž‰αŸ’αž αžΆαž“αŸƒαžŸαžΌαž…αž“αžΆαž€αžšαž˜αž·αž“αžαŸ’αžšαžΌαžœαž‚αŸ’αž“αžΆαž“αŸ…αž€αŸ’αž“αž»αž„ Dockerfile αŸ”

αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž‘αžΆαŸ†αž„αž’αžŸαŸ‹αž“αŸ…αž€αŸ’αž“αž»αž„αž€αž»αž„αžαžΊαž“αŸαžšαž“αžΉαž„αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž‡αžΆαž’αŸ’αž“αž€αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹ root αž›αž»αŸ‡αžαŸ’αžšαžΆαžαŸ‚αž’αŸ’αž“αž€αž”αž‰αŸ’αž‡αžΆαž€αŸ‹αžœαžΆαžαžΆαž˜αžšαž”αŸ€αž”αž–αž·αžŸαŸαžŸαŸ” αž“αŸαŸ‡β€‹αž αžΆαž€αŸ‹β€‹αžŠαžΌαž…β€‹αž‡αžΆβ€‹αž„αžΆαž™β€‹αžŸαŸ’αžšαž½αž›β€‹αžŽαžΆαžŸαŸ‹ αž–αŸ’αžšαŸ„αŸ‡β€‹αž’αŸ’αž“αž€β€‹αž”αŸ’αžšαžΎβ€‹αž“αŸαŸ‡β€‹αž˜αž·αž“β€‹αž˜αžΆαž“β€‹αž€αžΆαžšβ€‹αžšαžΉαžβ€‹αž”αž“αŸ’αžαžΉαž„β€‹αž‘αŸαŸ” αž“αŸαŸ‡β€‹αž‡αžΆβ€‹αž˜αžΌαž›αž αŸαžαž»β€‹αžŠαŸ‚αž›β€‹αž€αžΆαžšβ€‹αž’αŸ’αžœαžΎαž€αžΆαžšβ€‹αž‡αžΆ root αž‚αžΊβ€‹αžαž»αžŸβ€‹αž–αžΈβ€‹αž‘αž·αžŠαŸ’αž‹αž—αžΆαž–β€‹αžŸαž»αžœαžαŸ’αžαž·αž—αžΆαž–αŸ” αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž‚αŸ’αž˜αžΆαž“αž“αžšαžŽαžΆαž˜αŸ’αž“αžΆαž€αŸ‹αž“αŸ…αž€αŸ’αž“αž»αž„αž‚αŸ†αž“αž·αžαžαŸ’αžšαžΉαž˜αžαŸ’αžšαžΌαžœαžšαž”αžŸαŸ‹αž–αž½αž€αž‚αŸαž’αŸ’αžœαžΎαž€αžΆαžšαž“αŸ…αž›αžΎαž€αž»αŸ†αž–αŸ’αž™αžΌαž‘αŸαžšαž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αž‡αžΆαž˜αž½αž™αž“αžΉαž„αžŸαž·αž‘αŸ’αž’αž·αž‡αžΆ root αž“αŸ„αŸ‡ αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž‡αžΆαž…αŸ’αžšαžΎαž“αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž“αŸ…αž€αŸ’αžšαŸ„αž˜ root αž“αŸ…αž€αŸ’αž“αž»αž„αž€αž»αž„αžαžΊαž“αŸαžšαŸ”

αžœαžΆαžαŸ‚αž„αžαŸ‚αž˜αžΆαž“αž€αŸ†αž αž»αžŸαžŠαŸ‚αž›αž“αžΉαž„αž’αž“αž»αž‰αŸ’αž‰αžΆαžαž±αŸ’αž™αž˜αŸαžšαŸ„αž‚αž‚αŸαž…αž…αŸαž‰αž–αžΈαž€αž»αž„αžαžΊαž“αŸαžš αž αžΎαž™αž…αžΌαž›αž‘αŸ…αž€αžΆαž“αŸ‹αž€αž»αŸ†αž–αŸ’αž™αžΌαž‘αŸαžšαž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αŸ” αžŸαž“αŸ’αž˜αžαžαžΆαž’αžΆαž€αŸ’αžšαž€αŸ‹αž”αŸ†αž•αž»αž αž™αžΎαž„αžαŸ’αžšαžΌαžœαž’αžΆαž“αžΆαžαžΆαžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž“αŸ…αž€αŸ’αž“αž»αž„αž€αž»αž„αžαžΊαž“αŸαžšαžαŸ’αžšαžΌαžœαž”αžΆαž“αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαžŠαŸ„αž™αž’αŸ’αž“αž€αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αžŠαŸ‚αž›αž˜αž·αž“αž˜αžΆαž“αžŸαž·αž‘αŸ’αž’αž·αžŽαžΆαž˜αž½αž™αž“αŸ…αž›αžΎαž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸαŸ”

αž€αžΆαžšαž”αž„αŸ’αž€αžΎαžαž’αŸ’αž“αž€αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹

αž€αžΆαžšαž”αž„αŸ’αž€αžΎαžαž’αŸ’αž“αž€αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αž“αŸ…αž€αŸ’αž“αž»αž„αž€αž»αž„αžαžΊαž“αŸαžšαž‚αžΊαž˜αž·αž“αžαž»αžŸαž–αžΈαž€αžΆαžšαž”αž„αŸ’αž€αžΎαžαžœαžΆαž“αŸ…αž€αŸ’αž“αž»αž„αž€αžΆαžšαž…αŸ‚αž€αž…αžΆαž™αž›αžΈαž“αž»αž…αž“αŸ„αŸ‡αž‘αŸαŸ” αž‘αŸ„αŸ‡αž™αŸ‰αžΆαž„αžŽαžΆαž€αŸαžŠαŸ„αž™ αž–αžΆαž€αŸ’αž™αž”αž‰αŸ’αž‡αžΆαž’αžΆαž…αž”αŸ’αžšαŸ‚αž”αŸ’αžšαž½αž›αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αžšαžΌαž”αž—αžΆαž–αž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αž•αŸ’αžŸαŸαž„αŸ—αž‚αŸ’αž“αžΆαŸ”

αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžΆαžšαž…αŸ‚αž€αž…αžΆαž™αžŠαŸ‚αž›αž˜αžΆαž“αž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αž›αžΎ debian αž’αŸ’αž“αž€αžαŸ’αžšαžΌαžœαž”αž“αŸ’αžαŸ‚αž˜αžŠαžΌαž…αžαžΆαž„αž€αŸ’αžšαŸ„αž˜αž‘αŸ… DockerfileαŸ–

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

αž†αŸ’αž›αž„αž€αžΆαžαŸ‹αž›αŸαžαžŸαž˜αŸ’αž‚αžΆαž›αŸ‹αž’αŸ’αž“αž€αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αž“αŸ…αžαžΆαž„αž€αŸ’αž“αž»αž„αž’αž»αž„αž“αŸ…αž–αŸαž›αž”αž„αŸ’αž€αžΎαžαžšαžΌαž”αž—αžΆαž–

αž”αŸ’αžšαžŸαž·αž“αž”αžΎ ID αžšαž”αžŸαŸ‹αž’αŸ’αž“αž€ αž“αž·αž„αž›αŸαžαžŸαž˜αŸ’αž‚αžΆαž›αŸ‹αžšαž”αžŸαŸ‹αž˜αž“αž»αžŸαŸ’αžŸαž‘αžΆαŸ†αž„αž’αžŸαŸ‹αžŠαŸ‚αž›αž’αŸ’αžœαžΎαž€αžΆαžšαž›αžΎαž‚αž˜αŸ’αžšαŸ„αž„αžαŸ’αžšαžΌαžœαž‚αŸ’αž“αžΆαž“αŸ„αŸ‡ αž‚αŸ’αžšαžΆαž“αŸ‹αžαŸ‚αž”αž‰αŸ’αž‡αžΆαž€αŸ‹αž›αŸαžαžŸαž˜αŸ’αž‚αžΆαž›αŸ‹αž“αŸαŸ‡αž“αŸ…αž€αŸ’αž“αž»αž„ Dockerfile αŸ” αž‘αŸ„αŸ‡αž™αŸ‰αžΆαž„αžŽαžΆαž€αŸαžŠαŸ„αž™ αž‡αžΆαž‰αžΉαž€αž‰αžΆαž”αŸ‹αž›αŸαžαžŸαž˜αŸ’αž‚αžΆαž›αŸ‹αž’αŸ’αž“αž€αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αž˜αž·αž“αžαŸ’αžšαžΌαžœαž‚αŸ’αž“αžΆαž‘αŸαŸ”

αžšαž”αŸ€αž”αžŠαžΎαž˜αŸ’αž”αžΈαžŸαž˜αŸ’αžšαŸαž…αž”αžΆαž“αž“αžΌαžœαž’αŸ’αžœαžΈαžŠαŸ‚αž›αž’αŸ’αž“αž€αž…αž„αŸ‹αž”αžΆαž“αž‚αžΊαž˜αž·αž“αž…αŸ’αž”αžΆαžŸαŸ‹αž—αŸ’αž›αžΆαž˜αŸ—αž“αŸ„αŸ‡αž‘αŸαŸ” αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αžαŸ’αž‰αž»αŸ† αž“αŸαŸ‡αž‚αžΊαž‡αžΆαžšαžΏαž„αžŠαŸαž›αŸ†αž”αžΆαž€αž”αŸ†αž•αž»αžαž“αŸ…αž€αŸ’αž“αž»αž„αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž“αŸƒαž€αžΆαžšαž’αŸ’αžœαžΎαž‡αžΆαž˜αŸ’αž…αžΆαžŸαŸ‹ Docker αŸ” αž’αŸ’αž“αž€αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹ docker αž‡αžΆαž…αŸ’αžšαžΎαž“αž˜αž·αž“αž”αžΆαž“αžŠαžΉαž„αžαžΆαž˜αžΆαž“αžŠαŸ†αžŽαžΆαž€αŸ‹αž€αžΆαž›αž•αŸ’αžŸαŸαž„αž‚αŸ’αž“αžΆαž“αŸ…αž€αŸ’αž“αž»αž„αž‡αžΈαžœαž·αžαž“αŸƒαžšαžΌαž”αž—αžΆαž–αž“αŸ„αŸ‡αž‘αŸαŸ” αžŠαŸ†αž”αžΌαž„αžšαžΌαž”αž—αžΆαž–αžαŸ’αžšαžΌαžœαž”αžΆαž“αž•αŸ’αž‚αž»αŸ†αžŠαŸ„αž™αž”αŸ’αžšαžΎ Dockerfile αŸ” αž“αŸ…αž–αŸαž›αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž€αž»αž„αžαžΊαž“αŸαžšαž–αžΈαžšαžΌαž”αž—αžΆαž– αž―αž€αžŸαžΆαžš Dockerfile αž˜αž·αž“αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αŸ’αžšαžΎαž‘αŸ€αžαž‘αŸαŸ”

αž€αžΆαžšαž”αž„αŸ’αž€αžΎαžαž’αŸ’αž“αž€αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αžαŸ’αžšαžΌαžœαžαŸ‚αž€αžΎαžαž‘αžΎαž„αž“αŸ…αž–αŸαž›αžŠαŸ‚αž›αžšαžΌαž”αž—αžΆαž–αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž„αŸ’αž€αžΎαžαž‘αžΎαž„αŸ” αž’αž“αž»αžœαžαŸ’αžαžŠαžΌαž…αž‚αŸ’αž“αžΆαž…αŸ†αž–αŸ„αŸ‡αž€αžΆαžšαž€αŸ†αžŽαžαŸ‹αž’αŸ’αž“αž€αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αžŠαŸ‚αž›αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαžαŸ’αžšαžΌαžœαž”αžΆαž“αž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αŸ” αž“αŸαŸ‡αž˜αžΆαž“αž“αŸαž™αžαžΆαž™αžΎαž„αžαŸ’αžšαžΌαžœαž†αŸ’αž›αž„αž€αžΆαžαŸ‹ UID (GID) αž“αŸ…αžαžΆαž„αž€αŸ’αž“αž»αž„αž€αž»αž„αžαžΊαž“αŸαžšαŸ”

αž€αžΆαžšαžŽαŸ‚αž“αžΆαŸ†αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αŸ’αžšαžΎαžŠαžΎαž˜αŸ’αž”αžΈαž”αŸ’αžšαžΎαž’αžαŸαžšαžαžΆαž„αž€αŸ’αžšαŸ…αž“αŸ…αž€αŸ’αž“αž»αž„ Dockerfile αž’αŸαž“αžœαžΈ ΠΈ ARG. αž€αžΆαžšαž”αŸ’αžšαŸ€αž”αž’αŸ€αž”αž›αž˜αŸ’αž’αž·αžαž“αŸƒαž€αžΆαžšαžŽαŸ‚αž“αžΆαŸ† αž“αŸ…αž‘αžΈαž“αŸαŸ‡.

Dockerfile

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

αž’αŸ’αž“αž€αž’αžΆαž…αž†αŸ’αž›αž„αž€αžΆαžαŸ‹αž’αžΆαž‚αž»αž™αž˜αŸ‰αž„αŸ‹αžαžΆαž˜αžšαž™αŸˆ docker-compose αžŠαžΌαž…αž“αŸαŸ‡αŸ–

docker- αžαŸ‚αž„

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

PS αžŠαžΎαž˜αŸ’αž”αžΈαž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαž„αž—αžΆαž–αžŸαŸ’αž˜αž»αž‚αŸ’αžšαžŸαŸ’αž˜αžΆαž‰αž‘αžΆαŸ†αž„αž’αžŸαŸ‹αžšαž”αžŸαŸ‹ Docker αžœαžΆαž˜αž·αž“αž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαžΆαž“αŸ‹αž‘αŸαž€αŸ’αž“αž»αž„αž€αžΆαžšαž’αžΆαž“αž―αž€αžŸαžΆαžš αž¬αž’αžαŸ’αžαž”αž‘αŸ” αž’αŸ’αž“αž€αžαŸ’αžšαžΌαžœαž αžΆαžαŸ‹αž…αŸ’αžšαžΎαž“ αž’αŸ’αž“αž€αžαŸ’αžšαžΌαžœαž˜αžΆαž“αž’αžΆαžšαž˜αŸ’αž˜αžŽαŸαžŸαž˜αŸ’αžšαžΆαž”αŸ‹ Docker αŸ”

αž”αŸ’αžšαž—αž–: www.habr.com

αž”αž“αŸ’αžαŸ‚αž˜αž˜αžαž·αž™αŸ„αž”αž›αŸ‹