[Tip] Windows에서 Docker 가지고 놀기
상황
-
TensorRT 사용을 위해 오래간만에 Docker 환경을 구성하기로 했다.
-
단순 기록을 위해서 포스팅하는만큼, 스크린샷을 포함한 친절한 가이드는 아니니 참고부탁드립니다.
과정
-
1. Windows 10 일 경우, Windows의 업데이트 필요.
-
확인 방법: 작업 표시줄 내 검색 > PC 정보 > Windows 버전이 21H2 이상임을 확인
-
-
2. WSL 설치 및 Ubuntu 설치
-
Windows powershell을 관리자 권한으로 실행
-
아래 명령어 순차적으로 입력
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
-
윈도우 재부팅
-
WSL2 Linux 커널 업데이트 패키지 설치 링크 .
- Windows power shell에 아래 명령어 입력
wsl --set-default-version 2
-
Microsoft store에서 Ubuntu-18.04를 설치 (일반적으로는 20.04를 사용하는 듯 하지만, 나는 이 후 과정에서 18.04로만 진행이 가능해서 이 버전을 선택)
- Ubuntu-18.04를 한 번 실행
-
-
3. Docker 설치
-
일반적으로는 Docker for desktop을 많이 사용하지만, wsl을 사용해서 설치한 Ubuntu 내에서 바로 docker를 설치하는 방법이 속도 이슈로 자주 추천되었다.
-
따라서 나도 WSL-Ubuntu 내에서 Docker를 설치하는 방법을 사용하였다.
-
나 같은 경우는 설치 중, CUDA를 update 하기 위한 과정에서 오류가 났었다. (sudo apt-get update)
- sudo cp /var/cudnn-local-repo-ubuntu1804-8.4.1.50/cudnn-local-E3EC4A60-keyring.gpg /usr/share/keyrings/cuda- archive-keyring.gpg로 해결!
-
아래 명령어 순차적으로 입력
# Uninstall old versions sudo apt-get remove docker docker-engine docker.io containerd runc # Set up the repository sudo apt-get update sudo apt-get install \ ca-certificates \ curl \ gnupg \ lsb-release curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg echo \ "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \ $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null # Install Docker Engine sudo apt-get update sudo apt-get install docker-ce docker-ce-cli containerd.io # Register a user to docker group sudo usermod -aG docker $USER # NVIDIA Container Toolkit distribution=$(. /etc/os-release;echo $ID$VERSION_ID) \ && curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add - \ && curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | sudo tee /etc/apt/sources.list.d/nvidia-docker.list # Install sudo apt-get update sudo apt-get install -y nvidia-docker2 # Restart a Docker sudo systemctl restart docker
-
-
4. WSL 내 Docker 정상 동작 확인
-
Microsoft store 내 ‘터미널’ 어플리케이션 설치 추천
-
‘터미널’ 관리자 권한으로 실행
-
아래 코드 입력 후 정상 작동 확인
sudo service docker start sudo docker version
-
추가적으로 아래 링크가 Docker를 학습하는데 유용했다.
-
-
5. Dockerfile 작성
-
Docker file로 어떤 패키지를 설치할 지 지정하기 전에, 가끔 도메인 관련 이슈로 인터넷에서 package file들을 받을 수 없을 때가 있다.
-
아래 방법을 통해서 초기화하고 진행하기를 추천한다.
-
해결방법 (원본 링크)
$ vi /etc/network/interfaces 를 열기 dns-nameservers 8.8.8.8 8.8.4.4 를 추가. esc + :wq!로 저장 후 닫기 $ vi /etc/resolv.conf 를 열고 nameserver 8.8.8.8 nameserver 8.8.4.4 를 추가 위 .conf 파일이 편집이 안된다면 아래와 같이 진행. $ rm /etc/resolv.conf ;# to remove the symlink $ vi /etc/resolv.conf ;# to create a regular file
-
-
-
6. Image 및 Container 제작
-
이미지 제작 명령어
- docker build -t pytorch-example1 .
-
컨테이너 제작 명령어
-
나 같은 경우 실제 로컬 폴더와 컨테이너 내 폴더의 동기화가 필요해서 바인드 마운트 방법을 사용했다.
-
해당 방법은 링크 를 참조하면 좋다.
-
docker run -v /mnt/c/Users/user/desktop/git/human_display_interaction:/home/user/human_display_interaction -t –gpus all -it –device /dev/bus/usb/002/002 –name pytorch-con realsense-img /bin/bash
-
-
-
7. VS code 동기화
-
터미널에서 wsl 열고, ‘code .’ 타이핑
-
Extension 설치 (Remote - Containers, Dockers, Docker explorer)
-
Ctrl+Alt+P -> Remote-WSL: New WSL Window 클릭
-
Ctrl+Alt+P -> Remote Containers: Attach to Running Container
-
sudo chown -R user /mnt로 /mnt 전체에 권한을 부여하여, visual studio code에서 모든 디렉토리에 접근 및 수정이 가능하도록 변경한다.
-
-
8. WSL 내 Webcam 설치
-
wsl 접속 후
sudo apt update && sudo apt upgrade -y && sudo apt install -y build-essential flex bison libgtk2.0-dev libelf-dev libncurses-dev autoconf libudev-dev libtool zip unzip v4l-utils libssl-dev python3-pip cmake git iputils-ping net-tools dwarves sudo mkdir /usr/src VERSION=5.15.62.1 sudo git clone -b linux-msft-wsl-${VERSION} https://github.com/microsoft/WSL2-Linux-Kernel.git ${VERSION}-microsoft-standard && cd ${VERSION}-microsoft-standard sudo cp /proc/config.gz config.gz sudo gunzip config.gz sudo mv config .config ls -al sudo make menuconfig sudo make -j$(nproc)
댓글남기기