Docker

Docker Jupyter container 외부 접속 구성

누구용 2022. 7. 29. 10:36

개인용 컴퓨터를 워크스테이션 처럼 사용해보고 싶어 구매하여 우분투를 설치하였습니다.

원격으로 해당 컴퓨터의 Jupyter 사용하도록 docker 활용하여 구축하였습니다.

 

일단 개인 우분투에 ssh 연결을 허용해야 합니다.

 

ssh 설치가 안되어 있다면

 

$ sudo apt-get install openssh-server

 

설치 서비스를 실행해 줍니다.

$ sudo service ssh start
$ sudo service ssh status

 

ssh 경우 port 22 사용하고 있습니다.

보안을 위해 방화벽을 실행하고 ssh 포트를 허용해 줍니다.

$ sudo ufw enable
$ sudo ufw allow 22

 

집에서는 보통 1개의 ip 할당 받고 해당 Ip 공유기로 나누어 사용하게 됩니다.

pc에서 ip 확인하면 172.30.1.50 처럼 내부망의 ip 사용됩니다.

ip로는 외부에서 접근이 불가하고 포트포워딩이라는 기능을 통해 외부 ip 접근할때 연결될 있도록 설정 해주어야합니다.

 

외부 ip 121.130.50.xxx일때 포트포워딩 기능을 활용해주면 연결한 포트에 접근할때 내부 망의 포트로 연결됩니다.

ex) 121.130.50.xxx 8888 포트로 접근할때 172.30.1.50 22 포트로 연결해줄 있습니다.

해당 기능을 활용해 공유기 설정을 통해 연결해줍니다.

 

공유기 설정 순서는 다음과 같습니다.

  1. 해당 컴퓨터가 고정 아이피를 받을 있도록 설정
  2. 해당 아이피의 포트 포워딩 설정

kt, iptime 공유기 별로 설정법이 다르므로 넘어가겠습니다.

 

저는 3333포트에 22 포트를 포트포워딩 하여 진행하였습니다.

 

ssh 연결은 아래와 같은 방법으로 사용할 있습니다.

$ ssh hostName@121.130.50.xxx -p 3333

 

연결이 됬으면 다음으로 docker 사용해 jupyter container 올려 줍니다.

 

docker 설치되어 있지 않은 경우 아래 경로를 참고하여 설치하면 됩니다.

https://docs.docker.com/engine/install/ubuntu/

 

jupyter 컨테이너들이 docker hub 많이 올라와 있는데

저는 datascience 관련 작업까지 수행하고 싶어  jupyter/datascience-notebook 선정하였습니다.

필요에 따라 아래 링크의 컨테이너를 선정하시면 됩니다.

https://jupyter-docker-stacks.readthedocs.io/en/latest/using/selecting.html

 

 

jupyter 사용할 경로의 파일을 특정 경로에서 관리할 있도록 마운트 해줄 예정입니다.

먼저 경로에 폴더를 생성해줍니다.

$ mkdir ~/datascience-notebook

 

docker에서 폴더에 파일을 생성, 수정, 제거할 있도록 권한을 변경해줍니다.

$ chmod 777 ~/datascience-notebook

 

폴더 위치로 이동하고 docker container 생성, 연결해줍니다.

$ cd ~/datascience-notebook
$ sudo docker run --name datascience-notebook -p 8080:8888 -e JUPYTER_ENABLE_LAB=yes -v "$PWD":/home/jovyan/work:rw jupyter/datascience-notebook

 

contanier 이름을 datascience-notebook 지정해주었고 포트를 8080:8888 포트포워딩 해주었습니다.

jupyter 보통 8888포트를 사용하게 되는데 8080 접근하면 컨테이너의 8888 연결됩니다.

 

환경변수 JUPYTER_ENABLE_LAB=yes 지정을 통해 jupyer lab 사용하도록 설정하였습니다.

 

마운트 기능을 활용하여 ~/datascience-notebook container /home/jovyan/work 연결해 주었습니다.

마운트 해줄때 권한을 rw 명시하지 않으면 폴더에 파일의 쓰기 권한이 없어 파일을 생성할 없습니다.

 

실행하게 되면 jupyter 실행되며 토큰 값이 나오게 됩니다.

이를 활용해도 되고, 비밀번호로 변경해서 사용해도 됩니다.

비밀번호를 변경한 경우 컨테이너를 껐다 켜줘야 적용 되는 듯합니다.

 

이제 외부에서 8080포트로 연결하기 위해 방화벽의 포트를 허용해 줍니다.

$ sudo ufw allow 8080

 

이제 jupyter docker container 실행되어 있는 경우

ssh 통해 접속할 있습니다.

$ ssh -L 8080:localhost:8888  hostName@121.130.50.xxx -p 3333

실행 후 http://localhost:8080/ 접속하게 되면 우분투 jupyer container 연결됩니다.

 

원격으로 jupyter 사용하는 경우에 비밀번호를 설정했다고 하더라도 보안 취약점을 활용해 채굴을 돌리게 하는 경우도 있다고 합니다.

사용할 때만 docker container 실행하면 되니 보안에 괜찮지 않을까 싶습니다.

 

매번 ssh 관련 명령어를 사용하기에는 복잡합니다. alias 활용하여 간소화 하면 편하게 사용할 있습니다.

$ vi ~/.zshrc

 

저는 zsh 사용하지만 bash 사용하는 경우 동일하게  ~/.bash_profile 아래 내용을 추가하면 됩니다.

 

alias ssh-hostname="ssh hostName@121.130.50.xxx -p 3333"
alias ssh-datascience-notebook="ssh -L 8080:localhost:8888  hostName@121.130.50.xxx -p 3333"

 

이제 접속할때 ssh-datascience-notebook만 사용하면 바로 연결하여 사용할 수 있습니다.

'Docker' 카테고리의 다른 글

Docker Airflow DAG 추가 방법  (0) 2022.07.30
Visual Studio Code Docker 원격 Container 사용  (0) 2022.07.30
Docker Apache Airflow 설치  (0) 2022.07.30
Docker Desktop, Compose 설치  (0) 2022.07.30
Visual Studio Code ssh 연결  (0) 2022.07.30