Itilizatè nan Docker

Andrei Kopylov, CTO nou an, renmen, aktivman itilize ak ankouraje Docker. Nan yon nouvo atik, li eksplike kijan pou kreye itilizatè yo nan Docker. Travay kòrèk ak yo, poukisa itilizatè yo pa ta dwe kite ak dwa rasin ak ki jan yo rezoud pwoblèm nan nan endikatè ki pa matche nan Dockerfile la.

Tout pwosesis nan veso a pral kouri kòm itilizatè rasin, sof si ou presize li nan yon fason espesyal. Sa a sanble trè pratik, paske itilizatè sa a pa gen okenn restriksyon. Se poutèt sa travay kòm rasin pa bon nan yon pwen de vi sekirite. Si pa gen moun ki nan bon lide travay sou òdinatè lokal la ak dwa rasin, Lè sa a, anpil kouri pwosesis anba rasin nan resipyan.

Gen toujou pinèz ki pral pèmèt malveyan yo chape soti nan veso a epi jwenn sou òdinatè lame a. Si nou sipoze pi move a, nou dwe asire ke pwosesis andedan veso a ap kouri pa yon itilizatè ki pa gen okenn dwa sou machin nan lame.

Kreye yon itilizatè

Kreye yon itilizatè nan yon veso pa diferan de kreye li nan distribisyon Linux. Sepandan, kòmandman yo ka varye pou imaj baz diferan.

Pou distribisyon ki baze sou Debian, ou bezwen ajoute sa ki annapre yo nan Dockerfile la:

RUN groupadd --gid 2000 node 
  && useradd --uid 2000 --gid node --shell /bin/bash --create-home node

Pou alpine:

RUN addgroup -g 2000 node 
    && adduser -u 2000 -G node -s /bin/sh -D node

Kouri pwosesis soti nan itilizatè a

Pou kouri tout pwosesis ki vin apre yo kòm yon itilizatè ki gen UID 2000, kouri:

USER 2000

Pou kouri tout pwosesis ki vin apre yo kòm itilizatè a ne, kouri:

USER node

Li plis nan dokiman.

Monte volim

Lè w ap monte volim andedan yon veso, bay itilizatè a kapasite pou li ak/oswa ekri fichye yo. Pou fè sa, UID (GID) itilizatè a nan veso a ak itilizatè a deyò veso a ki gen otorizasyon apwopriye pou jwenn aksè nan dosye a dwe matche. Nan ka sa a, non itilizatè pa gen pwoblèm.

Souvan sou yon òdinatè Linux, UID ak GID itilizatè a egal a 1000. Idantifyan sa yo bay premye itilizatè òdinatè a.

Chèche konnen idantifyan ou yo fasil:

id

Ou pral resevwa enfòmasyon konplè sou itilizatè ou an.
Ranplase 2000 nan egzanp yo ak idantifyan ou ak tout bagay pral anfòm.

Bay yon UID ak GID pou yon itilizatè

Si itilizatè a te kreye deja, men ou bezwen chanje idantifyan yo, ou ka fè li tankou sa a:

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

Si w ap itilize imaj baz alpine a, ou bezwen enstale pake lonbraj la:

RUN apk add —no-cache shadow

Pase ID itilizatè a andedan veso a lè w ap bati imaj la

Si idantite w ak idantite tout moun k ap travay sou pwojè a matche ak, jis presize idantite sa a nan Dockerfile la. Sepandan, souvan ID itilizatè yo pa matche.

Ki jan yo reyalize sa ou vle pa imedyatman klè. Pou mwen, sa a te bagay ki pi difisil nan pwosesis la nan metrize Docker. Anpil itilizatè docker pa reyalize ke gen diferan etap nan lavi yon imaj. Premyèman, imaj la reyini lè l sèvi avèk yon Dockerfile. Lè w ap kouri yon veso ki soti nan yon imaj, Dockerfile a pa itilize ankò.

Kreyasyon itilizatè dwe fèt lè imaj la bati. Menm bagay la tou aplike nan detèmine itilizatè a anba ki pwosesis yo te lanse. Sa vle di ke nou dwe yon jan kanmenm pase UID a (GID) andedan veso a.

Direktiv yo itilize pou itilize varyab ekstèn nan Dockerfile la ENV и ARG. Konparezon detaye nan direktiv yo isit la.

dockerfile

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

Ou ka pase agiman atravè docker-compose tankou sa a:

docker-konpoze

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

PS Pou metrize tout sibtilite Docker, li pa ase pou li dokiman an oswa atik yo. Ou bezwen pratike anpil, ou bezwen jwenn yon santiman pou Docker.

Sous: www.habr.com

Add nouvo kòmantè