도커에서 주피터노트북을 설치하고 실행하는 방법에 대해 알아보겠습니다.
도커 이미지 다운로드 후 컨테이너 실행
예제용 도커이미지
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 이 낯선분은 해당 포스팅 참조)
아무것도 안 뜨면 설치가 되지 않은 것입니다.
2) 주피터 노트북 설치
pip install jupyter
정상적으로 설치되면 아래와 같은 파일들이 검색 가능합니다.
다만 이상태로 로컬에서 하듯 jupyter notebook 명령어를 입력하면 실행되지 않을 겁니다.
jupyter notebook
왜냐하면 도커를 실행할 때 쥬피터 노트북과 연결시켜줄 포트 번호를 미리 지정해줘야 하기 때문입니다. 뿐만 아니라 연결 가능한 ip 번호도 세팅해줘야 하고요.
무슨 말인지 당장 이해가 되지 않더라도 코드를 보며 차근차근 알아보도록 하겠습니다.
우선 실행 중인 컨테이너를 중지시키도록 하겠습니다.
주의 사항
현재 컨테이너 안에 쥬피터 노트북을 설치하였는데요. 이 상태로 그냥 컨테이너를 나가게 되면 모든게 초기화됩니다.
현재 상태를 그대로 유지하기 위해선 컨테이너를 이미지화 시킬 필요가 있습니다.
새 터미널 창을 열고 현재 실행 중인 컨테이너를 확인( docker ps )
docker commit CONTAINER_ID 명령어를 입력하여 컨테이너를 이미지로 만듭니다.
container_id는 전체 id를 입력할 필요 없이 앞자리 몇 자리만 작성해도 충분합니다.
현재 생성된 이미지 확인( docker images )
REPOSITORY 와 TAG 가 none으로 설정되어 있네요. 이건 우리가 따로 이름을 지정해주지 않았기 때문인데요.
CONTAINER_ID 뒤에 원하는 NAME을 작성하면 이름을 생성할 수 있습니다.
docker commit CONTAINER_ID 이름
이번엔 이름이 있는 이미지가 생성된 것을 확인할 수 있습니다.
추후 컨테이너를 실행할 때 이 이미지 이름을 사용할 것입니다.
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 을 입력합니다.
from notebook.auth import passwd
passwd()
위 코드를 작성한 후 원하는 비밀번호를 입력하면 암호화된 값이 출력됩니다.
이 값을 복사한 후 ipython 창을 빠져나갑니다.
(2) config파일 생성
jupyter notebook --generate-config 명령어를 통해 config 파일을 생성합니다.
nano /root/.jupyter/jupyter_notebook_config.py
nano를 통해 생성된 파일이 있는 경로에 접근하겠습니다.
nano 파일이 설치되어 있지 않다면 아래 명령어를 통해 설치합니다.
apt-get update
apt-get install nano
(3) config 파일 수정
config 파일 내부는 아래와 같습니다.
우리는 아래 빨간 사각형 부분을 추가해줄건데요.
✔ c.NtoebookApp.ip = '0.0.0.0' => 모든 ip 접근 허용 세팅
✔ c.NotebookApp.port = 8888 => 디폴트가 8888임으로 굳이 작성하지 않아도되나 다른 포트번호를 사용하고 싶다면 필수 작성!
6) 주피터 노트북 재실행
config 파일에 ip 세팅을 완료했기 때문에 --ip 부분은 작성하지 않아도 정상적으로 실행 가능합니다.
jupyter notebook --allow-root
이제는 비밀번호만 요구하는 상태로 변경되었습니다.
이 글과 읽으면 좋은 글
'리눅스' 카테고리의 다른 글
[Docker] 도커 허브(docker hub)에 이미지 올리기 (0) | 2022.12.13 |
---|---|
[docker] docker: Error response from daemon: failed to create shim task: OCI runtime create failed: 도커 에러 해결방법 (0) | 2022.12.13 |
[docker 기초] 도커 nvidia gpu 초기 세팅 방법 (1) | 2022.12.09 |
우분투 1> 2> 꺽쇠 무엇일까? (0) | 2022.12.07 |
리눅스 grep 사용법 (문자열 찾기) (0) | 2022.12.06 |
댓글