dogo_ day

Jupyter + tmux + nbextension 본문

IT/Data_

Jupyter + tmux + nbextension

dogo_ 2023. 6. 14. 15:36

IT일을 하다보면 데이터를 다룰 일이 빈번하게 생긴다.

 

보이는 것만 보인다는 이야기가 있다.

지금 까지 나는 데이터를 다루는 것은 데이터베이스를 통해야만 할 수 있다고 생각했다.

그리고 비정형데이터를 다루는 일은 데이터베이스를 사용하여 처리 하기엔 한계가 있다.

 

python을 이용하자.

python 라이브러리 pandas를 이용하자.

Jupyter Notebook을 이용하자.

여러 패키지들의 버전을 관리해주는 anaconda를 이용하자.

Jupyter Notebook 이란?
코드 작성, 시각화 및 문서 작성이 가능한 대화형 환경을 제공하는 도구

개인적으로 사용하든, 업무적으로 사용하든 나는 사용 환경(공간)에 제약받는 것을 싫어한다.

언제나 어디서나(피카츄가 옆에있어,,,,😇) 작업할 수 있도록 dockerfile을 만들어서 사용환경을 일반화 시키려고한다.

( docker, dockerfile, image, container 개념은 추후에 정리하여 작성 예정 )

 

# Dockerfile

 

# Use a base image with Anaconda installed
FROM continuumio/anaconda3

# Set the working directory
WORKDIR /root/workspace

# Expose the Jupyter Notebook port
EXPOSE 8888

# Install Dependencies of Anaconda3
RUN apt-get update && \
    apt-get install -y git tmux vim && \
    apt-get clean && \
    rm -rf /var/lib/apt/lists/*

# Create a new conda environment
RUN conda create -n dogoenv python=3.9

# Install Jupyter Notebook
RUN conda install -y jupyter

# Install nbextensions
RUN conda install -y -c conda-forge jupyter_contrib_nbextensions && \
    jupyter contrib nbextension install --user

# Activate the conda environmnet
SHELL ["conda", "run", "-n", "dogoenv", "/bin/bash", "-c"]

# Some Dependencies

# Install Jupyter in the conda environment and Jupyter Setting
RUN jupyter notebook --generate-config
RUN echo -e "\
c.NotebookApp.allow_origin = '*' \n\
c.NotebookApp.allow_root = True \n\
c.NotebookApp.open_browser = False \n\
c.NotebookApp.notebook_dir = '/root/workspace/' \n\
c.NotebookApp.ip = '*'" >> /root/.jupyter/jupyter_notebook_config.py 

CMD [ "/bin/bash" ]​

Jupyter notebook default port 는 8888이다.

그래서 나 또한 8888로 설정하였다.

중간에 보이는 nbextensions는 jupyter notebook의 다양한 기능을 제공해주는 확장 플러그인으로 생각하면 된다.

 

1. 도커이미지를 생성하자

docker build -t <tagName>:<version> .

ex) docker build -t dogo:1.0 .

2. 도커이미지를 이용하여 컨테이너를 생성하자

docker run -it -d -p 1008:8888 --name <containerName> <tagName>:<version>

ex) docker run -it -d -p 1008:8888 --name dogo-jupyter dogo:1.0

3. 컨테이너가 정상적으로 올라와있는지 확인하자

docker ps

4. 컨테이너에 접속하자

docker attach <containerName>
docker attach dogo

5. Jupyter notebook 비밀번호를 설정하자

jupyter notebook password

6. tmux의 새로운 세션을 생성하자

tmux new -s <name>

tmux에서 빠져나오는 단축키 : Ctrl+b -> d
tmux를 사용하는 이유는 여러이유가 있지만 일단 jupyter notebook를 계속 켜두기 위함으로 생각하자

7. tmux 세션으로 접속

tmux session 목록 확인 명령어 : tmux ls

tmux attach -t <name>

8. jupyter notebook를 실행하자

jupyter notebook

9. jupyter notebook 웹에 접근해보자

컨테이너를 실행시킬 때 1008:8888로 설정하였으니
http://localhost:1008

10. 논외

404 GET/static/components/marked/lib/marked.js

에러가 뜬다면 아래 스택오버플로우 글을 참고하면 된다.

https://stackoverflow.com/questions/75539135/jupyter-nbextensions-doesn´t-appear-404-get-static-components-marked-lib-mark

결론은 notebook버전 문제로 nbextension의 경로문제 인 것 같다. 다운그레이드를 해야하는 상황이다.

개인적인 생각으로 dockerfile 에서 사전에 방지할 수 있는 부분인 것 같긴하다.

 

https://github.com/luckydoyun/jupyter-tmux-docker