윈도우 서브 리눅스에서 도커화 된 앱 개발하기

watch_later 일요일, 12월 17, 2017

서론

윈도우 10에서 개발을 하려고 하다가 툴이 지원을 하지 않아서 듀얼 설치된 우분투로 들어간 경험이 있다.

그리고 어제, 그 우분투 설치 된 저장소 용량이 없어서 다시 파티션 조정을 하고 재설치를 하려고 용을 쓰다가 지쳐버렸다.

리눅스(혹은 해킨토시)를 듀얼구성하는 이유는 다음과 같은데,

  • 윈도우 고장나면 복구용으로
  • 개발환경이 더 잘 지원되어서

윈도우 8 부터인가? 내부 설계가 변경되어서 굉장히 안정성이 높아졌고, 이제는 wsl 이 지원 되니. 구지 우분투로 부팅을 해서 작업을 해야만 할 필요가 줄었다.

그래서, 해오던 것 처럼 삽질을 하려다가 다음과 같은 생각이 떠올랐다.

wsl 을 이용해서 좀 더 쉽게 윈도우즈에서 개발할 수 있을까?

wsl : 리눅스를 위한 윈도우 하위 시스템으로 bash 를 윈도우에서 사용할 수 있게 이식한 기능이다.

wsl 이용해 실행하기

wsl 바로가기 만들기

wsl 설치 하고 윈도우 바로가기를 다음처럼 만들어 준다.

위치 : C:\Users\사용자이름\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\System Tools

enter image description here

특정 명령을 내리는 바로가기는 다음 처럼 만든다.

enter image description here

추가 : 실제로는 wsl.exe 를 먼저 호출하고, chsh 로 설정된 bash 쉘을 호출하는 것.

그럼 이제 윈도우키를 눌러 bash 검색하면 바로 나온다.

enter image description here

zsh 설치(옵션)

설치후 다음처럼 기본 쉘을변경.

bash 에서 기본 쉘 변경

chsh -s $(which zsh)

기본 쉘을 변경했으니 wsl 을 호출하면 wsl 이 그 설정에 따라 zsh 쉘을 호출한다.

바로가기를 다음처럼 생성

enter image description here

도커 사용하기

윈도우즈 pro 이상 만 가능한 이야기다

home 버전이라면 docker-toolbox 를 사용하도록 하자. 안타깝지만 윈도우에서 hyper-v 기능을 사용하지 못하게 막아놓았다.

네이티브로 도커 설치

Home 버전은 클라이언트 설치는 가능하지만 tcp 로

도커 포 윈도우즈가 아닌 wsl 에 네이티브 도커를 설치하자.

패키지 최신 업데이트.

$ sudo apt-get update

https 를 통해 저장소를 접근할 준비.

$ sudo apt-get install \
 apt-transport-https \
 ca-certificates \
 curl \
 software-properties-common

도커 GPG 키 받기;

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add 

한 줄로

apt-get install curl && curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

키 확인

$ sudo apt-key fingerprint 0EBFCD88

저장소 사용하게 하기.

sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"

새 저장소 추가됐으니 인덱스 업뎃.

sudo apt-get update

도커 설치

sudo apt-get install docker-ce

nvidia-docker 설치(옵션)

nvidia gpu 를 사용해서 docker 를 돌리도록 해주는 패키지.

보통 인공지능 tensoflow 도커를 사용할 때 좀 더 연산에 많은 도움을 받고자 사용한다.

데탑은 amd 라 안 되는데 노트북은 nvidia라 된다.

링크 1
링크 2

도커 연결

도커 클라이언트 버전 확인은 되는데.

$ docker -v
Docker version 17.09.1-ce, build 19e2cf6

도커 프로세스는 접근할 수가 없다.

$ docker ps
Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?

왜냐면.. 도커 데몬이 돌아가는 호스트는 윈도우인데 도커는 기본적으로 유닉스 소켓통해 유닉스 시스템 프로세스에 접근하려고 하기 때문이다.

먼저, 도커 포 윈도우즈에서.. 현재 윈도우에서 돌아가는 도커 데몬 프로세스를 tcp 주소로 노출을 시켜줘야 한다.

일단 설치하고 다음처럼 데몬 주소를 expose 해준다.

enter image description here

기능들이 꽤 많네.

이제는, tcp 포트를 통해서 윈도우즈 도커 프로세스에 접근을 해줘야 한다.

$ docker -H localhost:2375 images

export 를 통해서 unix 소켓으로 향한 연결을 tcp 연결로 바꿔주면, 도커 명령어만 쳐도 작동을 한다.

$ export DOCKER_HOST=localhost:2375
$ docker info

근데 매번 export 할 수 없으니 bash 쉘 시작시 자동 시작되는 스크립트에 해당 내용을 넣어주도록 하자.

우분투는 bash_profile 이지만, wsl 에서는 ~/.bashrc 고.. wls 밖인 윈도우즈 에서는 C:\Users\<username>\AppData\Local\Lxss\rootfs\home\username 이다.

sudo nano ~/.bashrc

그리고 가장 마지막 줄에 다음을 넣어준다.

echoexport DOCKER_HOST=localhost:2375

bash 를 재시작 도커가 잘 동작하게 된다.

도커 컴포즈 설치

먼저 윈도우에 있는 도커 포 윈도우즈로 윈도우즈의 특정 폴더를 도커에서 쓸 수 있도록 한다.

enter image description here

추가적인 것은 이 링크를 확인해서 진행 바란다.

노트북 윈도우가 홈버전 인 것을 지금 알았기 때문에 작성을 중지한다.



sentiment_satisfied Emoticon