서론
윈도우 10에서 개발을 하려고 하다가 툴이 지원을 하지 않아서 듀얼 설치된 우분투로 들어간 경험이 있다.
그리고 어제, 그 우분투 설치 된 저장소 용량이 없어서 다시 파티션 조정을 하고 재설치를 하려고 용을 쓰다가 지쳐버렸다.
리눅스(혹은 해킨토시)를 듀얼구성하는 이유는 다음과 같은데,
- 윈도우 고장나면 복구용으로
- 개발환경이 더 잘 지원되어서
윈도우 8 부터인가? 내부 설계가 변경되어서 굉장히 안정성이 높아졌고, 이제는 wsl 이 지원 되니. 구지 우분투로 부팅을 해서 작업을 해야만 할 필요가 줄었다.
그래서, 해오던 것 처럼 삽질을 하려다가 다음과 같은 생각이 떠올랐다.
wsl 을 이용해서 좀 더 쉽게 윈도우즈에서 개발할 수 있을까?
wsl : 리눅스를 위한 윈도우 하위 시스템으로 bash 를 윈도우에서 사용할 수 있게 이식한 기능이다.
wsl 이용해 쉘 명령어 실행하기
wsl 바로가기 만들기(옵션)
wsl 설치 하고 윈도우 바로가기를 다음처럼 만들어 준다.
위치 : C:\Users\사용자이름\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\System Tools
추가 : 실제로는 wsl.exe 를 먼저 호출하고, chsh 로 설정된 bash 쉘을 호출하는 것.
그럼 이제 윈도우키를 눌러 bash 검색하면 바로 나온다.
zsh 설치(옵션)
bash 에서 기본 쉘 변경
chsh -s $(which zsh)
기본 쉘을 변경했으니 wsl 을 호출하면 wsl 이 그 설정에 따라 zsh 쉘을 호출한다.
바로가기를 다음처럼 생성
윈도우 개발 시 bash 커맨드 사용
특정 명령을 내리는 바로가기는 다음 처럼 만든다.
도커를 wsl 에서 사용하기
네이티브로 도커 설치
도커 포 윈도우즈가 아닌 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(GPU 사용) 도커 설치(옵션)
nvidia gpu 를 사용해서 docker 를 돌리도록 해주는 패키지.
보통 인공지능 tensoflow 도커를 사용할 때 좀 더 연산에 많은 도움을 받고자 사용한다.
라데온(GPU 사용) 도커도 있다(옵션)
https://github.com/RadeonOpenCompute/ROCm-docker
호스트 데몬과 wsl 도커 클라이언트 연결
도커 클라이언트 버전 확인은 되는데.
$ 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 해준다.
기능들이 꽤 많네.
이제는, 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
이다.
절대로! 윈도우에서 AppData 내부로 들어가 직접 수정하면 안 됩니다! 그러면 다시 재설치해야함!! 쉘에서 쉘 경로로 접근하고 수정!!
sudo nano ~/.bashrc
그리고 가장 마지막 줄에 다음을 넣어준다.
export DOCKER_HOST=localhost:2375
echo “export DOCKER_HOST=localhost:2375”
bash 를 재시작 도커가 잘 동작하게 된다.
볼륨 마운트 포인트 제대로 작동하게 하려면
윈도우는 볼륨 경로로 /c/.../.../
를 기대하는데 도커는 /mnt/c/.../...
를 기대한다.
먼저 도커 포 윈도우에서 다음처럼 공유 설정을 걸어준다.
먼저 마운트 될 폴더를 생성한 후에..
sudo /
sudo mkdir c
.bashrc
를 또 열고 아래 내용을 추가해준다.
# for sure, docker's volume mounted works ok.
sudo mount --bind /mnt/c /c
echo "sudo mount --bind /mnt/c /c"
재부팅을 하면 루트 암호를 넣고, 이후에는 볼륨 경로 설정할 때 /c/경로/
식으로 넣을 수 있다.
mount 시 sudo 암호 넣지 않게 하기
sudo 관련 설정을 열고
$sudo visudo
마지막에 mount 명령은 루트 암호 없이 실행되게 설정해준다.
# use mount command withour sudo
nick ALL=(root) NOPASSWD: /bin/mount
추가
pro 가 아닌 home 버전이라도 wls 에서 위처럼 할 수 있다.
단, 똑같이가 아니라 hyper-v 가 아닌 virtualbox vm 환경에서 말이다.
하고 나니까. cmd 에서 도커 쓰면 될 걸 구지 이렇게 까지 해야했나? 싶다.
… 이게 뭐냐면.. 누군가가 이렇게 삽질 할 것을 줄여주려고 품을 들였는데 나는 그걸 걷어차 버린 꼴 같다.