Docker හි පරිශීලක

Andrey Kopylov, අපගේ CTO, ඩොකර්ට ආදරය කරයි, ක්‍රියාකාරීව භාවිතා කරයි සහ ප්‍රවර්ධනය කරයි. නව ලිපියකින් ඔහු Docker හි පරිශීලකයන් නිර්මාණය කරන ආකාරය පැහැදිලි කරයි. ඔවුන් සමඟ නිවැරදි වැඩ කිරීම, පරිශීලකයින්ට මූල අයිතිවාසිකම් ඉතිරි නොකළ යුත්තේ ඇයි සහ Dockerfile හි නොගැලපෙන දර්ශකයන්ගේ ගැටළුව විසඳන්නේ කෙසේද.

ඔබ එය විශේෂ ආකාරයකින් සඳහන් කරන්නේ නම් මිස, බහාලුම්වල ඇති සියලුම ක්‍රියාවලි මූල පරිශීලකයා ලෙස ක්‍රියාත්මක වේ. මෙම පරිශීලකයාට සීමාවන් නොමැති නිසා මෙය ඉතා පහසු බව පෙනේ. 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) සහ ගොනුවට ප්‍රවේශ වීමට සුදුසු අවසර ඇති බහාලුමෙන් පිටත පරිශීලකයා ගැළපිය යුතුය. මෙම අවස්ථාවේදී, පරිශීලක නාම වැදගත් නොවේ.

බොහෝ විට Linux පරිගණකයක, පරිශීලකයෙකුගේ 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 ප්‍රගුණ කිරීමේ ක්‍රියාවලියේ වඩාත්ම දුෂ්කර දෙය මෙය විය. බොහෝ ඩොකර් භාවිතා කරන්නන් රූපයක ජීවිතයේ විවිධ අවස්ථා ඇති බව නොදනී. පළමුව, රූපය Dockerfile භාවිතයෙන් එකලස් කර ඇත. රූපයකින් බහාලුමක් ධාවනය කරන විට, Dockerfile තවදුරටත් භාවිතා නොවේ.

රූපය ගොඩනඟන විට පරිශීලක නිර්මාණය සිදුවිය යුතුය. ක්‍රියාවලි දියත් කරන්නේ කවුරුන් යටතේද යන්න තීරණය කිරීම සඳහාද මෙය අදාළ වේ. මෙයින් අදහස් කරන්නේ අපි කෙසේ හෝ UID (GID) කන්ටේනරය තුළට ලබා දිය යුතු බවයි.

Dockerfile හි බාහිර විචල්‍යයන් භාවිතා කිරීමට විධාන භාවිතා කරයි ඊඑන්වී и එගොඩ. විධානවල සවිස්තරාත්මක සංසන්දනය මෙහි.

ඩොකර්ෆයිල්

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 හි සියලුම සංකීර්ණතා ප්‍රගුණ කිරීමට, ලේඛන හෝ ලිපි කියවීම ප්‍රමාණවත් නොවේ. ගොඩක් ප් රැක්ටිස් කරන්න ඕන, ඩොකර් ගැන ෆීල් එකක් ගන්න ඕන.

මූලාශ්රය: www.habr.com

අදහස් එක් කරන්න