Jupyter는 원격 서버에서 사용하기 굉장히 편리하다. 원격으로 접속할 수 있는 Container 기반 Jupyter 서버 띄우는 방법을 정리하고자 한다. 기본 이미지 중 하나인 python:3.7.3 이미지를 사용하여 서버를 띄울 것이다.
1. Container 띄우기
먼저 python 환경의 Container를 띄울것이다. 세팅은 다음과 같으며 Jupyter는 기본적으로 8888포트를 사용하기 때문에 Container의 8888 port를 host port에 연결시켜주어야 한다.
- Host에 마운트 할 폴더:
/home/user/Documents
- Container의 폴더가
/root
- port:
(host port):8888
실행 코드는 다음과 같이 host의 886 포트를 container의 8888 포트에 연결시켜주는 예제이다. 하지만 -p 8888:8888
을 사용하여 Host, Container 둘다 같은 port 번호를 사용하게 해도 상관없다.
# host port: 886
docker run -d -it --name remote_jupyter -p 886:8888 --mount type=bind,source=/home/user/Documents,target=/root python:3.7.3
# container 접속 안될 시 privileged 모드로 실행, host port: 886
docker run -d -it --name remote_jupyter -p 886:8888 --privileged --mount type=bind,source=/home/user/Documents,target=/root python:3.7.3
Container가 생성되면 exec
으로 접속해야 한다. attach
로 접속하면 python 환경으로 들어가진다.
docker start remote_jupyter
docker exec -it remote_jupyter /bin/bash
2. Jupyter 설치 및 환경세팅
1) Jupyter 설치
Container 접속 후 jupyter를 설치한다.
pip install --upgrade pip
pip install jupyter
2) Config 생성
서버를 띄우기 위해 인증정보를 생성해야 한다. config 파일은 생성 시 안내되는 폴더에 저장된다.(e.g. /root/.jupyter/jupyter_notebook_config.py
)
jupyter notebook --generate-config -y
>>>> Overwrite /root/.jupyter/jupyter_notebook_config.py with default config? y
>>>> Writing default config to: /root/.jupyter/jupyter_notebook_config.py
다음으로 ipython으로 인증정보를 생성한다. passwd()
에서의 비밀번호는 노트북 서버 접속할 때 필요한 비밀번호이다. 비밀번호 생성 후 출려되는 인증정보('argon2:$argon.....chspA')는 따로 복사해둔다.
# bash에서 실행
ipython
# ipython 환경 실행
In [1] :from notebook.auth import passwd
In [2]: passwd()
>>>> Enter password:
>>>> Verify password:
### 이 부분 따로 복사해두어야 함
Out[2]: 'argon2:$argon2id$v=19$m=10240,t=10,p=8$PLyCJPwzphBgN9jEthOcKw$HKjo9Clr7BCIKd7OhchspA'
In [3]: quit()
3) jupyter_notebook_config.py 수정
jupyter notebook에 서버를 띄우기 위한 환경 정보를 넣어줄 것이다. nano를 설치하고 jupyter_notebook_config.py
을 열어본다.
# bash에서 실행
apt-get update
apt-get install nano
# config 파일 열기
nano /root/.jupyter/jupyter_notebook_config.py
아래 정보를 써준 후 Ctrl+x, y, enter 순으로 입력하여 정보를 저장하고 빠져나온다. c.NotebookApp.password에 복사해둔 인증 정보를 넣어준다.
c=get_config()
c.NotebookApp.ip='localhost'
c.NotebookApp.open_browser=False
c.NotebookApp.password='argon2:$argon2 ...... chspA'
c.NotebookApp.password_required=True
c.NotebookApp.port=8888
c.NotebookApp.iopub_data_rate_limit=1.0e10
c.NotebookApp.terminado_settings={'shell_command': ['/bin/bash']} # terminal을 bash로 실행
3. Jupyter/JupyterLab 서버 띄우기
이 부분이 좀 중요한데 서버 정보를 localhost로 주었기 때문에 jupyter notebook 실행 시 --ip 0.0.0.0
설정으로 띄워야 한다.
# bash로 실행
jupyter notebook --ip 0.0.0.0 --allow-root
JupyterLab도 같은 환경설정 파일을 공유하므로 위 단계까지 실행한 후 jupyter-lab으로 실행시키면 된다
jupyter-lab --ip 0.0.0.0 --allow-root
접속방법은 Host Machine의 ip가 192.111.222.333이라면 접속 port를 886을 지정해주었으므로 원격으로 접속할 때 웹브라우저를 키고 http://192.111.222.333:886/tree 주소로 접속하면 된다. 이때 passwd()
로 설정한 비밀번호를 입력해준다.
'개발' 카테고리의 다른 글
[Docker + Flask] 간단한 추론 API 서버 띄우기 (0) | 2021.07.08 |
---|---|
[ubuntu] GPU 사용 모니터링 (2) | 2021.05.30 |
[ubuntu] 사용자 추가 및 sudo 권한 부여 (0) | 2021.04.06 |
[git] git clone시 아이디, 비밀번호 입력 (0) | 2021.04.06 |
[ubuntu] scp로 파일 복사, 전송 (0) | 2021.03.24 |