Moby: ๋ฃจํŠธ๊ฐ€ ์•„๋‹Œ ์‚ฌ์šฉ์ž๋กœ ๋ณผ๋ฅจ์„ ๋งˆ์šดํŠธํ•˜๋Š” ๊ธฐ๋Šฅ ์ถ”๊ฐ€

์— ๋งŒ๋“  2013๋…„ 10์›” 17์ผ  ยท  157์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: moby/moby

์‚ฌ์šฉ ์‚ฌ๋ก€: ์•„ํŒŒ์น˜๊ฐ€ www ์‚ฌ์šฉ์ž๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ํ˜ธ์ŠคํŠธ์—์„œ ์ปจํ…Œ์ด๋„ˆ๋กœ ๋ณผ๋ฅจ์„ ๋งˆ์šดํŠธํ•ฉ๋‹ˆ๋‹ค.
๋ฌธ์ œ๋Š” ํ˜„์žฌ ๋ชจ๋“  ๋งˆ์šดํŠธ๊ฐ€ ์ปจํ…Œ์ด๋„ˆ ๋‚ด๋ถ€์— ๋ฃจํŠธ๋กœ ๋งˆ์šดํŠธ๋œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
์˜ˆ๋ฅผ ๋“ค์–ด ์ด ๋ช…๋ น์€
๋„์ปค ์‹คํ–‰ -v /tmp:/var/www ์šฐ๋ถ„ํˆฌ ํ†ต๊ณ„ -c "%U %G" /var/www
"๋ฃจํŠธ ๋ฃจํŠธ"๋ฅผ ์ธ์‡„ํ•ฉ๋‹ˆ๋‹ค.

์ปจํ…Œ์ด๋„ˆ ๋‚ด๋ถ€์— ์‚ฌ์šฉ์ž www๋กœ ๋งˆ์šดํŠธํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

areapi arekernel arevolumes exexpert kinenhancement

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

์•„๋‹ˆ์˜ค๋ผ๊ณ  ๋งํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ - ์‚ฌ์šฉ์ž๊ฐ€ ๋‹ค์Œ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋„์šฐ๋ฏธ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ถ”๊ฐ€ํ•˜๋„๋ก

#!/bin/sh
chown -R redis:redis /var/lib/redis
exec sudo -u redis /usr/bin/redis-server

(์˜ˆ๋ฅผ ๋“ค์–ด @bfirsh ์—๊ฒŒ ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค)

๊ฝค ๋”์ฐํ•ฉ๋‹ˆ๋‹ค.

์ด๋Š” ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์˜๋„ํ•œ redis ์‚ฌ์šฉ์ž๋กœ ์‹คํ–‰๋˜์ง€ ์•Š๊ณ  ๋ฃจํŠธ๋กœ ์‹œ์ž‘๋˜์–ด์•ผ ํ•จ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ( @aldanor ๊ฐ€ ์–ธ๊ธ‰ํ–ˆ๋“ฏ์ด)

์‚ฌ์šฉ์ž๊ฐ€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์—†์Œ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

docker run -v /home/user/.app_cfg/ -u user application_container application :(

๋ชจ๋“  157 ๋Œ“๊ธ€

๋ณผ๋ฅจ์„ ๋ฐ”์ธ๋“œ ๋งˆ์šดํŠธํ•˜๊ธฐ ์ „์— ํ˜ธ์ŠคํŠธ ์ธก์—์„œ chown ํ•˜๋ฉด ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.
์ด ๊ฒฝ์šฐ ๋‹ค์Œ์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

mkdir /tmp/www
chown 101:101 /tmp/www
docker run -v /tmp/www:/var/www ubuntu stat -c "%U %G" /var/www

( 101:101 ๊ฐ€ ์ปจํ…Œ์ด๋„ˆ์— ์žˆ๋Š” www-data ์‚ฌ์šฉ์ž์˜ UID:GID๋ผ๊ณ  ๊ฐ€์ •ํ•ฉ๋‹ˆ๋‹ค.)

๋˜ ๋‹ค๋ฅธ ๊ฐ€๋Šฅ์„ฑ์€ bind-mount๋ฅผ ์ˆ˜ํ–‰ํ•œ ๋‹ค์Œ ์ปจํ…Œ์ด๋„ˆ ๋‚ด๋ถ€์—์„œ chown ๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

@mingfang chown์ด ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๊นŒ?

์ด์— ๋Œ€ํ•œ ๋ฐ”๋กœ ๊ฐ€๊ธฐ๊ฐ€ ์žˆ์œผ๋ฉด ์œ ์šฉํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋ณผ๋ฅจ์— ๋Œ€ํ•œ ๊ถŒํ•œ์„ ์„ค์ •ํ•˜๋Š” run ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ž‘์„ฑํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์ข…์ข… ์žˆ์Šต๋‹ˆ๋‹ค.

https://github.com/orchardup/docker-redis/blob/07b65befbd69d9118e6c089e8616d48fe76232fd/run

chown ์— ๋Œ€ํ•œ ๊ถŒํ•œ์ด ์—†์œผ๋ฉด ์–ด๋–ป๊ฒŒ ํ•ฉ๋‹ˆ๊นŒ?

chown ๋ณผ๋ฅจ์˜ ๋„์šฐ๋ฏธ ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•ฉ๋‹ˆ๊นŒ? ์ด ์Šคํฌ๋ฆฝํŠธ๋Š” Dockerfile์˜ ENTRYPOINT ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์•„๋‹ˆ์˜ค๋ผ๊ณ  ๋งํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ - ์‚ฌ์šฉ์ž๊ฐ€ ๋‹ค์Œ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋„์šฐ๋ฏธ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ถ”๊ฐ€ํ•˜๋„๋ก

#!/bin/sh
chown -R redis:redis /var/lib/redis
exec sudo -u redis /usr/bin/redis-server

(์˜ˆ๋ฅผ ๋“ค์–ด @bfirsh ์—๊ฒŒ ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค)

๊ฝค ๋”์ฐํ•ฉ๋‹ˆ๋‹ค.

์ด๋Š” ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์˜๋„ํ•œ redis ์‚ฌ์šฉ์ž๋กœ ์‹คํ–‰๋˜์ง€ ์•Š๊ณ  ๋ฃจํŠธ๋กœ ์‹œ์ž‘๋˜์–ด์•ผ ํ•จ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ( @aldanor ๊ฐ€ ์–ธ๊ธ‰ํ–ˆ๋“ฏ์ด)

์‚ฌ์šฉ์ž๊ฐ€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์—†์Œ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

docker run -v /home/user/.app_cfg/ -u user application_container application :(

์ž‘๋™ํ•˜๊ฒŒ ํ•˜๋Š” _ํ•˜๋‚˜์˜_ ๋ฐฉ๋ฒ•์ด ์žˆ์ง€๋งŒ Dockerfile ๋‚ด์—์„œ ๋ฏธ๋ฆฌ ์ค€๋น„ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

RUN mkdir -p /var/lib/redis ; chown -R redis:redis /var/lib/redis
VOLUME ["/var/lib/redis"]
ENTRYPOINT ["usr/bin/redis-server"]
USER redis

(๋‚˜๋Š” ์ด ์˜ˆ์ œ๋ฅผ ํ…Œ์ŠคํŠธํ•˜์ง€ ์•Š์•˜์œผ๋ฉฐ, ํฌ๋กฌ ์ปจํ…Œ์ด๋„ˆ์—์„œ ์ž‘์—…ํ•˜๊ณ  ์žˆ์œผ๋ฉฐ _separate_ X11 ์ปจํ…Œ์ด๋„ˆ์— ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. .... )

๋ฌผ๋ก  ๊ทธ ๋ฐฉ๋ฒ•์€ ๋ฐ”์ธ๋”ฉ์ด ์•„๋‹Œ ์ง์ ‘ ์ƒˆ ๋ณผ๋ฅจ์— ๋Œ€ํ•ด์„œ๋งŒ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.
๋งˆ์šดํŠธ ๋˜๋Š” ๋ณผ๋ฅจ-๋ณผ๋ฅจ์—์„œ. ;)

๋˜ํ•œ volumes-from ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์—ฌ๋Ÿฌ ์ปจํ…Œ์ด๋„ˆ๋Š” ๋™์ผํ•œ ์‚ฌ์šฉ์ž์— ๋Œ€ํ•ด ๋‹ค๋ฅธ uid/gid๋ฅผ ๊ฐ€์ง€๋ฏ€๋กœ ํ•ญ๋ชฉ๋„ ๋ณต์žกํ•ด์ง‘๋‹ˆ๋‹ค.

@SvenDowideit @tianon ๊ทธ ๋ฐฉ๋ฒ•๋„ ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ „์ฒด ์˜ˆ:

FROM ubuntu
RUN groupadd -r redis    -g 433 && \
useradd -u 431 -r -g redis -d /app -s /sbin/nologin -c "Docker image user" redis 
RUN mkdir -p /var/lib/redis
RUN echo "thing" > /var/lib/redis/thing.txt
RUN chown -R redis:redis /var/lib/redis
VOLUME ["/var/lib/redis"]
USER redis
CMD /bin/ls -lah /var/lib/redis

-v ๋ณผ๋ฅจ์ด ์žˆ๊ฑฐ๋‚˜ ์—†๋Š” ๋‘ ๋ฒˆ์˜ ์‹คํ–‰:

bash-3.2$ docker run -v `pwd`:/var/lib/redis voltest 
total 8.0K
drwxr-xr-x  1 root root  102 Aug  7 21:30 .
drwxr-xr-x 28 root root 4.0K Aug  7 21:26 ..
-rw-r--r--  1 root root  312 Aug  7 21:30 Dockerfile
bash-3.2$ docker run  voltest 
total 12K
drwxr-xr-x  2 redis redis 4.0K Aug  7 21:30 .
drwxr-xr-x 28 root  root  4.0K Aug  7 21:26 ..
-rw-r--r--  1 redis redis    6 Aug  7 21:26 thing.txt
bash-3.2$ 

์šฐ๋ฆฌ๋Š” ์ด๊ฒƒ์œผ๋กœ ํ•ด๊ฒฐ๋  ๋ฌธ์ œ์— ๋ถ€๋”ชํžˆ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค(์ œ ์ƒ๊ฐ์—๋Š”). ๊ฐœ๋ฐœ์ž์˜ ํ™ˆ ๋””๋ ‰ํ† ๋ฆฌ์— ๋Œ€ํ•œ NFS ๊ณต์œ ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐœ๋ฐœ์ž๋Š” /home/dev/git/project ๋ฅผ Docker์— ๋งˆ์šดํŠธํ•˜๊ณ  ์‹ถ์ง€๋งŒ ๋ฃจํŠธ ์Šค์ฟผ์‹œ๊ฐ€ ํ™œ์„ฑํ™”๋˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋งˆ์šดํŠธํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ ๋ฃจํŠธ๊ฐ€ /home/dev/git/project ์— ์•ก์„ธ์Šคํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•˜๋ฏ€๋กœ /home/dev/git/project ๋ฅผ ๋งˆ์šดํŠธํ•˜๋Š” ๋„์ปค๋ฅผ ์‹คํ–‰ํ•˜๋ ค๊ณ  ํ•˜๋ฉด lstat permission denied ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

@frankamp ์ด๊ฒƒ์€ ๋„์ปค์˜ ํ˜„์žฌ ๊ธฐ๋ณธ ์„ค์ •์ด ๋„์ปค๊ฐ€ ์ œ์–ดํ•  ์ˆ˜ ์—†๋Š” ํ˜ธ์ŠคํŠธ ํ•ญ๋ชฉ์„ ์ˆ˜์ •ํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

-v pwd`:/var/lib/reds`๊ฐ€ "VOLUME" ์ •์˜๋ฅผ ๋ฎ์–ด์”๋‹ˆ๋‹ค.
๊ทธ๋Ÿฌ๋‚˜ ๋‘ ๋ฒˆ์งธ ์‹คํ–‰์—์„œ๋Š” /var/lib/docker์— ์ƒ์„ฑ๋œ ๋„์ปค ์ œ์–ด ๋ณผ๋ฅจ์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์‹œ์ž‘๋˜๋ฉด ๋„์ปค๋Š” ์ด๋ฏธ์ง€์—์„œ ๋ณผ๋ฅจ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณต์‚ฌํ•œ ๋‹ค์Œ ๋ณผ๋ฅจ์ด ์ง€์ •๋œ ๋””๋ ‰ํ† ๋ฆฌ์˜ uid:gid ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ณผ๋ฅจ์„ chowningํ•ฉ๋‹ˆ๋‹ค.

์—ฌ๊ธฐ์—์„œ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ์ž‘์—…์ด ๋งŽ์ง€ ์•Š์œผ๋ฉฐ ๋ถˆํ–‰ํžˆ๋„ ๋ฐ”์ธ๋“œ ๋งˆ์šดํŠธ๋Š” (๋‚ด๊ฐ€ ๋งํ•  ์ˆ˜ ์žˆ๋Š” ํ•œ) ๋‹ค๋ฅธ uid/gid๋กœ ๋งˆ์šดํŠธํ•˜๋Š” ๊ฒƒ์„ ์ง€์›ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ด์— ๋Œ€ํ•œ ๋‚˜์˜ ํ•ด๊ฒฐ์ฑ…์€ ์œ„์—์„œ SvenDowideit๊ฐ€ ์ˆ˜ํ–‰ํ•œ ์ž‘์—…(์ƒˆ ์‚ฌ์šฉ์ž ์ƒ์„ฑ ๋ฐ dockerfile์—์„œ ์ „๋ฉด chown)์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒƒ์ด์ง€๋งŒ ํ˜ธ์ŠคํŠธ ๋ณผ๋ฅจ์„ ๋งˆ์šดํŠธํ•˜๋Š” ๋Œ€์‹  ๋ฐ์ดํ„ฐ ์ „์šฉ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ๋งˆ์šดํŠธํ•˜๋ ค๋Š” ํ˜ธ์ŠคํŠธ ๋ณผ๋ฅจ์„ ๋ณต์‚ฌํ•ฉ๋‹ˆ๋‹ค. tar cf - . | docker run -i --volumes-from app_data app tar xvf - -C /data ๊ฐ€ ์žˆ๋Š” ์ปจํ…Œ์ด๋„ˆ https://github.com/docker/docker/pull/13171 ์ด ๋ณ‘ํ•ฉ๋˜๋ฉด(๊ทธ๋ฆฌ๊ณ  docker cp ๋Š” ์–‘๋ฐฉํ–ฅ์œผ๋กœ ์ž‘๋™ํ•จ) ์ด๊ฒƒ์€ ์กฐ๊ธˆ ๋” ์‰ฌ์›Œ์ง€์ง€๋งŒ ์•„๋งˆ๋„ -v host_dir:container_dir ์˜ ๋Œ€์•ˆ์ด ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. -vc host_dir:container_dir , (๋ณผ๋ฅจ ๋ณต์‚ฌ์˜ ๊ฒฝ์šฐ vc), ์—ฌ๊ธฐ์„œ host_dir์˜ ๋‚ด์šฉ์€ ๋ฐ์ดํ„ฐ ์ปจํ…Œ์ด๋„ˆ์— ๋ณต์‚ฌ๋ฉ๋‹ˆ๋‹ค. ๋ณต์‚ฌ๋œ ํŒŒ์ผ์ด ์ปจํ…Œ์ด๋„ˆ ์‚ฌ์šฉ์ž์˜ ๊ถŒํ•œ์„ ์ƒ์†๋ฐ›๋Š” ์ด์œ /๋ฐฉ๋ฒ•์„ ์ดํ•ดํ•  ์ˆ˜๋Š” ์—†์ง€๋งŒ, ๋‚ด๊ฐ€ ๋งํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์€ ์ด๊ฒƒ์ด ์ œ๊ฐ€ ์ƒ๊ฐํ•ด๋‚ธ ์œ ์ผํ•œ ํ•ฉ๋ฆฌ์ ์ธ ์†”๋ฃจ์…˜์œผ๋กœ ์ด์‹์„ฑ์„ ํŒŒ๊ดดํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

CL์€ ์–ด๋–ป์Šต๋‹ˆ๊นŒ?

์ˆ˜์ • ์‚ฌํ•ญ์ด๋‚˜ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๊นŒ? OpenShift์—์„œ ๋™์ผํ•œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค. ๋งˆ์šดํŠธ๋œ ํด๋”๋Š” root:root ๊ฐ€ ์†Œ์œ ํ•˜๊ณ  ๋ฏธ๋ฆฌ ์ƒ์„ฑ๋œ ์ด๋ฏธ์ง€๋Š” ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ €๋„ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์„ ์ฐพ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋งˆ์šดํŠธ๋œ ๋ชจ๋“  ๋ณผ๋ฅจ์ด root ์†Œ์œ ์ธ ๊ฒฝ์šฐ root ์ด์™ธ์˜ ๋‹ค๋ฅธ ์‚ฌ์šฉ์ž๋กœ Docker ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

๊ธ€์Ž„, ๋‹น์‹ ์€ s6-overlay ๋ฅผ ์‹œ๋„ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์—๋Š” ์ด๋Ÿฌํ•œ ์ข…๋ฅ˜์˜ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋˜๋„๋ก ํŠน๋ณ„ํžˆ ์„ค๊ณ„๋œ ๊ธฐ๋Šฅ์ด ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

@dreamcat4 : ํฌ์ธํ„ฐ ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ์†Œ์œ ๊ถŒ ๋ฐ ๊ถŒํ•œ ์ˆ˜์ • ์€ ํฅ๋ฏธ๋กœ์šด ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์ฒ˜๋Ÿผ ๋ณด์ด์ง€๋งŒ ์ž‘๋™ํ•˜๋ ค๋ฉด Docker ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๋ฃจํŠธ๋กœ ์‹คํ–‰ํ•ด์•ผ ํ•˜์ง€ ์•Š์„๊นŒ์š”?

@brikis98 ๋„ค ๋งž์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ s6-overlay์—๋Š” ์„œ๋ฒ„/๋ฐ๋ชฌ์„ ์‹œ์ž‘ํ•  ๋•Œ ๊ถŒํ•œ์„ ๋‹ค์‹œ ์‚ญ์ œํ•  ์ˆ˜ ์žˆ๋Š” ๋˜ ๋‹ค๋ฅธ ๊ธฐ๋Šฅ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

@dreamcat4 ์•„, ๊ทธ๋ ‡๊ตฐ์š”. ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

์ปจํ…Œ์ด๋„ˆ ๋‚ด๋ถ€์™€ ์™ธ๋ถ€์— ๋™์ผํ•œ uid/gid๊ฐ€ ์žˆ์œผ๋ฉฐ ์ด๊ฒƒ์ด ๋‚ด๊ฐ€ ์–ป๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

nonroot$ ls -l .dotfiles/
ls: cannot access .dotfiles/byobu: Permission denied
ls: cannot access .dotfiles/config: Permission denied
ls: cannot access .dotfiles/docker: Permission denied
ls: cannot access .dotfiles/vim: Permission denied
ls: cannot access .dotfiles/bashrc: Permission denied
ls: cannot access .dotfiles/muse.yml: Permission denied
ls: cannot access .dotfiles/my.cnf: Permission denied
ls: cannot access .dotfiles/profile: Permission denied
total 0
-????????? ? ? ? ?            ? bashrc
d????????? ? ? ? ?            ? byobu
d????????? ? ? ? ?            ? config
d????????? ? ? ? ?            ? docker
-????????? ? ? ? ?            ? muse.yml
-????????? ? ? ? ?            ? my.cnf
-????????? ? ? ? ?            ? profile
d????????? ? ? ? ?            ? vim
nonroot$ ls -l .ssh
ls: cannot access .ssh/authorized_keys: Permission denied
total 0
-????????? ? ? ? ?            ? authorized_keys
nonroot$

@darkermatter ๋ณ„๋„์˜ ๋ฌธ์ œ๋ฅผ ์—ด์–ด ์ฃผ์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?

๋ฌธ์ œ๋Š” ์•„๋‹ˆ์ง€๋งŒ ์—ฌ๊ธฐ์— ๊ด€๋ จ๋˜์ง€ ์•Š์Šต๋‹ˆ๊นŒ?

@darkermatter ์ด๊ฒƒ์€ ๋ฒ„๊ทธ ๋ณด๊ณ ์„œ๊ฐ€ ์•„๋‹Œ ๊ธฐ๋Šฅ ์š”์ฒญ์ž…๋‹ˆ๋‹ค. ๊ท€ํ•˜์˜ ์‚ฌ๋ก€๋ฅผ ๋‹ค๋ฅธ ์‚ฌ๋ก€์™€ ํ˜ผํ•ฉํ•˜๋ฉด ํ† ๋ก ์„ ๋”ฐ๋ฅด๊ธฐ๊ฐ€ ์–ด๋ ต๊ณ  ๊ท€ํ•˜์˜ ๋ฌธ์ œ๊ฐ€ ์ง์ ‘์ ์ธ ๊ด€๋ จ์ด ์—†์„ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

@thaJeztah ์Œ , @frankamp ์™€ ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค์ด ํ•œ ๊ฒƒ์ฒ˜๋Ÿผ Dockerfile ๋‚ด์—์„œ chmod ๋“ฑ์„ ์‹คํ–‰ํ•œ ํ›„ ์–ด๋–ค ์ผ์ด ๋ฐœ์ƒํ•˜๋Š”์ง€ ๋‹จ์ˆœํžˆ ์‹œ์—ฐํ–ˆ์Šต๋‹ˆ๋‹ค. ๋ฒ„๊ทธ ๋ณด๊ณ ์„œ๋กœ ์ œ์ถœํ•  ๊ฒƒ์ด์ง€๋งŒ ์ด ํ† ๋ก ๊ณผ ๊ด€๋ จ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

@ebuchman์ด ์ œ์•ˆํ•œ ๊ฒƒ๊ณผ ์œ ์‚ฌํ•˜๊ฒŒ ํ˜ธ์ŠคํŠธ ๋ณผ๋ฅจ์„ ๋ณต์‚ฌํ•˜์ง€ ์•Š๊ณ  ๋จผ์ € ๋ฐ์ดํ„ฐ ์ „์šฉ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
chown 1000:1000 /volume-mount ์‹œ์ž‘ ์‹œ ๋ฃจํŠธ๋กœ.
์˜ˆ: docker compose v2 ๊ตฌ๋ฌธ

version: '2'
services:
  my-beautiful-service:
    ...
    depends_on:
      - data-container
    volumes_from:
      - data-container

  data-container:
    image: same_base_OS_as_my-beautiful-service
    volumes:
      - /volume-mount
    command: "chown 1000:1000 /volume-mount"

์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ๋ฃจํŠธ๊ฐ€ ์•„๋‹Œ ์‚ฌ์šฉ์ž๋กœ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฐ์ดํ„ฐ ์ „์šฉ ์ปจํ…Œ์ด๋„ˆ๋Š” ํ•œ ๋ฒˆ๋งŒ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.
my-beautiful-service๊ฐ€ ๋ฏธ๋ฆฌ ์‚ฌ์šฉํ•˜๋Š” uid์™€ gid๋ฅผ ์•Œ๊ณ  ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•ฉ๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ 1000,1000์ž…๋‹ˆ๋‹ค.

docker volume create ์—์„œ ์‚ฌ์šฉํ•  ๋ณผ๋ฅจ์— ๋Œ€ํ•œ ๋งˆ์šดํŠธ ์˜ต์…˜์„ (1.11์—์„œ) ์ง€์ •ํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋‹ซ์„ ์ค€๋น„๊ฐ€ ๊ฑฐ์˜ ๋œ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

๋ฐ”์ธ๋“œ ๋งˆ์šดํŠธ์—์„œ ์ง€์›๋˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— uid/gid๋ฅผ ์ง์ ‘ ์ง€์ •ํ•  ์ˆ˜๋Š” ์—†์ง€๋งŒ ์ƒˆ๋กœ์šด ๋งˆ์šดํŠธ ์˜ต์…˜๊ณผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋งŽ์€ ํŒŒ์ผ ์‹œ์Šคํ…œ์€ uid/gid ์˜ต์…˜๊ณผ ํ•จ๊ป˜ ์ž‘๋™ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ปจํ…Œ์ด๋„ˆ ๋‚ด๋ถ€์— CIFS ๋“œ๋ผ์ด๋ธŒ๋ฅผ ๋งˆ์šดํŠธํ•˜๋ ค๋Š” ๊ฒฝ์šฐ ๋ฌธ์ œ๊ฐ€ ์—ฌ์ „ํžˆ ํ•ด๊ฒฐ๋œ๋‹ค๊ณ  ์ƒ๊ฐํ•˜์ง€๋งŒ ๋‹ค๋ฅธ ํ‹ฐ์ผ“์ด ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๊นŒ?

@michaeljs1990 ์ปจํ…Œ์ด๋„ˆ๋ณ„๋กœ๊ฐ€ ์•„๋‹ˆ๋ผ ์ด๋ ‡๊ฒŒ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(์›ํ•˜๋Š” ๊ฐ uid/gid ์ฝค๋ณด์— ๋Œ€ํ•ด ๋ณ„๋„์˜ ๋ณผ๋ฅจ์„ ์ƒ์„ฑํ•˜์ง€ ์•Š๋Š” ํ•œ).

@cpuguy83 , ์ด ๋ฌธ์ œ๋ฅผ ํ”ผํ•˜๊ธฐ ์œ„ํ•ด docker volume create ๋ฅผ ์–ด๋–ป๊ฒŒ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋Š”์ง€ ์„ค๋ช…ํ•ด ์ฃผ์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?

์˜ค๋Š˜ ๋„์ปค 1.11์—์„œ ์ด ๋ฌธ์ œ์— ๋ถ€๋”ช์ณค๊ณ  ๋งˆ์šดํŠธ๋œ ๋“œ๋ผ์ด๋ธŒ์˜ ํŒŒ์ผ์— ์“ธ ์ˆ˜ ์žˆ๋„๋ก ๋„์ปค ์ด๋ฏธ์ง€๋ฅผ ์„ค๋“ํ•˜๊ธฐ ์œ„ํ•ด ๊ณ ํ†ต์Šค๋Ÿฌ์šด ์žฌ์ง€๊ฑฐ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•ด์•ผ ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ์‚ฌ๋žŒ์—๊ฒŒ ์„ค๋ช…ํ•˜๋ ค๊ณ  ๋…ธ๋ ฅํ•˜๋Š” ๊ฒƒ์€ ๋ฌผ๋ก  ๋‹ค์‹œ ํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค๋ฉด ์ •๋ง ์ข‹์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ด๊ฒƒ์ด ๋‹น์‹ ์ด ๋ฌป๋Š” ๊ฒƒ์ธ์ง€ ํ™•์‹คํ•˜์ง€ ์•Š์ง€๋งŒ ...

FROM busybox
RUN mkdir /hello && echo hello > /hello/world && chown -R 1000:1000 /hello

"test"๋ผ๋Š” ์ด๋ฏธ์ง€ ์œ„์— ๋นŒ๋“œ

$ docker volume create --name hello
$ docker run -v hello:/hello test ls -lh /hello

์œ„์˜ ์˜ˆ์—์„œ /hello ๋ฐ /hello/world ๋Š” ๋ชจ๋‘ 1000:1000์ด ์†Œ์œ ํ•ฉ๋‹ˆ๋‹ค.

๋‚ด๊ฐ€ ์ฐธ์กฐ. ๊ทธ๋ž˜์„œ ์ €๋Š” ๋น„์Šทํ•˜์ง€๋งŒ ์กฐ๊ธˆ ๋‹ค๋ฅธ ์ž‘์—…์„ ํ–ˆ์œผ๋ฉฐ ๊ณต์œ ํ•  ๊ฐ€์น˜๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ธฐ๋ณธ์ ์œผ๋กœ ์ปจํ…Œ์ด๋„ˆ ์™ธ๋ถ€์˜ ์‚ฌ์šฉ์ž์— ๋Œ€ํ•œ ๋‚ด UID, GID, ์‚ฌ์šฉ์ž ์ด๋ฆ„ ๋ฐ ๊ทธ๋ฃน์„ ๊ณต์œ ํ•˜๋Š” ์‚ฌ์šฉ์ž๋ฅผ Dockerfile์— ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋ชจ๋“  <...> ๋Š” ๊ด€๋ จ ๊ฐ’์œผ๋กœ ๋Œ€์ฒด๋œ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

FROM <some_image>
RUN groupadd -g <my_gid> <my_group> && \
    useradd -u <my_uid> -g <my_gid> <my_user>

๊ทธ ํ›„์— USER ๋ฅผ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋‚˜์ค‘์— su ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ „ํ™˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(์˜ˆ: ์ง„์ž…์  ์Šคํฌ๋ฆฝํŠธ ๋˜๋Š” ์…ธ์„ ์‚ฌ์šฉํ•  ๋•Œ). ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ๋‚ด๊ฐ€ ์ƒ์„ฑํ•œ ๋™์ผํ•œ ์‚ฌ์šฉ์ž์˜€์œผ๋ฏ€๋กœ ํƒ‘์žฌ๋œ ๋ณผ๋ฅจ์— ์“ธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ปจํ…Œ์ด๋„ˆ ๋‚ด๋ถ€์—์„œ chown ๋ฅผ ์ถ”๊ฐ€๋กœ ์‚ฌ์šฉํ•˜์—ฌ ๊ด€๋ จ ํ•ญ๋ชฉ์— ๋Œ€ํ•œ ๊ถŒํ•œ์ด ์žˆ๋Š”์ง€ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ sudo ๋ฅผ ์„ค์น˜ํ•˜๋Š” ๊ฒƒ๋„ ์ด ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ๋•Œ ์ผ๋ฐ˜์ ์œผ๋กœ ํ˜„๋ช…ํ•œ ์กฐ์น˜์ž…๋‹ˆ๋‹ค.

๊ทธ๊ฒƒ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋™์•ˆ, ์ด๊ฒƒ์€ ๋ชจ๋“  ์‚ฌ์šฉ์ž๋ฅผ ์œ„ํ•ด ์ˆ˜ํ–‰๋˜์–ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋‚ด๊ฐ€ ๊ทธ๊ฒƒ์„ ์ข‹์•„ํ•˜๋Š”์ง€ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ์ €๋Š” ํ•˜๋“œ ์ฝ”๋”ฉํ–ˆ์ง€๋งŒ(์ด๋Ÿฐ!) ํ…œํ”Œ๋ฆฟ์„ ์‚ฌ์šฉํ•˜์—ฌ ์ด๋ฅผ ์ข€ ๋” ๋ถ€๋“œ๋Ÿฝ๊ฒŒ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ์‹ฌ์ด ์–ด๋–ป๊ฒŒ๋“  docker run ์— ํก์ˆ˜๋  ์ˆ˜ ์žˆ์„์ง€ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค. ์ด ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋” ์ข‹์€ ๋ฐฉ๋ฒ•์ด ์ด๋ฏธ ์žˆ๋‹ค๋ฉด ๊ทธ๊ฒƒ์ด ๋ฌด์—‡์ธ์ง€ ์•Œ๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

ํ˜ธ์ŠคํŠธ ์‚ฌ์šฉ์ž uids/gids๋ฅผ ์ปจํ…Œ์ด๋„ˆ ์‚ฌ์šฉ์ž uids/gids์™€ --userns-remap ๋กœ ๋งคํ•‘ํ•˜๋Š” ์˜ต์…˜์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐœ์ธ์ ์œผ๋กœ ๋‚˜๋Š” ๊ทธ๊ฒƒ์„ ์‹œ๋„ํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ์ด ์ฃผ์ œ์— ๋Œ€ํ•œ ์ข‹์€ ํ† ๋ก ์„ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค. http://stackoverflow.com/questions/35291520/docker-and-userns-remap-how-to-manage-volume-permissions-to-share-data-betwee .

@cpuguy83 :

๋ฐ”์ธ๋“œ ๋งˆ์šดํŠธ์—์„œ ์ง€์›๋˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— uid/gid๋ฅผ ์ง์ ‘ ์ง€์ •ํ•  ์ˆ˜๋Š” ์—†์ง€๋งŒ ์ƒˆ๋กœ์šด ๋งˆ์šดํŠธ ์˜ต์…˜๊ณผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋งŽ์€ ํŒŒ์ผ ์‹œ์Šคํ…œ์€ uid/gid ์˜ต์…˜๊ณผ ํ•จ๊ป˜ ์ž‘๋™ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

uid/gid ์ธ์ˆ˜๋ฅผ ํ—ˆ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ํŒŒ์ผ ์‹œ์Šคํ…œ์€ ๋ฌด์—‡์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜์‹ญ๋‹ˆ๊นŒ? ๋‚˜๋Š” FAT๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ณ  ์žˆ์ง€๋งŒ ์ด๊ฒƒ์€ ์ด ์Šค๋ ˆ๋“œ์—์„œ ์ œ์•ˆ๋œ ๋‹ค๋ฅธ ๋ชจ๋“  ๊ฒƒ๋งŒํผ์ด๋‚˜ ํ•ดํ‚คํ•˜๊ฒŒ ๋Š๊ปด์ง‘๋‹ˆ๋‹ค.

IMO, Docker์—๋Š” ๋‘ ๊ฐ€์ง€ ์˜ต์…˜์ด ์žˆ์Šต๋‹ˆ๋‹ค.

  1. ์ง€์ •๋œ ์‚ฌ์šฉ์ž/๊ทธ๋ฃน์œผ๋กœ ๋ณผ๋ฅจ์„ ํƒ‘์žฌํ•˜๊ธฐ ์œ„ํ•œ ๊ณต์‹ ์ง€์›(์ปจํ…Œ์ด๋„ˆ ๋‚ด๋ถ€์— ์ •์˜๋œ ์‚ฌ์šฉ์ž/๊ทธ๋ฃน ์ด๋ฆ„ ์‚ฌ์šฉ, ํ˜ธ์ŠคํŠธ๊ฐ€ ์ปจํ…Œ์ด๋„ˆ์˜ ๋‚ด๋ถ€์— ๋Œ€ํ•ด ์ด ์ง€์‹์„ ๊ฐ€์งˆ ํ•„์š” ์—†์Œ).
  2. ๋˜๋Š”... USER ์ง€์‹œ๋ฌธ(๋ฐ ๊ด€๋ จ ๋Ÿฐํƒ€์ž„ ํ”Œ๋ž˜๊ทธ)์„ ์ œ๊ฑฐํ•˜์‹ญ์‹œ์˜ค.

๋ฃจํŠธ๊ฐ€ ์•„๋‹Œ ์‚ฌ์šฉ์ž๋กœ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐ˜๋ฉด ๋ฃจํŠธ๊ฐ€ ์†Œ์œ ํ•œ ๋ณผ๋ฅจ๋งŒ ๋งˆ์šดํŠธํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์€ ์ž˜๋ชป๋œ ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค. ํ˜ธ์ŠคํŠธ์™€ ์ปจํ…Œ์ด๋„ˆ ๊ฐ„์˜ uid/gid ๊ณต์œ ๋Š” ๋˜ ๋‹ค๋ฅธ ์ž˜๋ชป๋œ ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค.

@mehaase ๋ณผ๋ฅจ์€ ์ปจํ…Œ์ด๋„ˆ์˜ ๊ฒฝ๋กœ์— ์ด๋ฏธ ์žˆ๋Š” ๋ชจ๋“  ํ•ญ๋ชฉ์˜ ์†Œ์œ ๊ถŒ์„ ๊ฐ–์Šต๋‹ˆ๋‹ค. ์ปจํ…Œ์ด๋„ˆ์˜ ์œ„์น˜๊ฐ€ ๋ฃจํŠธ ์†Œ์œ ์ธ ๊ฒฝ์šฐ ๋ณผ๋ฅจ์€ ๋ฃจํŠธ๊ฐ€ ๋ฉ๋‹ˆ๋‹ค. ์ปจํ…Œ์ด๋„ˆ์˜ ์œ„์น˜๊ฐ€ ๋‹ค๋ฅธ ์‚ฌ๋žŒ์˜ ์†Œ์œ ์ธ ๊ฒฝ์šฐ ๋ณผ๋ฅจ์ด ํ•ด๋‹น ์œ„์น˜๋ฅผ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.

์ด์— ๋Œ€ํ•œ ์ผ์ข…์˜ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์ด ์ข‹์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ํŠน๋ณ„ํžˆ ์˜ˆ์ƒํ•˜์ง€ ์•Š๋Š” ํ•œ ๊ถŒํ•œ์„ ์„ค์ •ํ•˜๋Š” ์‚ฌ์šฉ์ž ์ง€์ • Dockerfile์„ ์ž‘์„ฑํ•˜์ง€ ์•Š๊ณ  Elasticsearch, redis, couchDB ๋ฐ ๊ธฐํƒ€ ์—ฌ๋Ÿฌ ์ปจํ…Œ์ด๋„ˆ์™€ ๊ฐ™์€ ํ‘œ์ค€ ์ปจํ…Œ์ด๋„ˆ์— ๋ณผ๋ฅจ์„ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์€ _๋งค์šฐ_ ์–ด๋ ต์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ๋Œ€๋ถ€๋ถ„ docker-compose์˜ docker run -v ๋ช…๋ น ๋˜๋Š” volume: ์ง€์‹œ๋ฌธ์„ ์“ธ๋ชจ ์—†๊ฒŒ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

@chrisfosterelli ์™œ ์“ธ๋ชจ๊ฐ€ ์—†์Šต๋‹ˆ๊นŒ? ์‚ฌ์šฉํ•  ๊ฒƒ์œผ๋กœ ์˜ˆ์ƒ๋˜๋Š” ํŒŒ์ผ/๋””๋ ‰ํ† ๋ฆฌ์˜ ์†Œ์œ ๊ถŒ์„ ์„ค์ •ํ•˜๋Š” ๊ฒƒ์ด ์ผ๋ฐ˜์ ์ด์ง€ ์•Š๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

@cpuguy83 ๊ถŒํ•œ๊ณผ ๋ณผ๋ฅจ์„ ์„ค์ •ํ•˜๋Š” ์ปค์Šคํ…€ ๋„์ปคํŒŒ์ผ์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ ๋Š” ์†Œ์œ ๊ถŒ ์„ค์ •์ด ๋ถˆ๊ฐ€๋Šฅํ•ด ๋ณด์ด๊ธฐ ๋•Œ๋ฌธ์— ๋ณผ๋ฅจ ์ •์˜์— ์œ ์šฉํ•˜์ง€ ์•Š๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๊ด€๋ จ์ด ์žˆ๋Š” ๊ฒฝ์šฐ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ํ˜ธ์ŠคํŠธ ํŒŒ์ผ ์‹œ์Šคํ…œ์— ๋ฐ”์ธ๋”ฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

@chrisfosterelli ๊ทธ๋Ÿฌ๋‚˜ ์ด๋Ÿฌํ•œ ๋ชจ๋“  ํ‘œ์ค€ Dockerfile์—๋Š” ์ด๋ฏธ ๊ถŒํ•œ์ด ์„ค์ •๋˜์–ด ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

@chrisfosterelli ๊ฐ€ @cpuguy83 ์ด๋ผ๊ณ  ๋งํ•˜๋ ค๊ณ  ํ•˜๋Š” ๊ฒƒ ๊ฐ™์•„์š”. @chrisfosterelli๊ฐ€ ํ‹€๋ ธ๋‹ค๋ฉด ์ •์ •ํ•ด์ฃผ์„ธ์š”. ์ด๋Ÿฌํ•œ ๋ณ€์ˆ˜(UID, GID ๋“ฑ)๊ฐ€ ๋™์ ์ด๋ฉฐ ๋Ÿฐํƒ€์ž„(ํŠนํžˆ ๋‚ด๋ถ€์ ์œผ๋กœ ์†Œ์œ ํ•˜๊ณ  ํƒ‘์žฌ๋œ ๋ณผ๋ฅจ์—์„œ ํŒŒ์ผ์— ๋Œ€ํ•ด wrt)์„ ์ˆ˜ํ–‰ํ•˜์ง€๋งŒ ํ˜„์žฌ๋กœ์„œ๋Š” ์ด๋ฅผ ์ˆ˜ํ–‰ํ•  ๋ฐฉ๋ฒ•์ด ์—†์Šต๋‹ˆ๋‹ค. ์ง€๊ธˆ๊นŒ์ง€์˜ ๋ฐ˜์‘์€ ๋Ÿฐํƒ€์ž„์— ๊ฒฐ์ •๋˜์–ด์„œ๋Š” ์•ˆ ๋œ๋‹ค๋Š” ๊ฒƒ์ด์ง€๋งŒ, ๊ทธ๋Ÿฌํ•œ ์ œ์•ˆ์ด ์ œ์‹œํ•˜๋Š” ๊ทผ๋ณธ์ ์ธ ์‚ฌ์šฉ์„ฑ ๋ฌธ์ œ๋ฅผ ๋ฌด์‹œํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด ์ค‘ ํ•˜๋‚˜๋ผ๋„ ์ž˜๋ชป ์ดํ•ดํ•˜๊ณ  ์žˆ๋‹ค๋ฉด ์–ธ์ œ๋“ ์ง€ ์ €๋ฅผ ์ˆ˜์ •ํ•ด ์ฃผ์‹ญ์‹œ์˜ค.

@jakirkham ์‚ฌ์šฉ์„ฑ ๋ฌธ์ œ๊ฐ€ ๋ฌด์—‡์ธ์ง€ ์ดํ•ดํ•ด์„œ๋Š” ์•ˆ๋ฉ๋‹ˆ๋‹ค.
ํŒŒ์ผ์€ ์ด๋ฏธ์ง€์— ์žˆ์œผ๋ฉฐ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‹คํ–‰ํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ์†Œ์œ ๊ถŒ๊ณผ ๊ถŒํ•œ์ด ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋ณผ๋ฅจ ์ž์ฒด์™€ ๊ด€๋ จ์ด ์—†์Šต๋‹ˆ๋‹ค. ๋ณผ๋ฅจ์€ ์ด๋ฏธ์ง€์— ์„ค์ •๋œ ๋Œ€๋กœ ์ ์šฉ๋ฉ๋‹ˆ๋‹ค.

@cpuguy83 ์ €๋Š” ์กฐ๊ธˆ ๋” ํŒŒ๊ณ  ๋“ค์–ด ์ด๊ฒƒ์„ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋ถ„๋ฆฌํ–ˆ์Šต๋‹ˆ๋‹ค. ์‹œ์ž‘ํ•  ๋•Œ /data ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ์ƒ์„ฑํ•  Elasticsearch ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜๊ณ (๋ฐ์ดํ„ฐ๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ) docker run -v /data elasticsearch ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. . /data ๋””๋ ‰ํ† ๋ฆฌ๋Š” $# root:root ์†Œ์œ ๊ฐ€ ๋˜๋ฉฐ ์ปจํ…Œ์ด๋„ˆ ๋‚ด๋ถ€์—์„œ elasticsearch ๋กœ ์‹คํ–‰๋˜๋Š” ๋ฐ๋ชฌ์€ /data ์— ์“ธ ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์— ์‹œ์ž‘ํ•˜์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค.

์‚ฌ์šฉ์ž ์ง€์ • Dockerfile ์—†์ด๋„ Elasticsearch๊ฐ€ ์ด ๋ณผ๋ฅจ์„ ์†Œ์œ ํ•˜๋„๋ก ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด ์ด์ƒ์ ์ผ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ด๋Ÿฌํ•œ ์ข…๋ฅ˜์˜ ๋ฌธ์ œ๋Š” ์—…์ŠคํŠธ๋ฆผ ์ด๋ฏธ์ง€์—์„œ ํ•ด๊ฒฐ๋˜์–ด์•ผ ํ•œ๋‹ค๊ณ  ์ฃผ์žฅํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

@chrisfosterelli ์†Œ์œ ๊ถŒ์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋Š” ๋“œ๋ผ์ด๋ฒ„์™€ ๊ฐ™์€ ์˜ค๋ฒ„๋ ˆ์ด๊ฐ€ ์žˆ๋‹ค๋Š” ์ปค๋„ ๋ฉ”์ผ๋ง ๋ฆฌ์ŠคํŠธ์— ๋Œ€ํ•œ ์ด์•ผ๊ธฐ๊ฐ€ ์žˆ์ง€๋งŒ ๊ทธ๋Ÿฐ ๊ฒƒ์ด ์—†์ด๋Š” ํ•  ์ˆ˜ ์žˆ๋Š” ์ผ์ด ๋งŽ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค. ๋ณผ๋ฅจ ์„ธ๊ณ„์˜ ๋ชจ๋“  ํŒŒ์ผ์„ ์ฝ๊ณ  ์“ฐ๋„๋ก ํ•˜๊ณ  umask๋ฅผ ์ ์ ˆํ•˜๊ฒŒ ์„ค์ •ํ•˜์—ฌ ์ƒˆ ํŒŒ์ผ๋„ ๊ทธ๋ ‡๊ฒŒ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? (๋‚˜๋Š” ์•„์ง ์‹œ๋„ํ•˜์ง€ ์•Š์•˜๋‹ค).

@justincormack ๋‚˜๋Š” ๊ทธ๋ ‡๊ฒŒ ์ƒ๊ฐํ•˜์ง€๋งŒ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ (ํ˜ธ์ŠคํŠธ๊ฐ€ ์•„๋‹Œ) ๋ณผ๋ฅจ์— ๋ฐ์ดํ„ฐ๋ฅผ ์ƒ์„ฑํ•  ๊ฒƒ์œผ๋กœ ์˜ˆ์ƒํ•  ๋•Œ๋Š” ์ž‘๋™ํ•˜์ง€ ์•Š๋Š”๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๋‚˜๋Š” ์ด๊ฒƒ์ด ์ผ์ข…์˜ ์ด์ƒํ•œ ๋ฌธ์ œ๋ผ๋Š” ๊ฒƒ์„ ์ดํ•ดํ•˜๋ฏ€๋กœ ํ˜„์žฌ ์—…์ŠคํŠธ๋ฆผ Dockerfile ์ž์ฒด์—์„œ mkdir -p && chmod ๋””๋ ‰ํ† ๋ฆฌ๋กœ ์ˆ˜์ •ํ•˜์—ฌ ํ•ด๊ฒฐํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

@chrisfosterelli ๊ทธ๊ฒƒ์ด ๋‚ด๊ฐ€ umask๋ฅผ ์„ค์ •ํ•œ๋‹ค๊ณ  ๋งํ•œ ์ด์œ ์ž…๋‹ˆ๋‹ค. umask๊ฐ€ 000 (์ปจํ…Œ์ด๋„ˆ์—์„œ) ๋ชจ๋“  ์ƒˆ ํŒŒ์ผ์€ 666 ๋˜๋Š” 777 ๊ถŒํ•œ์œผ๋กœ ์ƒ์„ฑ๋˜๊ณ  ๋งˆ์šดํŠธ ํฌ์ธํŠธ๋Š” 777 ๋กœ ์‹œ์ž‘ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ดœ์ฐฎ์„๊นŒ์š”? ๊ถŒํ•œ์ด ํ•ญ์ƒ ์„ธ๊ณ„ ์ฝ๊ธฐ ๋ฐ ์“ฐ๊ธฐ์ธ ๊ฒฝ์šฐ uid ๋ฐ gid๊ฐ€ ์ค‘์š”ํ•˜์ง€ ์•Š์•„์•ผ ํ•ฉ๋‹ˆ๊นŒ?

@justincormack ๋„ค ๋งž์Šต๋‹ˆ๋‹ค... ํ˜ธ์ŠคํŠธ์— ํƒ‘์žฌ๋˜์ง€ ์•Š์€ ๋ณผ๋ฅจ์œผ๋กœ ๋„์ปค ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๋งŒ๋“œ๋Š” ๋™์•ˆ ์–ด๋–ป๊ฒŒ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

@chrisfosterelli ํ , ์ข‹์€ ์งˆ๋ฌธ์ž…๋‹ˆ๋‹ค. ์ƒˆ ๋ณผ๋ฅจ์— ๋Œ€ํ•œ ๊ถŒํ•œ์ด ๊ธฐ๋ณธ umask๊ฐ€ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ์ด๋ฏ€๋กœ 000 umask๋กœ ๋„์ปค ๋ฐ๋ชฌ์„ ์‹คํ–‰ํ•˜๊ณ  ๋ณผ๋ฅจ์ด ์ „์ฒด ์“ฐ๊ธฐ ๊ฐ€๋Šฅํ•œ์ง€ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์•„๋งˆ๋„ docker volume create ์— ๋Œ€ํ•œ ๋ช‡ ๊ฐ€์ง€ ๊ถŒํ•œ ์˜ต์…˜์ด ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

( chmod ๋ฅผ ์‹คํ–‰ํ•˜๊ณ  ์ข…๋ฃŒํ•œ ๋ฃจํŠธ ์ปจํ…Œ์ด๋„ˆ๋กœ ๊ณ ์น  ์ˆ˜ ์žˆ์ง€๋งŒ ์ถ”์•…ํ•ฉ๋‹ˆ๋‹ค)

์ƒ์„ฑ ์‹œ ์ข‹์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋ฌธ์ œ๋Š” ์ปจํ…Œ์ด๋„ˆ์— ๊ฒฝ๋กœ๊ฐ€ ์—†์œผ๋ฉด ๊ฒฝ๋กœ๊ฐ€ ๋ฃจํŠธ๋กœ ์ƒ์„ฑ๋œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ์ „๋‹ฌ๋œ ์‚ฌ์šฉ์ž๊ฐ€ ๋ฌด์—‡์ด๋“  ๊ฐ„์— ํ‹€๋ฆผ์—†์ด ์ˆ˜ํ–‰๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

@cpuguy83 ์‚ฌ์šฉ์ž๊ฐ€ -u๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ „๋‹ฌํ•˜๋ฉด์„œ ์ƒ์„ฑํ•˜๋Š” ๊ฒƒ์ด ๋” ํ•ฉ๋ฆฌ์ ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž๊ฐ€ ์ปจํ…Œ์ด๋„ˆ ๋‚ด๋ถ€์—์„œ ์–ด์จŒ๋“  ๋ณผ๋ฅจ์„ ์“ฐ๋ ค๊ณ  ํ•  ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ๋งž๋‚˜์š”?

์•„๋ž˜ ๋‹จ๊ณ„๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋‚ด๊ฐ€ ์„ ํƒํ•œ ์‚ฌ์šฉ์ž๋กœ ๋งˆ์šดํŠธํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

  • ํ˜ธ์ŠคํŠธ์˜ ํŒŒ์ผ์„ ์†Œ์œ ํ•œ ์‚ฌ์šฉ์ž์™€ ๋™์ผํ•œ UID/GID๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Docker ๋‚ด๋ถ€์— ์‚ฌ์šฉ์ž๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
  • ๋งˆ์šดํŠธ ์ง€์ ์„ ๋ฏธ๋ฆฌ ์ƒ์„ฑํ•˜๊ณ  ์ปจํ…Œ์ด๋„ˆ์˜ ๋Œ€์ƒ ์‚ฌ์šฉ์ž์—๊ฒŒ chown

์ธ์šฉ @chrisfosterelli :

๋‚˜๋Š” ์กฐ๊ธˆ ๋” ํŒŒ๊ณ ๋“ค์–ด ์ด๊ฒƒ์„ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋ถ„๋ฆฌํ–ˆ๋‹ค: ์‹œ์ž‘ํ•  ๋•Œ ๋””๋ ‰ํ† ๋ฆฌ /data๋ฅผ ์ƒ์„ฑํ•  elasticsearch ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜๊ณ (๋ฐ์ดํ„ฐ๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ) docker run -v /data elasticsearch๋ฅผ ์‚ฌ์šฉํ•˜์‹ญ์‹œ์˜ค. /data ๋””๋ ‰ํ† ๋ฆฌ๋Š” root:root ์˜ ์†Œ์œ ๊ฐ€ ๋˜๋ฉฐ ์ปจํ…Œ์ด๋„ˆ ๋‚ด์—์„œ Elasticsearch๋กœ ์‹คํ–‰๋˜๋Š” ๋ฐ๋ชฌ์€ ์ด์ œ /data์— ์“ธ ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์— ์‹œ์ž‘์— ์‹คํŒจํ•ฉ๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ ์ข‹์€ ์˜ˆ์ž…๋‹ˆ๋‹ค! Solr ์ด๋ฏธ์ง€์™€ ๋น„์Šทํ•œ ์˜ˆ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. Solr์—๋Š” ํ•˜๋‚˜ ์ด์ƒ์˜ "์ฝ”์–ด"๊ฐ€ ํ•„์š”ํ•˜๋ฉฐ, ๊ฐ๊ฐ์€ ๊ด€๋ จ ๊ตฌ์„ฑ ํŒŒ์ผ ๋ฐ ์ธ๋ฑ์Šค ์กฐ๊ฐ ๋ชจ์Œ์ž…๋‹ˆ๋‹ค. ๊ฐ ์ฝ”์–ด๋Š” ์‚ฌ์šฉ์ž ์ง€์ • ์ด๋ฆ„์„ ๊ฐ€์ง„ ๋””๋ ‰ํ† ๋ฆฌ ์•ˆ์— ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด products ๋ผ๋Š” ์ฝ”์–ด๋ฅผ ์ƒ์„ฑํ•˜๋ ค๋Š” ๊ฒฝ์šฐ ๊ฒฝ๋กœ๋Š” /opt/solr/server/solr/products ์ž…๋‹ˆ๋‹ค. ์ฝ”์–ด์˜ ์ด๋ฆ„์€ ๋‚ด๊ฐ€ ์„ ํƒํ•˜๋ฏ€๋กœ Solr ์ด๋ฏธ์ง€ ๊ด€๋ฆฌ์ž๋Š” ์ด๋ฏธ์ง€์—์„œ ์ด ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ๋ฏธ๋ฆฌ ์ƒ์„ฑํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

๋ชจ๋“  ๋ฌธ์„œ๋ฅผ ๋‹ค์‹œ ์ธ๋ฑ์‹ฑํ•  ํ•„์š” ์—†์ด ์ด๋ฏธ์ง€๋ฅผ ์ตœ์‹  Solr๋กœ ์—…๊ทธ๋ ˆ์ด๋“œํ•  ์ˆ˜ ์žˆ๋„๋ก ์ธ๋ฑ์Šค ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ณ  ์‹ถ์ง€๋งŒ ๋ณผ๋ฅจ์„ /opt/solr/server/solr/products ์— ๋งˆ์šดํŠธํ•˜๋ฉด root ์˜ ์†Œ์œ ์ž…๋‹ˆ๋‹ค. solr ๋กœ ์‹คํ–‰)์€ ์‹ค์ œ๋กœ ์•„๋ฌด ๊ฒƒ๋„ ์“ธ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์ƒ์œ„ ๋””๋ ‰ํ† ๋ฆฌ /opt/solr/server/solr ์—๋Š” ๋‹ค๋ฅธ ํŒŒ์ผ์ด ํฌํ•จ๋˜์–ด ์žˆ์œผ๋ฏ€๋กœ ๊ฑฐ๊ธฐ์—๋„ ๋ณผ๋ฅจ์„ ๋งˆ์šดํŠธํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. (์ตœ์‹  Docker ์šฉ์–ด์—์„œ๋Š” ๋‚ด ๋ณผ๋ฅจ์„ "๋ช…๋ช…๋œ ๋ณผ๋ฅจ"์ด๋ผ๊ณ  ๋ถ€๋ฆ…๋‹ˆ๋‹ค. ์ฆ‰, ํ˜ธ์ŠคํŠธ์˜ ์ง€์ •๋œ ๊ฒฝ๋กœ์— ๋งˆ์šดํŠธ๋˜์ง€ ์•Š์ง€๋งŒ ๋‚˜๋ฅผ ์œ„ํ•ด Docker์—์„œ ์™„์ „ํžˆ ๊ด€๋ฆฌํ•˜๋Š” ๋ณผ๋ฅจ์ž…๋‹ˆ๋‹ค.)

์ €๋Š” Solr ์ด๋ฏธ์ง€ ์œ ์ง€ ๊ด€๋ฆฌ์ž์™€ ์ด์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐ ํ–ˆ์œผ๋ฉฐ ๋ช‡ ๊ฐ€์ง€ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์ด ์žˆ์ง€๋งŒ(๊ทธ๋ฆฌ๊ณ  ๊ทธ๋Š” ๋„์›€์„ ์ฃผ๊ธฐ ์œ„ํ•ด ์ด๋ฏธ์ง€๋ฅผ ์•ฝ๊ฐ„ ๋ณ€๊ฒฝํ–ˆ์Šต๋‹ˆ๋‹ค.) ์ด ๋ชจ๋“  ๊ฒƒ์ด ๊ฝค ์—‰๋šฑํ•˜๊ณ  ์—…์ŠคํŠธ๋ฆผ ์ด๋ฏธ์ง€์— ๋Œ€ํ•œ ์‚ฌ๋ก€๋ณ„ ๋ณ€๊ฒฝ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ์ด ์Šค๋ ˆ๋“œ์—์„œ ์„ค๋ช…ํ•˜๋Š” ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜๋ฉด ์ƒˆ Dockerfile์„ ๋งŒ๋“ค ํ•„์š” ์—†์ด _๋ชจ๋“  ์ด๋ฏธ์ง€_๋ฅผ ๋” ํ™•์žฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

@ctindel ์•„๋งˆ๋„ ... ๋””๋ ‰ํ† ๋ฆฌ๊ฐ€ ์ด๋ฏธ ์กด์žฌํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ.

@cpuguy83 ๋งž์Šต๋‹ˆ๋‹ค . ์ €๋„ ๋™์˜ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์€ ํ™•์‹คํžˆ ๋‚ด ์‚ฌ์šฉ ์‚ฌ๋ก€์˜€์Šต๋‹ˆ๋‹ค. ์ปจํ…Œ์ด๋„ˆ ์‹คํ–‰์„ ์œ„ํ•ด ์‚ฌ์šฉ์ž ID๊ฐ€ ๋ช…์‹œ์ ์œผ๋กœ ์ง€์ •๋œ ๊ฒฝ์šฐ ๋””๋ ‰ํ† ๋ฆฌ๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š์œผ๋ฉด ๋ฃจํŠธ๋กœ ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๊ฒƒ์ด ์˜๋ฏธ๊ฐ€ ์—†๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

@ cpuguy83 ๋ช…๋ช…๋œ ๋ณผ๋ฅจ์—์„œ๋งŒ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

@kamechen ๋ฌด์—‡์ด ์ž‘๋™ํ•ฉ๋‹ˆ๊นŒ?

@cpuguy83 ๋ช…๋ช…๋œ ๋ณผ๋ฅจ์„ ์‚ฌ์šฉํ•˜๋ฉด ํ•„์š”ํ•œ ์‚ฌ์šฉ์ž ์•„๋ž˜์— ํŒŒ์ผ์ด ๋งˆ์šดํŠธ๋ฉ๋‹ˆ๋‹ค.

@eciuca ๊ธ€์Ž„์š”.... ์— ๋‹ฌ๋ ค์žˆ์Šต๋‹ˆ๋‹ค. ๋ช…๋ช…๋œ ๋ณผ๋ฅจ์ด ๋น„์–ด ์žˆ๊ฑฐ๋‚˜ ๋ช…๋ช…๋œ ๋ณผ๋ฅจ์˜ ๋ฐ์ดํ„ฐ๊ฐ€ ์šฐ์—ฐํžˆ ํ•„์š”ํ•œ ๋™์ผํ•œ ์‚ฌ์šฉ์ž์— ์˜ํ•ด ์ƒ์„ฑ๋œ ๊ฒฝ์šฐ.

@andrewmichaelsmith๊ฐ€ ์ œ๊ธฐํ•œ ๋ฌธ์ œ์— ๋Œ€ํ•œ ํ•ด๊ฒฐ์ฑ…์ด ์žˆ์—ˆ๋‚˜์š”?

์šฐ๋ฆฌ๋Š” ์ด๊ฒƒ์œผ๋กœ ํ•ด๊ฒฐ๋  ๋ฌธ์ œ์— ๋ถ€๋”ชํžˆ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค(์ œ ์ƒ๊ฐ์—๋Š”). ๊ฐœ๋ฐœ์ž์˜ ํ™ˆ ๋””๋ ‰ํ† ๋ฆฌ์— ๋Œ€ํ•œ NFS ๊ณต์œ ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐœ๋ฐœ์ž๋Š” /home/dev/git/project๋ฅผ Docker์— ๋งˆ์šดํŠธํ•˜๊ณ  ์‹ถ์ง€๋งŒ ๋ฃจํŠธ ์Šค์ฟผ์‹œ๊ฐ€ ํ™œ์„ฑํ™”๋˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋งˆ์šดํŠธํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ ๋ฃจํŠธ๊ฐ€ /home/dev/git/project์— ์•ก์„ธ์Šคํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•˜๋ฏ€๋กœ docker mount /home/dev/git/project๋ฅผ ์‹œ๋„ํ•˜๊ณ  ์‹คํ–‰ํ•  ๋•Œ lstat ๊ถŒํ•œ ๊ฑฐ๋ถ€ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

bindfs ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.
docker์˜ -v ... ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ž„์‹œ ์œ„์น˜์— ๋ณผ๋ฅจ์„ ๋งˆ์šดํŠธํ•œ ๋‹ค์Œ bindfs๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋‹ค๋ฅธ ์‚ฌ์šฉ์ž๋กœ ํ•„์š”ํ•œ ์œ„์น˜์— ๋งˆ์šดํŠธํ•ฉ๋‹ˆ๋‹ค.

@piccaso , ๋‚ด๊ฐ€ @andrewmichaelsmith ๋ฅผ ์ดํ•ดํ•œ ๋ฐฉ์‹์€ ๋ฌธ์ œ๊ฐ€ rootsquash๋กœ ์ธํ•ด ํ˜ธ์ŠคํŠธ ์ธก์˜ bind-mount๊ฐ€ ์‹คํŒจํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ bindfs๋Š” ์‹ค์ œ๋กœ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์œผ๋กœ ์—ฌ์ „ํžˆ ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ์ง€๋งŒ ์ด๋ฒˆ์—๋Š” ํ˜ธ์ŠคํŠธ ์ธก์—์„œ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ๋จผ์ € ํ˜ธ์ŠคํŠธ์—์„œ FUSE๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฃจํŠธ๊ฐ€ ์•„๋‹Œ ์‚ฌ์šฉ์ž๋กœ ์ž„์‹œ ์œ„์น˜์— nfs ๊ณต์œ ๋ฅผ ๋ฐ”์ธ๋”ฉ ๋งˆ์šดํŠธํ•œ ๋‹ค์Œ -v ... ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋„์ปค์— ํ•ด๋‹น ์ž„์‹œ ํด๋”๋ฅผ ๋งˆ์šดํŠธํ•ฉ๋‹ˆ๋‹ค.

bindfs(์ ์–ด๋„ FUSE์—์„œ๋Š”)์—๋Š” ์ƒ๋‹นํ•œ CPU ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

์˜ˆ, bindfs๋Š” ๋งค์šฐ ๋ฐ”๋žŒ์งํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. CoW ํŒŒ์ผ ์‹œ์Šคํ…œ๋ณด๋‹ค ๋Š๋ฆฝ๋‹ˆ๋‹ค.
๋„์›€์ด ๋  ์ˆ˜ ์žˆ๋Š” ๋งˆ์šดํŠธ ์‹œ uid/gid ์ด๋™์„ ํ—ˆ์šฉํ•˜๊ธฐ ์œ„ํ•ด ์ปค๋„์—์„œ ์ˆ˜ํ–‰ ์ค‘์ธ ๋ช‡ ๊ฐ€์ง€ ์ž‘์—…์ด ์žˆ์Šต๋‹ˆ๋‹ค.

๋„์›€์ด ๋  ์ˆ˜ ์žˆ๋Š” ๋งˆ์šดํŠธ ์‹œ uid/gid ์ด๋™์„ ํ—ˆ์šฉํ•˜๊ธฐ ์œ„ํ•ด ์ปค๋„์—์„œ ์ˆ˜ํ–‰ ์ค‘์ธ ๋ช‡ ๊ฐ€์ง€ ์ž‘์—…์ด ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ ์ปจํ…Œ์ด๋„ˆ ๋‚ด๋ถ€์—์„œ uid/gid๋ฅผ ๋‹ค์‹œ ๋งคํ•‘ํ•˜๋ ค๋Š” ์‚ฌ์šฉ ์‚ฌ๋ก€๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐ์—๋งŒ ๋„์›€์ด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋„์ปค ๋ฐ๋ชฌ์— ์˜ํ•ด ์‹คํ–‰๋œ ๋งˆ์šดํŠธ ์ž์ฒด๋Š” ์—ฌ์ „ํžˆ ํ˜ธ์ŠคํŠธ์—์„œ ๋ฃจํŠธ๋กœ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค. ๋‚ด ์ดํ•ด๋Š” ์ปค๋„ ๋ฐ”์ธ๋“œ ๋งˆ์šดํŠธ๊ฐ€ ๋ฃจํŠธ๋กœ๋งŒ ์ƒ์„ฑ๋  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋ฃจํŠธ๊ฐ€ ์•„๋‹Œ ์‚ฌ์šฉ์ž๊ฐ€ ๋งˆ์šดํŠธ๋ฅผ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋ณ€๊ฒฝํ•˜๋Š” ์ž‘์—…์ด ์žˆ๋Š”์ง€ ํ™•์‹คํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค(๋‚˜๋Š” Linux๊ฐ€ ๋งˆ์šดํŠธ๋ฅผ ์ฒ˜๋ฆฌํ•˜์—ฌ ์ด์น˜์— ๋งž๋Š”์ง€ ํŒ๋‹จํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ๊ฑฐ์˜ ์•Œ์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค).

@NikolausDemmel ๋‚˜๋Š” ๊ทธ๊ฒƒ์ด ๋ฐ”๋€” ๊ฒƒ์ด๋ผ๊ณ  ์˜์‹ฌํ•ฉ๋‹ˆ๋‹ค. mount ์‹œ์Šคํ…œ ํ˜ธ์ถœ์—๋Š” CAP_SYS_ADMIN์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ๋ฃจํŠธ๊ฐ€ ์•„๋‹Œ ์‚ฌ์šฉ์ž์—๊ฒŒ ์ฃผ์–ด์ง€๊ฑฐ๋‚˜ ์ปจํ…Œ์ด๋„ˆ์˜ ๋ฃจํŠธ ์‚ฌ์šฉ์ž์—๊ฒŒ ์ œ๊ณต๋˜๋Š” ๊ฒƒ์ด ์•„๋‹™๋‹ˆ๋‹ค.

@ cpuguy83 ์„ค๋ช… ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ์ฆ‰, root-squash๋ฅผ ์‚ฌ์šฉํ•œ NFS ๋งˆ์šดํŠธ์ธ ํ˜ธ์ŠคํŠธ ํด๋”์— ๋„์ปค ๋ณผ๋ฅจ์„ ๋งˆ์šดํŠธํ•˜๋Š” ๊ฒƒ์€ ๊ฐ€๊นŒ์šด ์žฅ๋ž˜์— ์ž‘๋™ํ•˜์ง€ ์•Š์„ ๊ฒƒ์ž„์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค(๋‹น์‹ ์ด ๋งํ–ˆ๋“ฏ์ด ๋งˆ์šดํŠธ ์‹œ์Šคํ…œ ํ˜ธ์ถœ์˜ ์ œํ•œ์œผ๋กœ ์ธํ•ด) bindfs

์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค. OP๊ฐ€ ์ปจํ…Œ์ด๋„ˆ ๋‚ด๋ถ€์˜ UID/GID ๋ณ€๊ฒฝ์— ๋Œ€ํ•ด ์งˆ๋ฌธํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด๊ฒƒ์€ ์•ฝ๊ฐ„ OT์˜€์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๊ทธ๊ฒƒ์€ ๋™์ „์˜ ์ด๋ฉด๊ณผ ๊ฐ™์œผ๋ฉฐ ์œ„์˜ ๋…ผ์˜์—์„œ ์–ธ๊ธ‰๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ ๊ตฌ๋ถ„์„ ๋ช…ํ™•ํžˆ ํ•˜๊ณ  ์‹ถ์—ˆ์„ ๋ฟ์ž…๋‹ˆ๋‹ค.

Mac์šฉ Docker๋ฅผ ์‹คํ–‰ ์ค‘์ด๊ณ  ๋ณผ๋ฅจ์„ ๋งˆ์šดํŠธํ–ˆ์ง€๋งŒ ์›น ์„œ๋น„์Šค๊ฐ€ ํŒŒ์ผ์— ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ๋„๋ก ์„ค์ •๋œ ๊ถŒํ•œ์„ ์–ป์ง€ ๋ชปํ•˜๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋ ค๋ฉด ์–ด๋–ป๊ฒŒ ํ•ด์•ผ ํ•ฉ๋‹ˆ๊นŒ? ํŒŒ๋งˆ๋ฅผ ๋ณ€๊ฒฝํ•˜๊ณ  ๊ทธ๋ฃน์„ ์Šคํƒœํ”„๋กœ ์„ค์ •ํ•˜๋ ค๊ณ  ์‹œ๋„ํ–ˆ์ง€๋งŒ ์•ŒํŒŒ์ธ์—๋Š” ์Šคํƒœํ”„ ๊ทธ๋ฃน์ด์—†๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์—ฌ๊ธฐ๊ฐ€ ๊ฐ€์žฅ ์ข‹์€ ๊ณณ์ด ์•„๋‹ˆ๋ผ๋ฉด ์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค. ๋ฉฐ์น  ๋™์•ˆ ๊ณ ์ƒํ–ˆ๊ณ  ๋” ์ข‹์€ ๊ณณ์ด ์ƒ๊ฐ๋‚˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

@NikolausDemmel : ์šฐ๋ฆฌ๋Š” ์ผ๋ถ€ ์ƒ๋ฌผ ์ •๋ณดํ•™ ์ž‘์—…์— Docker๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. NFS๋ฅผ ํ†ตํ•ด root-squash๋กœ ๋งˆ์šดํŠธ๋œ ์—ฌ๋Ÿฌ ๊ฑฐ๋Œ€ํ•œ ํŒŒ์ผ ์‹œ์Šคํ…œ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฑฐ๋Œ€ํ•œ ์‹œํ€€์Šค ๋ฐ์ดํ„ฐ(fastq)๋ฅผ ์ฝ๊ณ  ๊ฒŒ๋†ˆ ์ฝ๊ธฐ๊ฐ€ ๋ฐ์ดํ„ฐ ์ €์žฅ์†Œ์— ์ •๋ ฌ๋œ ๋‹ค์†Œ ์ž‘์€ BAM ํŒŒ์ผ์„ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค. ํ˜„์žฌ ์‚ฌ์šฉ์ž ์ง€์ • ์ด๋ฏธ์ง€๋ฅผ ์ˆ˜ํ–‰ํ•˜์—ฌ ์ปจํ…Œ์ด๋„ˆ ๋‚ด๋ถ€์— ์‚ฌ์šฉ์ž๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ๋งˆ์ง€๋ง‰์— USER๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ž‘๋™ํ•˜๋„๋ก ํ•˜์—ฌ ๋„์ปค๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ๋ช‡ ๊ฐ€์ง€ ์ด์œ ๋กœ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

  1. ๋‹ค๋ฅธ ์‚ฌ๋žŒ์˜ Docker ์ด๋ฏธ์ง€๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ์‚ฌ์šฉ์ž ์ง€์ • Dockerfile๋กœ ๋‹ค์‹œ ๋นŒ๋“œํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  2. ๊ฐ ๋กœ์ปฌ ์‚ฌ์šฉ์ž์— ๋Œ€ํ•œ ์‚ฌ์šฉ์ž ์ง€์ • ๋„์ปค ์ด๋ฏธ์ง€๋ฅผ ์ƒ์„ฑํ•ด์•ผ ํ•˜๊ฑฐ๋‚˜ ๋‹จ์ผ "์„œ๋น„์Šค" ๊ณ„์ •์„ ์‚ฌ์šฉํ•˜๊ณ  FS์—์„œ ์‚ฌ์šฉ์ž์˜ ํ™œ๋™์„ ๊ตฌ๋ณ„ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

Bindfs ๋˜๋Š” userNS๋กœ ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

๋‚˜๋Š” ๊ฐ™์€ ๋ฌธ์ œ์— ์ง๋ฉดํ•˜๊ณ  ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์ œ ์‚ฌ์šฉ ์‚ฌ๋ก€๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.
Docker ์ด๋ฏธ์ง€๋Š” ์ฃผ์–ด์ง„ ํ”„๋กœ์ ํŠธ์— ๋Œ€ํ•œ ์ด์‹ ๊ฐ€๋Šฅํ•œ ๋นŒ๋“œ ๋„๊ตฌ๋ฅผ ๋ณด์œ ํ•˜๊ณ  ์žˆ์œผ๋ฉฐ, docker run -v ./:/src/ image ๋˜๋Š” docker-compose ํŒŒ์ผ์˜ ๋™๋“ฑํ•œ ํ•ญ๋ชฉ์„ ์‚ฌ์šฉํ•˜์—ฌ ์ƒ๋Œ€ ๊ฒฝ๋กœ๋กœ ๋ณผ๋ฅจ ๋งˆ์šดํŒ…์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๋นŒ๋“œ๊ฐ€ ์ž๋™์œผ๋กœ ์‹œ์ž‘๋˜๊ณ  ์—ฐ๊ฒฐ๋œ ๋ณผ๋ฅจ์˜ ํ•˜์œ„ ํด๋”์— ์ƒˆ ํŒŒ์ผ์ด ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค.
๋•Œ๋•Œ๋กœ ์šฐ๋ฆฌ๋Š” ํ˜ธ์ŠคํŠธ์—์„œ ๋นŒ๋“œ๋œ ํŒŒ์ผ์„ ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ์ง€๋งŒ docker๋ฅผ ์‹คํ–‰ํ•œ ํ˜ธ์ŠคํŠธ ์‚ฌ์šฉ์ž๊ฐ€ ์•„๋‹ˆ๋ผ docker์˜ ์‚ฌ์šฉ์ž๊ฐ€ ์—ฌ์ „ํžˆ ํŒŒ์ผ์„ ์†Œ์œ ํ•˜๊ณ  ์žˆ๋‹ค๋Š” ์‚ฌ์‹ค์ด ๋ฌธ์ œ๋ฅผ ์–ด๋ ต๊ฒŒ ๋งŒ๋“œ๋Š” ๊ฒฝํ–ฅ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

๋‚ด๊ฐ€ ์—ฌ๊ธฐ์„œ ํŠนํžˆ ์ž˜๋ชป๋œ ์ผ์„ ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๊นŒ?

@rlabrecque ๋Š” ๋„์ปค ์‚ฌ์šฉ์ž์˜ ID๋ฅผ ํ˜ธ์ŠคํŠธ์˜ ID์™€ ์ผ์น˜์‹œํ‚ค๋Š” ๊ฒƒ์— ๋Œ€ํ•ด ์ด์ „์— ๋‚ด ๊ฒŒ์‹œ๋ฌผ์„ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค. ๋‚˜๋Š” ์ด ์ ‘๊ทผ ๋ฐฉ์‹์„ ์‚ฌ์šฉํ–ˆ๊ณ  ๊ทธ๊ฒƒ์€ ์šฐ๋ฆฌ์—๊ฒŒ ์ •๋ง ์ž˜ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ๋ณธ์ ์œผ๋กœ HOST_UID=$(id -u) ๋ฐ HOST_GID=$(id -g) ๋ฅผ ์‹คํ–‰ํ•˜๊ณ  ์•„๋ž˜ ๋‘ ๋ช…๋ น์—์„œ $HOST_GID ๋ฐ $HOST_UID๋ฅผ ํ™•์žฅํ•˜๋Š” Dockerfile์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

RUN groupadd -g $HOST_GID mygroup
RUN useradd -l -u $HOST_UID -g mygroup myuser

ID๊ฐ€ ์ฑ„์›Œ์ง„ ์ƒ์„ฑ๋œ Dockerfile์„ ์‚ฌ์šฉํ•˜์—ฌ ์ด๋ฏธ์ง€๋ฅผ ๋นŒ๋“œํ•ฉ๋‹ˆ๋‹ค.

@haridsv ๋น„์Šทํ•œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ–ˆ์œผ๋ฉฐ Linux์—์„œ ํ›Œ๋ฅญํ•˜๊ฒŒ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ Windows์—์„œ๋Š” ์ž‘๋™ํ•˜์ง€ ์•Š๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๋งˆ์šดํŠธ ๋‚ด๋ถ€์˜ ํŒŒ์ผ์€ ์—ฌ์ „ํžˆ โ€‹โ€‹๋ฃจํŠธ ์†Œ์œ ์ž…๋‹ˆ๋‹ค.

inotifywait ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ–ˆ์Šต๋‹ˆ๋‹ค. ๋„์ปค ์ด๋ฏธ์ง€ ๋‚ด์—์„œ ์‹คํ–‰ํ•˜๋ ค๋ฉด inotify-tools๋ฅผ ์„ค์น˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋Œ€์‹  ํ˜ธ์ŠคํŠธ ์‹œ์Šคํ…œ์—์„œ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ํœด๋Œ€์šฉ ์†”๋ฃจ์…˜์„ ์›ํ–ˆ์Šต๋‹ˆ๋‹ค.

RUN export DEBIAN_FRONTEND=noninteractive \
  && apt -y update \
  && apt -y install inotify-tools \
  && inotifywait -m -r /mount -e create --format '%w%f' \
    | while read f; do chown $(stat -c '%u' /mount):$(stat -c '%g' /mount) $f; done

์ด๊ฒƒ์€ inotifywait๊ฐ€ /mount ๋””๋ ‰ํ† ๋ฆฌ์— ์ƒ์„ฑ๋œ ์ƒˆ ํŒŒ์ผ์ด๋‚˜ ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ๊ฐ์‹œํ•˜๋„๋ก ์ง€์‹œํ•จ์œผ๋กœ์จ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ํ•˜๋‚˜๋ฅผ ๋ฐœ๊ฒฌํ•˜๋ฉด ์†Œ์œ ๊ถŒ์„ /mount ํด๋”์™€ ๋™์ผํ•œ ์‚ฌ์šฉ์ž ๋ฐ ๊ทธ๋ฃน์œผ๋กœ ๋ณ€๊ฒฝํ•ฉ๋‹ˆ๋‹ค. ํ˜ธ์ŠคํŠธ ์‚ฌ์šฉ์ž/๊ทธ๋ฃน์ด ์ปจํ…Œ์ด๋„ˆ์— ์—†๋Š” ๊ฒฝ์šฐ๋ฅผ ๋Œ€๋น„ํ•˜์—ฌ ๋‘˜ ๋‹ค์˜ ์ •์ˆ˜ ํ‘œํ˜„์„ ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค. ๋ชจ๋“  ๊ฒƒ์ด ๋ฃจํŠธ๋กœ ์‹คํ–‰๋˜๊ธฐ ๋•Œ๋ฌธ์— ์ปจํ…Œ์ด๋„ˆ ๋‚ด๋ถ€์—์„œ๋Š” ๋ˆ„๊ฐ€ ๊ทธ๊ฒƒ์„ ์†Œ์œ ํ•˜๊ณ  ์žˆ๋Š”์ง€๋Š” ์ค‘์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ปจํ…Œ์ด๋„ˆ ์™ธ๋ถ€์—์„œ ํ˜ธ์ŠคํŠธ ํŒŒ์ผ ์‹œ์Šคํ…œ์€ /mount์— ๋งˆ์šดํŠธ๋œ ๋””๋ ‰ํ† ๋ฆฌ์™€ ๋™์ผํ•œ ์†Œ์œ ๊ถŒ์„ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.

๊ธฐ์กด ํŒŒ์ผ ๋ฐ ๋””๋ ‰ํ† ๋ฆฌ์˜ ์†Œ์œ ๊ถŒ์„ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ์˜๋„์ ์œผ๋กœ ์ƒˆ๋กœ ์ƒ์„ฑ๋œ ํŒŒ์ผ ๋ฐ ๋””๋ ‰ํ† ๋ฆฌ์˜ ์†Œ์œ ๊ถŒ๋งŒ ์„ค์ •ํ•˜๋„๋ก ์„ค๊ณ„ํ–ˆ์Šต๋‹ˆ๋‹ค. ํŒŒ์ผ ์‹œ์Šคํ…œ์ด ๋งˆ์šดํŠธ๋  ๋•Œ๋งˆ๋‹ค chown -R ๋ฌธ์œผ๋กœ ๋ชจ๋“  ๊ฒƒ์„ ๋‚ ๋ ค๋ฒ„๋ฆฌ๋Š” ๊ฒƒ๋ณด๋‹ค ์•ˆ์ „ํ•ฉ๋‹ˆ๋‹ค. ํ”„๋กœ์ ํŠธ์— ๊ท ์ผํ•œ ๊ถŒํ•œ์ด ์ ์šฉ๋˜๊ณ  ๋ณด๋‹ค ํšจ์œจ์ ์œผ๋กœ ์‹คํ–‰๋˜๋Š” ๋” ๊ฐ„๋‹จํ•œ ์†”๋ฃจ์…˜์„ ์›ํ•˜๋Š” ๊ฒฝ์šฐ inotify-hookable ์„ ์‚ดํŽด๋ณด์„ธ์š”.

๊ฒฝ๊ณ : ํ•˜์œ„ ๋””๋ ‰ํ† ๋ฆฌ๋‹น ํ•˜๋‚˜์˜ inotify ๊ฐ์‹œ๊ฐ€ ์„ค์ •๋˜๋ฏ€๋กœ ์‚ฌ์šฉ์ž๋‹น ์ตœ๋Œ€ inotify ๊ฐ์‹œ ์ˆ˜์— ๋„๋‹ฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ธฐ๋ณธ ์ตœ๋Œ€๊ฐ’์€ 8192์ž…๋‹ˆ๋‹ค. /proc/sys/fs/inotify/max_user_watches์— ์ž‘์„ฑํ•˜์—ฌ ๋Š˜๋ฆด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ˜ธ์ŠคํŠธ ์ธก ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ด๋ฏธ์ง€๋ฅผ ๋‹ค์‹œ ๋นŒ๋“œํ•  ํ•„์š”๊ฐ€ ์—†๋„๋ก ๋งˆ์šดํŠธ๋œ ๋ณผ๋ฅจ์„ chown ํ–ˆ์Šต๋‹ˆ๋‹ค.

#!/bin/bash
set -e

DOCKER_IMAGE=<docker_image>
COMMAND=<internal_command>

DOCKER_USER=docker-user
DOCKER_GROUP=docker-group

HOME_DIR=/work
WORK_DIR="$HOME_DIR/$(basename $PWD)"

PARAMS="$PARAMS -it --rm"
PARAMS="$PARAMS -v $PWD:$WORK_DIR"
PARAMS="$PARAMS -w $WORK_DIR"

USER_ID=$(id -u)
GROUP_ID=$(id -g)

run_docker()
{
  echo \
    groupadd -f -g $GROUP_ID $DOCKER_GROUP '&&' \
    useradd -u $USER_ID -g $DOCKER_GROUP $DOCKER_USER '&&' \
    chown $DOCKER_USER:$DOCKER_GROUP $WORK_DIR '&&' \
    sudo -u $DOCKER_USER HOME=$HOME_DIR $COMMAND
}

if [ -z "$DOCKER_HOST" ]; then
    docker run $PARAMS $DOCKER_IMAGE "$(run_docker) $*"
else
    docker run $PARAMS $DOCKER_IMAGE $COMMAND "$*"
fi

ํ˜ธ์ŠคํŠธ ๋””๋ ‰ํ† ๋ฆฌ์—์„œ ํŒŒ์ผ ์‹œ์Šคํ…œ ACL์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์€ ์–ด๋–ป์Šต๋‹ˆ๊นŒ? ๊ทธ๋ ‡๊ฒŒ ํ•˜๋ฉด ๋””๋ ‰ํ† ๋ฆฌ ๋‚ด๋ถ€์— ์ƒˆ๋กœ ์ƒ์„ฑ๋œ ํŒŒ์ผ์— ํŠน์ • ๊ถŒํ•œ์„ ์ ์šฉํ•˜๋„๋ก ํŒŒ์ผ ์‹œ์Šคํ…œ์— ์ง€์‹œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ˜ธ์ŠคํŠธ ์ˆ˜์ค€์—์„œ ACL์„ ์„ค์ •ํ•˜๋ฉด ์ปจํ…Œ์ด๋„ˆ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์ •ํ•˜๋Š” ๊ฒฝ์šฐ์—๋„ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

@jjjjjjjjjjjjjjr _ _

@kamechen ์€ ๋ช…๋ช…๋œ ๋ณผ๋ฅจ์ด "๊ทธ๋ƒฅ ์ž‘๋™"ํ•˜๋Š” ๊ฒƒ์ด ๋งž๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๋ช…๋ช…๋œ ๋ณผ๋ฅจ์˜ ๊ฒฝ์šฐ ๊ธฐ์กด ๊ถŒํ•œ์ด "์—ญํšจ๊ณผ"๋ฅผ ์ผ์œผ์ผœ ๋ณผ๋ฅจ ๊ถŒํ•œ์„ ๋ณ€๊ฒฝํ•˜๋Š”๋ฐ, ์ €๋Š” ๊ฐœ์ธ์ ์œผ๋กœ ์ด๊ฒƒ์„ ๋ฒ„๊ทธ(#28041)๋กœ ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

@thegecko , ์ด ์ ‘๊ทผ ๋ฐฉ์‹์„ ๋” ์ทจํ•˜๊ณ  ์ง„์ž…์  ๋‚ด์—์„œ ์‚ฌ์šฉ์ž๋ฅผ ์ƒ์„ฑํ•˜์ง€ ์•Š๋Š” ์ด์œ ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

๋‹ค์Œ์€ ๋‚ด ์˜ˆ์ž…๋‹ˆ๋‹ค. ๋งˆ์šดํŠธ๋œ ๋””๋ ‰ํ† ๋ฆฌ์˜ ์†Œ์œ ์ž๋ฅผ ๊ฐ์ง€ํ•˜๊ณ  ๋™์ผํ•œ UID๋กœ ์‚ฌ์šฉ์ž๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ์ด ์‚ฌ์šฉ์ž์—์„œ์™€ ๊ฐ™์ด ๋ช…๋ น์„ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

๋„์ปคํŒŒ์ผ

FROM ubuntu

RUN mkdir /project
VOLUME /project

ENV GOSU_VERSION 1.9
RUN set -x \
    && apt-get update && apt-get install -y --no-install-recommends ca-certificates wget && rm -rf /var/lib/apt/lists/* \
    && dpkgArch="$(dpkg --print-architecture | awk -F- '{ print $NF }')" \
    && wget -O /usr/local/bin/gosu "https://github.com/tianon/gosu/releases/download/$GOSU_VERSION/gosu-$dpkgArch" \
    && wget -O /usr/local/bin/gosu.asc "https://github.com/tianon/gosu/releases/download/$GOSU_VERSION/gosu-$dpkgArch.asc" \
    && export GNUPGHOME="$(mktemp -d)" \
    && gpg --keyserver ha.pool.sks-keyservers.net --recv-keys B42F6819007F00F88E364FD4036A9C25BF357DD4 \
    && gpg --batch --verify /usr/local/bin/gosu.asc /usr/local/bin/gosu \
    && rm -r "$GNUPGHOME" /usr/local/bin/gosu.asc \
    && chmod +x /usr/local/bin/gosu \
    && gosu nobody true \
    && apt-get purge -y --auto-remove ca-certificates wget

ADD entrypoint.sh /

ENTRYPOINT ["/entrypoint.sh"]

CMD /project/run.sh

์ง„์ž…์ .sh

#!/bin/sh

USER=dockeruser
VOLUME=/project
UID="$(stat -c '%u' $VOLUME)" && \
useradd --uid "$UID" "$USER" && \
ls -l "$VOLUME" && \
exec gosu "$USER" "$@"

์‹คํ–‰.sh

#!/bin/sh

echo "Running as \"$(id -nu)\""

sudo docker build -t test . && sudo docker run --rm -v /tmp/docker-test/:/project test:latest ๋ฅผ ์‹คํ–‰ํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ถœ๋ ฅ๋ฉ๋‹ˆ๋‹ค.

total 12
-rw-r--r-- 1 dockeruser dockeruser 990 Dec 12 10:55 Dockerfile
-rwxr-xr-x 1 dockeruser dockeruser 156 Dec 12 11:03 entrypoint.sh
-rwxr-xr-x 1 dockeruser dockeruser  31 Dec 12 11:01 run.sh
Running as "dockeruser"

์ด ๋ฌธ์ œ๋ฅผ ๊ณ ๋ คํ•œ ์‚ฌ๋žŒ์ด ์žˆ์Šต๋‹ˆ๊นŒ? ๋ณผ๋ฅจ์ด ์ปจํ…Œ์ด๋„ˆ์™€ ๋™์ผํ•œ gid ๋ฐ uid๋ฅผ ๊ฐ–๋„๋ก ํ•˜๋ฉด ๋ฃจํŠธ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋„๋ก ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๊ด€๋ฆฌํ•˜๊ธฐ๊ฐ€ ๋” ์–ด๋ ค์›Œ์ง‘๋‹ˆ๋‹ค. Docker์˜ ๋ชจ๋ฒ” ์‚ฌ๋ก€ ๋Š” ๊ฐ€๋Šฅํ•˜๋ฉด ๋ฃจํŠธ๋กœ ์„œ๋น„์Šค๋ฅผ ์‹คํ–‰ํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ํ˜ธ์ŠคํŠธ์™€ ์ปจํ…Œ์ด๋„ˆ์—์„œ gid ๋ฐ uid๋ฅผ ์„ค์ •ํ•˜์ง€ ์•Š์•„๋„ ๋„์ปค๋ฅผ ์ธ๊ธฐ ์žˆ๊ฒŒ ๋งŒ๋“  ์‚ฌ์šฉ ํŽธ์˜์„ฑ์„ ๋ฌด๋„ˆ๋œจ๋ฆด ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

@AndreasBackx ๋ณผ๋ฅจ์„ ์‚ฌ์šฉํ•˜๋ฉด ์ด๋ฏธ์ง€๊ฐ€ ๋งˆ์šดํŠธ ๊ฒฝ๋กœ์— ๋ฐ์ดํ„ฐ๊ฐ€ ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜๋ฉด ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.
๋ฐ”์ธ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ํ˜ธ์ŠคํŠธ ๊ฒฝ๋กœ์˜ UID/GID๊ฐ€ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

๋”์ฐํ•˜๊ฒŒ ๋Š๋ฆฐ FUSE์™€ ๊ฐ™์€ ๊ฒƒ์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ํ•œ ์›๋ณธ์„ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š๊ณ  ํŒŒ์ผ/๋””๋ ‰ํ† ๋ฆฌ์˜ UID/GID๋ฅผ ๋‹ค๋ฅธ ๊ฒƒ์œผ๋กœ ๋งคํ•‘ํ•˜๊ฑฐ๋‚˜ ๋ณ€๊ฒฝํ•  ๋ฐฉ๋ฒ•์ด ํ˜„์žฌ ์—†์Šต๋‹ˆ๋‹ค(์ปค๋„ ์ง€์› ์—†์Œ).

ํ•˜์ง€๋งŒ ์ž ์‹œ ๋’ค๋กœ ๋ฌผ๋Ÿฌ๋‚˜์ž.
Docker๋Š” ์—ฌ๊ธฐ์„œ ์ผ์„ ๋” ์–ด๋ ต๊ฒŒ ๋งŒ๋“œ๋Š” ๊ฒƒ์ด ์•„๋‹™๋‹ˆ๋‹ค.
์ปจํ…Œ์ด๋„ˆ์˜ UID/GID๋Š” ํ˜ธ์ŠคํŠธ์˜ UID/GID์™€ ๋™์ผํ•ฉ๋‹ˆ๋‹ค.. ์‚ฌ์šฉ์ž/๊ทธ๋ฃน ์ด๋ฆ„์ด ์ผ์น˜ํ•˜์ง€ ์•Š๋”๋ผ๋„ ์—ฌ๊ธฐ์„œ ์ค‘์š”ํ•œ ๊ฒƒ์€ UID/GID์ž…๋‹ˆ๋‹ค.
๋„์ปค๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์„œ๋น„์Šค์— ์‚ฌ์šฉํ•˜๋ ค๋Š” uid/gid๋ฅผ ๊ฐ€์ ธ์™€ ๊ด€๋ก€์— ๋งž์ง€ ์•Š๊ฒŒ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
ํŒŒ์ผ ์†Œ์œ ๊ถŒ์„ ์„ค์ •ํ•˜๊ธฐ ์œ„ํ•ด uid/gid๊ฐ€ /etc/passwd ๋˜๋Š” /etc/group ์— ์žˆ์„ ํ•„์š”๋Š” ์—†์Šต๋‹ˆ๋‹ค.

@cpuguy83 ์„ค๋ช… ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

์˜ค๋Š˜ node ํŒŒ์ดํ”„๋ผ์ธ์„ ์ƒ์„ฑํ•˜๋Š” ๋™์•ˆ ์ด ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค. ๋‚ด ํ˜ธ์ŠคํŠธ ์‚ฌ์šฉ์ž UID๋Š” 1000์ด๊ณ  node ์ด๋ฏธ์ง€ ๋Š” ํ•ด๋‹น ํŠน์ • UID๋กœ ์‚ฌ์šฉ์ž ์ง€์ • ์‚ฌ์šฉ์ž๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ์ด์— ๋Œ€ํ•œ ๋ฌธ์ œ๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

๋…ธ๋“œ ์‚ฌ์šฉ์ž๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ๊ณ„์† ์ง„ํ–‰ํ•˜์ง€๋งŒ ์•ฝ๊ฐ„ ๋”๋Ÿฌ์›Œ์ง„ ๋Š๋‚Œ์ด ๋“ญ๋‹ˆ๋‹ค. @cpuguy83 ์—์„œ "์ž ์‹œ ๋’ค๋กœ ๋ฌผ๋Ÿฌ๋‚˜์ž"์— ๋Œ€ํ•ด ์“ด ๋‚ด์šฉ์„ ๊ณต์œ ํ•˜์ง€๋งŒ ๋•Œ๋กœ๋Š” ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์–ด๋ ค์šธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ค‘๋ณต IDS๋ฅผ ํ—ˆ์šฉํ•˜๊ธฐ ์œ„ํ•ด usermod ์—์„œ -o ์˜ต์…˜์„ ์ฐพ์•˜์Šต๋‹ˆ๋‹ค. ํ•ฉ๋ฒ•์ ์ธ ์˜ต์…˜์ธ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

RUN usermod -o -u 1000 <user>

์ด๊ฒƒ์ด ํ•ฉ๋ฆฌ์ ์ธ ๋ฐฉ๋ฒ•์œผ๋กœ ํ•ด๊ฒฐ๋˜์ง€ ์•Š์€ ์ด์œ ๊ฐ€ ํ™•์‹คํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

docker run -it -u 1000:4211 -v /home/web/production/nginx_socks:/app/socks -e SOCKS_PATH=/app/socks --name time_master  time_master

๋กœ๊ทธ์ธํ•˜์—ฌ ๋ณด๋ ค๋ฉด:

drwxr-xr-x    8 geodocr_ geodocr       4096 Jun  4 18:51 .
drwxr-xr-x   57 root     root          4096 Jun  6 21:17 ..
-rwxrwx---    1 geodocr_ geodocr        140 Jun  4 18:49 .env
-rwxrwx--x    1 geodocr_ geodocr         78 Jun  4 18:49 entrypoint.sh
drwxrwxr-x    2 geodocr_ geodocr       4096 Jun  4 18:51 handlers
-rwxrwx---    1 geodocr_ geodocr        242 Jun  4 18:49 requirements.txt
-rwxrwx---    1 geodocr_ geodocr       1270 Jun  4 18:49 server.py
drwxr-xr-x    2 root     root          4096 Jun  6 21:00 socks
drwxr-xr-x   10 geodocr_ geodocr       4096 Jun  4 18:51 utils

dockerfile์€ ๊ตฌ์ฒด์ ์œผ๋กœ ๋‹ค์Œ์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

RUN adduser  -D -u 1000 $USER 
#
RUN addgroup $GROUP -g 4211 
#
RUN addgroup $USER $GROUP 
RUN mkdir /app/socks
USER $USER  
#

์ปจํ…Œ์ด๋„ˆ์˜ ์‚ฌ์šฉ์ž๋„ ์„ ํƒ๋˜์ง€ ์•Š๊ณ  ๋ช…๋ น์„ ์‹คํ–‰ํ•˜๋Š” ์‚ฌ์šฉ์ž๋„ ์„ ํƒ๋˜์ง€ ์•Š์€ ๊ฒฝ์šฐ ์ด ๋ณผ๋ฅจ์ด ๋ฃจํŠธ๋กœ ๋งˆ์šดํŠธ๋œ๋‹ค๋Š” ๊ฒƒ์€ ์˜๋ฏธ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. RUN ๋ช…๋ น์ด ๋ช…๋ น์„ ์‹คํ–‰ํ•˜๋Š” ์‚ฌ์šฉ์ž๋กœ ๋งˆ์šดํŠธ๋˜์—ˆ๋Š”์ง€, ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ์†Œ์œ ํ•œ ์‚ฌ์šฉ์ž์ธ์ง€, Dockerfile์— ์ง€์ •๋œ ์‚ฌ์šฉ์ž์ธ์ง€ ์ดํ•ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๋“ค ์ค‘ ์–ด๋Š ๊ฒƒ๋„ ๋ฃจํŠธ๊ฐ€ ์•„๋‹ˆ๋ฏ€๋กœ ๋ฃจํŠธ๋กœ ๋งˆ์šดํŠธํ•˜๋Š” ๊ฒƒ์€ ๋ฒ„๊ทธ์ธ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

๋˜ํ•œ ๋ฐฉ๊ธˆ ํ™•์ธํ•˜์—ฌ ๋ณผ๋ฅจ์„ ์ƒ์„ฑํ•œ ๋‹ค์Œ ๋งˆ์šดํŠธ๊ฐ€ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์—ฌ์ „ํžˆ ๋ฒ„๊ทธ์ž…๋‹ˆ๋‹ค.

@disarticulate ํ˜ธ์ŠคํŠธ ๊ฒฝ๋กœ๋ฅผ ๋ฃจํŠธ๊ฐ€ ์•„๋‹Œ ๋‹ค๋ฅธ ๊ฒฝ๋กœ๋กœ ์ง€์ •ํ•˜๋ ค๋ฉด ํ˜ธ์ŠคํŠธ ๊ฒฝ๋กœ๋ฅผ ๋ณ€๊ฒฝํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ด๊ฒƒ์ด ์ „์— ์–ธ๊ธ‰๋œ ์ ์ด ์—†๋‹ค๊ณ  ์ƒ๊ฐํ•˜์ง€๋งŒ ์ด ๋ฒ„๊ทธ๋Š” Docker์— ์˜์กดํ•˜์—ฌ ํ˜ธ์ŠคํŠธ ๋ณผ๋ฅจ์„ ์ƒ์„ฑํ•  ๋•Œ ํŠนํžˆ ์„ฑ๊ฐ€์‹ญ๋‹ˆ๋‹ค. Docker๋Š” ๋งˆ์šดํŠธํ•˜๋Š” ๋””๋ ‰ํ† ๋ฆฌ์˜ ์†Œ์œ ์ž๊ฐ€ ๋‹ค๋ฅธ ๊ฒฝ์šฐ์—๋„ ํ•ญ์ƒ ๋ฃจํŠธ๋กœ ํ˜ธ์ŠคํŠธ ๋ณผ๋ฅจ์„ ์ƒ์„ฑํ•˜๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์—ฌ๊ธฐ์„œ ํ•ด์•ผ ํ•  ์˜ฌ๋ฐ”๋ฅธ ์ผ์€ ์ด๋ฏธ์ง€์˜ USER ์— ์†ํ•˜๋Š” ์†Œ์œ ๊ถŒ ๊ถŒํ•œ์œผ๋กœ ๋ณผ๋ฅจ์„ ๋งŒ๋“œ๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

@jalaziz ์ปจํ…Œ์ด๋„ˆ์˜ ์‚ฌ์šฉ์ž๊ฐ€ ํ˜ธ์ŠคํŠธ์— ์กด์žฌํ•˜์ง€ ์•Š์„ ๋•Œ ์–ด๋–ป๊ฒŒ ํ•ด์•ผ ํ•˜๋‚˜์š”? ์ปจํ…Œ์ด๋„ˆ์˜ ์ฃผ์š” ์ด์  ์ค‘ ํ•˜๋‚˜๋Š” ํ•ด๋‹น ์ข…์†์„ฑ(์‚ฌ์šฉ์ž ํฌํ•จ)์„ ํ˜ธ์ŠคํŠธ์— ๋…ธ์ถœํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

@taybin Docker๊ฐ€ ์ปจํ…Œ์ด๋„ˆ ์‚ฌ์šฉ์ž์˜ uid:gid ๋กœ ํด๋”๋ฅผ ์ƒ์„ฑํ•˜๊ฑฐ๋‚˜ ํด๋”๊ฐ€ ์ปจํ…Œ์ด๋„ˆ ๋‚ด๋ถ€์— ์กด์žฌํ•˜๋Š” ๊ฒฝ์šฐ ๋™์ผํ•œ uid:gid ๋ฐ ๋งˆ์Šคํฌ๋กœ ํ˜ธ์ŠคํŠธ ํด๋”๋ฅผ ์ƒ์„ฑํ•  ๊ฒƒ์œผ๋กœ ์˜ˆ์ƒํ•ฉ๋‹ˆ๋‹ค.

์ฐธ๊ณ : ํด๋”๊ฐ€ ํ˜ธ์ŠคํŠธ์— ์ด๋ฏธ ์žˆ๋Š” ๊ฒฝ์šฐ Docker ๋ณ€๊ฒฝ ๊ถŒํ•œ์ด ํ•„์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

@taybin ์ •ํ™•ํžˆ @frol ์ด ์„ค๋ช…ํ•œ ๋Œ€๋กœ. ์ปจํ…Œ์ด๋„ˆ์˜ uid:gid ๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ์ด๊ฒƒ์€ ํ˜„์žฌ ์ ‘๊ทผ ๋ฐฉ์‹์— ๋Œ€ํ•œ ์ผ๋ฐ˜์ ์ธ ๋ฌธ์ œ๋ฅผ ๋“œ๋Ÿฌ๋ƒ…๋‹ˆ๋‹ค. ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์“ฐ๊ธฐ๋ฅผ ํ—ˆ์šฉํ•˜๊ณ  ํ•ด๋‹น uid:gid๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ˜ธ์ŠคํŠธ ๋””๋ ‰ํ† ๋ฆฌ์— ๋Œ€ํ•œ ๊ถŒํ•œ์„ ์„ค์ •ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•˜๋Š” uid๋ฅผ ์•Œ์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์—…์ŠคํŠธ๋ฆผ ์ž‘์„ฑ์ž๊ฐ€ uid๋ฅผ ๋ณ€๊ฒฝํ•˜๋ฉด ๊ถŒํ•œ์ด ์ค‘๋‹จ๋ฉ๋‹ˆ๋‹ค. ๋ชจ๋“  ๊ฒƒ์ด ๋งค์šฐ ์—ฐ์•ฝํ•ด ๋ณด์ž…๋‹ˆ๋‹ค.

์ œ ๊ฒฝ์šฐ์—๋Š” ์‚ฌ์šฉ ์ค‘์ธ ๋„์ปค ์ด๋ฏธ์ง€๋ฅผ ๋ช…์‹œ์ ์œผ๋กœ ์ œ์–ดํ•  ํ•„์š”๊ฐ€ ์—†์—ˆ์Šต๋‹ˆ๋‹ค(Dockerfile์„ ์›ํ•˜๋Š” ๋Œ€๋กœ ํŽธ์ง‘ํ•  ์ˆ˜ ์—†์—ˆ์Šต๋‹ˆ๋‹ค).

๊ทธ๋ž˜์„œ ๋‚˜๋Š” ์ด๊ฒƒ์„ ์‹œ๋„ํ–ˆ๋‹ค.

docker run -it -u $(id -u $USER):$(id -g $USER) -v $(pwd):/src -w /src node:latest npm run build

./built-app ๋ผ๋Š” ํด๋”๊ฐ€ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์†Œ์œ ์ž๋Š” ์—ฌ์ „ํžˆ ์—„๊ฒฉํ•œ ๊ถŒํ•œ์ด ์žˆ๋Š” root .

๋‚ด ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

docker run -it -v $(pwd):/src -w /src node:latest /bin/bash -c "npm run build; chmod -R 777 ./built-app"

์—ฌ์ „ํžˆ root ์†Œ์œ ์ž๊ฐ€ ์žˆ์ง€๋งŒ ๊ถŒํ•œ์ด ์™„ํ™”๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ ๋‚ด ํ˜ธ์ŠคํŠธ OS(Ubuntu)๊ฐ€ sudo ๊ถŒํ•œ ์—†์ด ./built-app ์— ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

@ rms1000watt ๋‹ค์Œ ๋ช…๋ น์„ ์‹œ๋„ ํ–ˆ์Šต๋‹ˆ๊นŒ?

docker run -it -v $(pwd):/src -w /src node:latest /bin/bash -c "npm run build; chown -R ${UID}:${GID} ./built-app"

ํ˜ธ์ŠคํŠธ์˜ UID ๋ฐ GID ๋ฅผ ํŒŒ์ผ ์ž์ฒด์— ์ง์ ‘ ์‚ฌ์šฉํ•˜๋ฏ€๋กœ ์ž‘๋™ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. chmod -R 777 ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์€ ์ผ๋ฐ˜์ ์œผ๋กœ ์ข‹์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

@saada ์›์Šค! ์ข‹์€ ์ „ํ™”์ž…๋‹ˆ๋‹ค. ํ•œ๋ฒˆ ํ•ด๋ณผ๊ป˜์š”.

๋‚˜๋Š” ์ด๊ฒƒ์„ ์ฝ๊ณ  Docker ์ปจํ…Œ์ด๋„ˆ์—์„œ _UID ๋ฐ GID๊ฐ€ ์ž‘๋™ํ•˜๋Š” ๋ฐฉ์‹์„ ์ดํ•ดํ•˜๋Š” ์ ‘๊ทผ ๋ฐฉ์‹์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
https://medium.com/@mccode/understanding -how-uid-and-gid-work-in-docker-containers-c37a01d01cf

๊ธฐ๋ณธ์ ์œผ๋กœ ๋กœ์ปฌ ์‹œ์Šคํ…œ์˜ ๋ฃจํŠธ๊ฐ€ ์ปจํ…Œ์ด๋„ˆ์˜ ๋ฃจํŠธ์™€ ๋™์ผํ•˜๊ณ  ๋‘˜ ๋‹ค ๋™์ผํ•œ UID๋ฅผ ๊ณต์œ ํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•˜๋Š” ๋‹จ์ผ ์ปค๋„๊ณผ ๋‹จ์ผ ๊ณต์œ  uid ๋ฐ gid ํ’€์ด ์žˆ์Šต๋‹ˆ๋‹ค.


์•„ํŒŒ์น˜ ์„œ๋ฒ„๊ฐ€ ์žˆ๊ณ  ๋‚ด webapp ํŒŒ์ผ์„ ์•„ํŒŒ์น˜ ์ปจํ…Œ์ด๋„ˆ์™€ ๊ณต์œ ํ•˜์—ฌ ํ˜ธ์ŠคํŠธ์—์„œ ์ˆ˜์ •ํ•˜๊ณ (๊ฐœ๋ฐœ, ํ…์ŠคํŠธ ํŽธ์ง‘๊ธฐ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ณ€๊ฒฝ) ์ปจํ…Œ์ด๋„ˆ์—์„œ ์‹คํ–‰ ์ค‘์ธ ํ”„๋กœ์„ธ์Šค์˜ ๊ฒฐ๊ณผ๋ฅผ ๋ณด๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ๋•Œ๋กœ๋Š” ๊ทธ ํ”„๋กœ์„ธ์Šค์—์„œ ์ƒˆ ํŒŒ์ผ์„ ์ž‘์„ฑํ•˜๊ณ  ๊ถŒํ•œ์œผ๋กœ ๊ธฐ๋ณธ ๋™์ž‘์„ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š์œผ๋ฉด ๋ฃจํŠธ ์‚ฌ์šฉ์ž๊ฐ€ ํŒŒ์ผ์„ ์ƒ์„ฑํ•˜๊ณ  ๋‚ด ๋กœ์ปฌ ์‚ฌ์šฉ์ž๊ฐ€ ๋” ์ด์ƒ ํŒŒ์ผ์„ ์ˆ˜์ •ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

๋‚ด๊ฐ€ ํ•œ ๊ฒƒ์€ ๋‚ด dockerfile์— ์ด๊ฒƒ์„ ์ถ”๊ฐ€ํ•˜๋Š” ์‚ฌ์šฉ์ž ์ •์˜ ์ด๋ฏธ์ง€๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

RUN adduser -D -u 1002 dianjuar -G www-data
USER dianjuar

๋‚ด docker-compose.yml ๋ฅผ ๋ˆ„๊ตฌ๋‚˜ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋ ค๋ฉด ๋นŒ๋“œ ํ”„๋กœ์„ธ์Šค์— ์ผ๋ถ€ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ๋„ฃ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋‹ค์Œ์€ ์‰ฝ๊ฒŒ ์ด์‹ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ์‹์œผ๋กœ ๋Ÿฐํƒ€์ž„์— userid/groupid๋ฅผ ํ• ๋‹นํ•˜๊ธฐ ์œ„ํ•œ ์ปจํ…Œ์ด๋„ˆ ํŒจํ„ด์ž…๋‹ˆ๋‹ค. https://github.com/Graham42/mapped-uid-docker

๋‚ด๊ฐ€ ๋”ฐ๋ž๋˜ ๋ฐฉ๋ฒ•:

1- ํ˜ธ์ŠคํŠธ ์„œ๋ฒ„์— ๋””๋ ‰ํ† ๋ฆฌ ์ƒ์„ฑ
2- userid ๋ฐ groupid = 1000์ธ ์‚ฌ์šฉ์ž์— ๋Œ€ํ•œ ๊ถŒํ•œ ๋ณ€๊ฒฝ
3- docker-compose up ์‹คํ–‰
์ปจํ…Œ์ด๋„ˆ๋ฅผ ํ™•์ธํ•˜๊ณ  ๋ชจ๋“  ๊ฒƒ์ด ์ •์ƒ์ž…๋‹ˆ๋‹ค.

์ฐธ๊ณ : ํ˜ธ์ŠคํŠธ ์„œ๋ฒ„์—์„œ ๋ฃจํŠธ ์‚ฌ์šฉ์ž๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์—ˆ๊ณ  uid = 1000์ธ ๋ฃจํŠธ๊ฐ€ ์•„๋‹Œ ์‚ฌ์šฉ์ž๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ๊ถŒํ•œ์— ๋Œ€ํ•ด ๊ฑฑ์ •ํ•˜์ง€ ์•Š๊ณ  ๋ณผ๋ฅจ์„ ํƒ‘์žฌํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜์ง€๋งŒ ์•„์ง ํ…Œ์ŠคํŠธํ•˜์ง€๋Š” ์•Š์•˜์Šต๋‹ˆ๋‹ค. ๋น„์Šทํ•œ ๋ฐฉ์‹์œผ๋กœ ๋”ฐ๋ผํ•œ ์‚ฌ๋žŒ์ด ์žˆ์Šต๋‹ˆ๊นŒ?

์ผ๋ฐ˜์ ์ธ ๋ฌธ์ œ:

  • docker swarm, ๋”ฐ๋ผ์„œ CAPP_ADD๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์œผ๋ฉฐ bind-mount๋Š” ์†”๋ฃจ์…˜์ด ์•„๋‹™๋‹ˆ๋‹ค.
  • ๋‘ ๊ฐœ์˜ ์„œ๋กœ ๋‹ค๋ฅธ ์ด๋ฏธ์ง€๊ฐ€ ์žˆ๋Š” ๋‘ ๊ฐœ์˜ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ๋™์ผํ•œ ๋ณผ๋ฅจ์„ ๊ณต์œ ํ•˜๋ฏ€๋กœ ๋‘˜ ๋‹ค์— ์žˆ๋Š” ์„œ๋กœ ๋‹ค๋ฅธ ์‚ฌ์šฉ์ž/๊ทธ๋ฃน ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค
  • ์˜ˆ๋ฅผ ๋“ค์–ด www-data์— ๋Œ€ํ•œ ์•ก์„ธ์Šค ๊ถŒํ•œ์ด ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค(์ฆ‰, ์ธ์ฆ์„œ ๋‹ค์šด๋กœ๋”๋ฅผ ์•”ํ˜ธํ™”ํ•ฉ์‹œ๋‹ค).
  • ๋‹ค๋ฅธ ํ•˜๋‚˜๋Š” www-data(์ฆ‰, nginx)๋„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
  • ๊ทธ๋Ÿฌ๋‚˜ ์„ธ ๋ฒˆ์งธ๋Š” ์‚ฌ์šฉ์ž openldap(์ฆ‰, openldap ์„œ๋ฒ„)์˜ ์•ก์„ธ์Šค๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.
  • ๋„ˆ๋ฌด ๊ฐ„๋‹จํ•œ chmod๋„ ์†”๋ฃจ์…˜์ด ์•„๋‹™๋‹ˆ๋‹ค.

์ฆ‰, let's encrpt์—์„œ ๋„๋ฉ”์ธ์— ๋Œ€ํ•œ SSL ์ธ์ฆ์„œ๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ์›น ์„œ๋ฒ„์™€ ์ธ์ฆ์„œ๋ฅผ ์žฌ์‚ฌ์šฉํ•˜๋ ค๋Š” ๋™์ผํ•œ ๋„๋ฉ”์ธ์— ๋Œ€ํ•œ OpenLDAP ์„œ๋ฒ„๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

์ •ํ™•ํžˆ ๋™์ผํ•œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ๋‹ค๋ฅธ ์กฐํ•ฉ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

์–ด๋–ค ์•„์ด๋””์–ด, ์ด๊ฒƒ์„ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐฉ๋ฒ•?

Docker ์—†์ด ์–ด๋–ป๊ฒŒ ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? ์ด๊ฒƒ์€ Docker ์ „์šฉ์ด ์•„๋‹™๋‹ˆ๋‹ค.
๋ฌธ์ œ.

2018๋…„ 1์›” 12์ผ ๊ธˆ์š”์ผ ์˜ค์ „ 10์‹œ 24๋ถ„, Marc Wรคckerlin [email protected]
์ผ๋‹ค:

์ผ๋ฐ˜์ ์ธ ๋ฌธ์ œ:

  • docker swarm, ๋”ฐ๋ผ์„œ CAPP_ADD๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์œผ๋ฉฐ bind-mount๋Š”
    ํ•ด๊ฒฐ์ฑ…
  • ๋‘ ๊ฐœ์˜ ๋‹ค๋ฅธ ์ด๋ฏธ์ง€๊ฐ€ ์žˆ๋Š” ๋‘ ๊ฐœ์˜ ์ปจํ…Œ์ด๋„ˆ๋Š” ๋™์ผํ•œ ๋ณผ๋ฅจ์„ ๊ณต์œ ํ•˜๋ฏ€๋กœ
    ๋‘˜ ๋‹ค์— ์„œ๋กœ ๋‹ค๋ฅธ ์‚ฌ์šฉ์ž/๊ทธ๋ฃน ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค
  • ์˜ˆ๋ฅผ ๋“ค์–ด www-data์— ๋Œ€ํ•œ ์•ก์„ธ์Šค ๊ถŒํ•œ์ด ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค(์˜ˆ:
    ์ธ์ฆ์„œ ๋‹ค์šด๋กœ๋”)
  • ๋‹ค๋ฅธ ํ•˜๋‚˜๋Š” www-data(์ฆ‰, nginx)๋„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
  • ๊ทธ๋Ÿฌ๋‚˜ ์„ธ ๋ฒˆ์งธ ๊ฒƒ์€ ์‚ฌ์šฉ์ž openldap(์ฆ‰, openldap
    ์„ฌ๊ธฐ๋Š” ์‚ฌ๋žŒ)
  • ๋„ˆ๋ฌด ๊ฐ„๋‹จํ•œ chmod๋„ ์†”๋ฃจ์…˜์ด ์•„๋‹™๋‹ˆ๋‹ค.

์ฆ‰, ๋„๋ฉ”์ธ์— ๋Œ€ํ•œ SSL ์ธ์ฆ์„œ๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ์›น ์„œ๋ฒ„๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.
let's encrpt์™€ ๋™์ผํ•œ ๋„๋ฉ”์ธ์— ๋Œ€ํ•œ OpenLDAP ์„œ๋ฒ„์—์„œ
์ธ์ฆ์„œ๋ฅผ ์žฌ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

์ •ํ™•ํžˆ ๋™์ผํ•œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ๋‹ค๋ฅธ ์กฐํ•ฉ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

์–ด๋–ค ์•„์ด๋””์–ด, ์ด๊ฒƒ์„ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐฉ๋ฒ•?

โ€”
๋‹น์‹ ์ด ์–ธ๊ธ‰๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด๊ฒƒ์„ ๋ฐ›๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
์ด ์ด๋ฉ”์ผ์— ์ง์ ‘ ๋‹ต์žฅํ•˜๊ณ  GitHub์—์„œ ํ™•์ธํ•˜์„ธ์š”.
https://github.com/moby/moby/issues/2259#issuecomment-357267193 ๋˜๋Š” ์Œ์†Œ๊ฑฐ
์Šค๋ ˆ๋“œ
https://github.com/notifications/unsubscribe-auth/AAwxZgyvdCwGGVkUqCxK9nDFw1zxSKjUks5tJ3kXgaJpZM4BGxv9
.

--

  • ๋ธŒ๋ผ์ด์–ธ ๊ณ ํ”„

Swarm์ด ์—†์–ด๋„ docker: bind-mount์—์„œ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

CAP_ADD๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์— docker-swarm ํŠน์ • ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค.

@mwaeckerlin ๋ฐ”์ธ๋“œ ๋งˆ์šดํŠธ๋Š” ๋‹ค๋ฅธ ์‚ฌ์šฉ์ž ID์— ๋งคํ•‘ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
๊ทธ๋Ÿฌ๋‚˜ swarm์œผ๋กœ๋„ ๋งˆ์šดํŠธ๋ฅผ ๋ฐ”์ธ๋”ฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. .... CAP_ADD๊ฐ€ ํ•„์š”ํ•œ ์ด์œ ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

CAP_ADD๊ฐ€ ์—†์œผ๋ฉด ๋„์ปค ๋‚ด๋ถ€ ๋งˆ์šดํŠธ๊ฐ€ ์‹คํŒจํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ๋‚ด ์˜๊ฒฌ์„ ์ž‘์„ฑํ•˜์—ฌ ๊ฐ€๋Šฅํ•œ ์†”๋ฃจ์…˜์„ ์–ป์—ˆ์ง€๋งŒ ๋ถˆํ–‰ํžˆ๋„ ๋‘ ์ด๋ฏธ์ง€ ๋ชจ๋‘์—์„œ Dockerfile ๋ฅผ ๋ณ€๊ฒฝํ•ด์•ผ ํ•˜๋ฏ€๋กœ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋˜๋Š” ๊ธฐํƒ€ ํƒ€์‚ฌ ์ด๋ฏธ์ง€์—์„œ๋Š” ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

  • ๋ชจ๋“  Dockerfiles์—์„œ ๋ช…์‹œ์ ์œผ๋กœ ์ง€์ •๋œ ๊ณตํ†ต ๊ทธ๋ฃน ID๋กœ ๊ทธ๋ฃน์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค.
  • ๊ทธ๋ฃน์— ๊ถŒํ•œ์„ ๋ถ€์—ฌ

@mwaeckerlin ์ปจํ…Œ์ด๋„ˆ ๋‚ด๋ถ€์— ๋งˆ์šดํŠธํ•ด์•ผ ํ•˜๋Š” ์ด์œ ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

๋„์ปค ์˜ต์…˜ -v ์œผ๋กœ ์‚ฌ์šฉ์ž/๊ทธ๋ฃน์„ ์ง€์ •ํ•  ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

์œ„์— ์ง€์ •๋œ ์•„์ด๋””์–ด๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์ปจํ…Œ์ด๋„ˆ ๋‚ด๋ถ€์— ๋ฐ”์ธ๋”ฉ ๋งˆ์šดํŠธํ•œ ๋‹ค์Œ ๋Œ€์ƒ์— ๋Œ€ํ•œ chown์€ ์†Œ์Šค๋ฅผ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค.

@mwaeckerlin ๋ฐ”๊พธ๋ฉด ์—ฌ๊ธฐ์ €๊ธฐ ๋‹ค ๋ฐ”๋€๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด ์ด ๋ฌธ์ œ์˜ ํ•ต์‹ฌ์ž…๋‹ˆ๋‹ค.
๋ฐ”์ธ๋“œ ๋งˆ์šดํŠธ๋œ ํŒŒ์ผ/๋””๋ ‰ํ† ๋ฆฌ๋ฅผ Chowning/Chmodingํ•˜๋ฉด ๋‘ ์œ„์น˜๊ฐ€ ๋ชจ๋‘ ๋ณ€๊ฒฝ๋ฉ๋‹ˆ๋‹ค.

๋˜ํ•œ ์ปจํ…Œ์ด๋„ˆ ๋‚ด๋ถ€์— ๋งˆ์šดํŠธํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค --mount type=bind,source=/foo,target=/bar

์˜ˆ, ๋ฐฉ๊ธˆ ๋„์ปค ์™ธ๋ถ€์—์„œ ํ…Œ์ŠคํŠธ ํ–ˆ์œผ๋ฏ€๋กœ ์œ„์˜ ์•„์ด๋””์–ด๋Š” ์ž˜๋ชป๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

๋‚ด๊ฐ€ ๋„์ปค์—์„œ ์ž์ฃผ ๋ณด๋Š” ์ฃผ์š” ๋ฌธ์ œ๋Š” ์‚ฌ์šฉ์ž, ๊ทธ๋ฃน์ด ๋‹ค๋ฅธ ์ด๋ฏธ์ง€์—์„œ ๋™์ผํ•˜์ง€ ์•Š๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋™์ผํ•œ ์‚ฌ์šฉ์ž ์ด๋ฆ„์ด๋‚˜ ๊ทธ๋ฃน ์ด๋ฆ„์ด ๋‘˜ ๋‹ค์— ์กด์žฌํ•˜๋”๋ผ๋„ ์ข…์ข… ID๊ฐ€ ๋‹ค๋ฆ…๋‹ˆ๋‹ค.

๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ฒƒ์ด ์–ด๋–ค ๊ฒฝ์šฐ์—๋Š” ์ตœ์†Œํ•œ ๋„์›€์ด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค. --mount type=bind,source=/foo,target=/bar,user=me,group=mine

์ด ์ฃผ์ œ์— ๋Œ€ํ•œ ๊ถŒ์žฅ ์‚ฌํ•ญ ๋˜๋Š” ๋ชจ๋ฒ” ์‚ฌ๋ก€: docker swarm์˜ ๋‹ค๋ฅธ ์ด๋ฏธ์ง€์—์„œ ๋‹ค๋ฅธ ์‚ฌ์šฉ์ž์˜ ๊ณต์œ  ๋ณผ๋ฅจ ์‚ฌ์šฉ์ž?

  1. ๋ณผ๋ฅจ์„ ๊ณต์œ ํ•˜์ง€ ๋งˆ์‹ญ์‹œ์˜ค
  2. uid/gids ๋™๊ธฐํ™”
  3. ๊ณต์œ ํ•˜๋Š” ๋ชจ๋“  ์‚ฌ์šฉ์ž์— ๋Œ€ํ•ด ๊ถŒํ•œ์ด ์ถฉ๋ถ„ํžˆ ํ—ˆ์šฉ๋˜๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
  4. ํ˜ธ์ŠคํŠธ์—์„œ ํ“จ์ฆˆ ๋งˆ์šดํŠธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ ์ปจํ…Œ์ด๋„ˆ์— ๋Œ€ํ•ด ๋‹ค๋ฅธ uid/gid์— ๋ฐ”์ธ๋”ฉํ•˜์‹ญ์‹œ์˜ค.

4๋ฒˆ ํ•ญ๋ชฉ์— ๋Œ€ํ•ด ์ž์„ธํžˆ ์„ค๋ช…ํ•ด ์ฃผ์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?
๊ทธ๋ ‡๊ฒŒ ํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ์‹ค์šฉ์ ์ธ ์˜ˆ๊ฐ€ ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

2018๋…„ 1์›” 12์ผ ๊ธˆ์š”์ผ 17:27 Brian Goff, ์•Œ๋ฆผ @github.com ์ž‘์„ฑ:

>

  1. ๋ณผ๋ฅจ์„ ๊ณต์œ ํ•˜์ง€ ๋งˆ์‹ญ์‹œ์˜ค
  2. uid/gids ๋™๊ธฐํ™”
  3. ๊ณต์œ ํ•˜๋Š” ๋ชจ๋“  ์‚ฌ์šฉ์ž์— ๋Œ€ํ•ด ๊ถŒํ•œ์ด ์ถฉ๋ถ„ํžˆ ํ—ˆ์šฉ๋˜๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
  4. ํ˜ธ์ŠคํŠธ์—์„œ ํ“จ์ฆˆ ๋งˆ์šดํŠธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ๊ฐ์— ๋Œ€ํ•ด ๋‹ค๋ฅธ uid/gid์— ๋ฐ”์ธ๋”ฉํ•˜์‹ญ์‹œ์˜ค.
    ์ปจํ…Œ์ด๋„ˆ

โ€”
์ด ์Šค๋ ˆ๋“œ์— ๊ฐ€์ž…ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด ๋ฉ”์‹œ์ง€๋ฅผ ๋ฐ›๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
์ด ์ด๋ฉ”์ผ์— ์ง์ ‘ ๋‹ต์žฅํ•˜๊ณ  GitHub์—์„œ ํ™•์ธํ•˜์„ธ์š”.
https://github.com/moby/moby/issues/2259#issuecomment-357282169 ๋˜๋Š” ์Œ์†Œ๊ฑฐ
์Šค๋ ˆ๋“œ
https://github.com/notifications/unsubscribe-auth/AHSjvgjb0BFbJhZ1VWM-pLGfa7tRBvDNks5tJ4VPgaJpZM4BGxv9
.

https://bindfs.org/ ์™€ ๊ฐ™์€ ๊ฒƒ์„ ์‚ฌ์šฉ -- ์ด๋ฏธ ๊ตฌํ˜„ํ•œ Docker ๋ณผ๋ฅจ ํ”Œ๋Ÿฌ๊ทธ์ธ์ด ํ•˜๋‚˜ ์ด์ƒ ์žˆ์Šต๋‹ˆ๋‹ค(https://github.com/lebokus/docker-volume-bindfs๋Š” Google์„ ํ†ตํ•ด ์ฐพ์€ ์ฒซ ๋ฒˆ์งธ ๊ฒฐ๊ณผ์ž…๋‹ˆ๋‹ค). .

๋ณผ๋ฅจ์„ ๋งˆ์šดํŠธ ํ•œ ํ›„ ๊ถŒํ•œ์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๋ˆ„๊ตฌ์—๊ฒŒ๋‚˜ ์žˆ์Šต๋‹ˆ๊นŒ?

ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•:
์ด๊ฒƒ์„ Dockerfile์— ์ถ”๊ฐ€
RUN echo "if [ -e container_volume_path ]; then sudo chown user_name container_volume_path; fi" >> /home/user_name/.bashrc
๋ณผ๋ฅจ์ด ๋งˆ์šดํŠธ๋œ ํ›„ container_volume_path ์˜ ์†Œ์œ ๊ถŒ์ด ๋ณ€๊ฒฝ๋ฉ๋‹ˆ๋‹ค.

uid์™€ gid๋ฅผ ๋งคํ•‘ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์€ ๋„์ปค ๋ณผ๋ฅจ ์ฒ˜๋ฆฌ์— ๋ถˆ๊ฐ€์‚ฌ์˜ํ•œ ๋ˆ„๋ฝ ์š”์†Œ์ฒ˜๋Ÿผ ๋ณด์ž…๋‹ˆ๋‹ค. ๊ฐ€์žฅ ๋†€๋ผ์šด ๋ฐฉ๋ฒ•์€ ์ด๋ฅผ ํฌํ•จํ•˜๋Š” ๊ฒƒ์ด๋ฉฐ ์ œ์•ˆ๋œ ์ˆ˜์ • ์‚ฌํ•ญ์€ ํˆฌ๋ฐ•ํ•˜๊ณ  ๋ฐœ๊ฒฌํ•˜๊ธฐ๊ฐ€ ๋” ์–ด๋ ต์ง€๋งŒ ๋ชจ๋ฒ” ์‚ฌ๋ก€ ์ด์ ์„ ์ œ๊ณตํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋‹ต์žฅ:
1) ๋ณผ๋ฅจ์„ ๊ณต์œ ํ•˜์ง€ ๋งˆ์‹ญ์‹œ์˜ค

  • ์ข‹์ง€๋งŒ ๋งคํ•‘ uid/gid์— ๋Œ€ํ•œ ๋…ผ์˜์—๋Š” ์ค‘์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
    2) uid/gids ๋™๊ธฐํ™”
  • ์ด๊ฒƒ์ด ๊ธฐ๋Šฅ์˜ ์˜๋„์ด์ง€๋งŒ Dockerfile์—์„œ chown์„ ๊ฐ•์ œ ์‹คํ–‰ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
    3) ๊ณต์œ ํ•˜๋Š” ๋ชจ๋“  ์‚ฌ๋žŒ์—๊ฒŒ ์ถฉ๋ถ„ํ•œ ๊ถŒํ•œ์ด ์žˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
  • ์ด๊ฒƒ์€ ๊ฐ„๋‹จํ•œ ๋งคํ•‘์ผ ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ Dockerfile์— ์ •์˜๋œ ๋™์ž‘์— ๋‹ค์‹œ ์˜์กดํ•ฉ๋‹ˆ๋‹ค.
    4) ํ˜ธ์ŠคํŠธ์—์„œ ํ“จ์ฆˆ ๋งˆ์šดํŠธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ ์ปจํ…Œ์ด๋„ˆ์— ๋Œ€ํ•ด ์„œ๋กœ ๋‹ค๋ฅธ uid/gid๋ฅผ ๋ฐ”์ธ๋”ฉํ•ฉ๋‹ˆ๋‹ค.
  • ์ข‹์€ ์กฐ์–ธ, ๊ทธ๊ฒƒ์€ ๋˜ํ•œ ์•ผํฌ ๋ฉด๋„์ฒ˜๋Ÿผ ๋ณด์ž…๋‹ˆ๋‹ค.

@colbygk

๊ฐ„๋‹จํ•œ ๋งคํ•‘์ด ๋  ์ˆ˜ ์žˆ์„ ๋•Œ

๊ทธ๊ฒƒ์ด ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค. vfs ๊ณ„์ธต์—์„œ ์ง€์›ํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— "๋‹จ์ˆœ ๋งคํ•‘"์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
์ผ๋ถ€ ํŒŒ์ผ ์‹œ์Šคํ…œ์€ ์†Œ์œ ๊ถŒ์„ ๋งคํ•‘ํ•˜๋Š” ๊ธฐ๋Šฅ(์˜ˆ: bindfs ๋˜๋Š” nfs)์„ ์ œ๊ณตํ•˜์ง€๋งŒ ์ผ๋ฐ˜์ ์ธ ๊ฒฝ์šฐ์— ์ด๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒƒ์€ ํ˜„์žฌ ๋ถˆ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ƒํ™ฉ์—์„œ ๊ณต์œ  ๋ณผ๋ฅจ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

๊ณต์œ  ์ธ์ฆ์„œ

  • ์ปจํ…Œ์ด๋„ˆ 1์€ ๋ชจ๋“  ํ˜ธ์ŠคํŒ…๋œ ๋„๋ฉ”์ธ์— ๋Œ€ํ•ด ์•”ํ˜ธํ™”๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ์—ญ๋ฐฉํ–ฅ ํ”„๋ก์‹œ์ž…๋‹ˆ๋‹ค.
  • ์ปจํ…Œ์ด๋„ˆ 2๋Š” ํ•ด๋‹น ๋„๋ฉ”์ธ์˜ ์ธ์ฆ์„œ๋„ ์ œ๊ณตํ•ด์•ผ ํ•˜๋Š” ldap ์„œ๋ฒ„์ž…๋‹ˆ๋‹ค.

์†”๋ฃจ์…˜: ์ด๋ฏธ์ง€ ์ปจํ…Œ์ด๋„ˆ 2๋Š” ์ปจํ…Œ์ด๋„ˆ 1๊ณผ ๋™์ผํ•œ ์ด๋ฏธ์ง€์—์„œ ์ƒ์†ํ•˜๊ณ  ๊ณตํ†ต ๊ธฐ๋ณธ ์ด๋ฏธ์ง€๋Š” ๊ณตํ†ต ๊ทธ๋ฃน์„ ์ƒ์„ฑํ•œ ๋‹ค์Œ ๋‘ ์ปจํ…Œ์ด๋„ˆ ๋ชจ๋‘ ๋™์ผํ•œ ๊ทธ๋ฃน ์•ก์„ธ์Šค ๊ถŒํ•œ์„ ๊ฐ€์ง‘๋‹ˆ๋‹ค.

Dockerfile ๊ณตํ†ต ๋ฒ ์ด์Šค :

RUN groupadd -g 500 ssl-cert

letsencrypt-config.sh ์ด๋ฏธ์ง€๋ฅผ ์•”ํ˜ธํ™”ํ•˜์ž :

chgrp -R ssl-cert /etc/letsencrypt

Dockerfile mwaeckerlin/reverse-proxy :

RUN usermod -a -G ssl-cert www-data

Dockerfile ์˜ mwaeckerlin/openldap :

RUN usermod -a -G ssl-cert openldap

๊ทธ๊ฒŒ ๋‹ค์•ผ

์ด ๋ชจ๋“  ๊ฒƒ์€ ์ง„์ž…์  ๋˜๋Š” ๋นŒ๋“œ ํ”„๋กœ์„ธ์Šค ์ค‘์— userperms๋ฅผ ๋ณ€๊ฒฝํ•˜์—ฌ ์ „์ฒด ๋„์ปค๊ฐ€ ๋‹ค๋ฅธ ์‚ฌ์šฉ์ž์—์„œ ์‹คํ–‰๋˜๋„๋ก ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.

ํ•˜์ง€๋งŒ ์ง€๋‚œ 3์ผ ๋™์•ˆ ์›น์„ ๊ฒ€์ƒ‰ํ•œ ํ›„ ์ค‘์š”ํ•œ ํฌ์ธํŠธ๋ฅผ ๋†“์ณค์„ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.
์œ„ ๋˜๋Š” ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์œผ๋กœ ์—ฐ๊ฒฐ๋œ ๊ถŒ์žฅ ์‚ฌํ•ญ ๋ฐ (ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•)์€ ์–ด๋–ค ์‹์œผ๋กœ๋“  ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ปจํ…Œ์ด๋„ˆ์— ๋งˆ์šดํŠธ๋œ ๋ชจ๋“  ๋ณผ๋ฅจ์€ ํ•ญ์ƒ ์ปจํ…Œ์ด๋„ˆ ๋‚ด๋ถ€์˜ root:root ๊ฐ€ ์†Œ์œ ํ•ฉ๋‹ˆ๋‹ค. UID/GID๊ฐ€ ์ผ์น˜ํ•˜๋Š”์ง€ ์—ฌ๋ถ€์— ๊ด€๊ณ„์—†์ด ํ˜ธ์ŠคํŠธ์—์„œ ์†Œ์œ ์ž๋ฅผ ๋ฏธ๋ฆฌ ๋ณ€๊ฒฝํ•ฉ๋‹ˆ๋‹ค.

๋‚ด ๊ด€์ ์—์„œ ๋ณด๋ฉด ์•„์ฃผ ๊ธฐ๋ณธ์ ์ธ ์ผ์„ ํ•˜๋ ค๊ณ  ํ•˜๋Š” ๋‚ด๊ฐ€ ์–ด๋ฆฌ์„๋‹ค๋Š” ๋Š๋‚Œ์„ ์ง€์šธ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

  • ์œˆ๋„์šฐ 10 ํ”„๋กœ 1803(17134.112)
  • Windows์šฉ Docker 18.03.1-ce-win65(17513)
  • Hyper-V ๋ฐ Ubuntu๊ฐ€ ํฌํ•จ๋œ Windows WSL

๋ฌธ์„œ ๋ฃจํŠธ๊ฐ€ ํ˜ธ์ŠคํŠธ์— ๋งˆ์šดํŠธ๋œ ์ผ๋ฐ˜ apache2 ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‹œ์ž‘ํ•˜๋ ค๊ณ  ํ•˜๋ฏ€๋กœ ๋„์ปค ์ปจํ…Œ์ด๋„ˆ์—์„œ ์ฆ‰์‹œ ํ…Œ์ŠคํŠธํ•˜๋ฉด์„œ PHP ์†Œ์Šค ์ฝ”๋“œ์—์„œ ๊ฐœ๋ฐœํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

root<strong i="16">@win10</strong>:# docker run --rm -v /c/Users/<MyUser>/Development/www-data:/var/www/html -it httpd:2.4 /bin/bash

๋„์ปค ์ปจํ…Œ์ด๋„ˆ ๋‚ด๋ถ€์—์„œ ๋””๋ ‰ํ† ๋ฆฌ __/var/www/html_์€ ํ•ญ์ƒ _ root:root_ ์†Œ์œ ์ด๋ฏ€๋กœ ๋‚ด PHP ์•ฑ์€ ํ•ด๋‹น ํด๋” ๋‚ด์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์—ด๊ฑฐ๋‚˜ ์“ธ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
์•„์ง ์•„๋ฌด๊ฒƒ๋„ ์ž‘๋™ํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค... :(

ํ•ฉ๋ฆฌ์ ์œผ๋กœ ์šฐ์•„ํ•œ ์†”๋ฃจ์…˜์„ ์ฐพ๋Š” ์‚ฌ๋žŒ๋“ค์€ @elquimista ๊ฐ€ ์—ฌ๊ธฐ์—์„œ ์ œ์•ˆํ•œ ๊ฒƒ์„ ํ™•์ธํ•˜์‹ญ์‹œ์˜ค. ๋‚˜๋Š” ์ด๊ฒƒ์„ ํ…Œ์ŠคํŠธํ–ˆ๊ณ  ์ž˜ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค

์šฐ๋ฆฌ๋Š” ์šด ์ข‹๊ฒŒ https://github.com/boxboat/fixuid#specify -paths-and-behavior-across-devices๋ฅผ ์‚ฌ์šฉํ•ด ์™”์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ํ˜ธ์ŠคํŠธ์˜ ์‚ฌ์šฉ์ž์™€ ์ผ์น˜ํ•˜๋„๋ก ์ปจํ…Œ์ด๋„ˆ ๋‚ด๋ถ€์˜ ์‚ฌ์šฉ์ž๋ฅผ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

๋‹ค์Œ์€ ์ด๋ฏธ์ง€์˜ ๊ตฌ์„ฑ ์˜ˆ์ž…๋‹ˆ๋‹ค.

$ cat /etc/fixuid/config.yml
user: lion
group: lion
paths:
  - /home/lion
  - /home/lion/.composer/cache
  - /tmp

์‹คํ–‰ํ•˜๋ ค๋ฉด:

$ docker run --rm -it --init \
    -u 1000:1000 \
    -v `pwd`:/app \
    -v "$HOME/.composer/cache:/home/lion/.composer/cache" \
    --entrypoint='fixuid' \
    php:7.2-cli \
        /bin/bash

์ด๊ฒƒ์€ ์œ ๋‹‰์Šค ๊ถŒํ•œ ๋ฐ ์†Œ์œ ๊ถŒ์„ ์ง€์›ํ•˜์ง€ ์•Š๋Š” ์Šคํ† ๋ฆฌ์ง€ ์‹œ์Šคํ…œ์„ ์‚ฌ์šฉํ•  ๋•Œ์—๋„ ๋ฌธ์ œ๊ฐ€ ๋ฉ๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ ํŒŒ์ผ์„ chownํ•˜๋ ค๋Š” ์‹œ๋„๊ฐ€ ์‹คํŒจํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ปจํ…Œ์ด๋„ˆ ๋‚ด๋ถ€์—์„œ ์‚ฌ์šฉํ•  ์˜ฌ๋ฐ”๋ฅธ uid๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ๋„๋ก ์ €์žฅ์†Œ๋ฅผ ๋งˆ์šดํŠธํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ปจํ…Œ์ด๋„ˆ ์™ธ๋ถ€์˜ ์†Œ์œ ๊ถŒ์— ๊ด€๊ณ„์—†์ด ํŠน์ • uid๊ฐ€ ์†Œ์œ ํ•œ ํŒŒ์ผ์„ ํ‘œ์‹œํ•˜๋„๋ก docker์— ์ง€์‹œํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ์œผ๋ฉด ์ž‘์—…์„ ๋‹จ์ˆœํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

@tlhonmey

ํŠน์ • uid๊ฐ€ ์†Œ์œ ํ•œ ํŒŒ์ผ์„ ํ‘œ์‹œํ•˜๋„๋ก docker์— ์ง€์‹œํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ๋Š” ๊ฒฝ์šฐ

์‚ฌ์šฉ์ž ์ •์˜ ํŒŒ์ผ ์‹œ์Šคํ…œ(์˜ˆ: bindfs) ์—†์ด๋Š” ์—†์Šต๋‹ˆ๋‹ค.

@tlhonmey ์˜ˆ, ์ผ๋ถ€ ์‹ฌ๋ณผ๋ฆญ ๋งํฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ "์œ ๋‹‰์Šค ๊ถŒํ•œ์„ ์ง€์›ํ•˜์ง€ ์•Š๋Š” ์Šคํ† ๋ฆฌ์ง€ ์‹œ์Šคํ…œ" ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

๊ธฐ๋ณธ์ ์œผ๋กœ NTFS ๋“œ๋ผ์ด๋ธŒ์—์„œ ๋งˆ์šดํŠธํ•˜๋ฉด -v ./HostNtfsStuff:/data/ntfsMount ์— ํ•ญ๋ชฉ์„ ๋„ฃ์€ ๋‹ค์Œ ์‹ฌ๋ณผ๋ฆญ ๋งํฌ๋ฅผ ๋งŒ๋“ค๊ณ  ln -s -T /data/ntfsMount /var/lib/myApp && chown -Rh myApp:myApp /var/lib/myApp/

๋‹น์‹ ๋„ ํ…Œ์ŠคํŠธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค: su myApp -c 'echo foo > /var/lib/myApp/bar' && cat /data/ntfsMount/bar

๋‚ด ์šฉ๋„๋Š” Windows ๊ฐœ๋ฐœ์ž๊ฐ€ MySQL ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‹คํ–‰ํ•˜๊ณ  ํƒ‘์žฌ๋œ ๋ณผ๋ฅจ์„ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ๊ฒƒ์ด์ง€๋งŒ ๋งŽ์€ ์•ฑ์— ์ ์šฉ๋ฉ๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ ์†”๋ฃจ์…˜์€ ๋งŽ์€ uid:gid ์Œ์„ ์ˆ˜๋™์œผ๋กœ ๊ด€๋ฆฌํ•˜๊ณ  ํ˜ธ์ŠคํŠธ ๋˜๋Š” ๋„์šฐ๋ฏธ ์Šคํฌ๋ฆฝํŠธ์—์„œ ์ถฉ๋Œํ•˜์ง€ ์•Š๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค.

์ž‘๋™ํ•˜๊ฒŒ ํ•˜๋Š” _ํ•˜๋‚˜์˜_ ๋ฐฉ๋ฒ•์ด ์žˆ์ง€๋งŒ Dockerfile ๋‚ด์—์„œ ๋ฏธ๋ฆฌ ์ค€๋น„ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

RUN mkdir -p /var/lib/redis ; chown -R redis:redis /var/lib/redis
VOLUME ["/var/lib/redis"]
ENTRYPOINT ["usr/bin/redis-server"]
USER redis

(๋‚˜๋Š” ์ด ์˜ˆ์ œ๋ฅผ ํ…Œ์ŠคํŠธํ•˜์ง€ ์•Š์•˜์œผ๋ฉฐ, ํฌ๋กฌ ์ปจํ…Œ์ด๋„ˆ์—์„œ ์ž‘์—…ํ•˜๊ณ  ์žˆ์œผ๋ฉฐ _separate_ X11 ์ปจํ…Œ์ด๋„ˆ์— ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. .... )

๋‚˜๋Š” ์˜ค๋Š˜๊นŒ์ง€ ๋งˆ์ง€๋ง‰ ๊ธฐ์ˆ ์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์—ˆ๋Š”๋ฐ ์ปจํ…Œ์ด๋„ˆ ๋ณผ๋ฅจ์„ ๋งˆ์šดํŠธํ•˜๋ ค๊ณ  ํ•˜๋‹ค๊ฐ€ ๋ถ€๋Ÿฌ์กŒ์Šต๋‹ˆ๋‹ค. ๋ถ„๋ช…ํžˆ ๋‹น์‹ ์€ ๊ทธ๋ ‡๊ฒŒ ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๋ณผ๋ฅจ์ด ๋ฃจํŠธ๋กœ ์ƒ์„ฑ๋˜๊ณ  ๋‚ด๋ถ€ ์•ฑ์ด ์‚ฌ์šฉ์ž๋กœ ์“ธ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. VOLUME ๋ฌธ์„œ์— ์„ค๋ช…๋œ ์ž๋™ ์ฑ„์šฐ๊ธฐ๋Š” ๋ฐ”์ธ๋“œ ๋งˆ์šดํŠธ์—์„œ๋„ ์ž‘๋™ํ•˜์ง€ ์•Š๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” Dockerfile ๋ชจ๋ฒ” ์‚ฌ๋ก€ ๋ฅผ ์ฝ๊ณ  ํ—ฌํผ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ถ”์ฒœํ•˜๋Š” ๊ฒƒ์„ ๋ณด์•˜์Šต๋‹ˆ๋‹ค.

#!/usr/bin/env bash
set -e

if [ "$1" = 'postgres' ]; then
    chown -R postgres "$PGDATA"

    if [ -z "$(ls -A "$PGDATA")" ]; then
        gosu postgres initdb
    fi

    exec gosu postgres "$@"
fi

exec "$@"

๋”ฐ๋ผ์„œ ์žฌ๊ท€ chown์€ ์‹œ์ž‘ํ•  ๋•Œ๋งˆ๋‹ค ์†Œ์œ ๊ถŒ์ด ์žˆ๋Š”์ง€ ํ™•์ธํ•œ ๋‹ค์Œ ์•ฑ์„ ์‚ฌ์šฉ์ž๋กœ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. exec ๋„ PID 1์„ ๊ฐ•์ œ ์‹คํ–‰ํ•˜๋ฏ€๋กœ ์‹ ํ˜ธ๊ฐ€ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๊ฒฐ๊ณผ ๋ฐ์ดํ„ฐ์˜ ์ปจํ…Œ์ด๋„ˆ ์™ธ๋ถ€์—์„œ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด ๋„์šฐ๋ฏธ ์Šคํฌ๋ฆฝํŠธ์™€ ๊ฐ™์€ ๊ฒƒ์œผ๋กœ ๋ณผ๋ฅจ์„ ์ฑ„์šฐ๋ ค๋ฉด ์•„๋งˆ๋„ ๋„์šฐ๋ฏธ ์Šคํฌ๋ฆฝํŠธ์—๋„ ๋“ค์–ด๊ฐ€์•ผ ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์•ฑ์ด ๋ณผ๋ฅจ์— ์ˆ˜๋งŽ์€ ํŒŒ์ผ์„ ์ €์žฅํ•˜๋Š” ๊ฒฝ์šฐ, ํŠนํžˆ ์ €์žฅ์†Œ๊ฐ€ ๋กœ์ปฌ์ด ์•„๋‹Œ ๊ฒฝ์šฐ ์ปจํ…Œ์ด๋„ˆ ์‹œ์ž‘์— ์„ฑ๋Šฅ ์ €ํ•˜๊ฐ€ ์žˆ๋Š”์ง€ ์—ฌ๋ถ€๊ฐ€ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค.

๋” ๋‚˜์€ ํ•ด๊ฒฐ์ฑ…์ด ์žˆ์„ ์ˆ˜ ์žˆ์„ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์ปจํ…Œ์ด๋„ˆ uid ๋ฐ gid๋ฅผ ํ˜ธ์ŠคํŠธ์˜ ์ง€์ •๋œ ์‚ฌ์šฉ์ž ์ด๋ฆ„ ๋ฐ ๊ทธ๋ฃน์— ๋งคํ•‘ํ•˜๋Š” ๊ฒƒ๊ณผ ๊ฐ™์€ ๊ฒƒ์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋„์ปค๊ฐ€ ์ปจํ…Œ์ด๋„ˆ์˜ /etc๋ฅผ ์—ฟ๋ณด๊ณ  ์ด๊ฒƒ์„ ์•Œ์•„๋‚ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

์ ์–ด๋„ ํ“จ์ฆˆ ์—†์ด๋Š” ํŒŒ์ผ ์‹œ์Šคํ…œ ์ˆ˜์ค€์—์„œ uid/gids๋ฅผ ๋งคํ•‘ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

์ ์–ด๋„ ํ“จ์ฆˆ ์—†์ด๋Š” ํŒŒ์ผ ์‹œ์Šคํ…œ ์ˆ˜์ค€์—์„œ uid/gids๋ฅผ ๋งคํ•‘ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

๋‚ด๊ฐ€ ๋‘๋ ค์›Œํ–ˆ๋˜ ์ข…๋ฅ˜. ๋„์ปค๊ฐ€ ์ด์™€ ๊ฐ™์ด ํ“จ์ฆˆ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์„ฑ๋Šฅ ์ €ํ•˜๊ฐ€ ๋ฌด์—‡์ธ์ง€ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

@mdegans

๋”ฐ๋ผ์„œ ๋งค๋ฒˆ ์‹œ์ž‘ํ•  ๋•Œ๋งˆ๋‹ค ์†Œ์œ ๊ถŒ์ด ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๋Š” ์žฌ๊ท€์ ์ธ chown,

์‹œ์ž‘ํ•  ๋•Œ๋งˆ๋‹ค chown ๋ฅผ ํ•  ํ•„์š”๋Š” ์—†์Šต๋‹ˆ๋‹ค. ๋Œ€์‹  ๋ฐ์ดํ„ฐ ๋””๋ ‰ํ† ๋ฆฌ์˜ ์†Œ์œ ์ž๋ฅผ ํ™•์ธํ•˜๊ณ  ์˜ฌ๋ฐ”๋ฅด์ง€ ์•Š์€ ๊ฒฝ์šฐ์—๋งŒ ์žฌ๊ท€ chown ๋ฅผ ์ˆ˜ํ–‰ํ•˜์‹ญ์‹œ์˜ค. ์ด์™€ ๊ฐ™์ด:

 [ $(stat -c %U "$PG_DATA") == "postgres" ] || chown -R postgres "$PG_DATA"

๋”ฐ๋ผ์„œ ์ด์ƒ์ ์œผ๋กœ๋Š” ์ฒ˜์Œ ์‹œ์ž‘ํ•  ๋•Œ๋งŒ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ์ด๋Ÿฌํ•œ ์ง„์ž…์  ์Šคํฌ๋ฆฝํŠธ๋กœ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‹คํ–‰ํ•  ๋•Œ๋Š” ๋งค์šฐ ์ฃผ์˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ํ™ˆ ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ์ปจํ…Œ์ด๋„ˆ์— ๋งˆ์šดํŠธ(์˜ˆ)ํ•˜๋ฉด ๋ชจ๋“  ํŒŒ์ผ์ด postgres์— ์ €์žฅ๋ฉ๋‹ˆ๋‹ค.

์ข‹์€ ๋„์ปค ์ด๋ฏธ์ง€ ๋””์ž์ธ์—์„œ ๋Ÿฐํƒ€์ž„ ์‚ฌ์šฉ์ž๋Š” ๋ฃจํŠธ๊ฐ€ ์•„๋‹ˆ๋ฏ€๋กœ chown ํŒŒ์ผ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค...!

์ข‹์€ ๋„์ปค ์ด๋ฏธ์ง€ ๋””์ž์ธ์—์„œ ๋Ÿฐํƒ€์ž„ ์‚ฌ์šฉ์ž๋Š” ๋ฃจํŠธ๊ฐ€ ์•„๋‹ˆ๋ฏ€๋กœ ํŒŒ์ผ์„ ์”น์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค...!

๋งž์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ root ๋กœ์˜ ์ „ํ™˜์„ ๋ง‰๋Š” ๊ฒƒ์€ ์—†์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ์ข…์ข… ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค... ํ•„์š”ํ•  ๋•Œ๊นŒ์ง€ ์ผ๋ฐ˜์ ์œผ๋กœ root ๋กœ ์•„๋ฌด ๊ฒƒ๋„ ์‹คํ–‰ํ•˜์ง€ ์•Š์•„์•ผ ํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ, ๊ทธ๋Ÿฌ๋‚˜ ๊ทธ๋ ‡๊ฒŒ ํ•  ๋•Œ ๋‹ค์Œ ์ค‘ ํ•˜๋‚˜ ์ด์ƒ์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • sudo
  • su
  • USER root

https://f1.holisticinfosecforwebdevelopers.com/chap03.html#vps -countermeasures-docker-the-default-user-is-root์— ๋”ฐ๋ผ

๋‚ด ๊ฒธ์†ํ•œ ์˜๊ฒฌ์œผ๋กœ๋Š” Docker ์ด๋ฏธ์ง€ ์‚ฌ์šฉ์ž๊ฐ€ ํƒ‘์žฌ๋œ ๋ณผ๋ฅจ์— ๋Œ€ํ•œ ๊ถŒํ•œ์„ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์„ค์ •ํ–ˆ๋Š”์ง€ ํ™•์ธํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค.

์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์กด์žฌํ•˜๊ธฐ ์ „์— ์šฐ๋ฆฌ๊ฐ€ ์ „ํ†ต์ ์œผ๋กœ ํ–ˆ๋˜ ๊ฒƒ๊ณผ ๋งค์šฐ ์œ ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด nginx๋ฅผ ์‹คํ–‰ํ•˜๊ณ  ์ •์  HTML ๋””๋ ‰ํ† ๋ฆฌ๊ฐ€ ์˜ฌ๋ฐ”๋ฅธ ์‚ฌ์šฉ์ž์˜ ์†Œ์œ ์ธ์ง€ ํ™•์ธํ•ด์•ผ ํ•  ๋•Œ์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๋‚ด nginx.conf ํŒŒ์ผ์„ ์—ด์–ด์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ธฐ ์œ„ํ•ด์„œ๋Š” ์ž‘์—…์ž์˜ ์‚ฌ์šฉ์ž๋ฅผ ํ™•์ธํ•˜๊ณ  ๊ทธ์— ๋”ฐ๋ผ ๊ถŒํ•œ์„ ์„ค์ •ํ•˜์‹ญ์‹œ์˜ค. ์‚ฌ์‹ค ์ด๊ฒƒ์€ ๋ชจ๋‘ nginx ๋ฌธ์„œ์— ์„ค๋ช…๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ ๋‹จ์ง€ Unix ๊ถŒํ•œ ๋ฌธ์ œ์ผ ๋ฟ์ด๋ฉฐ Docker์—๋Š” ์ƒˆ๋กœ์šด ๊ฒƒ์ด ์—†์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ด ๋ฌธ์ œ์— ๋Œ€ํ•œ ํ•ด๊ฒฐ์ฑ…์€ ๋งˆ์šดํŠธ๋œ ๋ณผ๋ฅจ์˜ ์†Œ์œ ๊ถŒ์ด ๋˜์–ด์•ผ ํ•˜๋Š” ๊ฐ Docker ์ด๋ฏธ์ง€์— ๋Œ€ํ•œ ๋” ๋‚˜์€ ๋ฌธ์„œ์ž…๋‹ˆ๋‹ค. ๋””๋ ‰ํ† ๋ฆฌ์— ์˜ฌ๋ฐ”๋ฅธ ์†Œ์œ ๊ถŒ์ด ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๋Š” nginx ์‹œ์ž‘ ๋ฐ๋ชฌ์ด ๊ธฐ์–ต๋‚˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์„ค์ •๋˜์ง€ ์•Š์œผ๋ฉด ์‹คํŒจํ•  ๋ฟ์ž…๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ์ด๊ฒƒ์€ ์ด์ œ ์‚ฌ์šฉ์ž๊ฐ€ ์ž ์žฌ์ ์œผ๋กœ ์ปจํ…Œ์ด๋„ˆ ๋‚ด๋ถ€์— ์ •์˜๋˜์–ด ์žˆ๊ณ  ์™ธ๋ถ€์— ์žˆ์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ์‚ฌ๋ฌผ์ด ๋‹ค๋ฅด๊ฒŒ ๋ณด์ด๊ฒŒ ํ•˜๋Š” ๊ฒƒ์ด ์‚ฌ์‹ค์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋‚ด๋ถ€์™€ ์™ธ๋ถ€์˜ UID๋Š” ๋™์ผํ•˜๋ฏ€๋กœ UID๊ฐ€ 2000์ธ ์‚ฌ์šฉ์ž foobar๋Š” ์™ธ๋ถ€๊ฐ€ ์•„๋‹ˆ๋ผ ์ปจํ…Œ์ด๋„ˆ ๋‚ด๋ถ€์— ์กด์žฌํ•  ์ˆ˜ ์žˆ์ง€๋งŒ UID 2000์€ ์—ฌ์ „ํžˆ โ€‹โ€‹์™ธ๋ถ€์˜ ํŒŒ์ผ ๋ฐ ๋””๋ ‰ํ† ๋ฆฌ์— ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ์šฐ๋ฆฌ๊ฐ€ ๋‹ค๋ฃจ๋˜ ์ธ๊ฐ„ ์นœํ™”์ ์ธ ์ด๋ฆ„๋ณด๋‹ค๋Š” UID/GID์˜ ๊ด€์ ์—์„œ ์ƒ๊ฐ์„ ๋ฐ”๊ฟ”์•ผ ํ•ฉ๋‹ˆ๋‹ค.
๋˜ํ•œ 2๋ช…์˜ ๋‹ค๋ฅธ ์ž‘์„ฑ์ž๊ฐ€ ์ž‘์„ฑํ•œ 2๊ฐœ์˜ ์ปจํ…Œ์ด๋„ˆ ๊ฐ„์— ๋ณผ๋ฅจ์„ ๊ณต์œ ํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ ์ƒํ™ฉ์ด ๋” ์–ด๋ ค์›Œ์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ธฐ์กด Unix ์‹œ์Šคํ…œ(์‚ฌ์šฉ์ž, ๊ทธ๋ฃน ๋ฐ ๊ธฐํƒ€)์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ถŒํ•œ์„ ์„ค์ •ํ•˜๋Š” ๊ฒƒ๋งŒ์œผ๋กœ๋Š” ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ์— ์ถฉ๋ถ„ํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(๊ณตํ†ต UID ๋˜๋Š” GID ์—†์Œ). Docker๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— POSIX ACL์„ ๋” ๋งŽ์ด ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Œ์„ ์ธ์ •ํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๋™์ผํ•œ ํŒŒ์ผ์— ๋Œ€ํ•ด 3๋ช…์˜ ๋‹ค๋ฅธ ์‚ฌ์šฉ์ž ๊ถŒํ•œ์„ ํ• ๋‹นํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด rw ๊ถŒํ•œ์ด ์žˆ๋Š” ์ปจํ…Œ์ด๋„ˆ ์ž‘์„ฑ์ž, r ๊ถŒํ•œ์ด ์žˆ๋Š” ์ปจํ…Œ์ด๋„ˆ ํŒ๋…๊ธฐ ๋ฐ r ๊ถŒํ•œ์ด ์žˆ๋Š” ํ˜ธ์ŠคํŠธ ์‚ฌ์šฉ์ž.

๋˜ ํ•˜๋‚˜์˜ ์˜ต์…˜: ๊ณต์œ  ๋””๋ ‰ํ† ๋ฆฌ์— ๋Œ€ํ•œ setgid ํ”Œ๋ž˜๊ทธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ณตํ†ต GID๋ฅผ ์ ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ACL์„ ์‚ฌ์šฉํ•˜์—ฌ ํŒŒ์ผ ๋งˆ์Šคํฌ๋ฅผ ์ ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Docker ์ปจํ…Œ์ด๋„ˆ์—์„œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์ „์— ๋‹ค์Œ์„ ์‹คํ–‰ํ•˜์‹ญ์‹œ์˜ค.

```
์œ ๋งˆ์Šคํฌ 0000
````

https://en.wikipedia.org/wiki/Umask

์ด ๊ธฐ๋Šฅ์ด ์–ผ๋งˆ๋‚˜ ๋„์›€์ด ๋  ๊ฒƒ์ธ์ง€ ์žฌํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด ์ด ์Šค๋ ˆ๋“œ๋ฅผ ๋Šฆ๊ฒŒ ๋ฐฉ๋ฌธํ•ฉ๋‹ˆ๋‹ค.

์†”์งํžˆ ๋งํ•ด์„œ, ์ €๋Š” ์•ฝ 1๋…„ ๋™์•ˆ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๋ฐฐํฌํ•ด ์™”์œผ๋ฉฐ ์ด๊ฒƒ์ด ๋ชจ๋“  ๊ณณ์—์„œ ์‹ค์งˆ์ ์ธ ๋ฌธ์ œ๊ฐ€ ๋˜๊ณ  ์žˆ๋Š” ๊ฒƒ์„ ๋ด…๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์—์„œ ์ด ์ˆ˜์ค€์—์„œ ์†”๋ฃจ์…˜์„ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ์ด ์œ ์ผํ•œ ํ˜„๋ช…ํ•œ ์„ ํƒ์ธ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

ํ˜„์žฌ๋กœ์„œ๋Š” ์ƒ๋‹นํ•œ ์ˆ˜์˜ Docker ์ด๋ฏธ์ง€๊ฐ€ ์ง„์ž…์ ์„ root ๋กœ ๊ณ„์† ์‹คํ–‰ํ•˜๊ธฐ๋กœ ์„ ํƒํ•˜์—ฌ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ํ”„๋กœ์„ธ์Šค๋ฅผ ์‹คํ–‰ํ•˜๊ธฐ ์ „์— ๊ถŒํ•œ์„ ์‚ญ์ œํ•˜๊ธฐ ์œ„ํ•ด ๋””๋ ‰ํ† ๋ฆฌ ๋ฐ ํŒŒ์ผ ๊ถŒํ•œ์„ ๋ถ€ํŠธ์ŠคํŠธ๋žฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ชจ๋“  ์‚ฌ๋žŒ์ด ์ด ๊ด€ํ–‰์— ์˜์ง€ํ•  ์ˆ˜ ์—†๋‹ค๋Š” ์‚ฌ์‹ค์„ ๊นจ๋‹ฌ์„ ๋•Œ ์ง„์งœ ๋ฌธ์ œ๊ฐ€ ๋‚˜ํƒ€๋‚ฉ๋‹ˆ๋‹ค. Kubernetes ๋˜๋Š” OpenShift์™€ ๊ฐ™์€ ์ผ๋ถ€ ์ธ๊ธฐ ์žˆ๋Š” ํ”Œ๋žซํผ์˜ ๊ฒฝ์šฐ ์ด๋Ÿฌํ•œ ํ™˜๊ฒฝ ์ค‘ ์ผ๋ถ€๋Š” ๊ถŒํ•œ ์žˆ๋Š” ์ปจํ…Œ์ด๋„ˆ๋ฅผ ํ—ˆ์šฉํ•˜์ง€ ์•Š๋„๋ก ๊ตฌ์„ฑ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์™œ๋ƒํ•˜๋ฉด... ๋ณด์•ˆ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ๋‚ด ๋จธ๋ฆฌ๋กœ๋Š” ์–ด๋–ป๊ฒŒ ํฐ ๊ธˆ์œต ๊ธฐ๊ด€์ด ์ด๋Ÿฌํ•œ ์œ ํ˜•์˜ ์ œํ•œ ์—†์ด ๋ฏผ๊ฐํ•œ ์ •๋ณด๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ์ปจํ…Œ์ด๋„ˆ ํ”Œ๋žซํผ ์ฑ„ํƒ์„ ๊ณ ๋ คํ•˜๋Š”์ง€ ์ดํ•ดํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

_entrypoint-as-root_ ๋ฐฉ์‹์œผ๋กœ ์ œ๊ธฐ๋œ ๋ณด์•ˆ ๋ฌธ์ œ๋กœ ์ธํ•ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์‹œ์ž‘๋˜๊ธฐ ์ „์— chown ๋ฐ chmod ๋ณผ๋ฅจ์„ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ๋Š” initContainers ๋ฅผ ์ œ๊ณตํ•˜๋Š” ๋งŽ์€ Kubernetes helm ์ฐจํŠธ๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค. . ์ด๊ฒƒ์€ ์ข‹์€ ๋ฐฉ๋ฒ•์ฒ˜๋Ÿผ ๋ณด์ผ ์ˆ˜ ์žˆ์ง€๋งŒ ๋‚ด๊ฐ€ ๋งํ•  ๋•Œ ์ €๋ฅผ ๋ฏฟ์œผ์‹ญ์‹œ์˜ค. ๊ทธ๋ ‡์ง€ ์•Š์Šต๋‹ˆ๋‹ค .

ํŠนํžˆ Helm ์ฐจํŠธ๋Š” ํ•˜๋“œ์ฝ”๋”ฉ๋œ uids ๋ฐ gids ๋กœ ๊ฐ€๋“ ์ฐจ ์žˆ์Šต๋‹ˆ๋‹ค. ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋Ÿฐํƒ€์ž„์—์„œ ๋น„๋ฐ€๋ฆฌ์— ์ถ”์ถœํ•ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ํ•ด๋‹น ์ •๋ณด๋Š” ์ปจํ…Œ์ด๋„ˆ ๋‚ด๋ถ€์— ์ˆจ๊ฒจ์ ธ ์žˆ์œผ๋ฉฐ ๋ฐฐํฌ ์ค‘์— ์ฆ‰์‹œ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐฉ๋ฒ•์—๋Š” ์—ฌ๋Ÿฌ ๊ฐ€์ง€๊ฐ€ ์žˆ์ง€๋งŒ _์ž‘๋™์„ ์œ„ํ•œ ํ•ดํ‚น_์œผ๋กœ ๋ฐฐํฌ ๊ตฌ์„ฑ ์ „์ฒด๋ฅผ ๊ณ„์† ๊ดด๋กญํžˆ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋กœ ์ธํ•ด ์˜ํ–ฅ์„ ๋ฐ›๋Š” ๋ฐฐํฌ ์ˆ˜๊ฐ€ ๋น ๋ฅด๊ฒŒ ์ฆ๊ฐ€ํ•˜๊ณ  ์žˆ์œผ๋ฉฐ ์‚ฌ๋žŒ๋“ค์ด ์‚ฌ์šฉํ•˜๋Š” ๊ธฐ์ˆ ์€ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์ œ๊ณตํ•˜๋Š” ๋‹ค๋ฅธ ๋ชจ๋“  ์ด์ ๊ณผ ์ƒ๋ฐ˜๋ฉ๋‹ˆ๋‹ค.

Docker์— ์˜์กดํ•˜๋Š” ๋‹ค๋ฅธ ์†”๋ฃจ์…˜์ด ์ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์™„์ „ํžˆ ์ž๋™ํ™”๋œ ๋ฐฐํฌ๋ฅผ ์šฐ์•„ํ•˜๊ฒŒ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ๋„๋ก OCI ์‚ฌ์–‘์˜ ์ผ๋ถ€๋กœ ์ด๊ฒƒ์„ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ ์งˆ๋ฌธ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์ธํ„ฐ๋„ท์˜ ๋‹ค๋ฅธ ๊ณณ์—์„œ ๊ณตํ†ต OCI ์‚ฌ์–‘์„ ๊ฐœ๋ฐœํ•˜๋Š” ๊ณณ์ด ์–ด๋””์ž…๋‹ˆ๊นŒ? ๊ทธ๊ฒƒ์ด ์ด ๊ธฐ๋Šฅ์„ ๋„์ปค๋กœ ๊ฐ€์ ธ์˜ค๋Š” ๊ฐ€์žฅ ์ข‹์€ ๋ฐฉ๋ฒ•์ด ์•„๋‹ˆ๋ผ๊ณ  ๊ฐ€์ •ํ•ฉ๋‹ˆ๋‹ค(๊ฒฐ๊ตญ ์ผ๋ฐ˜์ ์œผ๋กœ ํ•ฉ์˜๋œ ํ‘œ์ค€ ์ฑ„ํƒ์— ๋Œ€ํ•œ ์š”๊ตฌ ์‚ฌํ•ญ์„ ํ†ตํ•ด).

๋ฌธ์ œ๋Š” ํ™•์‹คํžˆ ์ €์ ˆ๋กœ ์‚ฌ๋ผ์ง€์ง€ ์•Š๊ณ  ์†”๋ฃจ์…˜์—๋Š” ๋ช‡ ๊ฐ€์ง€ ๋งค์šฐ ๊ทผ๋ณธ์ ์ธ ์ข…๋ฅ˜์˜ ๋ณ€๊ฒฝ์ด ํ•„์š”ํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

์‘์šฉ ํ”„๋กœ๊ทธ๋žจ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์‹œ์ž‘๋˜๊ธฐ ์ „์— ๋ณผ๋ฅจ์„ chown ๋ฐ chmodํ•  ์ˆ˜ ์žˆ๋Š” initContainers. ์ด๊ฒƒ์€ ์ข‹์€ ๋ฐฉ๋ฒ•์ฒ˜๋Ÿผ ๋ณด์ผ ์ˆ˜ ์žˆ์ง€๋งŒ ๋‚ด๊ฐ€ ๋งํ•  ๋•Œ ๋‚˜๋ฅผ ๋ฏฟ์œผ์‹ญ์‹œ์˜ค. ๊ทธ๋ ‡์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

FWIW; ์ด ๊ธฐ๋Šฅ์€ ํŒŒ์ผ์ด ์—ฌ๋Ÿฌ ๋„ค์ž„์ŠคํŽ˜์ด์Šค("ํ˜ธ์ŠคํŠธ"์— ์กด์žฌํ•˜๋Š” ํŒŒ์ผ(์‚ฌ์ „) ๋˜๋Š” ๋‹ค๋ฅธ ์‚ฌ์šฉ์ž๋กœ ์‹คํ–‰๋˜๋Š” ์—ฌ๋Ÿฌ ์ปจํ…Œ์ด๋„ˆ ๊ฐ„์— ๊ณต์œ ๋˜๋Š” ๊ณตํ†ต ํŒŒ์ผ ์œ„์น˜) ๊ฐ„์— ๊ณต์œ ๋˜๋Š” ์ƒํ™ฉ์—์„œ๋งŒ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ํŒŒ์ผ์ด ํ˜ธ์ŠคํŠธ์—์„œ ๋ฏธ๋ฆฌ ์ƒ์„ฑ๋œ ์ƒํ™ฉ์—์„œ๋Š” ํŒŒ์ผ์„ ์ปจํ…Œ์ด๋„ˆ์™€ ๊ณต์œ ํ•˜๊ธฐ ์ „์— ํ•ด๋‹น ํŒŒ์ผ์— ์˜ฌ๋ฐ”๋ฅธ ์†Œ์œ ๊ถŒ๊ณผ ๊ถŒํ•œ์ด ์žˆ๋Š”์ง€ ํ™•์ธํ•˜์—ฌ ์ด๋ฅผ ์™„ํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์‹ค์ œ๋กœ ์ด๊ฒƒ์€ ํ˜ธ์ŠคํŠธ์—์„œ nginx๋ฅผ ์‹คํ–‰ํ•˜๊ณ  webroot์˜ ํŒŒ์ผ์— ์˜ฌ๋ฐ”๋ฅธ ๊ถŒํ•œ์ด ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๋Š” ๊ฒƒ๊ณผ ๋‹ค๋ฅด์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋‹ค๋ฅธ ์‚ฌ์šฉ์ž๋กœ ์‹คํ–‰ ์ค‘์ธ ์ปจํ…Œ์ด๋„ˆ ๊ฐ„์— ๊ณต์œ ํ•  ๋•Œ ๋™์ผํ•œ uid (๋˜๋Š” gid )๋กœ ๋‘ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๋ชจ๋‘ ์‹คํ–‰ํ•˜๊ณ  ๋‘ ๊ฐœ์˜ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‹คํ–‰ํ•  ๋•Œ ์ž‘๋™ํ•˜๋Š” ๋ฐฉ์‹๊ณผ ์œ ์‚ฌํ•œ ์˜ฌ๋ฐ”๋ฅธ ๊ทธ๋ฃน ๊ถŒํ•œ์„ ์„ค์ •ํ•˜์‹ญ์‹œ์˜ค. ๋™์ผํ•œ ๋ฆฌ์†Œ์Šค์— ์•ก์„ธ์Šคํ•ด์•ผ ํ•˜๋Š” ์ปจํ…Œ์ด๋„ˆํ™”๋˜์ง€ ์•Š์€ ํ”„๋กœ์„ธ์Šค).

์ด๋Ÿฌํ•œ ํ™˜๊ฒฝ ์ค‘ ์ผ๋ถ€๋Š” ๊ถŒํ•œ ์žˆ๋Š” ์ปจํ…Œ์ด๋„ˆ๋ฅผ ํ—ˆ์šฉํ•˜์ง€ ์•Š๋„๋ก ๊ตฌ์„ฑ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์™œ๋ƒํ•˜๋ฉด... ๋ณด์•ˆ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ๋‚ด ๋จธ๋ฆฌ๋กœ๋Š” ์–ด๋–ป๊ฒŒ ํฐ ๊ธˆ์œต ๊ธฐ๊ด€์ด ์ด๋Ÿฌํ•œ ์œ ํ˜•์˜ ์ œํ•œ ์—†์ด ๋ฏผ๊ฐํ•œ ์ •๋ณด๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ์ปจํ…Œ์ด๋„ˆ ํ”Œ๋žซํผ ์ฑ„ํƒ์„ ๊ณ ๋ คํ•˜๋Š”์ง€ ์ดํ•ดํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

ํ˜ผ๋ž€์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด; root ๋กœ ์‹คํ–‰๋˜๋Š” ์ปจํ…Œ์ด๋„ˆ๋Š” "๊ถŒํ•œ์ด ์žˆ๋Š”" ์ปจํ…Œ์ด๋„ˆ์™€ ๋™์ผํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค( --privileged ๋˜๋Š” --cap-add ์„ธํŠธ์™€ ๊ฐ™์€ ์˜ต์…˜). ๊ถŒํ•œ์ด ์žˆ๋Š”( --privileged ) ์ปจํ…Œ์ด๋„ˆ๋Š” ๋งค์šฐ ์•ˆ์ „ํ•˜์ง€ ์•Š์€ ๋ฐ˜๋ฉด root ๋กœ ์‹คํ–‰๋˜๋Š” ์ปจํ…Œ์ด๋„ˆ๋Š” ์™„์ „ํžˆ ํฌํ•จ๋˜์–ด ์žˆ์–ด ๋‚˜๊ฐˆ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค . ๋ฐ”์ธ๋“œ ๋งˆ์šดํŠธ๋œ ํŒŒ์ผ/๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ์ „๋‹ฌํ•˜๋Š” ๊ฒƒ์€ ๊ตฌ๋ฉ์„ ๋šซ๋Š” ๊ฒƒ์ด๋ฏ€๋กœ ๋ฐ”์ธ๋“œ ๋งˆ์šดํŠธ๋กœ ์ „๋‹ฌํ•œ ํŒŒ์ผ/๋””๋ ‰ํ† ๋ฆฌ์— ๋Œ€ํ•œ ์•ก์„ธ์Šค๋ฅผ _will_ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

ํŠนํžˆ Helm ์ฐจํŠธ๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋Ÿฐํƒ€์ž„์—์„œ ๋น„๋ฐ€๋ฆฌ์— ์ถ”์ถœํ•ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํ•˜๋“œ์ฝ”๋”ฉ๋œ uid ๋ฐ gid๋กœ ๊ฐ€๋“ ์ฐจ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•ด๋‹น ์ •๋ณด๋Š” ์ปจํ…Œ์ด๋„ˆ ๋‚ด๋ถ€์— ์ˆจ๊ฒจ์ ธ ์žˆ์œผ๋ฉฐ ๋ฐฐํฌ ์ค‘์— ์ฆ‰์‹œ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

๊ถ๊ธˆํ•จ: ํ•ด๋‹น uid/gid๋ฅผ ์•Œ ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ UX๋Š” ์–ด๋–ป๊ฒŒ ์ƒ๊ฒผ์„๊นŒ์š”? (ํ˜ธ์ŠคํŠธ uid/gid๋ฅผ (์•Œ ์ˆ˜ ์—†๋Š”) container-uid/gid์— ๋งคํ•‘ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•  ๋งคํ•‘ uid/gid๋ฅผ ์ œ๊ณตํ•ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์—?

๋”ฐ๋ผ์„œ ์งˆ๋ฌธ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์ธํ„ฐ๋„ท์˜ ๋‹ค๋ฅธ ๊ณณ์—์„œ ๊ณตํ†ต OCI ์‚ฌ์–‘์„ ๊ฐœ๋ฐœํ•˜๋Š” ๊ณณ์ด ์–ด๋””์ž…๋‹ˆ๊นŒ?

(ํ•œ ๋ˆˆ์—) OCI ์‚ฌ์–‘์˜ ๋ณ€๊ฒฝ์ด ํ•„์š”ํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ OCI ์‚ฌ์–‘ ์™ธ๋ถ€์—์„œ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ฃผ์š” ๋ฌธ์ œ๋Š” uid/gids๋ฅผ ๋งคํ•‘ํ•˜๋Š” ๋ฉ”์ปค๋‹ˆ์ฆ˜์ด ํ˜„์žฌ ์ปค๋„์— ์—†๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค(๋˜๋Š” shiftfs ์™€ ๊ฐ™์ด ์กด์žฌํ•˜์ง€๋งŒ ์ผ๋ฐ˜์ ์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Œ).

์ด๊ฒƒ์€ ์ฑ…์ž„ ์ด์ „์˜ ๊ณ ์ „์ ์ธ ์˜ค๊ฐํ˜•์ž…๋‹ˆ๋‹ค / ๋‹ค๋ฅธ ์‚ฌ๋žŒ์ด ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๊ฑฐ๋‚˜ ํ•ด๊ฒฐํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋‹ค์Œ ์ค‘ ํ•˜๋‚˜์ž…๋‹ˆ๋‹ค.

  • ์‚ฌ์šฉ์ž
  • Docker / ์ปจํ…Œ์ด๋„ˆํ™” ํ”Œ๋žซํผ์˜ ํŠน์ • ๊ตฌํ˜„
  • OCI ์‚ฌ์–‘
  • ํ•ต์‹ฌ
  • ํŒŒ์ผ ์‹œ์Šคํ…œ

๋ฌธ์ œ๋Š” ์ด๋ฏธ ํšจ๊ณผ์ ์œผ๋กœ ๋ช…์‹œ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž๊ฐ€ ์ด ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒƒ์€ ํˆฌ๋ฐ•ํ•˜๊ณ  ๋œ ์•ˆ์ „ํ•˜๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์‚ฌ์šฉ์ž๊ฐ€ ์ด๋ฏธ์ง€๋ณ„๋กœ ํ•ดํ‚นํ•˜๋„๋ก ํ•˜๋Š” ์—ฐ์‡„ ํšจ๊ณผ๋„ ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค.

์ฆ‰, ์„œ๋กœ ๋‹ค๋ฅธ ์‚ฌ์šฉ์ž์™€ ํ•จ๊ป˜ ์ž‘์—…ํ•˜๊ธฐ ์œ„ํ•ด ์ด๋ฏธ์ง€๋ฅผ ์‰ฝ๊ฒŒ ์ƒํ˜ธ ์šด์šฉํ•˜๊ณ  ๊ณต์œ /ํ˜ผํ•ฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ๋‹ค์Œ ์ค‘ ํ•˜๋‚˜์ž…๋‹ˆ๋‹ค.

  • ์ปค๋ฎค๋‹ˆํ‹ฐ ๊ณต์œ ๋ฅผ ์ค‘๋‹จํ•ฉ๋‹ˆ๋‹ค(๋งŽ์ด). ์„œ๋กœ ๋‹ค๋ฅธ ์‚ฌ์šฉ์ž๊ฐ€ ๋™์ผํ•œ ์ „์—ญ ๋„ค์ž„์ŠคํŽ˜์ด์Šค ํ’€์—์„œ ๊ฐœ๋ณ„์ ์œผ๋กœ ๊ฐœ๋ฐœ๋œ ์ด๋ฏธ์ง€์— ๋Œ€ํ•œ uid ๋ฐ gid๋ฅผ ์ •์˜ํ•˜๊ธฐ ๋•Œ๋ฌธ์—
  • ์‚ฌ์šฉ์ž๊ฐ€ ์ž์‹ ๋งŒ์˜ ์ž„์‹œ ํ‘œ์ค€์„ ๊ฐœ๋ฐœํ•˜๋„๋ก ๊ฐ•์ œํ•˜๊ณ  ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค์ด ์ž์‹ ์ด ์„ ํƒํ•œ ๊ทœ์น™์„ ๋”ฐ๋ฅด๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค.
  • ์‚ฌ์šฉ์ž๊ฐ€ ๋ชจ๋“  ๊ฒƒ์— root ๋ฅผ ์‚ฌ์šฉํ•˜๋„๋ก ํ•ฉ๋‹ˆ๋‹ค. ํ™•์‹คํžˆ ๋œ ์•ˆ์ „ํ•ฉ๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์œผ๋กœ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋Š” ํŠน๊ถŒ ์—์Šค์ปฌ๋ ˆ์ด์…˜ ๋ณดํ˜ธ์˜ ์ถ”๊ฐ€ ๊ณ„์ธต์„ ์ œ๊ฑฐํ•˜๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž๊ฐ€ ์ด๋ฏธ ์ปจํ…Œ์ด๋„ˆ ๋‚ด๋ถ€์— root ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ปจํ…Œ์ด๋„ˆ ๋ธŒ๋ ˆ์ดํฌ์•„์›ƒ ์ทจ์•ฝ์ ์„ ํ›จ์”ฌ ๋” ์‰ฝ๊ฒŒ ์•…์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐ™์€ ์ปจํ…Œ์ด๋„ˆ ๋‚ด์—์„œ ๋‹ค๋ฅธ ์„œ๋น„์Šค๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์€ ๋งํ•  ๊ฒƒ๋„ ์—†๊ณ  ์œ„๋กœ ๊ฐ€๊ธฐ ์ „์— ์˜†์œผ๋กœ ๊ฐ€๋Š” ๋˜ ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์ด๊ธฐ๋„ ํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋ž˜์„œ ๊ฑฐ๋ž˜์ž…๋‹ˆ๋‹ค. ์œ„์˜ ๊ฒƒ๋“ค์€ ํ˜„์žฌ ํŠธ๋ ˆ์ด๋“œ ์˜คํ”„์ž…๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ๊ณณ์—์„œ ์œ„์— ๋‚˜์—ด๋œ ๋‹ค๋ฅธ ์—”ํ„ฐํ‹ฐ ์ค‘ ํ•˜๋‚˜ ์ด์ƒ์— ์ฑ…์ž„์„ ์ „๊ฐ€ํ•˜๊ธฐ ์œ„ํ•ด ๋‹ค๋ฅธ ์ ˆ์ถฉ์•ˆ์ด ์žˆ๋Š” ๋ฐ˜๋ฉด.

ํŒŒ์ผ ์‹œ์Šคํ…œ ๊ธฐ๋ฐ˜ ์†”๋ฃจ์…˜์„ ์ž์„ธํžˆ ์‚ดํŽด๋ณด๋Š” ๊ฒƒ๊ณผ ๊ด€๋ จํ•˜์—ฌ BTW๋Š” ์ŠคํŒŒ์ด๋” ๋งํฌ์— ๋Œ€ํ•œ ์ด '์ž ์žฌ์ ์œผ๋กœ ์œ ์šฉํ•  ์ˆ˜ ์žˆ๋Š”' ์„ค๋ช…์„ ๋ฐœ๊ฒฌํ–ˆ์Šต๋‹ˆ๋‹ค.

https://github.com/docker/compose/issues/3270#issuecomment -365644540

์—ฌ๊ธฐ์—๋Š” ๋ถ„์‚ฐ ํŒŒ์ผ ์‹œ์Šคํ…œ('Lustre'๋ผ๊ณ  ํ•จ) ๋ฐ ZFS์— ๊ด€ํ•œ ๊ธฐํƒ€ ๋ฌธ์ œ๋ฅผ ํฌํ•จํ•˜์—ฌ ์ด ๋™์ผํ•œ ์ผ๋ฐ˜ ๊ธฐ๋Šฅ(๋‹ค๋ฅธ ํ”„๋กœ์ ํŠธ/์žฅ์†Œ์— ๋Œ€ํ•œ)์— ๋Œ€ํ•œ ์—ฌ๋Ÿฌ ๋‹ค๋ฅธ ์ฐธ์กฐ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ธ€์Ž„, ๋‚˜๋Š” ์šฐ์—ฐํžˆ ์—ฌ๊ธฐ์—์„œ ZFS๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋Ÿฐ ๋‹ค์Œ ์šฐ๋ถ„ํˆฌ/๋Ÿฐ์น˜ํŒจ๋“œ์—์„œ ๋™์ผํ•œ ๋ฒ„๊ทธ์˜ ๋‹ค๋ฅธ ์‚ฌ๋ณธ๋„ ์ฐพ์•˜์Šต๋‹ˆ๋‹ค. ๋™์ผํ•œ ZOL #4177 ๋ฌธ์ œ๋ฅผ ์ฐธ์กฐํ•˜์—ฌ,

https://bugs.launchpad.net/ubuntu/+source/zfs-linux/+bug/1567558

๋ฌธ์ œ์˜ ๋ฒ„๊ทธ๊ฐ€ zfs ๋ฒ„์ „ 0.6.5.7+ SO์—์„œ ์ˆ˜์ •๋˜์—ˆ๋‹ค๊ณ  ๋งํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ์ž ์žฌ์ ์œผ๋กœ uid์™€ gid๋ฅผ ๋‹ค์‹œ ๋งคํ•‘ํ•˜๊ธฐ ์œ„ํ•œ ์ผ์ข…์˜ ๋ฐฑ์—… ์ €์žฅ์†Œ๋กœ zfs์™€ ACL์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Œ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๊นŒ? ๊ธ€์Ž„, ์ด๊ฒƒ์€ ๋‚ด๊ฐ€ ์ „์— ๋“ค์–ด๋ณธ ๊ฒƒ์ด ์•„๋‹™๋‹ˆ๋‹ค.

์•„, ์•„๋งˆ๋„ ์ด ์†”๋ฃจ์…˜์€ LXC ์ปจํ…Œ์ด๋„ˆ์—์„œ๋งŒ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Š” ๊ฑฐ๊ธฐ์— ๋Œ€ํ•œ ๊ทธ์˜ ์˜๊ฒฌ(LXC ํ”„๋กœ์ ํŠธ์˜ ๋ฆฌ๋”)์—์„œ "์šฐ๋ฆฌ๋Š” setuid ๋„์šฐ๋ฏธ(newuidmap ๋ฐ newgidmap)๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค"๋ผ๊ณ  ๋งํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— "uid ๋ฐ gid ๋งต์„ ์„ค์ •"ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์•„๋งˆ๋„ LXC ์ž์ฒด์— ๋ช‡ ๊ฐ€์ง€ ํ•„์š”ํ•œ ๋ฉ”์ปค๋‹ˆ์ฆ˜์ด ์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด zfs acls ๋ถ€๋ถ„์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๊นŒ? ์•„๋‹ˆ๋ฉด ์ œ๊ฐ€ ์ฐฉ๊ฐํ•œ ๊ฒƒ์ผ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ์ด๊ฒƒ์„ ๋๊นŒ์ง€ ๋”ฐ๋ฅด๊ณ  โ€‹โ€‹์žˆ๋Š”์ง€ ์™„์ „ํžˆ ํ™•์‹ ํ•˜์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค.

๋˜ ๋‹ค๋ฅธ ํฅ๋ฏธ๋กœ์šด ๋งํฌ, ์ด๋ฒˆ์—๋Š” shiftfs ์— ๋Œ€ํ•œ ๋งํฌ์™€ ํ•ด๋‹น ๊ธฐ๋Šฅ์„ ์˜ค๋ฒ„๋ ˆ์ด์— ํก์ˆ˜ํ•  ๊ฐ€๋Šฅ์„ฑ์— ๋Œ€ํ•œ ํ† ๋ก ์ž…๋‹ˆ๋‹ค. ๋ฌผ๋ก  ๋„์ปค๊ฐ€ ์ด๋ฏธ ์‚ฌ์šฉํ•˜๋Š” ๊ธฐ๋ณธ ํŒŒ์ผ ์‹œ์Šคํ…œ์ž…๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ๋‹ค์‹œ ๋งคํ•‘ ๊ธฐ๋Šฅ์ด overlayfs ๋กœ ๊ตฌํ˜„๋˜์—ˆ์ง€๋งŒ ๊ธฐ๋ณธ ํŒŒ์ผ ์‹œ์Šคํ…œ ๋Œ€์‹  zfs ์Šคํ† ๋ฆฌ์ง€ ๋“œ๋ผ์ด๋ฒ„๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด ์–ด๋–ป๊ฒŒ ๋ฉ๋‹ˆ๊นŒ? ํŒŒ์ผ ์‹œ์Šคํ…œ๋ณ„๋กœ ๊ตฌํ˜„๋˜๋Š” ๊ฒฝ์šฐ uid/gids๋ฅผ ๋‹ค์‹œ ๋งคํ•‘ํ•˜๋Š” ๊ธฐ๋Šฅ์—์„œ ์ œ์™ธ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๊นŒ? ์•„๋‹ˆ๋ฉด ๋‘˜ ๋‹ค ๋ณ„๋„๋กœ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? ์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค. Docker ๋ฐ๋ชฌ์ด ์ด๋Ÿฌํ•œ ์žฌ๋งคํ•‘์„ ์ธ์‹ํ•˜๊ณ  ๊ณตํ†ต API ๋ฐ ํ”Œ๋ž˜๊ทธ(fs ๋“œ๋ผ์ด๋ฒ„ ๊ณ„์ธต์œผ๋กœ ์ „๋‹ฌํ•˜๊ธฐ ์œ„ํ•ด)๋ฅผ ์ œ๊ณตํ•ด์•ผ ํ•˜๋Š”์ง€ ์—ฌ๋ถ€๊ฐ€ ์•ฝ๊ฐ„ ๋ถˆ๋ถ„๋ช…ํ•ฉ๋‹ˆ๋‹ค. ๋˜๋Š” ํ˜ธ์ŠคํŠธ ์ธก(ํŒŒ์ผ ์‹œ์Šคํ…œ ๋‚ด๋ถ€, ๋„์ปค ์™ธ๋ถ€)์—์„œ ์ด๋Ÿฌํ•œ ์žฌ๋งคํ•‘์„ ์ˆ˜๋™์œผ๋กœ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒฝ์šฐ์ž…๋‹ˆ๋‹ค. ๊ทธ ๋ถ€๋ถ„๋„ ๋‚˜์—๊ฒŒ๋Š” ์กฐ๊ธˆ ๋ถˆ๋ถ„๋ช…ํ•˜๋‹ค.

[ํŽธ์ง‘] ์•—, ๋งํฌ๋ฅผ ํฌํ•จํ•˜๋Š” ๊ฒƒ์„ ์žŠ์—ˆ์Šต๋‹ˆ๋‹ค! ์—ฌ๊ธฐ์žˆ์–ด

https://lists.linuxfoundation.org/pipermail/containers/2018-June/039172.html

์ด ๋ฌธ์ œ๋Š” ๋ณผ๋ฅจ/๋ฐ”์ธ๋“œ ๋งˆ์šดํŠธ์— ๊ด€ํ•œ ๊ฒƒ์ด๋ฏ€๋กœ ์ปจํ…Œ์ด๋„ˆ์˜ ํŒŒ์ผ ์‹œ์Šคํ…œ๊ณผ ๋ณ„๊ฐœ์ž…๋‹ˆ๋‹ค.

์˜ค๋ฒ„๋ ˆ์ด์— shiftfs ๊ธฐ๋Šฅ์ด ํ†ตํ•ฉ๋œ ๊ฒฝ์šฐ bindmount์— ๋Œ€ํ•ด uid/gid ์‹œํ”„ํŠธ์™€ ํ•จ๊ป˜ ๊ณผ๋„ํ•˜๊ฒŒ ์‚ฌ์šฉํ•˜์ง€๋งŒ ์ง€์›๋˜์ง€ ์•Š๋Š” ์‹œ์Šคํ…œ์—์„œ๋Š” ๋‹ค๋ฅธ ๊ฒƒ์œผ๋กœ(๋˜๋Š” ์•„๋ฌด๊ฒƒ๋„) ๋Œ€์ฒดํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

Podman์€ ๋ฃจํŠธ ์—†๋Š” Docker ๋“œ๋กญ์ธ ๋Œ€์ฒด https://www.youtube.com/watch?v=N0hSn5EwW8w https://podman.io/ ์ž…๋‹ˆ๋‹ค. podman์—์„œ๋Š” ๋ฃจํŠธ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ ์‚ฌ์šฉ์ž ๊ถŒํ•œ์ด ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ฒ˜๋ฆฌ๋ฉ๋‹ˆ๋‹ค. ์šฐ๋ฆฌ ํŒ€์€ ์ด ๋ฌธ์ œ๋กœ ์ธํ•ด Podman์œผ๋กœ ์ „ํ™˜ํ–ˆ๊ณ  ๋งค์šฐ ์ž˜ ์ž‘๋™ํ–ˆ์Šต๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ ์˜๋ฏธ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.
๋™์ผํ•œ ๋ฌธ์ œ๊ฐ€ ์ ์šฉ๋ฉ๋‹ˆ๋‹ค.
docker์—๋Š” rootless ๋ชจ๋“œ๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‹ค์Œ ๋ช…๋ น์–ด๋กœ Podman์„ ํ…Œ์ŠคํŠธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Podman์€ Docker์™€ ๋‹ฌ๋ฆฌ ๋ณ„๋„์˜ ๋ฐ๋ชฌ์ด ์—†์œผ๋ฉฐ ๋ชจ๋“  ๊ฒƒ์ด podman ๋ช…๋ น์„ ์‹คํ–‰ํ•˜๋Š” ์‚ฌ์šฉ์ž ์•„๋ž˜์—์„œ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ podman ๋‚ด๋ถ€์— ์ƒ์„ฑ๋œ ํŒŒ์ผ์€ podman run ... ๋ช…๋ น์„ ์‹คํ–‰ํ•œ ์‚ฌ์šฉ์ž๊ฐ€ ์†Œ์œ ํ•ฉ๋‹ˆ๋‹ค.

kkimdev<strong i="8">@ubuntu</strong>:~$ mkdir podman_test
kkimdev<strong i="9">@ubuntu</strong>:~$ ls -agh podman_test
total 8.0K
drwxrwxr-x 2 kkimdev 4.0K Jun 27 04:23 .
drwxr-xr-x 8 kkimdev 4.0K Jun 27 04:23 ..

kkimdev<strong i="10">@ubuntu</strong>:~$ podman run --rm -it -v ~/podman_test:/podman_test alpine
/ # cd /podman_test/
/podman_test # touch test_file
/podman_test # ls -agh
total 8K
drwxrwxr-x    2 root        4.0K Jun 27 02:24 .
drwxr-xr-x   20 root        4.0K Jun 27 02:24 ..
-rw-r--r--    1 root           0 Jun 27 02:24 test_file

/podman_test #

kkimdev<strong i="11">@ubuntu</strong>:~$ ls -agh podman_test/
total 8.0K
drwxrwxr-x 2 kkimdev 4.0K Jun 27 04:24 .
drwxr-xr-x 8 kkimdev 4.0K Jun 27 04:23 ..
-rw-r--r-- 1 kkimdev    0 Jun 27 04:24 test_file

์ด๊ฒƒ์€ podman ์— ๋Œ€ํ•ด ๊ด‘๊ณ ํ•˜๊ธฐ์— ์ ์ ˆํ•œ ์žฅ์†Œ๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค. ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋  ์ˆ˜ ์žˆ๋Š” ์ž‘๋™ ๋ฐฉ์‹์— ๋Œ€ํ•œ ๊ตฌ์ฒด์ ์ธ ๊ธฐ์ˆ  ์„ธ๋ถ€์ •๋ณด๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ ํŠนํžˆ ํ•ด๋‹น ๋ฌธ์ œ์— ๋Œ€ํ•œ ์ž ์žฌ์ ์ธ ์†”๋ฃจ์…˜์œผ๋กœ ๋…ผ์˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ˜„์žฌ ๋Œ“๊ธ€์„ ๋‹ค์‹œ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ง€๊ธˆ๊นŒ์ง€๋Š” ์ด๊ฒƒ์ด ์•„๋‹ˆ๋ฏ€๋กœ ์ด ๋…ผ์˜๋ฅผ ๋‹ค๋ฅธ ๊ณณ์—์„œ ์ง„ํ–‰ํ•˜์‹ญ์‹œ์˜ค.

podman ๊ฐ€ Docker์™€ ์•„ํ‚คํ…์ฒ˜๊ฐ€ ๋งค์šฐ ๋‹ค๋ฅด๊ธฐ ๋•Œ๋ฌธ์— ์ด ๋ฌธ์ œ๋ฅผ ๋œ ์‹ฌ๊ฐํ•˜๊ณ  ๊ณ ํ†ต์Šค๋Ÿฝ๊ฒŒ ๋งŒ๋“ ๋‹ค๊ณ  ํ•ด์„œ Docker๊ฐ€ ์ด ํ•œ ๊ฐ€์ง€ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ์ž‘๋™ ๋ฐฉ์‹์„ ์™„์ „ํžˆ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์€ ์•„๋‹™๋‹ˆ๋‹ค. Docker๊ฐ€ ์žˆ๋Š” ๊ทธ๋Œ€๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ๋Š” ๋ฐ์—๋Š” ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ์ด์œ ๊ฐ€ ์žˆ์œผ๋ฉฐ ์ด๋Ÿฌํ•œ ๋ชจ๋“  ๊ธฐ๋ก์„ ๋ฌด์‹œํ•˜๋Š” ๊ฒƒ์€ ์†”์งํžˆ ์ž˜๋ชป๋œ ์ƒ๊ฐ์ž…๋‹ˆ๋‹ค.

@tianon ์˜ˆ, ๋‘ ๊ฐ€์ง€ ์ ‘๊ทผ ๋ฐฉ์‹ ๋ชจ๋‘ ์žฅ๋‹จ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋Œ€์ƒ ์‚ฌ์šฉ์ž์™€ ํ•จ๊ป˜ ์ปจํ…Œ์ด๋„ˆ๋ฅผ podman์œผ๋กœ ์‹คํ–‰ํ•˜๋ฉด ์ด ๊ธฐ์ˆ ์ ์ธ ๋ฌธ์ œ, ์ฆ‰ "๋ฃจํŠธ๊ฐ€ ์•„๋‹Œ ์‚ฌ์šฉ์ž๋กœ ๋ณผ๋ฅจ ํƒ‘์žฌ"๊ฐ€ ํŠนํžˆ ํ•ด๊ฒฐ๋˜๊ธฐ ๋•Œ๋ฌธ์— podman์„ ์–ธ๊ธ‰ํ–ˆ์Šต๋‹ˆ๋‹ค.

์œ„ ๋Œ“๊ธ€์— ์ƒ์„ฑ๋œ "test_file"์˜ ๊ถŒํ•œ์„ ํ™•์ธํ•ด์ฃผ์„ธ์š”. ๋จผ์ € "~/podman_test" ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ๋งˆ์šดํŠธํ•˜๊ณ  podman ์ปจํ…Œ์ด๋„ˆ ๋‚ด๋ถ€์— "test_file" ํŒŒ์ผ์„ ์”๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ ์‚ฌ์šฉ์ž๊ฐ€ ์ปจํ…Œ์ด๋„ˆ ์™ธ๋ถ€๋กœ ์ด๋™ํ•˜๋ฉด ํŒŒ์ผ์ด ๋ฃจํŠธ๊ฐ€ ์•„๋‹Œ "kkimdev"์˜ ์†Œ์œ ์ž„์„ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ฌธ์ œ๋Š” Docker ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•œ ๊ท€ํ•˜์˜ ์ œ์•ˆ์ด Docker์šฉ ๋ฌธ์ œ ์ถ”์ ๊ธฐ์—์„œ ํฌ๊ฒŒ ๊ฑด์„ค์ ์ด์ง€ ์•Š์€ "Docker๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์Œ"์— ํ•ด๋‹นํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์˜ˆ, podman ๋Š” ๋‹ค๋ฅด๊ฒŒ ์„ค๊ณ„๋˜์–ด ์ด ๋ฌธ์ œ๊ฐ€ ํ•ด๋‹น ๋„๊ตฌ์— ๋Œ€ํ•ด ๋ฌด์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ํ›Œ๋ฅญํ•˜๊ณ  ๊ดœ์ฐฎ์ง€๋งŒ ์—ฌ๊ธฐ์„œ๋Š” ์ฃผ์ œ์—์„œ ์™„์ „ํžˆ ๋ฒ—์–ด๋‚ฌ์Šต๋‹ˆ๋‹ค. Rootless์—๋Š” ์„œ๋กœ ๋‹ค๋ฅธ ์žฅ๋‹จ์ ์ด ์žˆ์œผ๋ฉฐ, ๊ทธ ์ค‘ ์ผ๋ถ€๋Š” ์ผ๋ถ€ ์‚ฌ๋žŒ๋“ค์—๊ฒŒ ์ ํ•ฉํ•˜๊ณ  ์ผ๋ถ€๋Š” ๊ทธ๋ ‡์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์‹œ๊ฐ„์ด ์ง€๋‚จ์— ๋”ฐ๋ผ(๋Œ€๋ถ€๋ถ„ ์ปค๋„ ๊ฐœ์„ ) ๊ฐœ์„ ๋˜๊ณ  ์žˆ์ง€๋งŒ ์—ฌ๊ธฐ ์žˆ๋Š” ๋ชจ๋“  ์‚ฌ๋žŒ์„ ์œ„ํ•œ ์ผ๋ฐ˜์ ์ธ ์†”๋ฃจ์…˜์€ ์•„๋‹™๋‹ˆ๋‹ค.

์ด๋ฅผ ์œ„ํ•ด์„œ๋Š” ์œ„์—์„œ ์ž์„ธํžˆ ๋…ผ์˜ํ•œ ๋ฐ”์™€ ๊ฐ™์ด ์ผ๋ฐ˜ ์†”๋ฃจ์…˜์„ ์œ„ํ•œ ์ปค๋„ ์ˆ˜์ • ๋˜๋Š” shim์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค( @cpuguy83 ๋ฐ ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค์ด ์ผ๋ฐ˜์ ์ธ ๋ฐฉ์‹์œผ๋กœ ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐ ๋„์›€์„ ์ฃผ๊ธฐ ์œ„ํ•ด ๋…ธ๋ ฅํ•˜๊ณ  ์žˆ์Œ).

Docker๋Š” 2013๋…„๋ถ€ํ„ฐ ์ด ํŠน์ • ๋ฌธ์ œ๋ฅผ ๊ณต๊ฐœํ–ˆ์œผ๋ฉฐ ๊ฑฐ์˜ โ€‹โ€‹6๋…„์ด ์ง€๋‚œ ํ›„์—๋„ ์‰ฝ๊ฒŒ ๊ฐœ์„ ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. Podman์€ Docker์™€์˜ ํ˜ธํ™˜์„ฑ์„ ํ™•๋ณดํ•˜์ง€๋งŒ Docker์˜ ์„ค๊ณ„ ๊ฒฐํ•จ๋„ ํ•ด๊ฒฐํ•˜๋„๋ก ์„ค๊ณ„๋˜์—ˆ์Šต๋‹ˆ๋‹ค(์ˆ˜ํผ์œ ์ € Docker ๋ฐ๋ชฌ์ด ํ•„์š”ํ•˜์ง€ ์•Š์€ ๊ถŒํ•œ ์—†๋Š” ์‚ฌ์šฉ์ž๋กœ ์‹คํ–‰ ํฌํ•จ).

์‚ฌ์šฉ์ž๊ฐ€ GitHub ๋ฌธ์ œ์— ๋Œ€ํ•ด ๋‹ค๋ฅธ ์‚ฌ๋žŒ์—๊ฒŒ ์กฐ์–ธ์„ ์ค„ ์ˆ˜ ์žˆ๋‹ค๋ฉด ์ „ํ˜€ ๋ฌธ์ œ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ์ปค๋ฎค๋‹ˆํ‹ฐ์ž…๋‹ˆ๋‹ค. ๋„์›€์ด ๋ ๋งŒํ•œ ๊ฒƒ์„ ์ž์œ ๋กญ๊ฒŒ ์ถ”์ฒœํ•˜์‹ญ์‹œ์˜ค.

Docker๊ฐ€ ์žˆ๋Š” ๊ทธ๋Œ€๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ๋Š” ๋ฐ์—๋Š” ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ์ด์œ ๊ฐ€ ์žˆ์Œ์„ ์žฅ๋‹ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

grep ๋„ ๋งˆ์ฐฌ๊ฐ€์ง€์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋ˆ„๊ตฐ๊ฐ€ ๋” ๋น ๋ฅด๊ฒŒ ๊ฒ€์ƒ‰ํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ ์—ฌ์ „ํžˆ ripgrep ์„ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค. grep ์ด์Šˆ ํŠธ๋ž˜์ปค์—์„œ๋„ ๋ง์ด์ฃ . ์‚ฌ์šฉ์ž์˜ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ณ  ์‚ฌ์šฉ์ž๋ฅผ ํ–‰๋ณตํ•˜๊ฒŒ ํ•˜๋Š” ํ•œ ๋ฌธ์ œ ์ถ”์ ๊ธฐ๊ฐ€ ๋ˆ„๊ตฌ์˜ ๋ฌธ์ œ์ธ์ง€๋Š” ์ค‘์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

Podman์ด ์ž‘๋™ํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ: ์ข‹์Šต๋‹ˆ๋‹ค! ํ•˜์ง€๋งŒ ์ธํ”„๋ผ์—์„œ docker ๋ฅผ podman ๋กœ ๋ฐ”๊ฟ”์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค์—๊ฒŒ ๋„์›€์ด ๋œ๋‹ค๋ฉด ๊ทธ๋ƒฅ ๊ทธ๋ ‡๊ฒŒ ํ•˜๋„๋ก ๋‚ด๋ฒ„๋ ค ๋‘์‹ญ์‹œ์˜ค.

Podmans์˜ ์ฃผ์š” ์ฃผ์žฅ์€ ๋ฐ๋ชฌ์„ ์‹คํ–‰ํ•˜์ง€ ์•Š๋Š”๋‹ค๋Š” ๊ฒƒ์ด๋ฉฐ ์ด๊ฒƒ์ด ์ด์— ๋Œ€ํ•œ ์ €์˜ ์ฃผ์š” ์ฃผ์žฅ์ž…๋‹ˆ๋‹ค. ์žฌ๋ถ€ํŒ… ํ›„ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์–ด๋–ป๊ฒŒ ๋ฐฑ์—…ํ•ฉ๋‹ˆ๊นŒ? ๋‚˜๋Š” ๊ทธ๊ฒƒ์„ ์†์œผ๋กœํ•˜์ง€ ์•Š์„ ๊ฒƒ์ด๊ณ  ๋‹ค๋ฅธ ๋ชจ๋“  ๊ฒƒ์€ ๋‹จ์ง€ ๋‚˜์œ ๋””์ž์ธ ์ผ๋ฟ์ž…๋‹ˆ๋‹ค. ๋˜ํ•œ ์‚ฌ์šฉ์ž๊ฐ€ ์†Œ์œ ํ•˜์ง€๋งŒ ์‹œ์Šคํ…œ์ด ์†Œ์œ ํ•œ ๋„์ปค ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์›ํ•˜์ง€ ์•Š์œผ๋ฉฐ ์ด๋Š” ๋ฃจํŠธ๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.
๋‹น์‹ ์ด ๊ทธ๊ฒƒ์„ ์‚ฌ์šฉํ•˜๋Š” ์œ ์ผํ•œ ์‚ฌ๋žŒ์ด๋ผ๋ฉด Podman์ด ์˜๋ฏธ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋ ค๋ฉด COPY --chown ...:... ๋กœ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๋นŒ๋“œํ•˜์„ธ์š”!

๋˜ํ•œ ๋„์ปค์—๋Š” ๊ทธ๋Ÿฐ ๋ฌธ์ œ ๊ฐ€ ์—†์œผ๋ฉฐ ๋‚˜์—๊ฒŒ๋„ ์ค‘์š”ํ•œ ๋„์ปค ์„œ๋ฒ„๋ฅผ ์›๊ฒฉ์œผ๋กœ ์ œ์–ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์‹คํ–‰ ์ค‘์ธ ์ปจํ…Œ์ด๋„ˆ์—์„œ ํฌ๋“œ๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๋„๊ตฌ๋„ ์žˆ์ง€๋งŒ ์ฒ˜์Œ๋ถ€ํ„ฐ ๊นจ๋—ํ•œ ๋ฐฉ์‹์œผ๋กœ ๋นŒ๋“œํ•ด์•ผ ํ•˜๋ฏ€๋กœ ๊ถŒ์žฅํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ด์ œ ์ฃผ์ œ๋กœ ๋Œ์•„๊ฐ€์•ผ ํ•  ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. IMHO์˜ ์ฒซ ๋ฒˆ์งธ ์กฐ์–ธ์€ ๊ดœ์ฐฎ์•˜์ง€๋งŒ ๋‹ค๋ฅธ ๋ชจ๋“  ๊ฒƒ์€ ์ด ๋ฌธ์ œ๋ฅผ ๋‚ ๋ ค๋ฒ„๋ฆฌ๊ณ  ์•„๋ฌด ๊ฒƒ๋„ ํ•ด๊ฒฐํ•˜์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค.


@SuperSandro2000 , ํ•˜์ง€๋งŒ ์—ฌ๊ธฐ๋ฅผ ํด๋ฆญํ•˜๋ฉด ๊ท€ํ•˜์˜ ์ง„์ˆ ์— ๋Œ€ํ•œ ๋‹ต๋ณ€์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์žฌ๋ถ€ํŒ… ํ›„ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์–ด๋–ป๊ฒŒ ๋ฐฑ์—…ํ•ฉ๋‹ˆ๊นŒ? ๋‚˜๋Š” ๊ทธ๊ฒƒ์„ ์†์œผ๋กœํ•˜์ง€ ์•Š์„ ๊ฒƒ์ด๊ณ  ๋‹ค๋ฅธ ๋ชจ๋“  ๊ฒƒ์€ ๋‹จ์ง€ ๋‚˜์œ ๋””์ž์ธ ์ผ๋ฟ์ž…๋‹ˆ๋‹ค.

๊ธ€์Ž„์š”, Podman์€ systemd์™€ ๊ธฐ๋ณธ์ ์œผ๋กœ ํ†ตํ•ฉ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค (๊ฑฐ์˜ ๋ชจ๋“  ์ตœ์‹  GNU Linux ๋ฐฐํฌํŒ์—์„œ _๊ฑฐ์˜_ ๋‹ค๋ฅธ ๋ชจ๋“  ๊ฒƒ). ๋”ฐ๋ผ์„œ '๋‘ ๊ฐœ์˜' ๋ถ€ํŒ… ์‹œ์Šคํ…œ์„ ์œ ์ง€ํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค(์˜ˆ: ๋จผ์ € Docker ๋ฐ๋ชฌ์„ ์‹œ์ž‘ํ•˜๊ธฐ ์œ„ํ•ด systemd๋ฅผ ์‹คํ–‰ํ•œ ๋‹ค์Œ ๋‹ค๋ฅธ ๊ตฌ์„ฑ์—์„œ ์‹œ์ž‘ ์ปจํ…Œ์ด๋„ˆ์˜ ๋˜ ๋‹ค๋ฅธ ๋ผ์šด๋“œ๋ฅผ ๋งŒ๋“ค์–ด์•ผ ํ•จ). ๋”ฐ๋ผ์„œ Podman์„ ์‚ฌ์šฉํ•˜๋ฉด systemd๋กœ ๋ชจ๋“  ๊ฒƒ์„ ์ œ์–ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(์ฆ‰, ์ด๋ฏธ ์„ค์น˜๋˜์–ด ์‹คํ–‰ ์ค‘์ผ ๊ฐ€๋Šฅ์„ฑ์ด ๋†’์€ ์‹œ์Šคํ…œ).

๋˜ํ•œ ์‚ฌ์šฉ์ž๊ฐ€ ์†Œ์œ ํ•˜์ง€๋งŒ ์‹œ์Šคํ…œ์ด ์†Œ์œ ํ•œ ๋„์ปค ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์›ํ•˜์ง€ ์•Š์œผ๋ฉฐ ์ด๋Š” ๋ฃจํŠธ๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

๋‹น์‹ ์ด ๊ทธ๊ฒƒ์„ ์›ํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด ๊ทธ๊ฒƒ์€ ์™„์ „ํžˆ ๊ดœ์ฐฎ์Šต๋‹ˆ๋‹ค. ์—ฌ์ „ํžˆ ์ˆ˜ํผ์œ ์ €๋กœ Podman์„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ๋” ์ด์ƒ _ํ•˜์ง€ ์•Š์•„๋„ ๋ฉ๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ ๋ˆ„๊ตฐ๊ฐ€๊ฐ€ Docker ๋ฐ๋ชฌ์„ ์•…์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ ์‹œ์Šคํ…œ์˜ _๋ชจ๋“  ๊ฒƒ_์— ๋Œ€ํ•œ ์ œ์–ด ๊ถŒํ•œ์ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด๋Š” ๋‚˜์œ ์ƒ๊ฐ์œผ๋กœ ๊ฐ„์ฃผ๋˜๊ณ  ๊ณต๊ฒฉ ํ‘œ๋ฉด์„ ์ฆ๊ฐ€์‹œํ‚ต๋‹ˆ๋‹ค.

๋‹น์‹ ์ด ๊ทธ๊ฒƒ์„ ์‚ฌ์šฉํ•˜๋Š” ์œ ์ผํ•œ ์‚ฌ๋žŒ์ด๋ผ๋ฉด Podman์ด ์˜๋ฏธ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด ์ง„์ˆ ์€ ์˜๋ฏธ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. Podman์„ ์‚ฌ์šฉํ•˜๋ฉด ๋‹จ์ผ ์‹œ์Šคํ…œ์— ๋ถ„์‚ฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ๋™์ผํ•œ ์‹œ์Šคํ…œ์—์„œ ๋งŽ์€ ์‚ฌ๋žŒ๋“ค์ด ์ž‘์—…ํ•˜๋Š” ๊ฒฝ์šฐ ํŠนํžˆ ์ ํ•ฉํ•œ ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋ ค๋ฉด COPY --chown ...:... ๋กœ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๋นŒ๋“œํ•˜์„ธ์š”!

์—ฌ๊ธฐ์„œ ๋ฌธ์ œ๋Š” _runtime_์˜ ์ปจํ…Œ์ด๋„ˆ์— ๋Œ€ํ•œ ๋ณผ๋ฅจ์„ _mounting_ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด๋ฏธ์ง€ ๊ตฌ์ถ•๊ณผ ๊ฑฐ์˜ ๊ด€๋ จ์ด ์—†์Šต๋‹ˆ๋‹ค.

๋˜ํ•œ ๋„์ปค์—๋Š” ๊ทธ๋Ÿฐ ๋ฌธ์ œ ๊ฐ€ ์—†์œผ๋ฉฐ ๋‚˜์—๊ฒŒ๋„ ์ค‘์š”ํ•œ ๋„์ปค ์„œ๋ฒ„๋ฅผ ์›๊ฒฉ์œผ๋กœ ์ œ์–ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด ๊ฒŒ์‹œ๋ฌผ์ด ์žˆ๋Š” ๋ธ”๋กœ๊ทธ๋ฅผ ์ •ํ™•ํžˆ ์–ธ๊ธ‰ํ•˜๋Š” ๊ฒƒ์ด ์žฌ๋ฏธ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋‚˜๋Š” ๋‘ ๊ตฌํ˜„์˜ ๋„คํŠธ์›Œํฌ ์„ธ๋ถ€ ์‚ฌํ•ญ์— ๋Œ€ํ•ด ๊ฒฝํ—˜์ด ๋งŽ์ง€ ์•Š์ง€๋งŒ ๋‚ด๊ฐ€ ์ดํ•ดํ•œ ๋ฐ”์™€ ๊ฐ™์ด podman์€ ๊ฐ€๋Šฅํ•œ ์ตœ์†Œ ๋„คํŠธ์›Œํฌ ๊ทœ์น™์œผ๋กœ ์‹œ์ž‘ํ•˜๊ณ  ๊ถŒํ•œ์ด ์—†๋Š” ์‚ฌ์šฉ์ž๋Š” veth ์Œ์„ ์„ค์ •ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

๋ถ„๋ช…ํžˆ ํ•˜์ž๋ฉด, podman์—์„œ ์–ป์„ ์ˆ˜ ์žˆ๋Š” ๊ฒƒ๊ณผ ๊ฐ™์€ ํšจ๊ณผ๋ฅผ rootless docker์—์„œ๋„ ์–ป์„ ์ˆ˜ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
dockerd๊ฐ€ ์‚ฌ์šฉ์ž๋กœ ์‹คํ–‰๋˜๊ณ  ์ปจํ…Œ์ด๋„ˆ์˜ ๋ฃจํŠธ๊ฐ€ UID์— ๋งคํ•‘๋˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ ๋‹จ์ ์ด ์žˆ์œผ๋ฉฐ ๋ฌผ๋ก  ์—ฌ๋Ÿฌ ์‚ฌ์šฉ์ž์™€ ๋ฐ๋ชฌ์„ ๊ณต์œ ํ•  ๋•Œ๋Š” ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
https://get.docker.com/rootless

2019๋…„ 6์›” 27์ผ ์˜ค์ „ 7์‹œ 52๋ถ„์— Alexander Adam [email protected] ์ด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ผ์Šต๋‹ˆ๋‹ค.

์ด์ œ ์ฃผ์ œ๋กœ ๋Œ์•„๊ฐ€์•ผ ํ•  ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. IMHO์˜ ์ฒซ ๋ฒˆ์งธ ์กฐ์–ธ์€ ๊ดœ์ฐฎ์•˜์ง€๋งŒ ๋‹ค๋ฅธ ๋ชจ๋“  ๊ฒƒ์€ ์ด ๋ฌธ์ œ๋ฅผ ๋‚ ๋ ค๋ฒ„๋ฆฌ๊ณ  ์•„๋ฌด ๊ฒƒ๋„ ํ•ด๊ฒฐํ•˜์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค.

@SuperSandro2000 https://github.com/SuperSandro2000 , ํ•˜์ง€๋งŒ ์—ฌ๊ธฐ๋ฅผ ํด๋ฆญํ•˜๋ฉด ๊ท€ํ•˜์˜ ์ง„์ˆ ์— ๋Œ€ํ•œ ๋‹ต๋ณ€์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
https://podman.io/blogs/2018/09/13/systemd.html https://osric.com/chris/accidental-developer/2018/12/docker-versus-podman-and-iptables/ https:/ /osric.com/chris/accidental-developer/2018/12/using-docker-to-get-root-access/
โ€”
๋‹น์‹ ์ด ์–ธ๊ธ‰๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด๊ฒƒ์„ ๋ฐ›๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
์ง์ ‘์ด ์ด๋ฉ”์ผ์— ํšŒ์‹  ๋ณผ์„ GitHub์˜์— https://github.com/moby/moby/issues/2259?email_source=notifications&email_token=AAGDCZXX2UQCG7LUVH57V6LP4TH2DA5CNFSM4AI3DP62YY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNMVXHJKTDN5WW2ZLOORPWSZGODYXL2XI#issuecomment-506379613 , ๋˜๋Š” ์Šค๋ ˆ๋“œ ์Œ์†Œ๊ฑฐ https://github.com/notifications/์„ unsubscribe-auth/AAGDCZX437HJP4M6XG3SEY3P4TH2DANCNFSM4AI3DP6Q .

@alexanderadam

IMHO ์—ฌ๊ธฐ์„œ ๋ฌธ์ œ๋Š” ๋Ÿฐํƒ€์ž„์— ์ปจํ…Œ์ด๋„ˆ์— ๋Œ€ํ•œ ๋ณผ๋ฅจ์„ ํƒ‘์žฌํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด๋ฏธ์ง€ ๊ตฌ์ถ•๊ณผ ๊ฑฐ์˜ ๊ด€๋ จ์ด ์—†์Šต๋‹ˆ๋‹ค.

๋‚ด ์†”๋ฃจ์…˜์€ ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ๋งˆ์šดํŠธํ•˜์ง€ ์•Š๊ณ  ๊ฐ€๋Šฅํ•œ ๊ฒฝ์šฐ ์ปจํ…Œ์ด๋„ˆ์— ๊ตฝ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋‚ด ๋ง์€ podman์ด ์ข‹์€ ๊ฒƒ์ฒ˜๋Ÿผ ๋“ค๋ฆฌ์ง€๋งŒ ์ง€๊ธˆ์€ ์ด์œ ๋ฅผ ๋ฐ”๊พธ์ง€ ์•Š์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์•”ํŠผ ์„ค๋ช… ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

podman ์ปจํ…Œ์ด๋„ˆ ๋‚ด๋ถ€์˜ Apache๊ฐ€ www ์‚ฌ์šฉ์ž๋กœ ์‹คํ–‰๋˜๋Š” ๊ฒฝ์šฐ์—๋„ ๋™์ผํ•œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. https://github.com/containers/libpod/issues/3990

์†”๋ฃจ์…˜์€ ์ปจํ…Œ์ด๋„ˆ ๋‚ด๋ถ€์— root ์‚ฌ์šฉ์ž๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ ์ปจํ…Œ์ด๋„ˆ์—์„œ ํ˜ธ์ŠคํŠธ์˜ UID๋กœ www ์‚ฌ์šฉ์ž๋ฅผ ๋งคํ•‘ํ•˜๋Š” ๊ฒƒ์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๊ฒŒ ๊ฐ€๋Šฅํ•œ์ง€ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค.

--read-only ๋กœ ์‹คํ–‰ํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด( readOnlyRootFilesystem Kubernetes ์ •์ฑ…๊ณผ ๋™์ผํ•˜๊ฒŒ ํ•˜๊ธฐ ์œ„ํ•ด) ์•„๋ž˜์™€ ๊ฐ™์ด ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค. @jpetazzo ๊ฐ€ ์ œ์•ˆํ•œ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•ฉ๋‹ˆ๋‹ค.

  • ๋‚ด ๋„์ปค ์ด๋ฏธ์ง€๋Š” uid=1001 ๋ฐ gid=1001์ธ ์‚ฌ์šฉ์ž๋ฅผ ๋งŒ๋“ค๊ณ  ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
  • ๋ณ„๋„๋กœ ๋„์ปค ๋ณผ๋ฅจ ์ƒ์„ฑ
  • uid:gid ๋ฅผ 1001๋กœ ์„ค์ •
  • ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰ํ•  ๋•Œ ํ•ด๋‹น ์ด๋ฏธ์ง€๋ฅผ ํƒ‘์žฌํ•ฉ๋‹ˆ๋‹ค.

๋„์ปค ํŒŒ์ผ:

FROM ubuntu

RUN groupadd -g 1001 appgroup && \
    useradd -u 1001 -g appgroup appuser

USER appuser

๊ทธ ๋‹ค์Œ์—:

$ docker build . -t test
$ docker volume create somedir
$ docker run -v somedir:/some_dir alpine chown -R 1001:1001 /some_dir

์ด์ œ ๋„์ปค ์ด๋ฏธ์ง€๋ฅผ ์‹คํ–‰ํ•˜๊ณ  ๋ณผ๋ฅจ์„ ๋งˆ์šดํŠธํ•  ๋•Œ /some_dir์€ ๋‚ด๊ฐ€ ์›ํ•˜๋Š” ์‚ฌ์šฉ์ž์˜ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

$ docker run -it --read-only -v somedir:/some_dir test ls -lrt

...
dr-xr-xr-x  13 root    root        0 Nov  4 15:22 sys
drwxr-xr-x   2 appuser appgroup 4096 Nov  5 09:45 some_dir
drwxr-xr-x   1 root    root     4096 Nov  5 09:45 etc
...

$ docker run -it --read-only -v somedir:/some_dir test touch /some_dir/hello
$ docker run -it --read-only -v somedir:/some_dir test ls -lrt /some_dir

-rw-r--r-- 1 appuser appgroup 0 Nov  5 09:52 hello

์Šค๋ ˆ๋“œ์—์„œ ์‰ฝ๊ฒŒ ์†์‹ค๋˜๊ธฐ ๋•Œ๋ฌธ์— chown๋œ symlink๊ฐ€ ๋Œ€๋ถ€๋ถ„์˜ ์‹œ๋‚˜๋ฆฌ์˜ค์—์„œ ์ž‘๋™ํ•  ๊ฒƒ์ด๋ผ๋Š” ์ ์„ ๋‹ค์‹œ ํ•œ ๋ฒˆ ์ง€์ ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ๋‹จ์ ์€ ์„ค์ •์ด ํ•„์š”ํ•˜๋‹ค๋Š” ๊ฒƒ์ธ๋ฐ, ์ด๋Š” ์ข…์ข… ์ง„์ž…์ ์„ ์›๋ž˜ ๋ช…๋ น์„ ์‹คํ–‰ํ•˜๋Š” ์Šคํฌ๋ฆฝํŠธ๋กœ ๋Œ€์ฒดํ•˜๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

https://github.com/moby/moby/issues/2259#issuecomment -466094263

+1

๋‚˜๋Š” ์ด๊ฒƒ์ด ์ง€๊ธˆ๊นŒ์ง€ ๋‚ด๊ฐ€ ๋„์ปค์— ๋Œ€ํ•ด ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๊ฐ€์žฅ ์„ฑ๊ฐ€์‹  ๋ฌธ์ œ๋ผ๊ณ  ์ƒ๊ฐํ•˜๊ณ  ์ด๊ฒƒ์ด ์ด๋ฏธ ์—ด๋ ค ์žˆ๋Š” ์‹œ๊ฐ„์„ ๋ณด๋ฉด ์ด๊ฒƒ์ด ๋‹ค๋ฅธ ๋งŽ์€ ์‚ฌ๋žŒ๋“ค์—๊ฒŒ๋Š” ํ•ด๋‹น๋˜์ง€ ์•Š๋Š”๋‹ค๋Š” ๊ฒƒ์„ ์•”์‹œํ•ฉ๋‹ˆ๊นŒ?

ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์„ ์•Œ๊ณ  ์žˆ์œผ๋ฉด ๋ฌธ์ œ๊ฐ€ ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋‚ด ๊ฒฝ์šฐ:

  • ํ˜ธ์ŠคํŠธ๋Š” ๋ฆฌ๋ˆ…์Šค

    • ์ปจํ…Œ์ด๋„ˆ์˜ uid == ํ˜ธ์ŠคํŠธ์˜ ์›ํ•˜๋Š” uid - ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์ด ํ•„์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
    • ์ปจํ…Œ์ด๋„ˆ์˜ uid != ํ˜ธ์ŠคํŠธ์—์„œ ์›ํ•˜๋Š” uid - ๋ช‡ ๊ฐ€์ง€ setfacl ๋ช…๋ น์„ ์‹คํ–‰ํ•˜๊ณ  ํ˜ธ์ŠคํŠธ ์‚ฌ์šฉ์ž์™€ ์ปจํ…Œ์ด๋„ˆ ์‚ฌ์šฉ์ž ๋ชจ๋‘์—๊ฒŒ rw ์•ก์„ธ์Šค ๊ถŒํ•œ์„ ๋ถ€์—ฌํ•˜์‹ญ์‹œ์˜ค.
  • ํ˜ธ์ŠคํŠธ๋Š” MacOS์ž…๋‹ˆ๋‹ค. ๋ชจ๋“  ๊ฒƒ์ด ๊ณต์‹ Docker ์•ฑ์—์„œ ์ฆ‰์‹œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ช‡ ๊ฐœ์˜ setfacl ๋ช…๋ น์„ ์‹คํ–‰ํ•˜๊ณ  ํ˜ธ์ŠคํŠธ ์‚ฌ์šฉ์ž์™€ ์ปจํ…Œ์ด๋„ˆ ์‚ฌ์šฉ์ž ๋ชจ๋‘์—๊ฒŒ rw ์•ก์„ธ์Šค ๊ถŒํ•œ์„ ๋ถ€์—ฌํ•˜์‹ญ์‹œ์˜ค.

์ด๊ฒƒ์€ ๋ฌธ์ œ์˜ˆ์š”. ๋ชจ๋“  ๋„์ปค ์ด๋ฏธ์ง€์— ๋Œ€ํ•ด ๋ช‡ ๊ฐ€์ง€ setfacl ๋ช…๋ น ์„ ์‹คํ–‰ํ•˜๊ณ  OS๋ฅผ ๊ฐ์ง€ํ•˜๊ณ  ์‹ถ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ ์‹ค์ œ๋กœ ํฐ ๋ณด์•ˆ ๋ฌธ์ œ์ด๊ธฐ๋„ ํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ์‹œ ์‹œ๋‚˜๋ฆฌ์˜ค:

  • host1 ์— ๋„์ปค๊ฐ€ ์„ค์น˜๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.
  • host1 ์—๋Š” ๋„์ปค ์ปจํ…Œ์ด๋„ˆ์—์„œ ์‹คํ–‰๋˜๋Š” ์—ฌ๋Ÿฌ ์„œ๋น„์Šค๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ชจ๋‘ /docker/my-service-01|02|03|etc ์•„๋ž˜์˜ ๋งˆ์šดํŠธ ๋กœ์ปฌ ๊ฒฝ๋กœ์ž…๋‹ˆ๋‹ค.
  • ๊ฐ ์ปจํ…Œ์ด๋„ˆ๋Š” ๋‹ค๋ฅธ ๊ณต๊ธ‰์—…์ฒด์—์„œ ์ œ์ž‘ํ–ˆ์œผ๋ฉฐ ๊ฐ ์ปจํ…Œ์ด๋„ˆ๋Š” ์ž์ฒด uid ๋ฐ guid ์ •์ฑ…์„ ๋”ฐ๋ฅด๋ฏ€๋กœ ๊ทธ์— ๋”ฐ๋ผ chown -R uid.gid /docker/my-service-01... ๋ฅผ ์š”๊ตฌํ•ฉ๋‹ˆ๋‹ค.

๊ฒฐ๊ณผ:

  • host ์— ์ƒ์„ฑ๋œ ์ผ๋ฐ˜ ๋˜๋Š” ์„œ๋น„์Šค ์‚ฌ์šฉ์ž๋Š” ์–ธ์  ๊ฐ€๋Š” ์˜๋„ํ•˜์ง€๋„ ์›ํ•˜์ง€๋„ ์•Š์€ /docker/my-service-01|02|03|etc ์— ๋Œ€ํ•œ ์ „์ฒด ์•ก์„ธ์Šค ๊ถŒํ•œ์„ ๊ฐ–๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.
  • ๋ณผ๋ฅจ์„ ๋‹ค๋ฅธ ๊ณต๊ธ‰์—…์ฒด์˜ ๋‘ ์ปจํ…Œ์ด๋„ˆ์— "์ฝ๊ธฐ ์ „์šฉ"์œผ๋กœ ํƒ‘์žฌํ•˜๋ ค๋Š” ๊ฒฝ์šฐ - uid.gid ์ด ํ•„์ˆ˜ ํ•ญ๋ชฉ๊ณผ ์ผ์น˜ํ•˜์ง€ ์•Š๊ณ  chown ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์— ์‹คํŒจํ•ฉ๋‹ˆ๋‹ค. uid.gid ์ •์ฑ…์ด ์žˆ๊ณ  ์„œ๋กœ ๋‹ค๋ฅด๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. :)

์˜ˆ, ์šฐ๋ฆฌ๋Š” ์ด์ „์— ์ด ๋ฌธ์ œ์— ๋Œ€ํ•ด ๊ธธ๊ฒŒ ๋…ผ์˜ํ–ˆ์œผ๋ฉฐ (๋‹น์‹œ) ๋‹ค์‹œ ์ „๋‹ฌ๋˜๋Š” ํ•ต์‹ฌ ์‚ฌ์‹ค์€ Linux ์ปค๋„์— ์žฌ๋งคํ•‘ ๊ฐ€๋Šฅํ•œ uid ๋ฐ gid๋ฅผ ์ œ๊ณตํ•˜๋Š” ๊ธฐ๋ณธ ์ง€์› ๋ฉ”์ปค๋‹ˆ์ฆ˜์ด ์—†๋‹ค๋Š” ๊ฒƒ์ด์—ˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ด ํ”„๋กœ์ ํŠธ(moby/docker)๊ฐ€ ๋งค์šฐ ๋ฐ”๋žŒ์งํ•œ ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•˜๋ ค๋ฉด ์ปค๋„์— ์ถ”๊ฐ€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ์šฐ๋ฆฌ๋Š” ์ด๋ฏธ ์ด ๊ธฐ๋Šฅ์„ ์–ผ๋งˆ ์ „์— ์–ป์—ˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ฒ˜์Œ ๋ดค์„ ๋•Œ๋กœ ๋Œ์•„๊ฐ„๋‹ค.

๋”ฐ๋ผ์„œ (์˜ค๋Š˜) ์ด ํ† ๋ก ์„ ๊ณ„์†ํ•˜๋Š” ๊ฐ€์žฅ ์ƒ์‚ฐ์ ์ธ ๋ฐฉ๋ฒ•์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๊ทธ ์ดํ›„๋กœ ๋ณ€๊ฒฝ๋œ ์ƒํ™ฉ์ด ์žˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. vger.org์—์„œ linux kernel mainline devs์˜ ๊ธฐ์ˆ  ๋…ผํ‰์„ ์ฐพ์œผ์‹ญ์‹œ์˜ค. ์ด ๊ธฐ๋ณธ ๋ˆ„๋ฝ ๊ธฐ๋Šฅ์— ๋Œ€ํ•œ ์ปค๋„์˜ ๊ณผ๊ฑฐ ํŒจ์น˜ ์„ธํŠธ/๋ณ‘ํ•ฉ ์š”์ฒญ์„ ์ฐพ์œผ์‹ญ์‹œ์˜ค. ๋“ฑ.

๊ทธ ๋‚ฎ์€ ์ˆ˜์ค€์—์„œ ๋ฌด์Šจ ์ผ์ด ์ผ์–ด๋‚˜๊ณ  ์žˆ๋Š”์ง€ ๋” ์ž˜ ์ดํ•ดํ•˜๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค. ๊ฑธ๋ฆผ๋Œ์€ ๋ฌด์—‡์ด์—ˆ์Šต๋‹ˆ๊นŒ? ์„ฑ๋Šฅ ๋ฌธ์ œ์˜€๋‚˜์š”? ๋ณด์•ˆ ๋ชจ๋ธ/์•ฝํ™” ์ธก๋ฉด์—์„œ ๋ฐ˜๋Œ€์˜€์Šต๋‹ˆ๊นŒ? ์•„์ง ํ…Œ์ด๋ธ”์ด๋‚˜ ๋ฏธ๋ž˜ ๋กœ๋“œ๋งต์— ์žˆ์ง€๋งŒ ๋‹ค๋ฅธ ๊ธฐ๋Šฅ B์™€ C๋ฅผ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์–ด์•ผ๋งŒ ์˜๋ฏธ๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ? ์ด ๋ชจ๋“  ์ปค๋„ ๊ฐœ๋ฐœ์€ ๋‹ค๋ฅธ ๊ณณ์—์„œ ์ง„ํ–‰๋ฉ๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ์ฑ„๋„์—์„œ.

@DXist ์ด๊ฒƒ์ด Linux๊ฐ€ ์•„๋‹Œ OSX์—์„œ ๋งˆ์ˆ ์ฒ˜๋Ÿผ ์ž‘๋™ํ•œ๋‹ค๋Š” ์‚ฌ์‹ค์€ ๋†€๋ž๊ณ  ๊ทธ ์ž์ฒด๋กœ ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค.

@dreamcat4 ๋‹˜์˜ ๋งˆ์ง€๋ง‰ ๋Œ“๊ธ€์— ๋”ฐ๋ฅด๋ฉด, ์ด ์ƒํƒœ๊ฐ€ ์–ด๋–ค์ง€ ์ƒˆ๋กœ์šด ์‹œ๋„๋ฅผ ํ•œ ์‚ฌ๋žŒ์ด ์žˆ์Šต๋‹ˆ๊นŒ? ์ง€๊ธˆ ์ปค๋„์—์„œ ๋‹ค์‹œ ๋งคํ•‘ ๊ฐ€๋Šฅํ•œ uid ๋ฐ gid๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๊นŒ? ์ „๋ฐ˜์ ์ธ ์ƒํƒœ๋Š” ์–ด๋–ป์Šต๋‹ˆ๊นŒ?

์ด ๋ฌธ์ œ๋ฅผ ์™„๋ฒฝํ•˜๊ฒŒ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด Linux ์‚ฌ์šฉ์ž ๋„ค์ž„์ŠคํŽ˜์ด์Šค๋ฅผ ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ํ”Œ๋žซํผ๊ณผ ์ •ํ™•ํžˆ ๋™์ผ(AFAICT) ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค(์ปจํ…Œ์ด๋„ˆ๋Š” ๋งˆ์šดํŠธ๋œ ๋ณผ๋ฅจ์„ ๋ฃจํŠธ๋กœ ๋ณด๊ณ , ํ˜ธ์ŠคํŠธ๋Š” ๋„์ปค๋ฅผ ์‹คํ–‰ํ•˜๋Š” ์‚ฌ์šฉ์ž๋กœ ๋ด…๋‹ˆ๋‹ค).

๊ฐ€์ด๋“œ๋Š” ์—ฌ๊ธฐ: https://www.jujens.eu/posts/en/2017/Jul/02/docker-userns-remap/

@ํŒจํŠธ๋กœ๋นˆ์Šจ +1

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰