์ฌ์ฉ ์ฌ๋ก: ์ํ์น๊ฐ www ์ฌ์ฉ์๋ก ์ฌ์ฉํ ์ ์๋๋ก ํธ์คํธ์์ ์ปจํ
์ด๋๋ก ๋ณผ๋ฅจ์ ๋ง์ดํธํฉ๋๋ค.
๋ฌธ์ ๋ ํ์ฌ ๋ชจ๋ ๋ง์ดํธ๊ฐ ์ปจํ
์ด๋ ๋ด๋ถ์ ๋ฃจํธ๋ก ๋ง์ดํธ๋๋ค๋ ๊ฒ์
๋๋ค.
์๋ฅผ ๋ค์ด ์ด ๋ช
๋ น์
๋์ปค ์คํ -v /tmp:/var/www ์ฐ๋ถํฌ ํต๊ณ -c "%U %G" /var/www
"๋ฃจํธ ๋ฃจํธ"๋ฅผ ์ธ์ํฉ๋๋ค.
์ปจํ ์ด๋ ๋ด๋ถ์ ์ฌ์ฉ์ www๋ก ๋ง์ดํธํด์ผ ํฉ๋๋ค.
๋ณผ๋ฅจ์ ๋ฐ์ธ๋ ๋ง์ดํธํ๊ธฐ ์ ์ ํธ์คํธ ์ธก์์ 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์๋ ๋ ๊ฐ์ง ์ต์ ์ด ์์ต๋๋ค.
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๋ฅผ ์ฌ์ฉํ์ฌ ์ ๋ฌํ๋ฉด์ ์์ฑํ๋ ๊ฒ์ด ๋ ํฉ๋ฆฌ์ ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค. ์ฌ์ฉ์๊ฐ ์ปจํ ์ด๋ ๋ด๋ถ์์ ์ด์จ๋ ๋ณผ๋ฅจ์ ์ฐ๋ ค๊ณ ํ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ ๋๋ค. ๋ง๋์?
์๋ ๋จ๊ณ๋ฅผ ์ฌ์ฉํ์ฌ ๋ด๊ฐ ์ ํํ ์ฌ์ฉ์๋ก ๋ง์ดํธํ ์ ์์์ต๋๋ค.
์ธ์ฉ @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๋ฅผ ์ฌ์ฉํ์ฌ ์๋ํ๋๋ก ํ์ฌ ๋์ปค๋ฅผ ์ฌ์ฉํ ์ ์์ง๋ง ๋ช ๊ฐ์ง ์ด์ ๋ก ๋ฌธ์ ๊ฐ ์์ต๋๋ค.
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
#!/bin/sh
USER=dockeruser
VOLUME=/project
UID="$(stat -c '%u' $VOLUME)" && \
useradd --uid "$UID" "$USER" && \
ls -l "$VOLUME" && \
exec gosu "$USER" "$@"
#!/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์ธ ๋ฃจํธ๊ฐ ์๋ ์ฌ์ฉ์๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ๊ถํ์ ๋ํด ๊ฑฑ์ ํ์ง ์๊ณ ๋ณผ๋ฅจ์ ํ์ฌํ ์ ์๋ค๊ณ ๊ฐ์ ํ์ง๋ง ์์ง ํ ์คํธํ์ง๋ ์์์ต๋๋ค. ๋น์ทํ ๋ฐฉ์์ผ๋ก ๋ฐ๋ผํ ์ฌ๋์ด ์์ต๋๊น?
์ผ๋ฐ์ ์ธ ๋ฌธ์ :
์ฆ, 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
๋ฅผ ๋ณ๊ฒฝํด์ผ ํ๋ฏ๋ก ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋๋ ๊ธฐํ ํ์ฌ ์ด๋ฏธ์ง์์๋ ์๋ํ์ง ์์ต๋๋ค.
@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์ ๋ค๋ฅธ ์ด๋ฏธ์ง์์ ๋ค๋ฅธ ์ฌ์ฉ์์ ๊ณต์ ๋ณผ๋ฅจ ์ฌ์ฉ์?
4๋ฒ ํญ๋ชฉ์ ๋ํด ์์ธํ ์ค๋ช
ํด ์ฃผ์๊ฒ ์ต๋๊น?
๊ทธ๋ ๊ฒ ํ๋ ๋ฐฉ๋ฒ์ ๋ํ ์ค์ฉ์ ์ธ ์๊ฐ ๋ ์ ์์ต๋๊น?
2018๋ 1์ 12์ผ ๊ธ์์ผ 17:27 Brian Goff, ์๋ฆผ @github.com ์์ฑ:
>
- ๋ณผ๋ฅจ์ ๊ณต์ ํ์ง ๋ง์ญ์์ค
- uid/gids ๋๊ธฐํ
- ๊ณต์ ํ๋ ๋ชจ๋ ์ฌ์ฉ์์ ๋ํด ๊ถํ์ด ์ถฉ๋ถํ ํ์ฉ๋๋์ง ํ์ธํฉ๋๋ค.
- ํธ์คํธ์์ ํจ์ฆ ๋ง์ดํธ๋ฅผ ์ฌ์ฉํ์ฌ ๊ฐ๊ฐ์ ๋ํด ๋ค๋ฅธ 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) ๋ณผ๋ฅจ์ ๊ณต์ ํ์ง ๋ง์ญ์์ค
@colbygk
๊ฐ๋จํ ๋งคํ์ด ๋ ์ ์์ ๋
๊ทธ๊ฒ์ด ๋ฌธ์ ์
๋๋ค. vfs ๊ณ์ธต์์ ์ง์ํ์ง ์๊ธฐ ๋๋ฌธ์ "๋จ์ ๋งคํ"์ ์ํํ ์ ์์ต๋๋ค.
์ผ๋ถ ํ์ผ ์์คํ
์ ์์ ๊ถ์ ๋งคํํ๋ ๊ธฐ๋ฅ(์: bindfs ๋๋ nfs)์ ์ ๊ณตํ์ง๋ง ์ผ๋ฐ์ ์ธ ๊ฒฝ์ฐ์ ์ด๋ฅผ ๊ตฌํํ๋ ๊ฒ์ ํ์ฌ ๋ถ๊ฐ๋ฅํฉ๋๋ค.
์๋ฅผ ๋ค์ด ๋ค์๊ณผ ๊ฐ์ ์ํฉ์์ ๊ณต์ ๋ณผ๋ฅจ์ด ํ์ํฉ๋๋ค.
๊ณต์ ์ธ์ฆ์
์๋ฃจ์ : ์ด๋ฏธ์ง ์ปจํ ์ด๋ 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๊ฐ ์ผ์นํ๋์ง ์ฌ๋ถ์ ๊ด๊ณ์์ด ํธ์คํธ์์ ์์ ์๋ฅผ ๋ฏธ๋ฆฌ ๋ณ๊ฒฝํฉ๋๋ค.
๋ด ๊ด์ ์์ ๋ณด๋ฉด ์์ฃผ ๊ธฐ๋ณธ์ ์ธ ์ผ์ ํ๋ ค๊ณ ํ๋ ๋ด๊ฐ ์ด๋ฆฌ์๋ค๋ ๋๋์ ์ง์ธ ์ ์์ต๋๋ค.
๋ฌธ์ ๋ฃจํธ๊ฐ ํธ์คํธ์ ๋ง์ดํธ๋ ์ผ๋ฐ 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
````
์ด ๊ธฐ๋ฅ์ด ์ผ๋ง๋ ๋์์ด ๋ ๊ฒ์ธ์ง ์ฌํ์ธํ๊ธฐ ์ํด ์ด ์ค๋ ๋๋ฅผ ๋ฆ๊ฒ ๋ฐฉ๋ฌธํฉ๋๋ค.
์์งํ ๋งํด์, ์ ๋ ์ฝ 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
์ ๊ฐ์ด ์กด์ฌํ์ง๋ง ์ผ๋ฐ์ ์ผ๋ก ์ฌ์ฉํ ์ ์์).
์ด๊ฒ์ ์ฑ ์ ์ด์ ์ ๊ณ ์ ์ ์ธ ์ค๊ฐํ์ ๋๋ค / ๋ค๋ฅธ ์ฌ๋์ด ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์๊ฑฐ๋ ํด๊ฒฐํด์ผ ํฉ๋๋ค. ๋ค์ ์ค ํ๋์ ๋๋ค.
๋ฌธ์ ๋ ์ด๋ฏธ ํจ๊ณผ์ ์ผ๋ก ๋ช ์๋์ด ์์ต๋๋ค. ์ฌ์ฉ์๊ฐ ์ด ์์ ์ ์ํํ๋ ๊ฒ์ ํฌ๋ฐํ๊ณ ๋ ์์ ํ๋ค๋ ๊ฒ์ ๋๋ค. ๊ทธ๋ฌ๋ ์ฌ์ฉ์๊ฐ ์ด๋ฏธ์ง๋ณ๋ก ํดํนํ๋๋ก ํ๋ ์ฐ์ ํจ๊ณผ๋ ์ค์ํฉ๋๋ค.
์ฆ, ์๋ก ๋ค๋ฅธ ์ฌ์ฉ์์ ํจ๊ป ์์ ํ๊ธฐ ์ํด ์ด๋ฏธ์ง๋ฅผ ์ฝ๊ฒ ์ํธ ์ด์ฉํ๊ณ ๊ณต์ /ํผํฉํ ์ ์์ต๋๋ค. ๊ทธ๋์ ๋ค์ ์ค ํ๋์ ๋๋ค.
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 ๊ฐ ์ ์ํ ํด๊ฒฐ ๋ฐฉ๋ฒ์ ๊ธฐ๋ฐ์ผ๋ก ํฉ๋๋ค.
๋์ปค ํ์ผ:
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
๋๋ ์ด๊ฒ์ด ์ง๊ธ๊น์ง ๋ด๊ฐ ๋์ปค์ ๋ํด ๊ฐ์ง๊ณ ์๋ ๊ฐ์ฅ ์ฑ๊ฐ์ ๋ฌธ์ ๋ผ๊ณ ์๊ฐํ๊ณ ์ด๊ฒ์ด ์ด๋ฏธ ์ด๋ ค ์๋ ์๊ฐ์ ๋ณด๋ฉด ์ด๊ฒ์ด ๋ค๋ฅธ ๋ง์ ์ฌ๋๋ค์๊ฒ๋ ํด๋น๋์ง ์๋๋ค๋ ๊ฒ์ ์์ํฉ๋๊น?
ํด๊ฒฐ ๋ฐฉ๋ฒ์ ์๊ณ ์์ผ๋ฉด ๋ฌธ์ ๊ฐ ๋์ง ์์ต๋๋ค. ๋ด ๊ฒฝ์ฐ:
ํธ์คํธ๋ ๋ฆฌ๋ ์ค
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
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
์๋์ค๋ผ๊ณ ๋งํ ์ ์์ต๋๊น - ์ฌ์ฉ์๊ฐ ๋ค์์ ์ํํ๋ ๋์ฐ๋ฏธ ์คํฌ๋ฆฝํธ๋ฅผ ์ถ๊ฐํ๋๋ก
(์๋ฅผ ๋ค์ด @bfirsh ์๊ฒ ๊ฐ์ฌ๋๋ฆฝ๋๋ค)
๊ฝค ๋์ฐํฉ๋๋ค.
์ด๋ ์ปจํ ์ด๋๊ฐ ์๋ํ
redis
์ฌ์ฉ์๋ก ์คํ๋์ง ์๊ณ ๋ฃจํธ๋ก ์์๋์ด์ผ ํจ์ ์๋ฏธํฉ๋๋ค. ( @aldanor ๊ฐ ์ธ๊ธํ๋ฏ์ด)์ฌ์ฉ์๊ฐ ๋ค์๊ณผ ๊ฐ์ ์์ ์ ์ํํ ์ ์์์ ์๋ฏธํฉ๋๋ค.
docker run -v /home/user/.app_cfg/ -u user application_container application
:(