You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
현재 user 마다 임의로 uid를 주고 해당 uid를 바탕으로 개별 도커 컨테이너를 구성하는 작업을 하고있습니다.
하지만 여기에서 한 가지 문제가 발생하는데, 바로 사용자 별 컨테이너 볼륨 격리가 어렵다는 점입니다.
현재 저희 프로젝트의 상황과 해당 문제가 발생하는 원인을 나열하면 다음과 같습니다.
1. 저희 프로젝트는 docker out of docker 구조를 사용합니다.
로컬 머신 Host(이하 H)에서 벡엔드를 돌리고 있는 컨테이너 backend-api_server-1(이하 C1) 이 있는 상황에서,
C1 이 다시 H 속에 자바 실행용 유저 컨테이너 user-{uid}-container(이하 C2) 를 실행합니다. C1 속에 C2를 실행 시키는 것은 보안상 도커에서 권장하지 않습니다. 따라서 docker out of docker 구조가 됩니다.
2. docker out of docker 에서는 마운트 할 당시 H의 프로젝트 경로를 잊어버리게 됩니다.
저희가 처음에 C1을 구동할 때는 H속 저희 프로젝트 폴더에 가서 docker-compose를 시키기 때문에 docker 에서 상대경로인 ./app을 처리할 수 있습니다. 하지만 C2를 구동할 당시에는 H의 경로를 잊어버린 채로 진행되기 때문에, 정상적인 마운트가 어렵습니다.
3. 잊어버린 H의 경로를 환경변수로 등록하려 했으나, 호환성 등의 문제가 있습니다
실행 당시의 H의 절대 경로를 docker-compose의 환경 변수에 pwd 등으로 등록해서 사용하려 했으나, 윈도우인지 맥인지 리눅스인지에 따라 작동이 조금씩 다르고 특히 윈도우의 경우 현재 잘 작동하지 않는 것으로 확인됩니다.
현재 user 마다 임의로 uid를 주고 해당 uid를 바탕으로 개별 도커 컨테이너를 구성하는 작업을 하고있습니다.
하지만 여기에서 한 가지 문제가 발생하는데, 바로 사용자 별 컨테이너 볼륨 격리가 어렵다는 점입니다.
현재 저희 프로젝트의 상황과 해당 문제가 발생하는 원인을 나열하면 다음과 같습니다.
1. 저희 프로젝트는 docker out of docker 구조를 사용합니다.
로컬 머신 Host(이하 H)에서 벡엔드를 돌리고 있는 컨테이너 backend-api_server-1(이하 C1) 이 있는 상황에서,
C1 이 다시 H 속에 자바 실행용 유저 컨테이너 user-{uid}-container(이하 C2) 를 실행합니다. C1 속에 C2를 실행 시키는 것은 보안상 도커에서 권장하지 않습니다. 따라서 docker out of docker 구조가 됩니다.
2. docker out of docker 에서는 마운트 할 당시 H의 프로젝트 경로를 잊어버리게 됩니다.
저희가 처음에 C1을 구동할 때는 H속 저희 프로젝트 폴더에 가서 docker-compose를 시키기 때문에 docker 에서 상대경로인 ./app을 처리할 수 있습니다. 하지만 C2를 구동할 당시에는 H의 경로를 잊어버린 채로 진행되기 때문에, 정상적인 마운트가 어렵습니다.
3. 잊어버린 H의 경로를 환경변수로 등록하려 했으나, 호환성 등의 문제가 있습니다
실행 당시의 H의 절대 경로를 docker-compose의 환경 변수에 pwd 등으로 등록해서 사용하려 했으나, 윈도우인지 맥인지 리눅스인지에 따라 작동이 조금씩 다르고 특히 윈도우의 경우 현재 잘 작동하지 않는 것으로 확인됩니다.
4. 따라서, H의 폴더를 마운트하지 말고 named volume 을 사용하려 했으나, 이럴 경우 subpath를 설정할 수 없습니다.
https://stackoverflow.com/questions/38164939/can-we-mount-sub-directories-of-a-named-volume-in-docker
이 기능을 적용시키고 싶으면 쿠버네티스가 필요합니다. 😓
5. subpath를 사용할 수 없기에, user별 볼륨 path 격리 문제가 생깁니다.
6. user 별 named 볼륨을 만들경우, 격리는 되지만 C1이 구동 중인 상황에서 가변적인 user 추가 볼륨을 다루지 못합니다
추후 변동사항이 생기면 추가 코멘트를 올리겠습니다.
The text was updated successfully, but these errors were encountered: