WSL2 설치 및 사용 방법
WSL2 초기 셋업부터 도커로 서버 실행까지

들어가며: WSL2(Windows Subsystem for Linux 2) 정식 릴리스

지난 5월 윈도우 10Windows 10의 대규모 업데이트가 있었습니다. 이번 윈도우 10 2020 5월 업데이트Windows 10 May 2020 Update는 2019년 11월 이후 첫 대규모 업데이트로 사용자를 위한 다양한 기능이 추가되었을 뿐만 아니라, 마이크로소프트Microsoft에서 미리 예고한 대로 WSL2Windows Subsystem for Linux 2를 포함하고 있습니다.

WSL은 윈도우에서 경량 가상화 기술을 사용해 리눅스를 구동할 수 있도록 도와주는 기능입니다. WSL2는 WSL을 대폭 개선해 훨씬 더 뛰어난 성능과 통합된 환경을 이용할 수 있습니다. 또한 윈도우 10 홈에서도 사용할 수 있어서, 홈 에디션에서도 도커Docker를 사용할 수 있게 되었습니다. 윈도우에서 리눅스 개발이나 도커와 같은 도구를 사용하고 싶었던 사람들에게는 설레는 소식이 아닐 수 없습니다. 윈도우에서 굳이 코리눅스coLinux로 리눅스 공부하던 게 새록새록 떠오르네요. WSL2 릴리스와 함께 이제는 진짜 리눅스와 윈도우의 경계가 허물어지는 시대가 올 것으로 보입니다.

이 글에서는 WSL2를 설치하고 기본적인 사용방법을 소개합니다. WSL2를 사용하려면 물론 윈도우 10 2020년 5월 업데이트를 먼저 진행해야합니다. 윈도우 10 2020년 5월 업데이트에 대해서는 다음 글을 참고해주세요. 안타깝지만 업데이트를 하더라도 모든 환경에서 WSL2을 사용할 수 있는 건 아니라고 하니 참고해주세요.

업데이트를 진행했으면, 본격적으로 WSL2를 셋업해보겠습니다.

윈도우 터미널(Windows Terminal) 설치하기

마이크로소프트Microsoft의 리눅스 지원 및 개발 도구 개선 속도가 무섭습니다. 2019년만 해도 여전히 도스 환경을 떠올리게 하던 cmd.exe(명령프롬프트)에서 벗어나지 못 했던 윈도우Windows의 터미널 작업 환경이 윈도우 터미널Windows Terminal 등장과 함께 빠르게 개선되고 있습니다. 이번 WSL2의 공식 릴리스와 보조를 맞추려는 듯 지난 5월 19일 마이크로소프트의 연례 컨퍼런스 빌드 2020Build 20202에서는 윈도우 터미널을 정식 릴리스 했습니다.

먼저 윈도우 터미널 1.0부터 설치하고 진행하겠습니다. 윈도우 터미널은 마이크로소프트 스토어Microsoft Store 앱에서 바로 다운로드 받아 사용할 수 있습니다. Terminal을 검색하고, 검색 결과에서 Windows Terminal을 선택합니다.

마이크로소프트 스토어에서 윈도우 터미널을 검색합니다.

설치를 진행합니다. 아래 화면에서는 이미 설치가 되어있어있어 실행 버튼이 보입니다.

마이크로소프트 스토에에서 윈도우 터미널을 설치합니다.

설치를 하고 나면 작업표시줄에서 terminal을 검색해 Windows Terminal을 실행합니다. 단, WSL2 셋업 작업을 하려면 그냥 실행하면 안 되고 관리자 권한으로 실행해야 합니다.

작업표시줄에서 terminal을 검색해 윈도우 터미널을 관리자 권한으로 실행합니다.

WSL2 활성화를 위한 DISM 명령어 실행

윈도우 터미널처럼, WSL에서 사용할 리눅스 배포판도 마이크로소프트 스토어에서 손쉽게 다운로드 할 수 있습니다. 하지만 WSL2를 활성화하기 위해서는 그 이전에 몇 가지 작업을 진행해야합니다. 이에 대한 자세한 내용은 아래 공식 문서를 참고해주시기 바랍니다.

먼저 윈도우 터미널(PowerShell)에서 다음 두 개의 명령어를 차례대로 실행해줍니다.

> dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
> dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart

DISMDeployment Image Servicing and Management은 윈도우 이미지Windows images와 관련된 조작을 위한 커맨드라인 명령어로, 이에 대한 자세한 정보는 공식 문서의 정보를 참고해주세요.

DISM 명령어로 WSL2 사용 준비 작업을 진행합니다

WSL을 관리하기 위해서 wsl 명령어를 사용해야하는데, 아직 동작하지 않습니다. 먼저 재부팅을 해줍니다.

마이크로소프트 스토어에서 WSL 용 리눅스 배포판 설치

재부팅을 하고 wsl을 실행하면 먼저 아래 주소로 이동해서 WSL을 설치하라는 안내 메시지가 나옵니다.

WSL을 사용하려면 리눅스 배포판을 설치해야합니다

이 페이지를 브라우저에서 열면 WSL에서 사용할 수 있는 리눅스 배포판을 다운로드 받을 수 있는 마이크로소프트 스토어 페이지로 이동합니다.

리눅스 배포판을 다운로드 받을 수 있는 마이크로소프트 스토어 페이지

여기서는 우분투Ubuntu 배포판을 설치해보겠습니다. 우분투 배포판을 선택하고, 설치를 진행합니다.

우분투(Ubuntu) 배포판을 설치합니다

설치가 진행되는 걸 기다리고 있으면 곧 우분투 터미널 하나가 실행됩니다. 여기서 리눅스 사용자 이름과 패스워드를 지정해줍니다.*

* 설치를 몇 번 진행해보니 가끔 아무리 기다려도 터미널에 사용자 등록 화면이 뜨지 않는 경우가 있었습니다. 보통 5~10분이면 완료되는 듯 하니 너무 오래 응답이 없다면 재설치하는 것을 추천합니다.

우분투 배포판의 사용자 정보를 등록합니다

참고로 WSL에서는 우분투 이외에도 다양한 배포판을 공식적으로 지원하고 있습니다.

다시 wsl 명령어를 -l 옵션을 붙여 실행해보면 우분투 배포판이 설치된 것을 확인할 수 있습니다.

wsl 명령어가 정상 동작하는 것을 확인할 수 있습니다.

이제 방금 설치한 Ubuntu 리눅스 배포판이 보이는 것을 확인할 수 있습니다.

WSL2 리눅스 커널 업데이트 및 배포판에서 2 버전 활성화하기

WSL2를 활성화하기 전에 WSL2 리눅스 커널 업데이트를 진행해야합니다. 다음 페이지에서 download the latest WSL2 Linux kernel를 링크를 클릭해 설치를 진행합니다.

다음으로 앞서 설치한 배포판에 WSL2가 적용되었는지 꼭 확인해야합니다. 현재 윈도우 10에서는 WSL(1)과 WSL2를 모두 wsl 명령어로 지원하고 있습니다. wsl -l -v 명령어를 실행해서 현재 적용된 WSL 버전을 확인해봅니다.

> wsl -l -v
  Name           State         Version
* Ubuntu         Running       1

1이라고 나오면 다음 명령어로 2로 변경할 수 있습니다.

> wsl --set-version Ubuntu 2

가능하면 새로 설치하는 모든 배포판에 WSL2가 적용되도록 기본값을 변경해주시기 바랍니다.

> wsl --set-default-version 2

자동으로 2 버전이 적용될 것 같지만, 혹시 모르니 강제로 한 번 종료해줍니다. 자동으로 재실행됩니다.

> wsl -t Ubuntu

다시 한 번 WSL2가 적용되었는지 확인해봅니다.

> wsl -l -v
  Name           State         Version
* Ubuntu         Running       2

WSL를 사용하면 wsl 명령어를 은근히 많이 사용하게 됩니다. 이 명령어에 대한 자세한 사용법은 --help를 붙여서 실행해보거나, 마이크로소프트의 공식 문서를 참고해주세요.

WSL2에서 우분투(Ubuntu) 시작하기

WSL2를 시작하기까지 생각보다 해야할 일이 많네요. 자 이제 전부 끝났습니다. 윈도우 터미널에서 새 탭 오른쪽의 아래쪽 방향 아이콘을 클릭하고, Ubuntu를 선택해주면 앞서 셋업한 WSL2 우분투 배포판 셸이 실행됩니다.

WSL2 우분투로 새로운 탭을 열 수 있습니다

리눅스 셸이 열립니다. 이제 윈도우에서 리눅스를 사용하기만 하면됩니다!

WSL2에서 도커 데스크탑(Docker Desktop for Windows)으로 서버 실행하기

여기서는 WSL2을 활용하는 간단한 예제로, 도커 데스크탑Docker Desktop for Windows을 설치하고 Nginx 서버를 하나 실행해보겠습니다.

노트
도커(Docker)는?

도커Docker는 컨테이너 관리 도구입니다. 리눅스 커널의 기능을 활용해 프로세스를 격리된 환경에서 실행하는 걸 컨테이너라고 부릅니다. 도커는 애플리케이션 배포부터 개발 환경 구성에 사용될 뿐만 아니라, 미리 만들어진 이미지를 활용하기도 좋아서 개발자가 아닌 분들도 사용하곤 합니다. WSL이 등장할 때도 도커 지원 여부가 큰 화두 중 하나였는데, WSL1에서도 도커를 실행하는 게 가능했다고 하지만, 성능 및 호환성 문제로 활용하기가 쉽지 않았습니다.

도커의 기초에 대해서는 다음 글을 참고해주세요.

먼저 도커 데스크탑 페이지로 이동해 설치를 진행합니다.

도커 데스크탑을 설치하고 설정 페이지의 General 탭에서 Use the WSL2 based engine 옵션을 체크해줍니다.

Use the WSL2 based engine 옵션을 체크해줍니다

Resource -> WSL Integration 페이지로 이동해서 설정을 확인합니다. 자신이 사용중인 WSL2 배포판이 맞는지 확인합니다.

Resource -> WSL Integration에서 활성화된 리눅스 배포판을 확인합니다

도커 데스크탑을 설치하고 정상적으로 설정되어있다면, 바로 WSL2 우분투 터미널에서 도커 명령어를 사용할 수 있습니다.

WSL2 우분투에서 docker ps를 실행한 결과

docker ps 명령어로 도커가 실행중인 것을 확인할 수 있습니다. ip addr show eth0 명령어로 WSL2 우분투의 IP 주소를 확인합니다.

$ ip addr show eth0
5: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 00:15:5d:c3:81:e8 brd ff:ff:ff:ff:ff:ff
    inet 172.19.193.112/20 brd 172.22.239.255 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::215:5dff:fec3:81e8/64 scope link
       valid_lft forever preferred_lft forever

여기서는 172.19.193.112가 나옵니다. WSL2의 네트워크는 Hyper-V 가상화 기반으로 동작하고 있어서 부득이하게 이 IP는 재부팅 시 변경되어 버리니 주의가 필요합니다.

노트
ip vs. ifconfig

miyarisan 님의 도움을 받아 ip를 확인할 때 ifconfig 대신 ip를 사용했습니다. 현재 리눅스의 네트워크 관리는 iproute2 패키지의 ip와 ss 명령어로 거의 대부분 수행 가능하다고 합니다. 오래된 도구보다는 ip를 사용하는 걸 추천드립니다. 자세한 내용은 다음 글을 참고해주세요.

이제 도커로 Nginx 서버를 실행해보겠습니다.

$ docker run -it -p 80:80 nginx:latest
도커로 Nginx 서버를 실행합니다

도커로 Nginx 이미지로 컨테이너를 실행합니다. 이미지를 풀 받고 서버가 실행되면 방화병에서 포트를 허용할 것인지 물어봅니다. 액세스 허용을 클릭하면 이제 윈도우에서 이 서버로 접속하는 것이 가능합니다. 브라우저를 열어 앞서 확인해둔 IP로 접속해봅니다.

Nginx 서버에 정상적으로 접속되는 것을 확인할 수 있습니다

Welcome to nginx! 메시지로 도커로 실행한 서버에 정상 접속한 것을 확인할 수 있습니다. 도커 컨테이너 쪽에도 접속한 기록이 나타납니다. 고유 IP로 접근 가능하다는 것을 확인하기 위해서 IP를 사용했습니다만, 호스트 머신에서는 127.0.0.1로 접속해도 같은 서버에 접속이 됩니다.

호스트 머신에서 접근하는 것은 쉽습니다만, 이 서버를 로컬 네트워크 환경에 노출 시키는 건 생각보다 어려워보입니다. 다음 이슈를 참고해주세요.

마치며

여기까지 WSL2를 설치하고, 기본적인 사용법에 대해서 알아보았습니다. 윈도우에서 리눅스를 이렇게까지 자연스럽게 사용할 수 있게 되다니 격세지감이 느껴지네요. WSL2는 이제 막 시작일 뿐입니다. 마이크로소프트에서는 이번 빌드 2020에서 새로운 로드맵을 발표해 사람들을 놀라게 했습니다. 조만간 윈도우 10에서 WSL2로 리눅스의 GUI를 지원할 뿐만 아니라, GPU 처리도 지원할 예정이라고 합니다.

WSL2는 아직 안정화된 단계는 아닙니다. 버그가 있거나 기능 개선 상황이 궁금하다면 WSL 저장소의 이슈에 등록하거나 검색해보는 것을 추천합니다.

아마존 웹 서비스 IAM 사용자의 액세스 키 발급 및 관리

🗒 기사, 2018-06-09 - 아마존 웹 서비스 계정은 하나의 루트 계정과 다수의 IAM 사용자로 구성됩니다. 각 사용자는 자신의 권한으로 외부에서 API를 호출할 수 있는 토큰을 발급받을 수 있습니다. 이 액세스 키를 발급하고 관리하는 법을 소개합니다.

왜 굳이 도커(컨테이너)를 써야 하나요? - 컨테이너를 사용해야 하는 이유

🗒 기사, 2019-01-14 - 컨테이너는 서버 애플리케이션을 배포하고 서버를 운영하는 표준적인 기술이 되어가고 있습니다. 하지만 처음 사용해본다면 그 장점이 잘 와닿지 않을 수도 있습니다. 왜 굳이 도커 컨테이너를 사용해야할까요? 이 글에서는 눈송이 서버를 넘어 컨테이너가 애플리케이션 배포와 운영에 있어 어떤 장점이 있는지 알아봅니다.

44bits 첫 번째 밋업 소식: AWS re:Invent 2019 회고

🗒 기사, 2019-12-27 - 지난 12월 18일 44bits의 첫 번째 밋업을 열었습니다. 첫 번째 모임의 주제는 re:Invent 2019 회고였습니다. 리인벤트 참가 후기(raccoony), 11월 이후 AWS 주요 업데이트 정리(nacyot), re:Invent 2019 머신러닝 발표 정리(유경윤) 발표가 진행되었습니다.