Codong's Development Diary RSS 태그 관리 글쓰기 방명록
docker (1)
2021-07-17 16:12:35

개요


부스트 코스에서 무료 파이토치 강의가 있길래 한 번 들어보자 싶어서 강의를 켰다. 초반 환경 세팅부분에서 docker를 이용해 강의노트와 같은 환경을 편하게 맞출 수 있었다. 굳이 Docker 안 써도 환경 맞춰서 사용해도 되지만, 편한게 최고지 않는가. 그리고 어차피 docker와의 만남은 불가피하지 않나 라는 생각이 들어서 바로 설치했다.

결과적으로 window 10 환경에서 docker 이미지 받아서 컨테이너 실행시키는 것까지의 과정 중 일어났던 에러와 해결법을 남겨본다.



설치 과정


1️⃣ Docker Desktop 설치

제일 먼저 기분좋게😊 docker 홈페이지 가서 window 10 전용 docker desktop 설치 파일을 다운 받을 수 있다.
다운로드 홈페이지 주소 : https://www.docker.com/get-started

그리고 설치를 끝내고... 실행이 되었는데...? 나의 첫번째 에러와의 만남이 그렇게 시작되었다.

📌 문제점

docker desktop이 실행되면서 다음과 같이 wsl 2 installation is incomplete. 라는 메세지를 뱉었다.

첫 줄만 봤을 땐, WSL 2 이라는 것이 설치가 되지 않아서 일어난 문제인 것 같았다.
바로 구글링했다. 그래도 비교적 이것은 쉽게 해결되었다. 구글링 결과 microsoft 문서를 따라하니 해결 되었다.

👍 해결법

  1. 윈도우 버튼을 눌러서 Power Shell 을 검색 후, 오른쪽 클릭을 눌러서 관리자 권한으로 실행시킨다.
  2. 아래 코드를 순서대로 따라 친다. (문서에 있는 것 그대로 가져옴)
# 첫번째 코드 - Linux용 Windows 하위 시스템 사용 설정
PS C:\WINDOWS\system32> dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart

# 두번째 코드 - Virtual Machine 기능 사용 설정
PS C:\WINDOWS\system32> dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
  1. 설정이 끝나면, Linux 커널 업데이트 패키지를 다운 받는다. 다운로드 링크는 문서에도 있지만, 적어놓겠다.
  2. 설치가 완료되면, 제일 처음 봤던 오류 메시지에서 restart 버튼을 눌러주면 끝!

참고 문서 : https://docs.microsoft.com/ko-kr/windows/wsl/install-win10

이로써 이부분은 간단하게 설치만으로 해결이 되었다. 이제 도커 이미지를 불러와서 컨테이너를 실행시켜보자!



2️⃣ Docker image 다운로드 및 컨테이너 생성/실행

설치 후에 이제 부스트 코스에 tutorial을 보면서 따라했다. 여기서부터는 git-bash를 사용했다.


1. 도커 이미지 다운로드(로그인 필요)

# 이미지 가져오기
$ docker pull deeplearningzerotoall/pytorch

# 이미지 확인하기
$ docker images

📌 문제점

git-bash를 사용하면서 1단계를 진행하면 아래와 같은 메시지가 나타날 것이다. (안 뜨면 pass..)

the input device is not a TTY.  If you are using mintty, try prefixing the command with 'winpty'

👍 해결법

메시지를 읽어보면 단순히 command 앞에 'winpty'를 붙여주면 해결된다.
매번 winpty를 붙이기 귀찮아서 더 깊이 들어가 해결하고 싶은 분들은 이 곳을 참고..


2. 도커 컨테이너 생성 및 실행하기

$ docker run -i -t --name pt -p 8888:8888 -p 8097:8097 deeplearningzerotoall/pytorch /bin/bash
  • 여기서 run은 create와 start를 함께 실행하는 명령어 입니다. create가 되므로 한 번만 사용하시면 됩니다.
  • -i 와 -t는 터미널 입력을 위한 옵션이라고 하고 저 둘을 합쳐서 -it 명령어로 사용하기도 한다.
    터미널을 이용하기에 명령어 뒷부분에 사용할 터미널 경로(/bin/bash)를 지정해준다.
  • -p 명령어는 호스트와 컨테이너의 포트를 연결하는 기능이라고 한다.
  • --name 은 컨테이너 이름을 지정한 것이다.
  • port 뒤쪽에 deeplearningzerotoall/pytorch는 이미지 이름이다.
  • 위 내용은 다른 블로그를 통해 알게 되었다.

📌 문제점

2단계를 진행하면 다음과 같은 에러가 발생한다.

docker: Error response from daemon: OCI runtime create failed: container_linux.go:380: starting container process caused: exec: "C:/Program Files/Git/usr/bin/bash.exe": stat C:/Program Files/Git/usr/bin/bash.exe: no such file or directory:unknown.

대충봐서는 bash 실행 경로를 못찾는 것 같다. 나는 linux와 윈도우의 파일 구분자가 달라서 그런가 싶어서 조금씩 바꿔가면서 이것저것 시도해봤다.
하지만 되지 않는 것이다. 그러다 결국 구글링을 했는데, 나와 동일한 상황인 것이 잘 안 나오는 것이었다..
사실 내가 못찾은 것일 확률이 크다 생각한다. 그리고 한국어로 된 자료을을 위주로 봤기에 더 한정적이 었을 것이다.

결국 영어라도 그냥 docker github 의 issues에 번역기 돌리자는 마인드로 검색을 했다. 그 결과 유사한 경우를 찾아냈다..!

👍 해결법

해결한 부분만 보자면 double forward-slash 를 이용해 해결할 수 있다고 했다.
(더 자세히 알고 싶다면 링크에 들어가서 확인부탁드립니다..!)
https://github.com/moby/moby/issues/13741

For example, in bash on windows
$ docker run --privileged --rm -ti -v 'pwd':/go/src/github.com/docker/docker dry-run-test /bin/bash
Will fail.
$ docker run --privileged --rm -ti -v /'pwd':/go/src/github.com/docker/docker dry-run-test //bin/bash
Will work.

실제로 해본결과 잘 작동했다!😁 이렇게 쉽게 해결될 것을 몇시간을 잡고 있었구나,, 아무튼 되서 다행이다!



마무리


실제로 그렇게 오래 걸일 일들이 아니었는데, 시간이 오래 걸린 이유를 생각해보자면 영어가 어렵다는 생각에 너무 한국 자료에 의존했다는 점이 아닐까 싶다. 그러다보니 찾는 범위가 작을 수 밖에 없다. 그리고 docker와 같이 많은 사람들이 이용하는 open source의 경우 당연히 유사한 문제를 겪는 사람들이 git-hub에 issue를 많이 올렸을 것이고 해결이 됐을 확률이 높다.

영어로 적혀있다고 너무 겁먹지 말자. 영어를 잘한다 해도, 이런 전문 용어들을 모르는 이상 이해하기 힘들 것이다. 결국 영어자체에 대한 거부감을 가지는 내 마음이 문제일 가능성이 있다는 것이다. 모르는 것은 찾아가면서 하면되지 않겠는가. 영어 문서들을 읽는 연습을 지금부터라도 길러둬야 내가 크게 성장할 수 있지 않을까 싶다.



reference