무효 클릭 IP 추적 중...
리눅스

[Docker] 도커에서 주피터 노트북 원격 접속 방법

꼬예 2022. 12. 12.

도커에서 주피터노트북을 설치하고 실행하는 방법에 대해 알아보겠습니다.

 

챗gpt를 이용한 데이터분석과 시각화 마스터하기 >>

 

도커 이미지 다운로드 후 컨테이너 실행

 

예제용 도커이미지

https://hub.docker.com/r/pytorch/pytorch

 

docker pull pytorch/pytorch

 

docker run --rm -it pytorch/pytorch
도커 초보자를 위한 설명
-it => interactive의 약자로 도커를 실행하면 도커 가상공간안에서 터미널을 사용할수 있게 해준다.
-it를 없이 run하면 실행 되자 마자 컨테이너는 종료되고 바깥으로 나온다.
--rm => 도커를 run한 후 종료 했을때 --rm 명령어를 사용하지 않으면 안쓰는 컨테이너 정보들이 쌓인다. 
manual하게 일일이 삭제하기 귀찮기 때문에 컨테이너가 종료되면 자동으로 삭제되도록 한다.

 

컨테이너 접속 후 주피터 노트북 실행

 

1) 주피터 노트북 설치 여부 확인

pip list | grep -i jupyter

( grep 이 낯선분은 해당 포스팅 참조)

 

아무것도 안 뜨면 설치가 되지 않은 것입니다.

 

jupyter 설치 안됨

 

2) 주피터 노트북 설치

pip install jupyter

 

정상적으로 설치되면 아래와 같은 파일들이 검색 가능합니다.

 

jupyter 설치 완료

 

다만 이상태로 로컬에서 하듯   jupyter notebook 명령어를 입력하면 실행되지 않을 겁니다.

 

jupyter notebook

 

왜냐하면 도커를 실행할 때 쥬피터 노트북과 연결시켜줄 포트 번호를 미리 지정해줘야 하기 때문입니다. 뿐만 아니라 연결 가능한 ip 번호도 세팅해줘야 하고요.

 

무슨 말인지 당장 이해가 되지 않더라도 코드를 보며 차근차근 알아보도록 하겠습니다.

 

우선 실행 중인 컨테이너를 중지시키도록 하겠습니다.

 

주의 사항

현재 컨테이너 안에 쥬피터 노트북을 설치하였는데요. 이 상태로 그냥 컨테이너를 나가게 되면 모든게 초기화됩니다.

 

현재 상태를 그대로 유지하기 위해선 컨테이너를 이미지화 시킬 필요가 있습니다.

 

새 터미널 창을 열고 현재 실행 중인 컨테이너를 확인( docker ps )

 

현재 실행중인 컨테이너 확인

 

  docker commit CONTAINER_ID 명령어를 입력하여 컨테이너를 이미지로 만듭니다.

 

commit을 통해 컨테이너 이미지화

 

container_id는 전체 id를 입력할 필요 없이 앞자리 몇 자리만 작성해도 충분합니다.

 

현재 생성된 이미지 확인( docker images )

 

이미지확인

 

 REPOSITORY  TAG 가 none으로 설정되어 있네요.  이건 우리가 따로 이름을 지정해주지 않았기 때문인데요.

 

CONTAINER_ID 뒤에 원하는 NAME을 작성하면 이름을 생성할 수 있습니다.

 docker commit CONTAINER_ID 이름 

commit 이름적용

 

이번엔 이름이 있는 이미지가 생성된 것을 확인할 수 있습니다.

 

jupytertest로 생성된 이미지

 

추후 컨테이너를 실행할 때 이 이미지 이름을 사용할 것입니다.

 

3) 도커 컨테이너 port 지정 후 run

 

도커 포트 지정

 

  docker run -it --rm -p 5000:8888 jupytertest  

 

쥬피터 노트북 expose 디폴트 포트는 8888입니다.

즉 5000 포트로 접속하면 자동으로 쥬피터노트북으로 연결시키겠다는 의미로  -p 5000:8888 로 포트 포워딩(포트 맵핑) 시켰습니다. 

 

4) 쥬피터 노트북 실행

컨테이너에 접속한 후 쥬피터 노트북 실행 명령은 아래와 같습니다.

  jupyter notebook --ip 0.0.0.0 --allow-root 

 

모든 ip 접근을 가능하도록  0.0.0.0 세팅 후  --allow-root  를 추가해주고 실행시킵니다.

 

 

실행하면 아래와 같은 Password or token을 요구할 텐데요.

 

토큰번호 요구

 

실행 시 생성되는 토큰 번호를 넣어주면 됩니다.

 

토큰번호 생성

 

매번 이렇게 생성되는 토큰번호를 입력하는 것이 귀찮은분은 여러분만의 비밀번호를 지정하고 그 비밀번호로 접속하는 방법도 있습니다.

 

5) 쥬피터 노트북 비밀번호 설정

(1) 비밀번호 생성

컨테이너 창에서  ipython 을 입력합니다.

 

ipython 입력

 

from notebook.auth import passwd
passwd()

 

위 코드를 작성한 후 원하는 비밀번호를 입력하면 암호화된 값이 출력됩니다.

 

비밀번호 입력

 

이 값을 복사한 후 ipython 창을 빠져나갑니다.

 

(2) config파일 생성

  jupyter notebook --generate-config 명령어를 통해 config 파일을 생성합니다.

 

jupyter notebook --generate-config 파일 생성

 

  nano /root/.jupyter/jupyter_notebook_config.py 

nano를 통해 생성된 파일이 있는 경로에 접근하겠습니다.

 

nano 파일이 설치되어 있지 않다면 아래 명령어를 통해 설치합니다.

 apt-get update 

  apt-get install nano 

 

(3) config 파일 수정

config 파일 내부는 아래와 같습니다.

 

config 파일 접속

 

우리는 아래 빨간 사각형 부분을 추가해줄건데요.

 

내용추가

 

✔ c.NotebookApp.password = 'argon ....' => 이전에 복사한 암호화된 문자 붙여넣기
✔ c.NtoebookApp.ip = '0.0.0.0' => 모든 ip 접근 허용 세팅
✔ c.NotebookApp.port = 8888 => 디폴트가 8888임으로 굳이 작성하지 않아도되나 다른 포트번호를 사용하고 싶다면 필수 작성!

 

6) 주피터 노트북 재실행

config 파일에 ip 세팅을 완료했기 때문에 --ip 부분은 작성하지 않아도 정상적으로 실행 가능합니다.

  jupyter notebook --allow-root  

 

심플한 명령어

 

이제는 비밀번호만 요구하는 상태로 변경되었습니다.

 

비밀번호만 요구

 

이 글과 읽으면 좋은 글

  • 트위터 공유하기
  • 페이스북 공유하기
  • 카카오톡 공유하기
이 컨텐츠가 마음에 드셨다면 커피 한잔(후원) ☕

댓글