• 돌아가기
  • 아래로
  • 위로
  • 목록
  • 댓글

Docker로 설치한 Ubuntu의 데이터 증발 문제 질문 (마운트 관련)

시놀로지오너 277

0

13

안녕하세요.

이곳에서 늘 도움 많이 받고 있습니다. 편하게 물어볼 수 있는 유일한 곳인 것 같아요.

 

문제는 다음과 같습니다.

 

자동화를 위해 시놀로지 나스에 docker를 통해 ubuntu를 설치했습니다.

해당 ubuntu에 docker exec -it을 통해 접속하여 python, pip, nodejs, ffmpeg, pm2 등을 설치했고... 잘 굴러가고 있었는데요.

 

문제는 해당 컨테이너가 모종의 사유로 재시작되면 pip나 pm2 등 모든 명령어가 command not found라고 뜨면서 먹지 않습니다.

처음에는 단순 오류인 줄 알았는데, 계속 그래서 찾아보니 컨테이너가 재시작되면 마운트되지 않은 데이터는 날아가는 거 같더라고요.

 

결국 제 호스트와 마운트를 해야 문제를 해결할 수 있을 거 같은데...

문제는 마운트 방법은 대충 아는데 대체 어디를 마운트해야 할 지를 모르겠습니다.

 

-v /path/on/host:<여기>

 

아니면

 

volumes:
      - "/path/on/host:<여기>"

 

이렇게...? 제가 궁금한 부분을 이렇게 설명하는 게 맞는 지 잘 모르겠지만...

대체 <여기>에 무엇을 집어넣어야 컨테이너가 재시작되어도 데이터가 날아가지 않을까요?

 

도움 부탁드립니다.

감사합니다!

신고공유스크랩
13
1등
콜라 2023.03.16. 23:20

그래서 pip 독커랑 pm2 독커랑 nodejs 독커랑 다 따로 설치해서 연동해서 쓰는거죠.

ubuntu 설치한 후에 앱을 설치할 거라면 lxd라는 것을 알아보세요.

하기는 할수 있겠지만.. 독커로 하기는 쉽지 않습니다.

 

굳이 하려고 한다면 pip, pm2, nodejs 설치되는 위치를 넣어주면 됩니다.

(전 그 세가지를 안써봐서 어디에 설치되는지 모르겠네요)

2등
너른호수 2023.03.16. 23:39
컨테이너가 삭제되지 않는 한 해당 컨테이너 내의 데이터는 그대로 남아있습니다. 좀 이상하네요. 우분투 이미지로 컨테이너를 다시 만들지 않는 이상 이전 컨테이너는 다시 시작하면 중지 당시까지의 데이터는 보존됩니다(설치된 프로그램도 마찬가지고요).
시놀로지오너 글쓴이 2023.03.17. 00:11
너른호수
제가 컨테이너 삭제 시 결과랑 헷갈렸나 봅니다... 그런데 컨테이너에 진입해서 확인해보면 /usr/bin에도 python이나 pm2는 존재하지 않고... /usr/local/lib는 아얘 텅 비어있습니다. (ls 쳤는데 아무것도 안 뜹니다). 일반적인 케이스는 아닌 거죠?
너른호수 2023.03.17. 00:28
시놀로지오너
음.. 혹시 컨테이너 올리실 때 docker run --rm 옵션이 들어가 있었을까요? docker exec를 하신다고 하시기에 DSM의 Docker app 이 아닌 ssh 에서 docker cli를 이용하신 것 같아 여쭤봅니다.

docker run 할 때 --rm 옵션 들어가면 컨테이너 종료 시 컨테이너 자체, 볼륨 마운팅 등 해당 컨테이너와 관련된 모든 리소스가 완전히 삭제됩니다(종료만 안되면 살아는 있죠). 그 뒤에 다시 docker run을 같은 명령어로 하시면 말씀하신 것처럼 설치한 내용이고 데이터고 싹 사라져있는 경우일 수는 있습니다.

그게 아니라면 쫌 이상한 케이스 같슴다... 컨테이너 deploy 하실 때 이용하신 docker run 커맨드 같은 걸 올려주시면 보다 더 조사해볼 수 있을 것 같네요. ~_~
시놀로지오너 글쓴이 2023.03.17. 00:46
너른호수
ubuntu를 처음에는 DSM의 docker 앱에서 설치했는데, 해당 컨테이너 설정을 docker-compose로 뽑아 주는 docker-autocompose를 사용해서 생성한 docker-compose를 사용해서 다시 만든 컨테이너를 쓰고 있어서 rm 옵션은 잘 모르겠습니다.

사용한 docker-compose.yml은 아래와 같습니다.

version: "3.6"
services:
ubuntu:
command:
- "bash"
container_name: "app-name"
environment:
- "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
image: "ubuntu:latest"
network_mode: "host"
stdin_open: true
tty: true
volumes:
- "/volume2/video:/video"

감사합니다!!
너른호수 2023.03.17. 11:36
시놀로지오너

올려주신 docker-compose.yml로 테스트해봤습니다. 제가 진행한 내용을 올려드릴테니 어떤 부분에서 차이가 있었을지 체크해보시면 좋을 것 같습니다.

그리고 올려주신 docker-compose.yml 내용에는 단계별 공백문자가 전혀 없는데 파일에는 공백이 제대로 되어있을 것 같습니다. 공백 넣은 파일은 첨부했으니 한번 확인해보세요. → 시놀로지오너_docker-compose.yml

-----------

1. DSM 파일 스테이션에서 docker-compose.yml 파일이 저장될 디렉토리 생성 및 파일 저장

image.png.jpg

  - 저는 /volume1/docker/ubuntu 디렉토리를 생성하고 해당 디렉토리에 파일을 저장했습니다.

 

2. docker-compose를 통한 컨테이너 생성

image.png.jpg

  FYI: DSM 7의 docker에는 compose 플러그인이 없어서 docker-compose라는 별도의 compose 바이너리를 사용해야합니다.
 

3. 컨테이너 생성 및 실행 여부 확인

image.png.jpg

  - app-name이라는 컨테이너 이름으로 잘 실행되고 있습니다.

 

4. 컨테이너 cli 접속 및 정상적인 ubuntu인지 확인

image.png.jpg

image.png.jpg

 

5. apt update 및 테스트를 위한 curl 설치/실행 테스트

image.png.jpg

image.png.jpg

image.png.jpg

 

6. 컨테이너 exit

image.png.jpg

 

7. 컨테이너 cli 재접속 및 curl 실행 테스트

image.png.jpg

 

8. DSM 도커에서 컨테이너 재시작 및 컨테이너 cli 재접속, curl 실행 테스트

image.png.jpg

  - root@tyDepot:/# 에서 바로 root@tyDepot:/volume1/docker/ubuntu# 이렇게 떨어지는 건 컨테이너 CLI로 접속해있는 중에 DSM 도커에서 컨테이너를 중지시켰기 때문에 호스트 서버의 콘솔로 빠져나온 것입니다. 

 

시놀로지오너 글쓴이 2023.03.22. 00:13
너른호수
정말 친절한 설명이네요 ㅠㅠ 다만 기록을 보니 동일한 과정으로 생성했어서 해당 문제는 아닌 것 같습니다. 원래 오류로 인해 재실행되면 데이터가 날아가는 이슈였는데 지금은 신기하게 오류가 없어 재실행이 되지 않고 있어 어쩌다보니 문제가 해결?된 상황입니다. 도움주셔서 감사합니다!!
너른호수 2023.03.22. 09:54
시놀로지오너
제가 도와드린 부분은 거의 없어보이지만 ㅠㅠ 해결되셨다니 다행입니다. :)
profile image 3등
hilee0602 2023.03.17. 08:39
저도 도커에 우분투 설치해서 임베디드 개발용으로 써볼려고 했는데 치명적인 문제가 있어서 어제 다시 Proxmox로 넘어왔네요...ㅠ.ㅠ
시놀로지오너 글쓴이 2023.03.22. 00:21
hilee0602
저는 취미로 하는 간단한 작업 수준이라... proxmox 살짝 둘러봤는데 고수의 영역인 것 같네요 저는 건드릴 일이 없어 보입니다 ㅋㅋㅋ
테츠 2023.03.17. 09:34

도커 이미지는 RO(read only) 라서 도커 이미지로 ubuntu 컨테이너 올리고

ubuntu 컨테이너에 추가로 설치한 패키지나 셋팅은 컨테이너 재실행시 초기화 됩니다.

제가 예전에 블로그에 끄적여놨던 글 하나 소개 드립니다.

https://sonhc.tistory.com/m/855

 


1안. 링크에서 레벨2에 해당
도커에 ubuntu 이미지로 컨테이너 올려서 ubuntu 셋팅하고 이것저것 apt install 설치하신 다음에
docker 컨테이너를 docker commit 명령로 현재 컨테이너 상태를 새로운 docker image로 백업해보세요.
그럼 새롭게 백업된 docker image로 ubuntu 컨테이너를 다시 실행해 주면,

컨테이너 재실행하더라도 마지막 commit해둔 셋팅 그대로 사용할 수 있습니다.

2안. 링크에서 레벨3에 해당
1안처럼 docker commit 명령으로 수동으로 image 셋팅하지 않으려면 docker build 를 사용해야 합니다.
docker build는 dockerfile 이라는 스크립트를 통해 docker 환경을 자동으로 셋팅해서 docker image를 만들어줍니다.

이 docker build로 생성한 image로 ubuntu 컨테이너를 실행하면

ubuntu를 원하시는 셋팅 상태로 바로 사용할 수 있습니다.

 

결론은, 도커 환경은 기본적으로 RO 이고, -v 볼륨 맵핑한 경로만 host 쪽에 공유/남게 되니

도커로 ubuntu를 내 마음대로 셋팅해서 개발환경 같은걸 구성하시려면...

1안, 2안중에서 선택해 삽질해 보셔야 할듯 합니다.

시놀로지오너 글쓴이 2023.03.22. 00:18
테츠
해당 글을 봤는데 신기하게도 스텝 그대로 따라가고 있네요 ㅋㅋ... 지금은 오류가 없어서 재실행될 일이 없다 보니 데이터가 날아가지 않고 있는데요, 혹시 몰라서 docker image로 컨테이너 백업해뒀습니다. 정말 감사합니다!!

댓글 쓰기 권한이 없습니다. 로그인

취소 댓글 등록

cmt alert

신고

"님의 댓글"

이 댓글을 신고하시겠습니까?

댓글 삭제

"님의 댓글"

삭제하시겠습니까?


목록

공유

facebooktwitterpinterestbandkakao story

등록된 글이 없습니다.