개인용 컴퓨터를 워크스테이션 처럼 사용해보고 싶어 구매하여 우분투를 설치하였습니다.
원격으로 해당 컴퓨터의 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번 포트로 연결해줄 수 있습니다.
해당 기능을 활용해 공유기 설정을 통해 연결해줍니다.
공유기 설정 순서는 다음과 같습니다.
- 해당 컴퓨터가 고정 아이피를 받을 수 있도록 설정
- 해당 아이피의 포트 포워딩 설정
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 |