๋ช ๋ช ๋ ๋ณผ๋ฅจ ("๋ฐ์ดํฐ ๋ณผ๋ฅจ ์ปจํ ์ด๋" ์์, "๋ณผ๋ฅจ ์ถ์ฒ" ์์) ๋ฐ docker-compose.yml์ ๊ดํ ๊ฒ์ ๋๋ค.
์ฌ๊ธฐ์ ๋ชฉํ๋ docker-compose๋ฅผ ์ฌ์ฉํ์ฌ ๋ ๊ฐ์ ๊ฐ๋ณ ์ปจํ ์ด๋์์ ๋ ๊ฐ์ ์๋น์ค 'appserver' ๋ฐ 'server-postgresql'์ ๊ด๋ฆฌํ๊ณ "volumes:" docker-compose.yml ๊ธฐ๋ฅ์ ์ฌ์ฉํ์ฌ ์๋น์ค 'server-postgresql'์ ๋ฐ์ดํฐ๋ฅผ ์๊ตฌ์ ์ผ๋ก ๋ง๋๋ ๊ฒ์ ๋๋ค. .
'server-postgresql'์ฉ Dockerfile์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
FROM ubuntu:14.04
MAINTAINER xxx
RUN apt-get update && apt-get install -y [pgsql-needed things here]
USER postgres
RUN /etc/init.d/postgresql start && \
psql --command "CREATE USER myUser PASSWORD 'myPassword';" && \
createdb -O diya diya
RUN echo "host all all 0.0.0.0/0 md5" >> /etc/postgresql/9.3/main/pg_hba.conf
RUN echo "listen_addresses='*'" >> /etc/postgresql/9.3/main/postgresql.conf
CMD ["/usr/lib/postgresql/9.3/bin/postgres", "-D", "/var/lib/postgresql/9.3/main", "-c", "config_file=/etc/postgresql/9.3/main/postgresql.conf"]
Adn docker-compose.yml์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
version: '2'
services:
appserver:
build: appserver
depends_on:
- server-postgresql
links:
- "server-postgresql:serverPostgreSQL"
ports:
- "1234"
- "1235"
restart: on-failure:10
server-postgresql:
build: serverPostgreSQL
ports:
- "5432"
volumes:
- db-data:/volume_data
restart: on-failure:10
volumes:
db-data:
driver: local
๊ทธ๋ฆฌ๊ณ ๋ด๊ฐ ๊ฐ์ง ๋ชจ๋ ๊ฒ์ ์์ docker-compose up -d
, ๋๋ ๋ด ์๋ฒ PostgreSQL์ ์ปจํ
์ด๋๋ฅผ ์
๋ ฅ docker-compose exec server-postgresql bash
, ๋น ๋ฅธ ls
๊ณ์ ์์ต๋๋ค /volume_data
, ๊ทธ๋ cd
๋ฃ๊ณ touch testFile
์๋ํ๊ณ "ํ๊ฐ๊ฐ ๊ฑฐ๋ถ๋์์ต๋๋ค. ๋น ๋ฅธ ls -l
์ด volume_data
๊ฐ root:root
์์ ์์ ๋ณด์ฌ์ฃผ๊ธฐ ๋๋ฌธ์ ์ ์์ ์ธ ํ์์
๋๋ค.
์ด์ ๋ด๊ฐ ์๊ฐํ๋ ์ผ์ Dockerfile์ USER postgres
๊ฐ ์๊ธฐ ๋๋ฌธ์ docker-compose exec
์คํํ ๋ ์ฌ์ฉ์ 'postgres'๋ก ๋ก๊ทธ์ธํ๊ณ postgresql ๋ฐ๋ชฌ์ด ์ฌ์ฉ์ 'postgres'๋ก ์คํ๋๋ค๋ ๊ฒ์
๋๋ค. ๋ง์ฐฌ๊ฐ์ง๋ก /volume_data
์ ์ธ ์ ์์ต๋๋ค.
๋ด๊ฐ ๋์ ๋ฅผ ์คํํ๋ฉด ๋๋ฌธ์ด ํ์ธ : docker-compose exec --user root server-postgresql bash
๋ฐ ์ฌ์ cd /volume_data
๋ฐ touch testFile
, ๊ทธ๊ฒ์ ์๋ ์ผ์ (๊ทธ๊ฒ์ผ๋ก, ํธ์คํธ์ ์ฉ๊ธฐ ์ฌ์ด์ ๊ถํ ์ค๋ฅ ์๋๋ค ์ปจํ
์ด๋๊ฐ ํธ์คํธ ํด๋๋ฅผ ๋ง์ดํธํ๋ ๊ฒฝ์ฐ๊ฐ ์ข
์ข
์๋๋ฐ, ์ด๋ /volume_data
์ด ์ฌ์ฉ์ 'postgres'๊ฐ ์ฐ๊ธฐ๋ฅผ ์๋ํ๋ ๋์ 'root:root'๋ก ๋ง์ดํธ๋๊ธฐ ๋๋ฌธ์ ์ผ๋ฐ์ ์ธ ์ ๋์ค ๊ถํ ์ค๋ฅ์
๋๋ค.
๋ฐ๋ผ์ docker-compose.yml์ ๋ค์๊ณผ ๊ฐ์ ํน์ ์ฌ์ฉ์๋ก ๋ช ๋ช ๋ ๋ณผ๋ฅจ์ ๋ง์ดํธํ๋ ๋ฐฉ๋ฒ์ด ์์ด์ผ ํฉ๋๋ค.
version: '2'
services:
appserver:
[...]
server-postgresql:
[...]
volumes:
- db-data:/volume_data:myUser:myGroup
[...]
volumes:
db-data:
driver: local
๋ด๊ฐ ์๊ฐํ ์ ์๋ ์ ์ผํ _dirty_ ํด๊ฒฐ ๋ฐฉ๋ฒ์ Dockerfile์์ USER posgres
์ง์๋ฌธ์ ์ ๊ฑฐํ๊ณ ์ฌ์ฉ์ ์ง์ "init_script.sh"๋ฅผ ๊ฐ๋ฆฌํค๋๋ก ENTRYPOINT๋ฅผ ๋ณ๊ฒฝํ๋ ๊ฒ์
๋๋ค. ์ ๊ฑฐ๋ USER postgres
), ์ด ์คํฌ๋ฆฝํธ๋ /volume_data
๊ถํ์ ๋ณ๊ฒฝํ์ฌ 'postgres'๊ฐ ์ด์ ์ธ ์ ์๋๋ก ํ ๋ค์ su postgres
๋ฐ postgresql ๋ฐ๋ชฌ(ํฌ๊ทธ๋ผ์ด๋์์)์ ์คํํ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ์ด๊ฒ์ Dockerfile๊ณผ docker-compose.yml์ ๋นํ์ค ๋ฐฉ์์ผ๋ก ์ฐ๊ฒฐํ๊ธฐ ๋๋ฌธ์ ์ค์ ๋ก๋ ๋งค์ฐ ๋๋ฝ์ต๋๋ค(๋ฐํ์ ENTRYPOINT๋ ํ์ฌ๋ ๋ณผ๋ฅจ์ด docker-compose.yml์์ ์ฌ์ฉํ ์ ์๋ค๋ ์ฌ์ค์ ์์กดํฉ๋๋ค).
๋๋ ์ด๊ฒ์ด ๋์ปค ์์ง์์ ์ง์๋์ง ์๋๋ค๊ณ ์๊ฐํ๋ฏ๋ก API์ ์ถ๊ฐ๋ ๋๊น์ง Compose์์ ์ง์ํ ์ ์๋ ๋ฐฉ๋ฒ์ด ์์ต๋๋ค. ๊ทธ๋ฌ๋ ์ด ๊ธฐ๋ฅ์ ์ถ๊ฐํ ํ์๋ ์๋ค๊ณ ์๊ฐํฉ๋๋ค. ํญ์ ์ฌ๋ฐ๋ฅธ ์ฌ์ฉ์์๊ฒ ํ์ผ์ ์ ๊ณตํ ์ ์์ต๋๋ค.
version: '2'
services:
web:
image: alpine:3.3
volumes: ['random:/path']
volumes:
random:
$ docker-compose run web sh
/ # touch /path/foo
/ # ls -l /path
total 0
-rw-r--r-- 1 root root 0 Apr 5 16:11 foo
/ # chown postgres:postgres /path/foo
/ # ls -l /path
total 0
-rw-r--r-- 1 postgres postgres 0 Apr 5 16:11 foo
/ #
$ docker-compose run web sh
/ # ls -l /path
total 0
-rw-r--r-- 1 postgres postgres 0 Apr 5 16:11 foo
์ง๋ฉดํ๊ณ ์๋ ๋ฌธ์ ๋ ๋ช
๋ช
๋ ๋ณผ๋ฅจ ์ด๊ธฐํ์ ๊ดํ ๊ฒ์
๋๋ค. ์ด๊ฒ์ ๋ถ๋ช
ํ Compose์์ ์ฒ๋ฆฌํ๋ ๊ฒ์ด ์๋์ง๋ง(์ด๋ ์ ๋ ๋ฒ์๋ฅผ ๋ฒ์ด๋ฌ๊ธฐ ๋๋ฌธ์) docker cli๋ฅผ ์ฌ์ฉํ์ฌ docker-compose up
๋ฅผ ์คํํ๊ธฐ ์ ์ ๋ช
๋ช
๋ ๋ณผ๋ฅจ์ ์ด๊ธฐํํ ์ ์์ต๋๋ค.
์ด๊ฒ์ด Docker์ธ์ง Compose ๋ฌธ์ ์ธ์ง ํ์คํ์ง ์์์ต๋๋ค. ์๋ชป ์ ์ถํ๋ค๋ฉด ์ฃ์กํฉ๋๋ค.
์ด๊ฒ์ Docker API์ ๊ณํ์
๋๋ค. ๊ฑฐ๊ธฐ์ ๋ฌธ์ ๋ฅผ ์ ๊ธฐํด์ผ ํฉ๋๊น?
์ปจํ
์ด๋์ ์๋์ผ๋ก ๋ก๊ทธ์ธํ๊ณ 'postgres' ์ฌ์ฉ์์๊ฒ ๋ณผ๋ฅจ์ chown
-ingํ ์ ์๋ ๊ฐ๋ฅ์ฑ์ ์ดํดํฉ๋๋ค. ํ์ง๋ง ์ ๊ฒฝ์ฐ์๋ Compose๋ฅผ ์ฌ์ฉํ์ฌ ์ ํด๋ผ์ด์ธํธ( docker-compose -p client_name up
)์ ๋ํ ์ ์ปจํ
์ด๋๋ฅผ ์ฆ์ ์ธ์คํด์คํํ ์ ์๊ณ Compose๋ ์ฌ์ฉ์ ์ง์ ๋คํธ์ํฌ client_name_default
๋ฅผ ์์ฑํ๊ณ ์ปจํ
์ด๋๋ฅผ ์์ฑํฉ๋๋ค. ์ด๋ฆ์ด client_name _appserver_1
๋ฐ client_name _server-postgresql_1
์ด๊ณ _๋ ์ค์ํ๊ฒ๋_ client_name_db-data
๋ณผ๋ฅจ์ด ์์ฑ๋ฉ๋๋ค. ์ด ๋ชจ๋ ์์
์ ์๋์ผ๋ก ์ํํ ํ์๊ฐ ์์ผ๋ฏ๋ก ํด๋ผ์ด์ธํธ ๋ฑ๋ก์ ์ฒ๋ฆฌํ๋ ์คํฌ๋ฆฝํธ์์ ์คํํ ์ ์์ต๋๋ค.
์ค๋ช
ํ์ ์๋ฃจ์
(๋ณผ๋ฅจ ๋ ์ด๋ธ์ sh
๋ฐ chown
์ ์ฌ์ฉํ์ฌ ์ปจํ
์ด๋์ _์๋์ผ๋ก_ "๋ก๊น
")์ ์ฌ์ฉํ๋ฉด ์ ํด๋ผ์ด์ธํธ๋ฅผ ์ถ๊ฐํ๋ ๊ฐ๋จํ ์ ์ฐจ๋ฅผ ์ํํ ์ ์์ผ๋ฉฐ ์ด๋ ๋ฐ๋์ ์์ผ๋ก ๋ณด์ดํ์ ๋ฐ์ผ์ญ์์ค.
์ด๊ฒ์ด ๋ด๊ฐ ์ด ๊ธฐ๋ฅ์ ๊ตฌํํด์ผ ํ๋ค๊ณ ์๊ฐํ๋ ์ด์ ์
๋๋ค. Docker API์์ ๋ณผ๋ฅจ์ ๋ง์ดํธํ ๋ ro
๋๋ rw
(์ฝ๊ธฐ ์ ์ฉ ๋๋ ์ฝ๊ธฐ-์ฐ๊ธฐ์ฉ) ๊ถํ์ ์ง์ ํ ์ ์์ต๋๋ค. user:group
์ ์ง์ ํ ์ ์์ด์ผ ํ๋ค๊ณ ์๊ฐํฉ๋๋ค
๋ด ์์ฒญ์ด ์๋ฏธ๊ฐ ์๋ค๊ณ ์๊ฐํ์ญ๋๊น?
์ฌ์ค ๋๋ ๋ด์ค๋ฅผ ๊ฐ์ง๊ณ ์ฌ๊ธฐ์ ์๋๋ฐ, ๋ด๊ฐ ๋ฌ์ฑํ๋ ค๊ณ ํ๋ ๊ฒ์ ํ ์ ์๋ ๊ฒ ๊ฐ์ง๋ง ์ด๊ฒ์ด ๊ธฐ๋ฅ์ธ์ง ๋ฒ๊ทธ์ธ์ง ๋ชจ๋ฅด๊ฒ ์ต๋๋ค. ๋ณ๊ฒฝํ ์ด์ ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
๋ด Dockerfile ์์ _์ฌ์ฉ์ 'postgres'๋ก ๋ณ๊ฒฝํ๊ธฐ ์ ์_ ๋ค์์ ์ถ๊ฐํ์ต๋๋ค.
# ...
RUN mkdir /volume_data
RUN chown postgres:postgres /volume_data
USER postgres
# ...
์ด๊ฒ์ด ํ๋ ์ผ์ /volume_data ๋๋ ํ ๋ฆฌ๋ฅผ ๋ง๋ค๊ณ ์ฌ์ฉ์ 'postgres'๊ฐ ์ธ ์ ์๋๋ก ๊ถํ์ ๋ณ๊ฒฝํ๋ ๊ฒ์
๋๋ค.
Dockerfile ๋ถ๋ถ์
๋๋ค.
์ด์ docker-compose.yml ์์ ์๋ฌด ๊ฒ๋ ๋ณ๊ฒฝํ์ง directory_name_db-data
ํ๊ณ ์ด๋ฅผ /volume_data
๋ง์ดํธ ํ๊ณ ๊ถํ์ ์ ์ง๋ฉ๋๋ค! .
์ฆ, ์ด์ ๋ช
๋ช
๋ ๋ณผ๋ฅจ์ด _pre-existing_ ๋๋ ํ ๋ฆฌ /volume_data
์ ๋ง์ดํธ๋์ด ๊ถํ์ด ๋ณด์กด๋์ด 'postgres'๊ฐ ์ธ ์ ์์ต๋๋ค.
๊ทธ๋ ๋ค๋ฉด ์ด๊ฒ์ด ์๋๋ ํ๋ ๋๋ ๋ณด์ ์๋ฐ์ด๋ผ๋ฉด? (์ด ๊ฒฝ์ฐ์๋ ๋์์ด ๋ฉ๋๋ค!)
๋ช ๋ช ๋ ๋ณผ๋ฅจ์ด ์ด๋ฅผ ์ฌ์ฉํ๋ ์ฒซ ๋ฒ์งธ ์ปจํ ์ด๋์์ ์ด๊ธฐํ๋๋๋ก ์ด๊ฒ์ด Docker 1.10.x์ ์ถ๊ฐ๋์๋ค๊ณ ์๊ฐํฉ๋๋ค. ์์๋๋ ํ๋์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค.
๋ํ Dockerfile์ ์์ ๊ถ์ด ์ค์ ๋์ด ์๋ ๋ช
๋ช
๋ ๋ณผ๋ฅจ์ ์ํํ๊ณ ์์ผ๋ฉฐ user: postgres
์ถ๊ฐํ์ฌ ๋ฃจํธ๊ฐ ์๋ ์ฌ์ฉ์๊ฐ PID 1๋ ์์ ํ๋๋ก ํฉ๋๋ค.
Docker-compose
์ ๋ํด volumes
๊ฐ driver_opts
์ต์
์ ์ ๊ณตํฉ๋๋ค.
chmod
, chown
๋๋ผ์ด๋ฒ์๋ local
์ ๊ฐ์ ์ต์
์ด ์๋ ๊ฒ์ ๋ณด๋ ๊ฒ์ด ์ข์ต๋๋ค.
๊ทธ๋ฆฌ๊ณ ํนํ ์์ ์ ์กด์ฌํ์ง ์๋ ๊ฒฝ์ฐ ๋ก์ปฌ๋ก ์์ฑ๋ ํธ์คํธ ๋๋ ํ ๋ฆฌ์๋ ์ ์ฉ๋๊ธฐ๋ฅผ ์ํฉ๋๋ค.
๊ด๋ จ(์ด๋ ์ ๋) https://github.com/moby/moby/pull/28499
๋๊ตฐ๊ฐ๊ฐ ์ด๋ฏธ Moby ํ๋ก์ ํธ์์ ๋ฌธ์ ๋ฅผ ์ด์์ต๋๊น?
@dnephin ์ ๋ต๋ณ์ด ์๋ํ์ง ์์ต๋๋ค. ๋ฌธ์ ๋ ์ปจํ
์ด๋๋ฅผ ํ์ค ์ฌ์ฉ์๋ก ์คํ ์ค์ด๊ณ chown
๋๋ chmod
๋ช
๋ น์ด ์คํจํ๊ณ ๋ณผ๋ฅจ์ด ๋ฃจํธ ์์ ์ด๋ฏ๋ก ํ์ค ์ฌ์ฉ์๊ฐ ๊ถํ์ ๋ณ๊ฒฝํ ์ ์๊ธฐ ๋๋ฌธ์
๋๋ค.
@jcberthon ์ ์๋ ๋ฐฉ๋ฒ์ ๋ฃจํธ๋ฅผ ์์ ์ฌ์ฉ์๋ก ์ฌ์ฉํ์ฌ ์ปจํ
์ด๋๋ฅผ ์คํํ ๋ค์ chown/chmod ๋ค์์ USER
๋ช
๋ น์ ์ฌ์ฉํ์ฌ ๊ธฐ๋ณธ์ ์ผ๋ก "๊ถํ ์ญ์ "๊ฐ ๋๋๋ก ํ๋ ๊ฒ์
๋๋ค.
Docker ์ด๋ฏธ์ง๋ฅผ ์ ์ดํ ์ ์์ง๋ง ์ค์ ๋ก ์ต์ ์ด ์๋ ๊ธฐ์กด ์ด๋ฏธ์ง๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ๊ด์ฐฎ์ต๋๋ค.
@dragon788 ๊ณผ @micheljung , ๋๋ ๋ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ์ต๋๋ค.
์ค์ ๋ก ์ค์ ๋ฌธ์ ๋ ๋ด Dockerfile์์ VOLUME
์ ์ธํ ๋ค์ ํด๋น ๋ณผ๋ฅจ์ ์๋ ํ์ผ์ ์์ ๊ถ๊ณผ ๊ถํ์ ์์ ํ๋ค๋ ๊ฒ์
๋๋ค. ์ด๋ฌํ ๋ณ๊ฒฝ ์ฌํญ์ ์์ค๋ฉ๋๋ค. VOLUME
์ ์ธ์ Dockerfile์ ๋์ผ๋ก ์ด๋(๋๋ ์ ํ ์ฌํญ์ด๋ฏ๋ก ์ ๊ฑฐ)ํ๋ฉด ๋ด ๋ฌธ์ ๊ฐ ํด๊ฒฐ๋ฉ๋๋ค. ๊ถํ์ด ์ ํํฉ๋๋ค.
๊ทธ๋์ ์ค์๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
FROM blabla
RUN do stuff
VOLUME /vol
RUN useradd foo && chown -R foo /vol
USER foo
CMD ["blabla.sh"]
์์ ์์ Dockerfile์์ chown
๋ ๋น๋ ์ค์ ์์ค๋ฉ๋๋ค. ์๋ํ๋ฉด ๋น๋ ์ ์ VOLUME
๋ฅผ ์ ์ธํ๊ธฐ ๋๋ฌธ์
๋๋ค. ์ปจํ
์ด๋๋ฅผ ์คํํ ๋ dockerd๋ VOLUME
์ ์ธ ์ด์ ์ /vol
์ ๋ด์ฉ์ ๋ช
๋ช
๋ ๋ณผ๋ฅจ ๋ด์์ ๋ณต์ฌํฉ๋๋ค(๋ฃจํธ ๊ถํ ์ฌ์ฉ). ๋ฐ๋ผ์ ์คํ์ค์ธ ํ๋ก์ธ์ค๋ ๊ถํ์ ์์ ํ๊ฑฐ๋ ๋ณ๊ฒฝํ ์ ์์ผ๋ฏ๋ก blabla.sh ์คํฌ๋ฆฝํธ์์ chown์ ๊ฐ์ ์คํํด๋ ์๋ํ์ง ์์ต๋๋ค.
ํ์ผ์ ๋ค์๊ณผ ๊ฐ์ด ๋ณ๊ฒฝํฉ๋๋ค.
FROM blabla
RUN do stuff
RUN useradd foo && chown -R foo /vol
USER foo
VOLUME /vol
CMD ["blabla.sh"]
๋ฌธ์ ๊ฐ ํด๊ฒฐ๋์์ต๋๋ค.
@jcberthon docker-compose.yml์ ํธ์คํธ ์์คํ ๊ณผ ๋ณผ๋ฅจ /vol์ ์ด๋ป๊ฒ ๋ฐ์ธ๋ฉํ๋์ง ๊ณต์ ํด ์ฃผ์๊ฒ ์ต๋๊น?
์ ๋ Fedora์์ Docker๋ก ์์ ์ค์ด๋ฉฐ(SELinux ํ์ฑํ๋จ) ์์์ ์ธ๊ธํ ๋ฐฉ๋ฒ ์ค ์ด๋ ๊ฒ๋ ์ ์๊ฒ ํจ๊ณผ๊ฐ ์์์ต๋๋ค. ์ด์์ ์ผ๋ก๋ ์ฌ์ฉ์(๋ฃจํธ ์์) ์ปจํ ์คํธ์์ ๋ด ์ปจํ ์ด๋์์ ์์ฉ ํ๋ก๊ทธ๋จ์ ์คํํ๊ณ ์ถ์ง๋ง ์ด ๋ณผ๋ฅจ ๋ฌธ์ ๋ ์ด๋ฅผ ์ฐจ๋จํฉ๋๋ค.
๋๋ฅผ ์ํด ์๋ํ๋ ์ ์ผํ ํด๊ฒฐ ๋ฐฉ๋ฒ์ ๋ด ์์ฉ ํ๋ก๊ทธ๋จ ์ฌ์ฉ์๋ฅผ ์ ๊ฑฐํ๊ณ ๋ชจ๋ ๊ฒ์ ๋ฃจํธ ์ฌ์ฉ์๋ก ์คํ/์์ ํ๋ ๊ฒ์ ๋๋ค.
์๋ ํ์ธ์ @renanwilliam ๋ฐ @egee-irl
๋๋ ์ฌ๋ฌ OS์์ ์์์ ์ธ๊ธํ ์๋ฃจ์ ์ ์ฌ์ฉํ๊ณ ์์ต๋๋ค. SELinux๊ฐ ์ ์ฉ๋ Fedora 26 ๋ฐ CentOS 7, AppArmor๊ฐ ํ์ฑํ๋ Ubuntu 16.04, 17.10 ๋ฐ Raspbian 9(amd64 ๋ฐ armhf ํ๋ซํผ ํผํฉ).
๊ทธ๋์ ๋ด๊ฐ ๋งํ๋ฏ์ด, ๋๋ ์ด์ ๋ด Dockerfile์ ๋์์ VOLUME ...
์ ์ธ์ ์ฎ๊ฒผ์ง๋ง, ๋น์ ์ ๊ทธ๊ฒ์ ๋ชจ๋ ์ ๊ฑฐํ ์ ์์ต๋๋ค. ๊ทธ๊ฒ์ ํ์ํ์ง ์์ต๋๋ค. ๋ด๊ฐ ์ผ๋ฐ์ ์ผ๋ก ํ๋ ์ผ์ Dockerfile์์ ์ฌ์ฉ์๋ฅผ ์์ฑํ ๋ ์ฌ์ฉ์ ID๋ฅผ ์์ ํ๋ ๊ฒ์
๋๋ค(์: useradd -u 8002 -o foo
). ๊ทธ๋ฐ ๋ค์ ํธ์คํธ์์ ํด๋น UID๋ฅผ ์ฌ์ฌ์ฉํ์ฌ ํด๋์ ์ ์ ํ ๊ถํ์ ๋ถ์ฌํ ์ ์์ต๋๋ค.
๋ฐ๋ผ์ ๋ค์ ๋จ๊ณ๋ ํธ์คํธ์์ /vol
๋๋ ํ ๋ฆฌ์ "ํ๋ํธ"๋ฅผ ๋ง๋๋ ๊ฒ์
๋๋ค. /opt/mycontainer1/vol
๋ผ๊ณ ๊ฐ์ ํด ๋ณด๊ฒ ์ต๋๋ค.
$ sudo mkdir -p /opt/mycontainer1/vol
$ sudo chown -R 8002 /opt/mycontainer1/vol
$ sudo chmod 0750 /opt/mycontainer1/vol
๊ทธ๋ฐ ๋ค์ ์ฌ์ฉ์ foo๋ก ์ปจํ
์ด๋๋ฅผ ์คํํ ๋ /opt/mycontainer1/vol
๋๋ ํ ๋ฆฌ์ ์ธ ์ ์์ต๋๋ค. ๋ค์๊ณผ ๊ฐ์ ๊ฒ:
$ sudo -u docker-adm docker run --name mycontainer1 -v /opt/mycontainer1/vol:/vol mycontainer1-img
SELinux ๊ธฐ๋ฐ ํธ์คํธ์์ Docker๊ฐ ํด๋์ ์ ์ ํ๊ฒ ํ๊ทธ๋ฅผ ์ง์ ํ ์ ์๋๋ก ๋ณผ๋ฅจ์ :z
:Z
์ต์
์ ์ถ๊ฐํ ์ ์์ต๋๋ค. z
์ Z
์ ์ฐจ์ด์ ์ ์๋ฌธ์ z
๊ฐ ๋ณผ๋ฅจ์ ํ๊ทธ๋ฅผ ์ง์ ํ์ฌ ์ ์ฌ์ ์ผ๋ก ์ด ํธ์คํธ์ ๋ชจ๋ ์ปจํ
์ด๋๊ฐ SELinux์์ ํด๋น ๋๋ ํ ๋ฆฌ์ ์ก์ธ์คํ๋๋ก ํ์ฉํ ์ ์๋ค๋ ๊ฒ์
๋๋ค(๊ทธ๋ฌ๋ ๋ถ๋ช
ํ ๋ค๋ฅธ ์ปจํ
์ด๋์ ๋ง์ดํธํ๋ ๊ฒฝ์ฐ์๋ง) ๋ฐ๋ฉด ๋๋ฌธ์ Z
๋ ํด๋น ์ปจํ
์ด๋๋ง ๋๋ ํฐ๋ฆฌ์ ์ก์ธ์คํ ์ ์๋๋ก ํ๊ทธ๋ฅผ ์ง์ ํฉ๋๋ค. ๋ฐ๋ผ์ SELinux๊ฐ ์๋ Fedora์์ ๋ค์์ ์๋ํ ์ ์์ต๋๋ค.
$ sudo -u docker-adm docker run --name mycontainer1 -v /opt/mycontainer1/vol:/vol:Z mycontainer1-img
์ ๋ฐ์ดํธ : https://github.com/jcberthon/unifi-docker์์ ๋ด ์ ์ฅ์๋ฅผ ํ์ธํ ์ ์์ต๋๋ค. ์ ๋ ์ด ๋ฐฉ๋ฒ์ ์ฌ์ฉํ๊ณ ์์ผ๋ฉฐ ํธ์คํธ๋ฅผ ๊ตฌ์ฑํ๊ณ ์ปจํ ์ด๋๋ฅผ ์คํํ๋ ๋ฐฉ๋ฒ์ ์ค๋ช ํ๊ณ ์์ต๋๋ค. ์ด๊ฒ์ด ๊ทํ์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ๋ฐ ๋์์ด ๋๊ธฐ๋ฅผ ๋ฐ๋๋๋ค.
Btw, ๋ต๋ณ์ด ์ค๋ ์ง์ฐ๋ @renanwilliam ์ ๋ํด ์ฌ๊ณผ๋๋ฆฝ๋๋ค. ์ด๋ฒ ์ฐ๋ง์ ์๊ฐ์ด ๋ณ๋ก ์์ด์...
๊ทธ๋์, ์ฐธ์์ฑ์ด ์๋ ์ฌ๋์ ์ํ ์งง์ ์ด์ผ๊ธฐ:
RUN mkdir /volume_data
RUN chown postgres:postgres /volume_data
๋ณผ๋ฅจ ๋๋ ํ ๋ฆฌ๋ฅผ ๋ฏธ๋ฆฌ ์์ฑํ๊ณ chown
ํด๊ฒฐํ๋ฉด ๋ณผ๋ฅจ์ด ๊ธฐ์กด ๋๋ ํ ๋ฆฌ์ ๊ถํ์ ๋ณด์กดํ๊ธฐ ๋๋ฌธ์
๋๋ค.
์ด๊ฒ์ ๋ช ํํ์ง ์๊ธฐ ๋๋ฌธ์ ์ข์ง ์์ ํด๊ฒฐ ๋ฐฉ๋ฒ์ ๋๋ค(Dockerfile์์ chown์ ์ํํ ๋ค์ ๋ง์ดํธ ์ค์ ํด๋น ์์ ๊ถ์ ์์ํจ). docker-compose ๋ฐ docker CLI์์ ์์ ์ ๋ฐ ๊ทธ๋ฃน ์ ์ด๋ฅผ ๋ ธ์ถํ๋ ๊ฒ์ ์ ๋์ค ์คํ์ผ ๋ช ๋ น์ ๋ํ ์ต์ํ์ ๋๋ผ์์ด ๋ ๊ฒ์ ๋๋ค.
@villasv
์์ ํ: 2๊ฐ์ RUN ...
๋ฅผ ํ๋๋ก ๋ณํฉํฉ๋๋ค. ์ด๋ ๊ฒ ํ๋ฉด ์ถ๊ฐ ๋ ์ด์ด ์์ฑ์ ๋ฐฉ์งํ ์ ์์ผ๋ฉฐ ๋ชจ๋ฒ ์ฌ๋ก์
๋๋ค. ๋ฐ๋ผ์ 2์ค์ ๋ค์๊ณผ ๊ฐ์์ผ ํฉ๋๋ค.
RUN mkdir /volume_data && chown postgres:postgres /volume_data
๊ทธ๋ฌ๋ (์์ ์ฃผ์์์ ์ธ๊ธํ๋ฏ์ด) VOLUME ...
์ฌ์ฉํ์ฌ ๋ณผ๋ฅจ์ ์ ์ธํ๊ธฐ ์ ์(๋๋ ์ค์ ๋ก ๋ณผ๋ฅจ์ ์ ์ธํ์ง ์๊ณ ) ์์ RUN ...
๋ช
๋ น์ ์ํํด์ผ ํ๋ค๋ ์ ์ ์ฃผ์ํ์ญ์์ค. ๋ณผ๋ฅจ์ ์ ์ธํ ํ ์์ ๊ถ ๋ณ๊ฒฝ์ (๋ด๊ฐ ํ ๊ฒ์ฒ๋ผ) ์ํํ๋ฉด ํด๋น ๋ณ๊ฒฝ ์ฌํญ์ด ๊ธฐ๋ก๋์ง ์๊ณ ์์ค๋ฉ๋๋ค.
@colbygk ์ ๋ง ํธ๋ฆฌํ๊ฒ ์ง๋ง Linux๋ ๊ทธ๋ ์ง ์์ต๋๋ค. Docker๋ Linux ๋ง์ดํธ ๋ค์์คํ์ด์ค๋ฅผ ์ฌ์ฉํ์ฌ ๋ค๋ฅธ ๋จ์ผ ๋๋ ํ ๋ฆฌ ๊ณ์ธต ๊ตฌ์กฐ( /
๋ฐ ํ์ ํด๋)๋ฅผ ์์ฑํ์ง๋ง AFAIK์๋ ํ์ฌ Linux ๋ง์ดํธ ๋ค์์คํ์ด์ค์์ ์ฌ์ ์ํ๋ ์ฌ์ฉ์/๊ทธ๋ฃน ๋งคํ ๋๋ ๊ถํ์ด ์์ต๋๋ค. ์ปจํ
์ด๋ ๋ด๋ถ์ "๋ง์ดํธ"(๋ฐ์ธ๋ ๋ง์ดํธ ๋ณผ๋ฅจ ํฌํจ)๋ ํธ์คํธ์ ํ์ผ ์์คํ
์ ์์ผ๋ฉฐ(๋ฌผ๋ก ๋ค๋ฅธ Docker ๋ณผ๋ฅจ ํ๋ฌ๊ทธ์ธ์ ์ฌ์ฉํ์ง ์๋ ํ) ์ด ํ์ผ ์์คํ
์ ๋ชจ๋ ์์
์ ์ํํ๋ Linux VFS ๊ณ์ธต์ ์กด์คํฉ๋๋ค. ํ์ผ ๊ถํ ํ์ธ. ์ปจํ
์ด๋๊ฐ ์ปจํ
์ด๋ ๋ด์์ ํ์ผ์ ์ก์ธ์คํ๋ ๊ฒ์ ๋ฐฉํดํ ์ ์๋ ์ผ๋ถ MAC(์: SELinux, AppArmor ๋ฑ)์ด ํธ์คํธ์ ์์ ์๋ ์์ต๋๋ค. ์ค์ ๋ก chroot
ํ๋ฉด chroot ๋ด์์ ๋ง์ดํธ ํด๋๋ฅผ ๋ฐ์ธ๋ฉํ ์ ์์ผ๋ฏ๋ก ์ ์ฌํ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์์ผ๋ฉฐ chroot ํ๊ฒฝ ๋ด์์ ์คํ ์ค์ธ ํ๋ก์ธ์ค๊ฐ ํ์ผ์ ์ก์ธ์คํ๋ ๋ฐ ์๋ชป๋ ์ ํจ UID/GID๋ฅผ ๊ฐ์ง ์ ์๋ค๋ ๋ฌธ์ ๋ ์์ต๋๋ค. ๋ฐ์ธ๋ ๋ง์ดํธ.
์ปจํ ์ด๋์๋ ๊ฐ๋จํ Linux(์ค์ ๋ก๋ Unix๋ ํฌํจ) ๊ท์น์ด ์ ์ฉ๋ฉ๋๋ค. ๋น๊ฒฐ์ ์ค๋๋ Linux ๋ค์์คํ์ด์ค์ ๊ฐ๋ฅ์ฑ๊ณผ ํ๊ณ๋ฅผ ๋ณด๊ณ ์ดํดํ๋ ๊ฒ์ด๋ฉฐ, ์ด ๋ฌธ์ ์ ๊ฐ์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ๋ฐฉ๋ฒ์ด ์ ์ ๋ ๋ช ํํด์ง๊ณ ์์ต๋๋ค. ๋๋ ๊ณ ์ ์ ์ธ Unix ๋ช ๋ น์ ์ฌ์ฉํ์ฌ ์์ ํ ํด๊ฒฐํ์ต๋๋ค.
@jcberthon ์ฌ๋ ค ๊น์ ๋ต๋ณ์ ๊ฐ์ฌ๋๋ฆฝ๋๋ค:
๋๋ ์ด๊ฒ์ด ๋น์ ์ด ์ ์ํ ๋๋ก ํ๋ฌ๊ทธ์ธ ๊ณ์ธต์ผ๋ก ํธ์๋์ด์ผ ํ๋ ๋ฌธ์ ์ฌ์ผ ํ๋ฉฐ ๋ฐ๋ผ์ Docker์ ํจ๊ป ์ ๊ณต๋๋ ์ผ๋ฐ ๋ณผ๋ฅจ ํธ๋ค๋ฌ ํ๋ฌ๊ทธ์ธ์ ์ผ๋ถ๊ฐ ๋ ์ ์๋ค๊ณ ์ฃผ์ฅํฉ๋๋ค. ์ปจํ ์ด๋๊ฐ ํ์๋ ์ด๋ฏธ์ง์ ์ ์๋ ๋ณธ์ง์ ์ผ๋ก ์ ์ ๊ด๊ณ๋ฅผ ์ค์ํ๋๋ก ์ธ๋ถ ๋ฆฌ์์ค(ํน์ ์ปจํ ์ด๋ ์ธ๋ถ)๋ฅผ ๊ฐ์ ๋ก ์ ์ฉํ๋ ๊ฒ์ ์ ์ ๊ฐ์ ํด๋ผ์ฐ๋/์ปจํ ์ด๋๋ฅผ ๋งค์ฐ ํด์ ํ๋ ๊ฒ ๊ฐ์ต๋๋ค.
"์ ๋์ค"์ ๋ค๋ฅธ ์ ์ฌํ ์์ญ์์ ๋ฐ์ํ๋ ์ด ์ ํํ ์ข ๋ฅ์ uid/gid ๋งคํ์ ๋ค๋ฅธ ์๊ฐ ์์ต๋๋ค.
๋ด๊ฐ ํ๋ ธ๋ค๋ฉด ์ ๋ฅผ ์์ ํ์ญ์์ค. https://github.com/zfsonlinux/zfs/issues/4177 ์ Linux์ ZFS์ ๊ด๋ จ๋ ๋ฌธ์ ๋ก "LXC/LXD์ ๋ฆฌ๋"๊ฐ UID/GID ์ ๋ณด๋ฅผ ์ฌ๋ฐ๋ก ์ ๊ณตํ์ง ์์ UID/GID ์ ๋ณด๋ฅผ ์ฐ๋ฆฌ๊ฐ ์ฌ๊ธฐ์ ๋ ผ์ํ๊ณ ์๋ ๊ฑฐ์ _์ ํํ_ ๋ฐฉ์์ผ๋ก ์ปจํ ์ด๋. https://github.com/zfsonlinux/zfs/issues/4177์ ์์ธํ ์ดํด๋ณด๋ฉด zfs ๋ณผ๋ฅจ ์ ํ์ด ์ค์ ๋ก ์ด๋ฏธ ๋ค์์คํ์ด์ค ๊ฐ์ ์ด uid/gid ๋งคํ์ ์ง์ํ ์ ์์ง๋ง ์ด๋ฅผ ์ํ ์ปจํธ๋กค์ ๋ ธ์ถํ์ง ์๋ ๊ฒ์ผ๋ก ๋ณด์ ๋๋ค.
Docker๋ฅผ ์ฌ์ฉํ๋ ๋๋ถ๋ถ์ ์ฌ๋๋ค์ dev/CI์ฉ์ด๋ฏ๋ก php/nginx(runner) ๋๋ gradle/python(builder)๊ณผ ๊ฐ์ "์ผ๋ฐ" ์ด๋ฏธ์ง๋ฅผ ์ฌ์ฉํ๋ฏ๋ก ์ข์ ์๋ฃจ์ ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
๋ณผ๋ฅจ(X:X:OPTION_READ_WRITE)์ ์ฐ๊ธฐ ๊ถํ์ ์ฝ๊ฒ ๊ฒฐ์ ํ ์ ์์ผ๋ ๋ง์ฐฌ๊ฐ์ง๋ก ์์ ์๋ฅผ ์ถ๊ฐํ๋ฉด ์ด๋จ๊น์?
SOURCE:TARGET:RW:OWNER
๊ฐ์ ๋ฌธ์ ๊ฐ ์์ต๋๋ค. ์๋ง๋ ๊ฐ์ฅ ์ข์ ๋ฐฉ๋ฒ์ด ์์ ๊ฒ์ ๋๋ค. ์ ๋ฐฉ๋ฒ์ _not_์ ๋๋ค.
version: '3.5'
services:
something:
image: someimage
user: '1000'
expose:
- 8080
volumes:
- dev:/app
volumes:
dev:
์ด๋ก ์ธํด EACCES: permission denied, access '/app'
ํฉ๋๋ค.
์ด๋ป๊ฒ ํด์ผ ํ ๊น์? ์ฆ, ์ ๋ณผ๋ฅจ์ ์ ์ํ๊ณ ๋ฃจํธ๊ฐ ์๋ ์ฌ์ฉ์๋ก ์ก์ธ์คํ ์ ์์ต๋๊น?
์๋ ํ์ธ์ @Redsandro
someimage
Docker ์ด๋ฏธ์ง์์ /app
๋ํ UID๋ฅผ 1000์ผ๋ก ์ค์ ํ๋ ๊ฒ์ด ์ข์ต๋๋ค. ๋๋ ์ด๋ฅผ ์ ์ดํ ์ ์๋ ๊ฒฝ์ฐ ์ด๋ฏธ์ง ์์ฑ์๊ฐ ์๋ํ UID ๋๋ GID๋ฅผ ์์ฑ ํ์ผ์์ user: ...
์ ์ฌ์ฉํด์ผ ํฉ๋๋ค.
๋ฌผ๋ก ์ด๋ฏธ์ง ์์ฑ์๊ฐ UID 0์ ์ฌ์ฉํ๊ณ ์๋น์ค๋ฅผ ๋ฃจํธ๋ก ์คํํ๊ณ ์ถ์ง ์๋ค๋ฉด(๊ทธ๋ฆฌ๊ณ ๊ถํ์ด ์๋ ์ฌ์ฉ์๋ก ์คํํ ์ ์์) Docker ์ด๋ฏธ์ง ์์ฑ์์๊ฒ ๋ฌธ์ ๋ฅผ ์ ๊ธฐํ์ญ์์ค.
@Redsandro Docker ๋ฐ --userns-remap ์์ ํด๊ฒฐ ๋ฐฉ๋ฒ์ ํ์ธํ์ญ์์ค.
์ด๊ฒ์ docker๊ฐ ๊ด๋ฆฌํ ์ ์๋ ๊ฒ์ด ์๋๋ฏ๋ก https://hub.docker.com/r/hasnat/volumes-provisioner๋ฅผ ์ฌ์ฉํ์ฌ ๊ด๋ จ ์ปจํ ์ด๋๊ฐ ์์๋๊ธฐ ์ง์ ์ ๋ณผ๋ฅจ์ ํ๋ก๋น์ ๋ํ๊ธฐ ์ํด ๋ค๋ฅธ ์ปจํ ์ด๋๋ฅผ ์์ฑํ ์ ์์ต๋๋ค.
version: '2'
services:
volumes-provisioner:
image: hasnat/volumes-provisioner
environment:
PROVISION_DIRECTORIES: "65534:65534:0755:/var/data/prometheus/data"
volumes:
- "/var/data:/var/data"
prometheus:
image: prom/prometheus:v2.3.2
ports:
- "9090:9090"
depends_on:
- volumes-provisioner
volumes:
- "/var/data/prometheus/data:/prometheus/data"
Docker๊ฐ ์ด๊ฒ์ ์์ ํ์ง ์๋ ์ด์ ๋ฅผ ์ดํดํ์ง ๋ชปํฉ๋๋ค. ๊ฐ๋ฐ ๋ชฉ์ ์ผ๋ก ํดํนํ ์ ์๋ค๋ ๋ฐ ๋์ํ์ง๋ง ํ๋ก๋์ ์์๋ ์ ๋ ์๋ฉ๋๋ค!
IMHO podman์ (๊ถํ์ด ์๋) ์ฌ์ฉ์๋ก ์คํํ ์ ์์ผ๋ฉฐ( ์ฌ๊ธฐ ์ฐธ์กฐ) ์๋ง๋ ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ๊ฒ์ ๋๋ค. ๋๊ตฐ๊ฐ๋ ๋ํ compose ์๋ฃจ์ ์
[podman]์ ๋ง์ ๋ถ๋ถ์์ Docker์ ํธํ๋๊ธฐ ๋๋ฌธ์ ์ผ๋ถ ์ฌ๋๋ค์๊ฒ ๋์์ด ๋ ์ ์์ต๋๋ค.
์ ์ ์ผ๋ก ๋์ํฉ๋๋ค. ๋ถํํ๋ podman์ Mac์์ ์๋ํ์ง ์์ต๋๋ค.
์ ์ ์ผ๋ก ๋์ํฉ๋๋ค. ๋ถํํ๋ podman์ Mac์์ ์๋ํ์ง ์์ต๋๋ค.
๊ธ์, IMHO๋ Docker๋ podman๋ ๊ธฐ๋ณธ์ ์ผ๋ก ์๋ํ์ง ์์ ๊ฒ์
๋๋ค. ๊ทธ๋ฌ๋ OS/X์ Docker ์ค์น๋ ๊ฐ์ ๋จธ์ ์ ์์ฃผ ์ ์จ๊ธฐ๊ณ ์์ต๋๋ค.
๊ทธ๋ฌ๋ ์ ์ ํ ๊ฐ๋ฐ ์์คํ
์ ๊ฐ๋๋ก VM์ ์๋์ผ๋ก ์ค์ ํ๋ ๊ฒ์ ๊ณ ํต์ค๋ฌ์ธ ์ ์๋ค๋ ๋ฐ ๋์ํฉ๋๋ค.
ํ์ง๋ง ์ฌ๊ธฐ์ ์ฃผ์ ์์ ์กฐ๊ธ ๋ฒ์ด๋๊ณ ์์ต๋๋ค.
์ ๋ ๋ ์ด์ OS/X ์ฌ์ฉ์๊ฐ ์๋์ง๋ง _experimental_ podman dmg๊ฐ ์๋ค๋ ๊ฒ์ ๋ฐฉ๊ธ ๋ณด์์ต๋๋ค.
์ด๋ฏธ podman programmatic ๋๋ podman-compose ์ ์ก์ธ์คํ ์ ์๊ธฐ ๋๋ฌธ์ ๊ฐ๊น์ด ๋ฏธ๋์ ์ ์ฌํ ์ํ๊ณ๊ฐ ๊ฐ๋ฐ๋ ์ ์๋ค๊ณ ์๊ฐํฉ๋๋ค.
๊ณต์ ํด๋ฌ์คํฐ์ ๋ํ sudo ๊ถํ์ด ์๋ ์ฌ์ฉ์๊ฐ ์ค์๋ก docker-compose๋ฅผ ํตํด ๋ฃจํธ๊ฐ ์์ ํ ์ผ๋ถ ํด๋๋ฅผ ๋ง๋ ๋ค์ ํด๋น ํด๋ ์์ฒด๋ฅผ ์ญ์ ํ ์ ์๋ ๊ฒฝ์ฐ ํนํ ๋ฌธ์ ๊ฐ ๋ฉ๋๋ค.
๋๋ ๋ํ์ด ๋ฌธ์ ์ ๋ถ๋ช์ณค๋ค. jpetazzo์ ๊ฒ์๋ฌผ์ ์๋ด๋ ๋๋ก docker์์ docker๋ฅผ ์ฌ์ฉํ๋ ค๊ณ ํฉ๋๋ค.
docker-compose ํ์ผ์์ ์ด ์ปจํ ์ด๋๋ฅผ ์์ํ๊ณ ํธ์คํธ ์์คํ ์ ๋์ปค ์์ผ์ ๋์ปค ๊ทธ๋ฃน ์๋์ ์ปจํ ์ด๋ ์์คํ ์ ํ์ฌํ ์ ์๊ธฐ๋ฅผ ์ํฉ๋๋ค. ์ด๋ ๋ฃจํธ๊ฐ ์๋ ๋ค๋ฅธ ์ฌ์ฉ์๋ฅผ ์ฌ์ฉํ์ฌ ์ปจํ ์ด๋ ๋ด๋ถ์์ ๋์ปค๋ฅผ ์คํํ ์ ์๋๋ก ํ๊ธฐ ์ํ ๊ฒ์ ๋๋ค.
ํ์ฌ ๋ฐ์ธ๋ ๋ง์ดํธ ํ์ผ์ ์์ ๊ถ ๋ฐ ๊ถํ์ ์ง์ ํ ์ ์๊ธฐ ๋๋ฌธ์ ์ด๊ฒ์ ๋ฌ์ฑํ ์ ์์ต๋๋ค.
์ฌ๊ธฐ์ ๋ด ๋ ์ผํธ๋ฅผ ๋ฃ์ผ์ญ์์ค.
docker-compose "๋ค์ดํฐ๋ธ" ์๋ฃจ์ ์ ๊ฒฝ์ฐ ๋๋ถ๋ถ์ ์ฌ๋๋ค์ด ์ด๋ฏธ ์ด๋ฏธ์ง ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ํ์ธ์ ๊ฐ์ง๊ณ ์๊ธฐ ๋๋ฌธ์ ์ด๋ ๊ฒ ํ์ต๋๋ค.
volumes:
media:
services:
mediainit:
image: alpine
entrypoint: /bin/sh -c "chown -v nobody:nogroup /mnt/media && chmod -v 777 /mnt/media"
container_name: mediainit
restart: "no"
volumes:
- "media:/mnt/media"
๋ฌผ๋ก ๊ฐ์ฅ ์์ ํ ๋ฐฉ๋ฒ์ ์๋์ง๋ง ์ปจํ ์ด๋์ ๋ํ ๊ถํ์ด ๋ถ์ฌ๋ ์ปจํ ์ด๋๋ง ์ด๋ฅผ ๋ณผ ์ ์์ผ๋ฏ๋ก ํฐ ๋ฌธ์ ๋ ์๋์ง๋ง ์ปค๋์ด ์ง์ํ๋ ๊ฒฝ์ฐ ์ฝ๊ฒ user:user๋ฅผ chownํ๊ฑฐ๋ setacl ๊ณต์์ ์ํํ ์ ์์ต๋๋ค
ํธ์ง: ์ ์ด๋ ๋ด ํ ์คํธ์์ chmod ์ ์ ํด๋๋ฅผ ๋จผ์ chownํด์ผ ํ๋ ๊ฒ ๊ฐ์ต๋๋ค
๋ณผ๋ฅจ ์์ ๊ถ์ docker-compose๊ฐ ์ ์ดํ์ง ์์ผ๋ฏ๋ก ์ด ๋ ผ์๋ moby ํ๋ก์ ํธ repo์์ ์ด๋ฃจ์ด์ ธ์ผ ํฉ๋๋ค.
ํด๊ฒฐ ๋ฐฉ๋ฒ์ ์ฐพ๋ ์ฌ๋๋ค์ ์ํ ๋ช ๊ฐ์ง ์ฐธ๊ณ ์ฌํญ:
Docker ๋ณผ๋ฅจ์ ์ปจํ
์ด๋์์ ์ฒ์ ์ฌ์ฉํ ๋ ์ปจํ
์ด๋์์ ์์๋ ์ด๊ธฐ ์ฝํ
์ธ ์ ๊ถํ์ ์ป์ต๋๋ค. ์ฆ, ๋ค์๊ณผ ๊ฐ์ด ์ด๋ฏธ์ง๋ฅผ ๊ตฌ์ฑํ ์ ์์ต๋๋ค.
#Dockerfile
FROM alpine
RUN addgroup -S nicolas && adduser -S nicolas -G nicolas
RUN mkdir /foo && chown nicolas:nicolas /foo
# empty, but owned by `nicolas`. Could also have some initial content
VOLUME /foo
USER nicolas
์ด๋ฌํ ์ด๋ฏธ์ง๋ ๋ช ์์ ๋ณผ๋ฅจ(์์์ ID๋ก ์๋์ ์ผ๋ก ์์ฑ๋จ) ์์ด ์คํ๋๊ฑฐ๋ ์์ง ์กด์ฌํ์ง ์๋ ๋ช ๋ช ๋ ๋ณผ๋ฅจ๊ณผ ํจ๊ป ์คํ๋ ๋ ๋ณผ๋ฅจ์ ๊ถํ์ "์ ํ"ํฉ๋๋ค.
โ docker run --rm -it -v some_new_volume:/foo myimage
/ $ ls -al /foo
total 8
drwxr-xr-x 2 nicolas nicolas 4096 Oct 18 08:30 .
drwxr-xr-x 1 root root 4096 Oct 18 08:30 ..
์์ฑ ํ์ผ์ ์ ์ธ๋ ๋ณผ๋ฅจ์ ์ฌ์ฉํ ๋๋ ๋์ผํ๊ฒ ์ ์ฉ๋ฉ๋๋ค.
#docker-compose.yml
version: "3"
services:
web:
image: myimage
command: ls -al /foo
volumes:
- db-data:/foo
volumes:
db-data:
โ docker-compose up
Creating volume "toto_db-data" with default driver
Creating toto_web_1 ... done
Attaching to toto_web_1
web_1 | total 8
web_1 | drwxr-xr-x 2 nicolas nicolas 4096 Oct 18 08:30 .
web_1 | drwxr-xr-x 1 root root 4096 Oct 18 08:37 ..
toto_web_1 exited with code 0
๋ค๋ฅธ ์ปจํ
์ด๋์์ ์ด๋ฏธ ์ฌ์ฉํ ๋ณผ๋ฅจ์ ๋ค์ ์ฐ๊ฒฐํ๋ฉด ์๋ํ์ง ์์ต๋๋ค. ๋ณผ๋ฅจ ์์ ๊ถ์ ๋ณ๊ฒฝํ๊ฑฐ๋ ์์ฑ ์ ์ด๋ฅผ ์ ์ดํ๋ โโ๊ฒ์ ์์ง์ด๋ ํน์ ์ต์
์ด ์๋ ๋ณผ๋ฅจ ๋๋ผ์ด๋ฒ์ ์ํด ๊ตฌํ๋์ด์ผ ํฉ๋๋ค. ๊ทธ๋ ์ง ์์ผ๋ฉด ์ ์๋ ๋๋ก ๋ช ๊ฐ์ง chown
ํธ๋ฆญ์ ์์กดํด์ผ ํฉ๋๋ค ^.
๋์์ด ๋์๊ธฐ๋ฅผ ๋ฐ๋๋๋ค.
์์ฑ์ ๋ณผ๋ฅจ ์์ฑ์ ๋ํ ์ ์ด ๊ถํ์ด ์์ง๋ง ๋
ธ์ถ๋ ์์ง API์ด๋ฏ๋ก ์ด ๋ฌธ์ ๋ฅผ ๋ซ์ต๋๋ค.
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
์ฌ์ค ๋๋ ๋ด์ค๋ฅผ ๊ฐ์ง๊ณ ์ฌ๊ธฐ์ ์๋๋ฐ, ๋ด๊ฐ ๋ฌ์ฑํ๋ ค๊ณ ํ๋ ๊ฒ์ ํ ์ ์๋ ๊ฒ ๊ฐ์ง๋ง ์ด๊ฒ์ด ๊ธฐ๋ฅ์ธ์ง ๋ฒ๊ทธ์ธ์ง ๋ชจ๋ฅด๊ฒ ์ต๋๋ค. ๋ณ๊ฒฝํ ์ด์ ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
๋ด Dockerfile ์์ _์ฌ์ฉ์ 'postgres'๋ก ๋ณ๊ฒฝํ๊ธฐ ์ ์_ ๋ค์์ ์ถ๊ฐํ์ต๋๋ค.
์ด๊ฒ์ด ํ๋ ์ผ์ /volume_data ๋๋ ํ ๋ฆฌ๋ฅผ ๋ง๋ค๊ณ ์ฌ์ฉ์ 'postgres'๊ฐ ์ธ ์ ์๋๋ก ๊ถํ์ ๋ณ๊ฒฝํ๋ ๊ฒ์ ๋๋ค.
Dockerfile ๋ถ๋ถ์ ๋๋ค.
์ด์ docker-compose.yml ์์ ์๋ฌด ๊ฒ๋ ๋ณ๊ฒฝํ์ง
directory_name_db-data
ํ๊ณ ์ด๋ฅผ/volume_data
๋ง์ดํธ ํ๊ณ ๊ถํ์ ์ ์ง๋ฉ๋๋ค! .์ฆ, ์ด์ ๋ช ๋ช ๋ ๋ณผ๋ฅจ์ด _pre-existing_ ๋๋ ํ ๋ฆฌ
/volume_data
์ ๋ง์ดํธ๋์ด ๊ถํ์ด ๋ณด์กด๋์ด 'postgres'๊ฐ ์ธ ์ ์์ต๋๋ค.๊ทธ๋ ๋ค๋ฉด ์ด๊ฒ์ด ์๋๋ ํ๋ ๋๋ ๋ณด์ ์๋ฐ์ด๋ผ๋ฉด? (์ด ๊ฒฝ์ฐ์๋ ๋์์ด ๋ฉ๋๋ค!)