[도커] 윈도우 폴더 공유

도커는 정말 너무 좋다.
너무 쉽게 텐서플로우를 비롯해서 파이썬까지 다룰 수 있게 해준다.

이전 도커 관련 글에서는 도커의 기본 사용법에 대해 정리했다.
도커를 쉽게 사용하기 위해서는 윈도우와 도커 간의 파일 공유가 절대적이다.
이전 글을 작성할 때는 잘 몰라서 도커로 파일을 복사하는 것에 대해서만 정리를 했었다.
그런데, 파일을 복사할 필요없이 그냥 폴더를 함께 쓰는 방법이 있었다.

이런 기능이 필요한 이유는 도커에서 그래픽 환경의 편집기를 사용할 수도 있지만,
이게 생각만 해도 피곤이 밀려올 정도로 난이도 있는 작업일 수도 있다.
그래서, 필요한 입력은 윈도우 편집기를 사용하고, 결과는 터미널에서 확인하는 구조를 만들 수 있다.

이 글은 Docker For Windows에 대해서만 동작한다.
혹시 Docker Toolbox를 사용하는 사람들은 따로 찾아보도록 하자.

도커는 당연히 실행된 상태여야 한다. 그래야 콘솔에서 명령어를 입력해서 컨테이너를 구동할 수 있을 테니까.
윈도우 하단에서 도커를 찾아 마우스 오른쪽 버튼을 눌러서 팝업 메뉴를 표시한다.
세 번째 있는 Settings... 항목을 선택한다.


Shared Drives 탭을 열어서 공유하려고 하는 드라이브를 선택한다.
체크 박스 형태로 되어 있으니까, 컴퓨터에 있는 모든 폴더에 공유할 수 있다는 것을 알 수 있다.
나는 E 드라이브를 선택했다. 오른쪽 하단에 있는 Apply 버튼을 누른다.


폴더를 공유하기 위해서는 암호가 설정되어 있어야 한다.
리눅스 계열에서는 암호가 당연하지만, 윈도우에서는 불편해서 사용하지 않는 것이 일반적이다.
암호 없이 사용하고 있다면, 사용자 이름 입력하고 확인 버튼 누르면 초기화된다.
반드시 암호가 필요하다.


컨테이너에 들어간 상태이다. 공유할 폴더로는 E 드라이브의 DockerPython을 지정했다.
home 폴더로 이동해서 폴더 내용을 보니까, DockerPython과 condauser의 2개 폴더가 표시된다.
DockerPython은 당연히 윈도우에 만들어 놓은 일반 폴더이다.

DockerPython 폴더 안에는 미리 만들어 놓은 loop.py 파일이 들어있다.
이제 윈도우에서 more.py 파일을 DockerPython 폴더에 만들었다.
터미널 창에 있는 것처럼 컨테이너에서는 아무 것도 하지 않았다. 이전 명령인 ls를 입력했다.
결과는 more.py가 귀신처럼 나타났다. 컨테이너에서는 진짜 아무 것도 안 했는데..

python3 more.py 명령으로 구동시켰더니 결과도 잘 나왔다. 굿잡.

폴더 공유 명령은 다음과 같다. 도커 이미지 이름은 xblaster/tensorflow-jupyter이다.

  docker run -v E:/DockerPython:/home/DockerPython -it xblaster/tensorflow-jupyter bash

-v 옵션으로 폴더를 지정한다.
E:/DockerPython는 윈도우 폴더, :/home/DockerPython는 컨테이너에서 접근할 폴더 경로이다.
컨테이너가 윈도우의 특정 폴더를 뒤쪽에 지정한 이름으로 마운트(mount)해 달라는 요청으로 보면 된다.

마지막에 있는 -it xblaster/tensorflow-jupyter bash 명령은 컨테이너를 구동하는 일반적인 내용이다.
공유 폴더 부분만 없애면 컨테이너를 구동하는 명령과 100% 동일하다.

작업 중에 exit로 컨테이너로부터 빠져나가게 되면, 컨테이너는 중지 상태가 된다.
다시 run 명령을 사용하면 새로운 컨테이너가 만들어지고, 이전 컨테이너와 별개가 된다.
이때는 start 명령을 통해 컨테이너를 다시 시작하고, attach 명령으로 컨테이너로 진입해야 한다.
이들 명령에는 -v 옵션으로 폴더 공유를 할 필요가 없다.
이미 공유되어 있는 컨테이너에 입장하는 거라서 공유하지 않는 것이 맞다.

[내용 추가]
새로운 사실을 알아냈다. 앞의 내용처럼 폴더를 공유할 수도 있지만, 사용자 폴더에 포함된 폴더라면 드라이브 선택과 같은 과정이 필요하지 않다. 아래 명령은 C 드라이브의 사용자 폴더(Users)에 생성된 docker라는 이름의 폴더를 공유하는 명령이다.

  docker run -v /c/Users/docker:/home/DockerPython -it xblaster/tensorflow-jupyter bash

윈도우 폴더 쓸 때 주의가 필요하다. "C:"라고 입력하면 안 되고, 반드시 "/c/"라고 입력해야 공유할 수 있다. 대소문자 또한 정확하게 입력해야 한다.

아래 그림은 사용자 폴더에 만들어진 docker 폴더를 보여준다. 경로창에는 로컬디스크와 사용자로 표시되지만, 실제 경로는 C:/Users가 된다. 경로창을 선택한 후에 복사하면 쉽게 처리할 수 있다.