본문 바로가기

카테고리 없음

[WSL2] Docker container 원격 접속

서론

연구실에 배정된 머신러닝 학습용 컴퓨터를 서버실에 상주시키게 되면서, 원격으로 접속 가능하도록 만들어야 했다.
목적이 학습용이니 docker는 필수라고 생각했고, 쾌적한 사용을 위해 docker에 ssh 연결을 해야 했다.

컴퓨터가 windows10이었지만, 원격 데스크톱으로 제어를 하기 위해 그대로 사용했다. (사용이 편한 Chrome Remote Desktop은 Ubuntu를 '공식적으로' 지원하지는 않는다.)


구조

학습용 컴퓨터의 대략적인 모습

굳이 저렇게 해야할까 싶지만, Ubuntu에 Nvidia driver와 Cuda를 설치해본 사람은 이해해 줄거라 믿는다.
특히, 서로 다른 cuda 버전과 opencv, pytorch 등을 사용하는 사람들이 나온다고 생각하면... docker는 필수다.


포트포워딩

학습을 진행할 최상단의 Ubuntu에 ssh로 접근하려면 Windows10-WSL2-Docker간에 Forwarding을 해야한다.

다행히 학교 측에서 컴퓨터 당 1개의 ip를 할당해줘서 모든 포트가 열려 있었다. 그래서 검색을 통해 Reserved 되어있지 않은 포트를 찾아 WSL2와 1:1로 포트를 포워딩 해주었다.

  • 비어있는 포트 검색

참고 사이트 : https://en.wikipedia.org/wiki/List_of_TCP_and_UDP_port_numbers

 

List of TCP and UDP port numbers - Wikipedia

 

en.wikipedia.org

 

  • Windows10 ip와 WSL2를 포워딩하는 방법

참고 사이트 : https://codeac.tistory.com/118

 

WSL2, 외부 네트워크와 연결하기

node.js를 WSL2에서 구동하였는데 로컬만 접속되고 외부에서는 접속이 안돼요 Django를 WSL2에서 구동하였는데 외부에서 접속이 안돼요 와 같은 문제점을 해결하는 글입니다 현재 Window10 preview 2004 버

blog.aaronroh.org

 

  • 스크립트를 자동 실행하는 방법 (우리는 트리거를 시작할 때로 만들어야 한다)

참고 사이트 : https://happybono.wordpress.com/2019/10/07/tip-windows-%EC%9E%91%EC%97%85-%EC%8A%A4%EC%BC%80%EC%A4%84%EB%9F%AC%EB%A5%BC-%ED%86%B5%ED%95%B4-%ED%8A%B9%EC%A0%95-%EC%8B%9C%EA%B0%84%EC%97%90-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%A8-%EC%9E%90%EB%8F%99/

 

[TIP] Windows 작업 스케줄러를 통해 특정 시간에 프로그램 자동 실행하기.

관공서, 공공기관이나 회사 내에서는 업무 효율성을 높이기 위해서, 혹은 기업의 중요 자산 및 보안 데이터의 외부 유출을 차단하기 위해, 직원이 업무와 무관한 일을 업무 시간에 못하도록 통

happybono.wordpress.com

 

  • WSL2와 Docker container를 포워딩하는 방법 (Docker쪽 포트는 22로 통일한다.)

참고 사이트 : https://tttsss77.tistory.com/155

 

도커(Docker) : 포트 포워딩 설정(포트 맵핑)하기

도커(Docker) : 포트 포워딩 설정(포트 맵핑)하기 본 글에서는 도커 컨테이너 내부에서 동작하는 서버로 컨테이너 외부에서 접속할 수 있도록 포트 포워딩(Port forwarding) 설정 또는 포트 맵핑(Port mapp

tttsss77.tistory.com


Docker container

Docker를 처음 실행하면 필요한 옵션들을 적용해야 하는데, 포트 포워딩에 -p 옵션을 쓰듯이 터미널을 여는 옵션이나 gpu를 할당하는 옵션 등 여러 옵션이 있다. docker의 목적이 머신러닝 학습인 만큼 리소스와 관련한 옵션은 항상 숙지하고 있어야 한다.

  • Docker를 사용하면서 알아야 할 docker run 옵션들

참고 사이트 : https://www.daleseo.com/docker-run/

 

docker run 커맨드 사용법

Engineering Blog by Dale Seo

www.daleseo.com

 

  • GPU를 할당하는 옵션 (필수)
$ docker run --gpus all

 

  • 리소스 제한을 완전히 풀어주는 옵션 (필수) (docker는 default로 리소스에 제한을 건다.)
$ docker run --ipc host

apt 서버 변경

본격적으로 container에서 작업을 하기에 앞서, 기존 상태에서 apt update를 하면 엄청 느리다. 기존 다운로드 서버를 쓰면 apt update 하는 데만 1시간 넘게 걸리니, kakao 서버로 바꿔준다.

  • 패키지 다운로드를 kakao 서버로 바꾸는 방법

참고 사이트 : https://mungiyo.tistory.com/15

 

[Linux] ubuntu apt-get 속도 향상 하는 법

우분투에서 apt-get을 통해 패키지를 설치할 때 속도가 잘 안 나오는 경향이 있는데 우분투에서 기본적으로 제공하고 있는 다운로드 서버가 그렇게 좋지 않기 때문이다. 그래서 그 다운로드 서버

mungiyo.tistory.com


SSH 설정

보통 docker image는 ssh 기능을 포함하고 있지 않다. 따라서 별도로 설치와 설정을 해줘야 한다.
그리고 외부 네트워크의 접근을 허용해 주기 위해, 방화벽 설정을 해줘야 한다.

설정 주의
 1. docker의 포트를 22로 포워딩 시켰기 때문에, container의 ssh port를 22로 맞춰준다.
 2. 방화벽은 windows10과 wsl2 포워딩에 사용한 포트들을 열어줘야 한다.

  • ssh 설정과 방화벽 설정

참고 사이트 : https://parksb.github.io/article/21.html

 

📡 WSL에서 SSH 서버 열기: 학교에서 아이패드로 코딩하기

SSH(Secure Shell)는 안전하게 원격 접속을 하기 위해 사용하는 프로토콜이다. 윈도우 데스크탑에서 SSH 서버를 열면 아이패드에서 원격으로 데스크탑 쉘에 접속을 할 수 있다. WSL(Windows Subsystem for Linu

parksb.github.io


vscode

클라이언트 컴퓨터에서 vscode로 ssh 접속을 하려면 기존의 방법에서 port 설정을 추가로 해야 한다.

  • vscode ssh 접속 방법

https://hnsuk.tistory.com/48

 

[Jetson] windows10 vscode와 ssh 연결

서론 Jetson Xavier를 많이 사용하게 되면서, windows10 컴퓨터와 Jetson을 옮겨 다닐 때마다 모니터 외부입력, 키보드, 마우스 변경에 상당한 시간을 뺏기게 되었다. VNC(Virtual Network Computing)를 사용해 보.

hnsuk.tistory.com

 

  • port 설정 방법

별도의 포트 설정이 없으면 포트가 22로 자동 적용되지만, 포워딩으로 다른 포트를 설정했기 때문에 Port를 설정해 줘야 한다.

config 파일에서 Port 항목 추가하고 Host에 포트를 명시해준다. (Host에 포트를 명시하지 않으면, 22로 접속된다.)

이전 설정에서 Port와 Host를 변경


GUI 설정

wsl이나 jetson과 같은 방식으로 xlaunch가 되지 않는다.

Putty를 쓰는 방법이 있지만, 다음으로 기약하겠다.