docker 컨테이너는 기본적으로 휘발성입니다. 컨테이너의 데이터들은 컨테이너가 삭제되면 사라지게 되죠. 영속성이 필요한 데이터는 보통 볼륨이나 바인드를 통해 외부화시키게 됩니다.
docker 볼륨 바인드
$ docker run ... -v host_dir:container_dir docker_images command
이렇게 -v 옵션으로 호스트 디렉토리(파일)을 도커 컨테이너로 연결해줄 수 있습니다. (현재의 가이드는 -v 옵션 보다는 –mount 옵션을 권장한다고 합니다.)
시놀로지에서는 도커의 컨테이너 편집으로 볼륨 바인드를 추가해줄 수 있습니다.
컨테이너에서 사용하는 파일시스템은 도커 외부에 있게 되므로 Permission Denied 등 권한 문제가 종종 발생하기도 합니다.
이때는 보통 도커에서 UID, PID를 가져와 해당 디렉토리(파일)의 권한을 바꿔주는 방식으로 해결합니다.
user@docker_host$ docker run --rm -it docker_image bash
docker_user@container_id$ id
uid=1000 gid=100 groups=100
docker_user@container_id$ exit
컨테이너 자동 삭제(–rm) 옵션을 주고 이미지를 실행합니다. 컨테이너에 들어오면 id 명령어를 통해 UID와 GID를 확인합니다. 찾아온 UID, GID로 바인드하려는 디렉토리를 바꿔줍니다.
user@docker_host$ chown -R 1000:100 host_dir
다시 컨테이너를 실행하면 정상적으로 바인드가 됩니다. 왠만하면 이 단계에서 문제가 해결됩니다.
하지만 시놀로지에서 도커가 설치된 볼륨이 아닌 다른 볼륨의 디렉토리를 바인드하려면 한 단계가 더 필요합니다. 도커의 빠른 실행을 위해 SSD에 설치해 놨는데 필요한 컨테이너는 저장소도 많이 차지하고 그렇게 중요하거나 빠른 접근이 필요한 것도 아니라서 HDD에 저장하려고 하면 이런 문제를 만나게 됩니다.
synology 권한 조정
- 우선 바인드하려는 디렉토리를 시놀로지 File Station에서 찾아서 선택합니다.
- File Station의 메뉴에서 작업 -> 속성 을 선택합니다.
- 소유자 ID를 확인합니다. 위에서 chown으로 변경해준 UID가 맞는지 확인합니다.
-
권한 탭을 확인해보면 Owner가 빠져 있습니다. Owner의 권한을 생성하고 읽기/쓰기를 추가해줍니다.
-
다시 컨테이너를 실행하면 정상적으로 처리가 됩니다.
synology 의 특징
문제가 발생하는 원인은 Owner 권한이 빠져 있는 부분인 걸로 보입니다. 보통 시놀로지에서 공유 폴더에 디렉토리를 만들게 되면 사용자(시놀로지 유저)의 권한이 기본 설정됩니다. 도커 바인드를 위해 쉘에서 오너를 변경하게 되면 시놀로지의 권한이 사라지는 것 같습니다. 시놀로지 파일 시스템의 특징이거나 권한 시스템으로 인한 것으로 보입니다.
안녕하세요
저는 현제 시놀로지에 docker를 설치를 하고 사용 중에 있는데요
도커에 있는 파일이 공유폴더 제가 만들어 놓은 곳으로 저장이 되게 하려면 어떻게 해야 하나요
위의 내용을 보면 잘 모르겠어서요
혹시 설명좀 부탁 드려도 될까요
위 내용이 도커에서 작업을 해야 하는 것인지 아니면 시놀로지에서 작업을 해야 하는지 모르겠어서요
그리고 도커에서 일단 볼륨설정은 해둔 상태 입니다.
안녕하세요 진규님! 기본적인 도커 사용 방법은 알고 계시죠? 기본적으로 LINUX에서 도커로 외부 볼륨을 bind하는 것과 동일합니다. 시놀로지는 자체적인 권한 시스템이 있어서 그 부분에서만 약간 달라집니다. 관련 내용은 위에 synology 권한 조정 부분에 간단하게 설명이 있습니다.