, Π½Π°Ρ ΡΠ΅Ρ Π½ΠΈΡΠ΅ΡΠΊΠΈ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡ, Π°ΠΊΡΠΈΠ²Π½ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΠΈ ΠΏΠΎΠΏΡΠ»ΡΡΠΈΠ·ΠΈΡΠ° Docker. Π Π½ΠΎΠ²Π°ΡΠ° ΡΡΠ°ΡΠΈΡ ΡΠΎΠΉ ΡΠ°Π·ΠΊΠ°Π·Π²Π° ΠΊΠ°ΠΊ Π΄Π° ΡΡΠ·Π΄Π°Π΄Π΅ΡΠ΅ ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΠΈ Π² Docker. ΠΡΠ°Π²ΠΈΠ»Π½Π°ΡΠ° ΡΠ°Π±ΠΎΡΠ° Ρ ΡΡΡ , Π·Π°ΡΠΎ Π½Π΅ Π±ΠΈΠ²Π° Π΄Π° ΡΠ΅ ΠΎΡΡΠ°Π²ΡΡ ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΠΈ Ρ ΠΏΡΠ°Π²Π° root ΠΈ ΠΊΠ°ΠΊ Π΄Π° ΡΠ΅ΡΠΈΠΌ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° Ρ Π½Π΅ΡΡΠΎΡΠ²Π΅ΡΡΡΠ²ΠΈΠ΅ΡΠΎ Π½Π° ΠΈΠ½Π΄ΠΈΠΊΠ°ΡΠΎΡΠΈΡΠ΅ Π² Dockerfile.
ΠΡΠΈΡΠΊΠΈ ΠΏΡΠΎΡΠ΅ΡΠΈ Π² ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ° ΡΠ΅ ΡΠ°Π±ΠΎΡΡΡ ΠΎΡ ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π» root, Π°ΠΊΠΎ Π½Π΅ ΡΠ΅ ΡΠΊΠ°ΠΆΠ΅ ΠΏΠΎ ΡΠΏΠ΅ΡΠΈΠ°Π»Π΅Π½ Π½Π°ΡΠΈΠ½. Π’ΠΎΠ²Π° ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π° ΠΌΠ½ΠΎΠ³ΠΎ ΡΠ΄ΠΎΠ±Π½ΠΎ, Π·Π°ΡΠΎΡΠΎ ΡΠΎΠ·ΠΈ ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π» Π½ΡΠΌΠ° ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ. ΠΠΌΠ΅Π½Π½ΠΎ ΠΏΠΎΡΠ°Π΄ΠΈ ΡΠΎΠ²Π°, ΡΠ°Π±ΠΎΡΠ°ΡΠ° Ρ root Π½Π΅ Π΅ ΠΏΡΠ°Π²ΠΈΠ»Π½Π° ΠΎΡ Π³Π»Π΅Π΄Π½Π° ΡΠΎΡΠΊΠ° Π½Π° ΡΠΈΠ³ΡΡΠ½ΠΎΡΡΡΠ°. ΠΠΊΠΎ Π½Π° Π»ΠΎΠΊΠ°Π»Π½ΠΈΡ ΠΊΠΎΠΌΠΏΡΡΡΡ Π½ΠΈΠΊΠΎΠΉ Π½Π΅ ΡΠ°Π±ΠΎΡΠΈ Ρ root ΠΏΡΠ°Π²Π° Π² ΡΡΠ·Π½Π°ΡΠ΅Π»Π΅Π½ ΡΠΌ, ΠΌΠ½ΠΎΠ³ΠΎ Ρ ΠΎΡΠ° ΡΡΠ°ΡΡΠΈΡΠ°Ρ ΠΏΡΠΎΡΠ΅ΡΠΈ ΠΏΠΎΠ΄ root Π² ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΈ.
ΠΠΈΠ½Π°Π³ΠΈ ΠΈΠΌΠ° Π±ΡΠ³ΠΎΠ²Π΅, ΠΊΠΎΠΈΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π°Ρ Π½Π° Π·Π»ΠΎΠ½Π°ΠΌΠ΅ΡΠ΅Π½ ΡΠΎΡΡΡΠ΅Ρ Π΄Π° ΠΈΠ·Π±ΡΠ³Π° ΠΎΡ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ° ΠΈ Π΄Π° Π΄ΠΎΡΡΠΈΠ³Π½Π΅ Ρ ΠΎΡΡ ΠΊΠΎΠΌΠΏΡΡΡΡΠ°. ΠΡΠΈΠ΅ΠΌΠ°ΠΉΠΊΠΈ Π½Π°ΠΉ-Π»ΠΎΡΠΎΡΠΎ, ΡΡΡΠ±Π²Π° Π΄Π° ΠΎΡΠΈΠ³ΡΡΠΈΠΌ ΡΡΠ°ΡΡΠΈΡΠ°Π½Π΅ΡΠΎ Π½Π° ΠΏΡΠΎΡΠ΅ΡΠΈ Π²ΡΡΡΠ΅ Π² ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ° ΠΎΡ ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π», ΠΊΠΎΠΉΡΠΎ Π½ΡΠΌΠ° ΠΏΡΠ°Π²Π° Π½Π° Ρ ΠΎΡΡ ΠΌΠ°ΡΠΈΠ½Π°ΡΠ°.
Π‘ΡΠ·Π΄Π°Π²Π°Π½Π΅ Π½Π° ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»
Π‘ΡΠ·Π΄Π°Π²Π°Π½Π΅ΡΠΎ Π½Π° ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π» Π² ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ° Π½Π΅ ΡΠ΅ ΡΠ°Π·Π»ΠΈΡΠ°Π²Π° ΠΎΡ ΡΡΠ·Π΄Π°Π²Π°Π½Π΅ΡΠΎ ΠΌΡ Π² Π»ΠΈΠ½ΡΠΊΡΠΎΠ²ΠΈΡΠ΅ Π΄ΠΈΡΡΡΠΈΠ±ΡΡΠΈΠΈ. ΠΡΠΏΡΠ΅ΠΊΠΈ ΡΠΎΠ²Π°, Π·Π° ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ Π±Π°Π·ΠΎΠ²ΠΈ ΠΎΠ±ΡΠ°Π·ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄ΠΈΡΠ΅ ΠΌΠΎΠ³Π°Ρ Π΄Π° ΡΠ΅ ΡΠ°Π·Π»ΠΈΡΠ°Π²Π°Ρ.
ΠΠ° Π΄ΠΈΡΡΡΠΈΠ±ΡΡΠΈΠΈ, Π±Π°Π·ΠΈΡΠ°Π½ΠΈ Π½Π° debian, Π² Dockerfile Π΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π΄Π° ΡΠ΅ Π΄ΠΎΠ±Π°Π²ΠΈ:
RUN groupadd --gid 2000 node
&& useradd --uid 2000 --gid node --shell /bin/bash --create-home nodeΠΠ° alpine:
RUN addgroup -g 2000 node
&& adduser -u 2000 -G node -s /bin/sh -D node
Π‘ΡΠ°ΡΡΠΈΡΠ°Π½Π΅ Π½Π° ΠΏΡΠΎΡΠ΅ΡΠΈ ΠΎΡ ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»
ΠΠ° Π΄Π° ΡΡΠ°ΡΡΠΈΡΠ°ΡΠ΅ Π²ΡΠΈΡΠΊΠΈ ΠΏΠΎΡΠ»Π΅Π΄Π²Π°ΡΠΈ ΠΏΡΠΎΡΠ΅ΡΠΈ ΠΎΡ ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π» Ρ UID 2000, ΠΈΠ·ΠΏΡΠ»Π½Π΅ΡΠ΅:
USER 2000ΠΠ° Π΄Π° ΡΡΠ°ΡΡΠΈΡΠ°ΡΠ΅ Π²ΡΠΈΡΠΊΠΈ ΠΏΠΎΡΠ»Π΅Π΄Π²Π°ΡΠΈ ΠΏΡΠΎΡΠ΅ΡΠΈ ΠΎΡ ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π» node, ΠΈΠ·ΠΏΡΠ»Π½Π΅ΡΠ΅:
USER nodeΠΠΎΠ²Π΅ΡΠ΅ Π² .
ΠΠΎΠ½ΡΠΈΡΠ°Π½Π΅ Π½Π° ΠΎΠ±Π΅ΠΌΠΈ
ΠΡΠΈ ΠΌΠΎΠ½ΡΠΈΡΠ°Π½Π΅ Π½Π° ΠΎΠ±Π΅ΠΌΠΈ Π² ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ°, ΠΎΡΠΈΠ³ΡΡΠ΅ΡΠ΅ Π½Π° ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»Ρ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ Π΄Π° ΡΠ΅ΡΠ΅ ΠΈ (ΠΈΠ»ΠΈ) ΠΏΠΈΡΠ΅ ΡΠ°ΠΉΠ»ΠΎΠ²Π΅. ΠΠ° ΡΠΎΠ²Π° UID (GID) Π½Π° ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»Ρ Π² ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ° ΠΈ ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»Ρ ΠΈΠ·Π²ΡΠ½ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ°, ΠΊΠΎΠΉΡΠΎ ΠΈΠΌΠ° ΡΡΠΎΡΠ²Π΅ΡΠ½ΠΈΡΠ΅ ΠΏΡΠ°Π²Π° Π·Π° Π΄ΠΎΡΡΡΠΏ Π΄ΠΎ ΡΠ°ΠΉΠ»Π°, ΡΡΡΠ±Π²Π° Π΄Π° ΡΡΠ²ΠΏΠ°Π΄Π°Ρ. ΠΠΌΠ΅Π½Π°ΡΠ° Π½Π° ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΠΈΡΠ΅ Π½Π΅ ΡΠ° ΠΎΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅.
Π§Π΅ΡΡΠΎ Π½Π° Π»ΠΈΠ½ΡΠΊΡΠΎΠ² ΠΊΠΎΠΌΠΏΡΡΡΡ ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΡΡ ΠΈΠΌΠ° UID ΠΈ GID ΡΠ°Π²Π½ΠΈ Π½Π° 1000. Π’Π΅Π·ΠΈ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΠΈ ΡΠ΅ ΠΏΡΠΈΡΠ²ΠΎΡΠ²Π°Ρ Π½Π° ΠΏΡΡΠ²ΠΈΡ ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π» Π½Π° ΠΊΠΎΠΌΠΏΡΡΡΡΠ°.
ΠΠ° ΡΠ°Π·Π±Π΅ΡΠ΅ΡΠ΅ ΡΠ²ΠΎΠΈΡΠ΅ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΠΈ Π΅ ΠΏΡΠΎΡΡΠΎ:
idΠ©Π΅ ΠΏΠΎΠ»ΡΡΠΈΡΠ΅ ΠΈΠ·ΡΠ΅ΡΠΏΠ°ΡΠ΅Π»Π½Π° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ Π·Π° Π²Π°ΡΠΈΡ ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π».
ΠΠ°ΠΌΠ΅Π½Π΅ΡΠ΅ 2000 ΠΎΡ ΠΏΡΠΈΠΌΠ΅ΡΠΈΡΠ΅ ΡΡΡ ΡΠ²ΠΎΡ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ ΠΈ Π²ΡΠΈΡΠΊΠΎ ΡΠ΅ Π±ΡΠ΄Π΅ Π½Π°ΡΠ΅Π΄.
ΠΡΠΈΡΠ²ΠΎΡΠ²Π°Π½Π΅ Π½Π° ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»Ρ UID ΠΈ GID
ΠΠΊΠΎ ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΡΡ Π΅ ΡΡΠ·Π΄Π°Π΄Π΅Π½ ΠΏΠΎ-ΡΠ°Π½ΠΎ, Π½ΠΎ Π΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π΄Π° ΡΠ΅ ΠΏΡΠΎΠΌΠ΅Π½ΡΡ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΠΈΡΠ΅, ΡΠΎΠ²Π° ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΡΠ°Π½Π΅ ΡΠ°ΠΊΠ°:
RUN usermod -u 1000 node
&& groupmod -g 1000 node
ΠΠΊΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΡΠ΅ Π±Π°Π·ΠΎΠ² ΠΎΠ±ΡΠ°Π· alpine, ΡΡΡΠ±Π²Π° Π΄Π° ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ°ΡΠ΅ ΠΏΠ°ΠΊΠ΅ΡΠ° shadow:
RUN apk add βno-cache shadowΠΠΎΠ΄Π°Π²Π°ΠΉΡΠ΅ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΠ° Π½Π° ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»Ρ Π² ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ° ΠΏΡΠΈ ΠΈΠ·Π³ΡΠ°ΠΆΠ΄Π°Π½Π΅ Π½Π° ΠΎΠ±ΡΠ°Π·Π°
ΠΠΊΠΎ Π²Π°ΡΠΈΡΡ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ ΡΡΠ²ΠΏΠ°Π΄Π° Ρ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΠΈΡΠ΅ Π½Π° Π²ΡΠΈΡΠΊΠΈ, ΠΊΠΎΠΈΡΠΎ ΡΠ°Π±ΠΎΡΡΡ ΠΏΠΎ ΠΏΡΠΎΠ΅ΠΊΡΠ°, Π΅ Π΄ΠΎΡΡΠ°ΡΡΡΠ½ΠΎ Π΄Π° ΠΏΠΎΡΠΎΡΠΈΡΠ΅ ΡΠΎΠ·ΠΈ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ Π² Dockerfile. Π§Π΅ΡΡΠΎ ΠΎΠ±Π°ΡΠ΅ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΠΈΡΠ΅ Π½Π° ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΠΈΡΠ΅ Π½Π΅ ΡΡΠ²ΠΏΠ°Π΄Π°Ρ.
ΠΠ°ΠΊ Π΄Π° ΠΏΠΎΡΡΠΈΠ³Π½Π΅ΡΠ΅ ΠΆΠ΅Π»Π°Π½ΠΎΡΠΎ Π½Π΅ Π΅ Π²Π΅Π΄Π½Π°Π³Π° ΡΡΠ½ΠΎ. ΠΠ° ΠΌΠ΅Π½ ΡΠΎΠ²Π° Π±Π΅ΡΠ΅ Π½Π°ΠΉ-ΡΡΡΠ΄Π½ΠΎΡΠΎ Π² ΠΏΡΠΎΡΠ΅ΡΠ° Π½Π° ΡΡΠ²ΠΎΡΠ²Π°Π½Π΅ Π½Π° docker. ΠΠ½ΠΎΠ³ΠΎ ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΠΈ Π½Π° docker Π½Π΅ ΠΎΡΡΠ·Π½Π°Π²Π°Ρ, ΡΠ΅ ΠΈΠΌΠ° ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ Π΅ΡΠ°ΠΏΠΈ Π² ΠΆΠΈΠ²ΠΎΡΠ° Π½Π° ΠΎΠ±ΡΠ°Π·Π°. ΠΡΡΠ²ΠΎ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ ΡΠ΅ ΠΈΠ·Π³ΡΠ°ΠΆΠ΄Π°, Π·Π° ΠΊΠΎΠ΅ΡΠΎ ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Dockerfile. ΠΡΠΈ ΡΡΠ°ΡΡΠΈΡΠ°Π½Π΅ Π½Π° ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ ΠΎΡ ΠΎΠ±ΡΠ°Π·Π° Dockerfile Π²Π΅ΡΠ΅ Π½Π΅ ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°.
Π‘ΡΠ·Π΄Π°Π²Π°Π½Π΅ΡΠΎ Π½Π° ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΠΈ ΡΡΡΠ±Π²Π° Π΄Π° ΡΠ΅ ΠΈΠ·Π²ΡΡΡΠΈ ΠΏΡΠΈ ΠΈΠ·Π³ΡΠ°ΠΆΠ΄Π°Π½Π΅ Π½Π° ΠΎΠ±ΡΠ°Π·Π°. Π’ΠΎΠ²Π° ΡΡΡΠΎ Π²Π°ΠΆΠΈ ΠΈ Π·Π° ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ½Π΅ΡΠΎ Π½Π° ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»Ρ, ΠΏΠΎΠ΄ ΠΊΠΎΠ³ΠΎΡΠΎ ΡΠ΅ ΡΡΠ°ΡΡΠΈΡΠ°Ρ ΠΏΡΠΎΡΠ΅ΡΠΈ. ΠΠ½Π°ΡΠΈ, ΡΠ΅ ΠΏΠΎ Π½ΡΠΊΠ°ΠΊΡΠ² Π½Π°ΡΠΈΠ½ ΡΡΡΠ±Π²Π° Π΄Π° ΠΏΡΠ΅Π΄Π°Π΄Π΅ΠΌ Π² ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ° UID (GID).
ΠΠ° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° Π²ΡΠ½ΡΠ½ΠΈ ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ Π² Dockerfile ΡΠ»ΡΠΆΠ°Ρ Π΄ΠΈΡΠ΅ΠΊΡΠΈΠ²ΠΈ ΠΈΒ . ΠΠΎΠ΄ΡΠΎΠ±Π½ΠΎ ΡΡΠ°Π²Π½Π΅Π½ΠΈΠ΅ Π½Π° Π΄ΠΈΡΠ΅ΠΊΡΠΈΠ²ΠΈΡΠ΅ .
Dockerfile
ARG UID=1000
ARG GID=1000
ENV UID=${UID}
ENV GID=${GID}
RUN usermod -u $UID node
&& groupmod -g $GID node
ΠΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΠΏΡΠ΅Π΄Π°Π΄Π΅ΡΠ΅ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΈ ΠΏΡΠ΅Π· docker-compose ΡΠ°ΠΊΠ°:
docker-compose
build:
context: ./src/backend
args:
UID: 1000
GID: 1000
P.S. ΠΠ° Π΄Π° ΠΎΠ²Π»Π°Π΄Π΅Π΅ΡΠ΅ Π²ΡΠΈΡΠΊΠΈ ΡΡΠ½ΠΊΠΎΡΡΠΈ Π½Π° docker, Π½Π΅ Π΅ Π΄ΠΎΡΡΠ°ΡΡΡΠ½ΠΎ Π΄Π° ΡΠ΅ΡΠ΅ΡΠ΅ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ ΠΈΠ»ΠΈ ΡΡΠ°ΡΠΈΠΈ. ΠΠ΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π΅ ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΡΠ°ΠΊΡΠΈΠΊΠ°, Π½ΡΠΆΠ½ΠΎ Π΅ Π΄Π° ΡΡΠ΅ΡΠΈΡΠ΅ docker.
ΠΠ·ΡΠΎΡΠ½ΠΈΠΊ: habr.com
