ํน๋ณํ ๋ฐฉ๋ฒ์ผ๋ก ์ง์ ํ์ง ์๋ ํ ์ปจํ ์ด๋์ ๋ชจ๋ ํ๋ก์ธ์ค๋ ๋ฃจํธ ์ฌ์ฉ์๋ก ์คํ๋ฉ๋๋ค. ์ด ์ฌ์ฉ์์๊ฒ๋ ์ ํ์ด ์๊ธฐ ๋๋ฌธ์ ๋งค์ฐ ํธ๋ฆฌํด ๋ณด์ ๋๋ค. ์ด๊ฒ์ด ๋ณด์ ๊ด์ ์์ ๋ฃจํธ๋ก ์์ ํ๋ ๊ฒ์ด ์๋ชป๋ ์ด์ ์ ๋๋ค. ์ฌ๋ฐ๋ฅธ ๋ง์์ ๊ฐ์ง ์ฌ๋์ด ๋ฃจํธ ๊ถํ์ผ๋ก ๋ก์ปฌ ์ปดํจํฐ์์ ์์ ํ์ง ์์ผ๋ฉด ๋ง์ ์ฌ๋๋ค์ด ์ปจํ ์ด๋์ ๋ฃจํธ์์ ํ๋ก์ธ์ค๋ฅผ ์คํํฉ๋๋ค.
๋งฌ์จ์ด๊ฐ ์ปจํ ์ด๋์์ ๋น ์ ธ๋์ ํธ์คํธ ์ปดํจํฐ์ ์นจ์ ํ๋๋ก ํ์ฉํ๋ ๋ฒ๊ทธ๋ ํญ์ ์กด์ฌํฉ๋๋ค. ์ต์ ์ ๊ฒฝ์ฐ๋ฅผ ๊ฐ์ ํ๋ฉด ํธ์คํธ ์์คํ ์ ๋ํ ๊ถํ์ด ์๋ ์ฌ์ฉ์๊ฐ ์ปจํ ์ด๋ ๋ด๋ถ ํ๋ก์ธ์ค๋ฅผ ์คํํ๋๋ก ํด์ผ ํฉ๋๋ค.
์ฌ์ฉ์ ์์ฑ
์ปจํ ์ด๋์์ ์ฌ์ฉ์๋ฅผ ์์ฑํ๋ ๊ฒ์ 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
Alpine ๊ธฐ๋ณธ ์ด๋ฏธ์ง๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ์๋์ฐ ํจํค์ง๋ฅผ ์ค์นํด์ผ ํฉ๋๋ค.
RUN apk add โno-cache shadow
์ด๋ฏธ์ง ๋น๋ ์ ์ปจํ ์ด๋ ๋ด๋ถ์ ์ฌ์ฉ์ ID ์ ๋ฌ
๊ทํ์ ID์ ํ๋ก์ ํธ์ ์ฐธ์ฌํ๋ ๋ชจ๋ ์ฌ๋์ ID๊ฐ ์ผ์นํ๋ ๊ฒฝ์ฐ Dockerfile์ ์ด ID๋ฅผ ์ง์ ํ๋ฉด ๋ฉ๋๋ค. ๊ทธ๋ฌ๋ ์ฌ์ฉ์ ID๊ฐ ์ผ์นํ์ง ์๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ต๋๋ค.
์ํ๋ ๊ฒ์ ๋ฌ์ฑํ๋ ๋ฐฉ๋ฒ์ ์ฆ์ ๋ช ํํ์ง ์์ต๋๋ค. ์ ๋ Docker๋ฅผ ๋ง์คํฐํ๋ ๊ณผ์ ์์ ์ด๊ฒ์ด ๊ฐ์ฅ ์ด๋ ค์ ์ต๋๋ค. ๋ง์ 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์ ๋ชจ๋ ๋ณต์ก์ฑ์ ์ตํ๋ ค๋ฉด ๋ฌธ์๋ ๊ธฐ์ฌ๋ฅผ ์ฝ๋ ๊ฒ๋ง์ผ๋ก๋ ์ถฉ๋ถํ์ง ์์ต๋๋ค. ์ฐ์ต์ ๋ง์ด ํด์ผ ํ๊ณ , Docker์ ๋ํ ๋๋๋ ์ตํ์ผ ํฉ๋๋ค.
์ถ์ฒ : habr.com