డాకర్‌లో వినియోగదారు

ఆండ్రీ కోపిలోవ్, మా CTO, డాకర్‌ను ప్రేమిస్తుంది, చురుకుగా ఉపయోగిస్తుంది మరియు ప్రోత్సహిస్తుంది. కొత్త కథనంలో, అతను డాకర్‌లో వినియోగదారులను ఎలా సృష్టించాలో వివరించాడు. వారితో సరైన పని చేయండి, వినియోగదారులు రూట్ హక్కులతో ఎందుకు విడిచిపెట్టకూడదు మరియు Dockerfileలో సరిపోలని సూచికల సమస్యను ఎలా పరిష్కరించాలి.

కంటైనర్‌లోని అన్ని ప్రక్రియలు రూట్ యూజర్‌గా రన్ అవుతాయి, మీరు దానిని ప్రత్యేక పద్ధతిలో పేర్కొనకపోతే. ఇది చాలా సౌకర్యవంతంగా కనిపిస్తుంది, ఎందుకంటే ఈ వినియోగదారుకు ఎటువంటి పరిమితులు లేవు. అందుకే రూట్‌గా పని చేయడం భద్రతా కోణం నుండి తప్పు. రూట్ హక్కులతో స్థానిక కంప్యూటర్‌లో వారి సరైన మనస్సులో ఎవరూ పని చేయకపోతే, చాలా మంది కంటైనర్‌లలో రూట్ కింద ప్రక్రియలను అమలు చేస్తారు.

మాల్వేర్ కంటైనర్ నుండి తప్పించుకోవడానికి మరియు హోస్ట్ కంప్యూటర్‌లోకి ప్రవేశించడానికి అనుమతించే బగ్‌లు ఎల్లప్పుడూ ఉంటాయి. చెత్తగా భావించి, హోస్ట్ మెషీన్‌పై ఎలాంటి హక్కులు లేని వినియోగదారు ద్వారా కంటైనర్‌లోని ప్రక్రియలు అమలు చేయబడతాయని మేము నిర్ధారించుకోవాలి.

వినియోగదారుని సృష్టిస్తోంది

వినియోగదారుని కంటైనర్‌లో సృష్టించడం అనేది Linux పంపిణీలలో సృష్టించడం నుండి భిన్నంగా ఉండదు. అయితే, వేర్వేరు బేస్ ఇమేజ్‌ల కోసం ఆదేశాలు మారవచ్చు.

డెబియన్-ఆధారిత పంపిణీల కోసం, మీరు క్రింది వాటిని డాకర్‌ఫైల్‌కు జోడించాలి:

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ని పేర్కొనండి. అయితే, తరచుగా వినియోగదారు IDలు సరిపోలడం లేదు.

మీరు కోరుకున్నది ఎలా సాధించాలో వెంటనే స్పష్టంగా తెలియదు. నాకు, డాకర్‌ను మాస్టరింగ్ చేసే ప్రక్రియలో ఇది చాలా కష్టమైన విషయం. చాలా మంది డాకర్ యూజర్లు ఇమేజ్ యొక్క జీవితంలో వివిధ దశలు ఉన్నాయని గ్రహించలేరు. మొదట, చిత్రం డాకర్‌ఫైల్‌ని ఉపయోగించి సమీకరించబడుతుంది. చిత్రం నుండి కంటైనర్‌ను అమలు చేస్తున్నప్పుడు, డాకర్‌ఫైల్ ఇకపై ఉపయోగించబడదు.

చిత్రం నిర్మించబడినప్పుడు వినియోగదారు సృష్టి తప్పనిసరిగా జరగాలి. ప్రాసెస్‌లు ప్రారంభించబడిన వినియోగదారుని నిర్ణయించడానికి కూడా ఇది వర్తిస్తుంది. అంటే మనం ఏదో ఒకవిధంగా కంటైనర్ లోపల UID (GID)ని పాస్ చేయాలి.

డాకర్‌ఫైల్‌లో బాహ్య వేరియబుల్‌లను ఉపయోగించడానికి డైరెక్టివ్‌లు ఉపయోగించబడతాయి ENV и ARG. ఆదేశాల యొక్క వివరణాత్మక పోలిక ఇక్కడ.

Dockerfile

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

ఒక వ్యాఖ్యను జోడించండి