Корбар дар Docker

Андрей Копылов, CTO мо, Docker-ро дӯст медорад, фаъолона истифода мебарад ва пешбарӣ мекунад. Дар мақолаи нав, ӯ мефаҳмонад, ки чӣ гуна корбаронро дар Docker эҷод кардан мумкин аст. Кори дуруст бо онҳо, чаро корбарон набояд бо ҳуқуқи решавӣ боқӣ монанд ва чӣ гуна ҳалли мушкилоти нишондиҳандаҳои номувофиқ дар Dockerfile.

Ҳама равандҳо дар контейнер ҳамчун корбари реша иҷро мешаванд, агар шумо онро бо роҳи махсус муайян накунед. Ин хеле қулай ба назар мерасад, зеро ин корбар ҳеҷ гуна маҳдудият надорад. Ин аст, ки чаро ҳамчун реша кор кардан аз нуқтаи назари амният нодуруст аст. Агар касе аз ақли солим дар компютери маҳаллӣ бо ҳуқуқи реша кор кунад, пас бисёриҳо равандҳоро зери реша дар контейнерҳо иҷро мекунанд.

Ҳамеша хатогиҳо мавҷуданд, ки ба нармафзори зараровар аз контейнер фирор карда, ба компютери асосӣ ворид мешаванд. Бо назардошти бадтарин, мо бояд боварӣ ҳосил кунем, ки равандҳои дохили контейнер аз ҷониби корбаре иҷро карда мешаванд, ки дар мошини ҳост ягон ҳуқуқ надоранд.

Эҷоди корбар

Эҷоди корбар дар контейнер аз эҷоди он дар тақсимоти Linux фарқ надорад. Аммо, фармонҳо метавонанд барои тасвирҳои гуногуни асосӣ фарқ кунанд.

Барои тақсимоти ба 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)-и корбар дар контейнер ва корбари берун аз контейнер, ки дорои иҷозатҳои мувофиқ барои дастрасӣ ба файл аст, бояд мувофиқат кунад. Дар ин ҳолат, номи корбарон аҳамият надорад.

Аксар вақт дар компютери Linux, UID ва GID-и корбар ба 1000 баробар аст. Ин идентификаторҳо ба корбари аввалини компютер таъин карда мешаванд.

Пайдо кардани идентификаторҳои шумо осон аст:

id

Шумо дар бораи корбари худ маълумоти ҳамаҷониба мегиред.
2000-ро аз мисолҳо бо идентификатори худ иваз кунед ва ҳама чиз хуб мешавад.

Таъин кардани UID ва GID ба корбар

Агар корбар қаблан сохта шуда бошад, аммо шумо бояд идентификаторҳоро тағир диҳед, шумо метавонед ин корро кунед:

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

Агар шумо тасвири асосиро истифода баред, шумо бояд бастаи сояро насб кунед:

RUN apk add —no-cache shadow

Гузаронидани ID корбар дар дохили контейнер ҳангоми сохтани тасвир

Агар ID-и шумо ва ID-и ҳамаи одамоне, ки дар лоиҳа кор мекунанд, мувофиқат кунанд, танҳо ин ID-ро дар Dockerfile муайян кунед. Аммо, аксар вақт ID-ҳои корбар мувофиқат намекунанд.

Чӣ тавр ба он чизе, ки шумо мехоҳед, фавран маълум нест. Барои ман ин мушкилтарин чизе дар раванди азхудкунии 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

PS Барои азхуд кардани тамоми нозукиҳои Docker, хондани ҳуҷҷатҳо ё мақолаҳо кофӣ нест. Ба шумо лозим аст, ки бисёр машқ кунед, шумо бояд Докерро ҳис кунед.

Манбаъ: will.com

Илова Эзоҳ