ืžืฉืชืžืฉ ื‘-Docker

ืื ื“ืจื™ื™ ืงื•ืคื™ืœื•ื‘, CTO ืฉืœื ื•, ืื•ื”ื‘, ืžืฉืชืžืฉ ื‘ืื•ืคืŸ ืคืขื™ืœ ื•ืžืงื“ื ืืช Docker. ื‘ืžืืžืจ ื—ื“ืฉ ื”ื•ื ืžืกื‘ื™ืจ ื›ื™ืฆื“ ืœื™ืฆื•ืจ ืžืฉืชืžืฉื™ื ื‘-Docker. ืขื‘ื•ื“ื” ื ื›ื•ื ื” ืื™ืชื, ืžื“ื•ืข ืืกื•ืจ ืœื”ืฉืื™ืจ ืœืžืฉืชืžืฉื™ื ื–ื›ื•ื™ื•ืช ืฉื•ืจืฉ ื•ื›ื™ืฆื“ ืœืคืชื•ืจ ืืช ื”ื‘ืขื™ื” ืฉืœ ืื™ื ื“ื™ืงื˜ื•ืจื™ื ืœื ืชื•ืืžื™ื ื‘- Dockerfile.

ื›ืœ ื”ืชื”ืœื™ื›ื™ื ื‘ืžื™ื›ืœ ื™ืคืขืœื• ื›ืžืฉืชืžืฉ ื”ืฉื•ืจืฉ, ืืœื ืื ืชืฆื™ื™ืŸ ื–ืืช ื‘ืฆื•ืจื” ืžื™ื•ื—ื“ืช. ื–ื” ื ืจืื” ืžืื•ื“ ื ื•ื—, ื›ื™ ืœืžืฉืชืžืฉ ื”ื–ื” ืื™ืŸ ื”ื’ื‘ืœื•ืช. ื–ื• ื”ืกื™ื‘ื” ืฉืขื‘ื•ื“ื” ื›ืฉื•ืจืฉ ื”ื™ื ืฉื’ื•ื™ื” ืžื ืงื•ื“ืช ืžื‘ื˜ ืื‘ื˜ื—ื”. ืื ืืฃ ืื—ื“ ื‘ืฉื›ืœื• ืœื ืขื•ื‘ื“ ืขืœ ื”ืžื—ืฉื‘ ื”ืžืงื•ืžื™ ืขื ื–ื›ื•ื™ื•ืช ืฉื•ืจืฉ, ืื– ืจื‘ื™ื ืžืจื™ืฆื™ื ืชื”ืœื™ื›ื™ื ืชื—ืช ืฉื•ืจืฉ ื‘ืงื•ื ื˜ื™ื™ื ืจื™ื.

ืชืžื™ื“ ื™ืฉ ื‘ืื’ื™ื ืฉื™ืืคืฉืจื• ืชื•ื›ื ื•ืช ื–ื“ื•ื ื™ื•ืช ืœื‘ืจื•ื— ืžื”ืžื™ื›ืœ ื•ืœื”ื’ื™ืข ืœืžื—ืฉื‘ ื”ืžืืจื—. ื‘ื”ื ื—ื” ื”ื’ืจื•ืข ืžื›ืœ, ืขืœื™ื ื• ืœื”ื‘ื˜ื™ื— ืฉืชื”ืœื™ื›ื™ื ื‘ืชื•ืš ื”ืงื•ื ื˜ื™ื™ื ืจ ืžื•ืคืขืœื™ื ืขืœ ื™ื“ื™ ืžืฉืชืžืฉ ืฉืื™ืŸ ืœื• ื–ื›ื•ื™ื•ืช ื›ืœืฉื”ืŸ ื‘ืžื—ืฉื‘ ื”ืžืืจื—.

ื™ืฆื™ืจืช ืžืฉืชืžืฉ

ื™ืฆื™ืจืช ืžืฉืชืžืฉ ื‘ืงื•ื ื˜ื™ื™ื ืจ ืื™ื ื” ืฉื•ื ื” ืžื™ืฆื™ืจืชื• ื‘ื”ืคืฆื•ืช ืœื™ื ื•ืงืก. ืขื ื–ืืช, ื”ืคืงื•ื“ื•ืช ืขืฉื•ื™ื•ืช ืœื”ืฉืชื ื•ืช ืขื‘ื•ืจ ืชืžื•ื ื•ืช ื‘ืกื™ืก ืฉื•ื ื•ืช.

ืขื‘ื•ืจ ื”ืคืฆื•ืช ืžื‘ื•ืกืกื•ืช ื“ื‘ื™ืืŸ, ืขืœื™ืš ืœื”ื•ืกื™ืฃ ืืช ื”ื“ื‘ืจื™ื ื”ื‘ืื™ื ืœ-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) ืฉืœ ื”ืžืฉืชืžืฉ ื‘ืงื•ื ื˜ื™ื™ื ืจ ื•ื”ืžืฉืชืžืฉ ืžื—ื•ืฅ ืœืงื•ื ื˜ื™ื™ื ืจ ืฉื™ืฉ ืœื• ื”ืจืฉืื•ืช ื’ื™ืฉื” ืžืชืื™ืžื•ืช ืœืงื•ื‘ืฅ ื—ื™ื™ื‘ื™ื ืœื”ืชืื™ื. ื‘ืžืงืจื” ื–ื”, ืฉืžื•ืช ื”ืžืฉืชืžืฉ ืื™ื ื ื—ืฉื•ื‘ื™ื.

ืœืขืชื™ื ืงืจื•ื‘ื•ืช ื‘ืžื—ืฉื‘ Linux, UID ื•-GID ืฉืœ ืžืฉืชืžืฉ ืฉื•ื•ื™ื ืœ-1000. ืžื–ื”ื™ื ืืœื” ืžื•ืงืฆื™ื ืœืžืฉืชืžืฉ ื”ืจืืฉื•ืŸ ืฉืœ ื”ืžื—ืฉื‘.

ืงืœ ืœืžืฆื•ื ืืช ื”ืžื–ื”ื™ื ืฉืœืš:

id

ืชืงื‘ืœ ืžื™ื“ืข ืžืงื™ืฃ ืขืœ ื”ืžืฉืชืžืฉ ืฉืœืš.
ื”ื—ืœืฃ 2000 ืžื”ื“ื•ื’ืžืื•ืช ื‘ืžื–ื”ื” ืฉืœืš ื•ื”ื›ืœ ื™ื”ื™ื” ื‘ืกื“ืจ.

ื”ืงืฆืืช UID ื•-GID ืœืžืฉืชืžืฉ

ืื ื”ืžืฉืชืžืฉ ื ื•ืฆืจ ื‘ืขื‘ืจ, ืื‘ืœ ืืชื” ืฆืจื™ืš ืœืฉื ื•ืช ืืช ื”ืžื–ื”ื™ื, ืืชื” ื™ื›ื•ืœ ืœืขืฉื•ืช ื–ืืช ื›ืš:

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

ืื ืืชื” ืžืฉืชืžืฉ ื‘ืชืžื•ื ืช ื”ื‘ืกื™ืก ื”ืืœืคื™ื ื™, ืขืœื™ืš ืœื”ืชืงื™ืŸ ืืช ื—ื‘ื™ืœืช ื”ืฆืœืœื™ื:

RUN apk add โ€”no-cache shadow

ื”ืขื‘ืจืช ืžื–ื”ื” ื”ืžืฉืชืžืฉ ื‘ืชื•ืš ื”ืงื•ื ื˜ื™ื™ื ืจ ื‘ืขืช ื‘ื ื™ื™ืช ื”ืชืžื•ื ื”

ืื ื”ืžื–ื”ื” ืฉืœืš ื•ื”ืžื–ื”ื™ื ืฉืœ ื›ืœ ื”ืื ืฉื™ื ืฉืขื•ื‘ื“ื™ื ืขืœ ื”ืคืจื•ื™ืงื˜ ืชื•ืืžื™ื, ืื– ืžืกืคื™ืง ืœืฆื™ื™ืŸ ืืช ื”ืžื–ื”ื” ื”ื–ื” ื‘- Dockerfile. ืขื ื–ืืช, ืœืขืชื™ื ืงืจื•ื‘ื•ืช ืžื–ื”ื™ ื”ืžืฉืชืžืฉ ืื™ื ื ืชื•ืืžื™ื.

ืื™ืš ืœื”ืฉื™ื’ ืืช ืžื” ืฉืืชื” ืจื•ืฆื” ืœื ื‘ืจื•ืจ ืžื™ื“. ืขื‘ื•ืจื™, ื–ื” ื”ื™ื” ื”ื“ื‘ืจ ื”ืงืฉื” ื‘ื™ื•ืชืจ ื‘ืชื”ืœื™ืš ื”ืฉืœื™ื˜ื” ื‘-Docker. ืžืฉืชืžืฉื™ Docker ืจื‘ื™ื ืื™ื ื ืžื‘ื™ื ื™ื ืฉื™ืฉื ื ืฉืœื‘ื™ื ืฉื•ื ื™ื ื‘ื—ื™ื™ื” ืฉืœ ืชืžื•ื ื”. ืจืืฉื™ืช, ื”ืชืžื•ื ื” ืžื•ืจื›ื‘ืช ื‘ืืžืฆืขื•ืช Dockerfile. ื‘ืขืช ื”ืคืขืœืช ืงื•ื ื˜ื™ื™ื ืจ ืžืชืžื•ื ื”, ื”- Dockerfile ืื™ื ื• ื‘ืฉื™ืžื•ืฉ ืขื•ื“.

ื™ืฆื™ืจืช ืžืฉืชืžืฉ ื—ื™ื™ื‘ืช ืœื”ืชืจื—ืฉ ื›ืืฉืจ ื”ืชืžื•ื ื” ื ื‘ื ื™ืช. ื›ื "ืœ ืœื’ื‘ื™ ืงื‘ื™ืขืช ื”ืžืฉืชืžืฉ ืฉืชื—ืชื™ื• ืžื•ืคืขืœื™ื ืชื”ืœื™ื›ื™ื. ื–ื” ืื•ืžืจ ืฉืื ื—ื ื• ื—ื™ื™ื‘ื™ื ืื™ื›ืฉื”ื• ืœื”ืขื‘ื™ืจ ืืช ื”-UID (GID) ื‘ืชื•ืš ื”ืงื•ื ื˜ื™ื™ื ืจ.

ื”ื ื—ื™ื•ืช ืžืฉืžืฉื•ืช ืœืฉื™ืžื•ืฉ ื‘ืžืฉืชื ื™ื ื—ื™ืฆื•ื ื™ื™ื ื‘- Dockerfile ENV ะธ ARG. ื”ืฉื•ื•ืื” ืžืคื•ืจื˜ืช ืฉืœ ื”ื ื—ื™ื•ืช ื›ืืŸ.

ื“ื•ืงืจืคื™ืœ

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

ืืชื” ื™ื›ื•ืœ ืœื”ืขื‘ื™ืจ ืืจื’ื•ืžื ื˜ื™ื ื“ืจืš docker-compose ื›ืš:

ื”ื“ื•ืงืจ-ื”ืœื—ื ื”

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

ื .ื‘ ื›ื“ื™ ืœืฉืœื•ื˜ ื‘ื›ืœ ื”ืžื•ืจื›ื‘ื•ืช ืฉืœ Docker, ื–ื” ืœื ืžืกืคื™ืง ืœืงืจื•ื ืืช ื”ืชื™ืขื•ื“ ืื• ื”ืžืืžืจื™ื. ืืชื” ืฆืจื™ืš ืœื”ืชืืžืŸ ื”ืจื‘ื”, ืืชื” ืฆืจื™ืš ืœื”ืจื’ื™ืฉ ืืช Docker.

ืžืงื•ืจ: www.habr.com

ื”ื•ืกืคืช ืชื’ื•ื‘ื”