:: linux

linux :: 리눅스 서버(도커 컨테이너)에서 주피터 노트북(jupyter notebook) 설치 및 실행하기

토람이 2022. 8. 16. 12:54

로컬 환경에서 파이썬으로 개발할 때 주피터 노트북을 많이 사용한다.

바로바로 실행 결과를 확인하면서 편리하게 개발하기 좋기 때문!

 

보통 윈도우(Windows) 로컬 환경에서 주피터 노트북 설치 및 실행을 하지만

이 글에서는 리눅스 서버 (또는 도커 컨테이너) 환경에서

마찬가지로 주피터 노트북을 설치하고 띄워서 개발해보도록 하겠다 :)

 

 

1. 파이썬이 설치되어 있어야 함

파이썬 개발을 위해서 주피터 노트북을 사용하는 만큼

당연하게도 리눅스 서버에 파이썬이 설치되어 있어야 한다.

$ python --version

Python 3.7.6

 

파이썬 설치 여부 및 버전을 위와 같이 확인한다.

 

만약 설치되어 있지 않다면,

$ sudo apt-get install python3

 

위 명령어를 입력하여 설치를 진행한다.

 

 

2. 주피터 노트북 설치

이제 리눅스 환경에서 주피터 노트북을 설치해보자.

보통은 pip 가 설치되어 있는 경우가 많을 텐데, 이 경우 다음과 같이 입력하여 설치를 진행한다.

$ pip install jupyter

 

만약 pip 가 설치되어 있지 않은 경우

$ sudo apt-get install jupyter

 

위와 같이 앞서 파이썬 설치했던 것과 유사하게 apt-get install 을 활용하여 설치를 진행한다.

 

 

3. 주피터 실행

주피터 노트북 실행 커맨드는 매우 간단하다.

$ jupyter notebook

 

이렇게 하면 실행이 된다.

 

그런데, 개발 편의성을 위해 몇 가지 옵션을 조절해보자.

 

 

1) 포트 변경하여 실행하기

 

주피터 노트북을 실행하면 기본적으로 8888 포트로 실행된다.

포트를 다른 숫자로 지정하여 실행하고자 한다면 (예: 8084)

$ jupyter notebook --port 8084

 

이렇게 --port 옵션을 주어 실행하면 된다.

 

 

2) root 계정으로 실행하기 (root 관련 에러 발생하는 경우)

 

리눅스 서버에 root 계정으로 접속한 경우

주피터 노트북은 정상적으로 실행되지 않으며, 다음과 같은 에러가 발생한다.

[C 12:22:48.946 NotebookApp] Running as root is not recommended. Use --allow-root to bypass.

 

root 계정으로 실행하는 것이 권장되지 않는다고 한다.

에러에 있는 가이드에 따라 다음과 같이 --allow-root 옵션을 추가하면 정상 실행된다.

$ jupyter notebook --port 8084 --allow-root

 

주피터 노트북이 정상적으로 실행된다면 다음과 같이 로그가 보일 것이다.

    To access the notebook, open this file in a browser:
        file:///root/.local/share/jupyter/runtime/nbserver-21227-open.html
    Or copy and paste one of these URLs:
        http://localhost:8084/?token=802a430f45c6e1337a817dab00b553db7dad2405d1beb797
     or http://127.0.0.1:8084/?token=802a430f45c6e1337a817dab00b553db7dad2405d1beb797

 

맨 아래 http:// 로 시작하는 주소 2개 중 하나를 복사하여 웹 브라우저에 붙여넣으면

주피터 노트북이 정상적으로 실행된다.

 

http://{서버ip}:{포트}/?token={토큰값}

 

접속 경로는 위와 같이 정리할 수 있다.

token 값의 경우 실행할 때마다 매번 바뀌는 값이므로 참고한다.

 

 

3) 원격으로 실행하여 접속하기 (도커 컨테이너)

 

만약 주피터 노트북을 실행하려는 리눅스 서버가 원격서버 or 도커 컨테이너인 경우,

위 2)번에서 웹 브라우저에 붙여넣은 주소로 정상 실행되지 않을 것이다.

 

'localhost' 나 '127.0.0.1' 은 자기 자신의 ip 를 뜻하므로

이 값 대신 원격 서버의 ip 로 주소를 바꿔서 입력해야 하는데

이마저도 잘 되지 않을 수 있다.

 

그런 경우 주피터 노트북 실행 커맨드에

$ jupyter notebook --ip=0.0.0.0 --port=8084 --allow-root

 

요렇게 --ip=0.0.0.0 이라는 옵션 값을 넣어주면 정상적으로 접근이 된다.

 

 

다만, 도커 컨테이너의 경우 참고할 사항이 있다.

처음 컨테이너를 띄울 때 -p 옵션을 통해 port 매칭을 시켜주어야 한다.

$ docker run {옵션들} -p 12345:8084

 

이 경우는 컨테이너 내부에서 '8084' 포트로 실행되는 프로세스와

컨테이너 외부의 '12345' 포트를 연결해주는 것으로,

좀 전에 주피터 노트북을 8084 포트로 실행하였으니

외부에서 '서버ip:12345' 로 접속하면 도커 컨테이너 내부의 주피터 노트북 프로세스에 접근할 수 있다.

 

컨테이너 내부에서 8084로 이미 실행되고 있는 다른 프로세스가 있다면 정상동작하지 않을 수 있으니

포트 선택 시 프로세스 점유를 잘 고려하고 결정하도록 한다.

 

 

4) 백그라운드로 실행하기

 

위 주피터 노트북 실행 커맨드를 그냥 실행할 경우

서버 접속 세션이 끊기면 주피터 노트북도 꺼지게 된다.

 

다시 실행할 경우 token 값이 바뀌게 되어 기존의 접근 주소가 유효하지 않게 될 수 있다.

 

주피터 노트북을 백그라운드 프로세스로 실행하여 계속해서 떠 있도록 하고 싶다면

$ nohup jupyter notebook --ip=0.0.0.0 --port=8084 --allow-root &

 

이렇게 앞쪽에 'nohup'을, 뒷쪽에 '&' 을 입력하여 실행하면 된다.

(커맨드 입력 후 엔터 한 번 쳐줘야 함)

 

 

위 커맨드를 실행한 경로 내에 쌓이는 'nohup.out' 파일에 로그가 쌓이며

이 로그를 참고하여 동일하게 접속을 진행하면 된다. :D

 

300x250