Window Docker Desktop이 개인 사용자에게는 무료이지만 기업에서는 유료화가 되었다.
(정확한 기준은 more than 250 employees or more than $10 million in annual revenue, 직원 250명 이상 또는 연간 매출 천만 달러 이상인 경우 유료)
이로 인해 회사 PC에서 windows docker desktop을 사용하던 경우 다른 대안을 찾아야 하는 상황이 되었다.
docker의 경우 docker desktop이 유료로 전환되었지만 wsl2를 이용하여 ubuntu에서 docker ce를 사용하는 것은 무료이다.
그리고 Rancher Desktop을 사용하면 마찬가지로 wsl2로 손쉽게 window에서도 kubernetnes를 사용할 수 있게 된다.
WSL2 사용하기
https://docs.microsoft.com/ko-kr/windows/wsl/install-manual
windows 10 업데이트
wsl2를 사용하기 위해선 windows 10 버전이 다음 이상이어야 한다.
- x64 시스템의 경우: 버전 1903 이상, 빌드 18362 이상
- ARM64 시스템의 경우: 버전 2004 이상, 빌드 19041 이상
windows 10을 업데이트해야 하며 웹페이지를 통한 업데이트는 이곳에서 가능하다.
windows 기능 활성화
업데이트를 하였으면 windows 기능이 활성화되었는지 확인해야 한다.
설정 -> 앱 및 기능 -> 프로그램 및 기능 -> windows 기능 켜기/끄기 메뉴에서 Linux용 Windows 하위 시스템, 가상 머신 플랫폼을 활성화하고 재부팅한다.
관리자 권한의 command 창에서 다음 명령을 입력해도 동일하다.
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
Linux 커널 업데이트 패키지 다운로드
최신 패키지를 다운로드하여 설치한다.
내 경우 설치 시 계속 결과에 아래 메시지가 표시되면서 설치가 실패했다.
windows subsystem for linux update setup wizard ended prematurely because of an error
이 경우 기존 설치를 삭제하고 재설치를 하면 되는데 설치하려던 msi를 우클릭하여 제거 메뉴를 선택하여 삭제 후 설치를 진행하면 된다.
WSL2 기본 버전 설정
이렇게 설치를 진행하고 나면 wsl2를 기본 버전으로 설정을 한다.
wsl --set-default-version 2
Linux 배포 설치
Microsoft Store에서 Ubuntu를 검색하여 설치한다.
내 경우 ubuntu를 선택하였지만 다른 선택지도 있다.
- Ubuntu 20.04
- Ubuntu 20.04 ARM
- Ubuntu 18.04
- Ubuntu 18.04 ARM
- Ubuntu 16.04
- Debian GNU/Linux
- Kali Linux
- SUSE Linux Enterprise Server 12
- SUSE Linux Enterprise Server 15 SP2
- openSUSE Leap 15.2
- Fedora Remix for WSL
설치를 하고 실행하면 최초 실행하면서 유저명/비밀번호를 설정하게 된다.
이렇게 설치가 되고 실행을 하고 나면 command 창에서 아래처럼 입력하면 설치된 배포판을 확인할 수 있다.
wsl -l -v
wsl만 입력하면 ubuntu로 들어가게 된다.
ubuntu에 docker 설치하기
ubuntu에서 docker를 설치하는 과정은 docker의 ubuntu 설치 가이드를 그대로 진행하면 된다.
https://docs.docker.com/engine/install/ubuntu/
이 글을 작성한 시점의 가이드 문서의 설치 내용은 다음과 같다.
sudo apt-get update
sudo apt-get install \
ca-certificates \
curl \
gnupg \
lsb-release
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io
설치 후 docker를 실행한다.
sudo service docker start
docker가 정상적으로 동작하는 것을 확인할 수 있다.
Rancher Desktop 설치하기
rancher는 kubernetes cluster를 배포/관리하기 위한 소프트웨어이다.
rancher desktop은 이를 desktop에서 사용하기 위한 도구인데 이걸 사용하면 별도의 kubernetes 설치 없이 바로 사용할 수 있어 편리하다.
다운로드해서 설치하고 실행하면 바로 windows command 창에서 kubectl 명령을 사용할 수 있다.
rancher desktop을 설치한 후 wsl -l -v를 확인하면 다음과 같다.
default 배포판이 ubuntu로 설정되어 있어 rancher로 들어가고 싶은 경우 다음과 같이 사용하면 된다.
wsl -d rancher-desktop
기타 사항
wsl ubuntu 배포판에 kubectl 사용 설정
kubectl 명령은 window 쪽에도 설치되기 때문에 바로 사용할 수 있다.
ubuntu로 들어가서 확인해보면 docker는 실행돼도 kubectl은 실행되지 않는다.
rancher desktop의 WSL Integration 메뉴에서 활성화해주면 ubunut에서 kubectl 명령을 사용할 수 있게 된다.
여기서 조금 이상한 게 wsl rancker-desktop 배포판 내에서 kubectl 명령어 호출은 에러가 발생했다.
E:\dev\kubernetes>wsl -d rancher-desktop
/mnt/e/dev/kubernetes # which kubectl
/mnt/c/Users/bluesky/AppData/Local/Programs/Rancher Desktop/resources/resources/linux/bin/kubectl
/mnt/e/dev/kubernetes # kubectl version
I1201 22:21:01.890358 24582 versioner.go:58] invalid configuration: no configuration has been provided
Client Version: version.Info{Major:"1", Minor:"22", GitVersion:"v1.22.4", GitCommit:"b695d79d4f967c403a96986f1750a35eb75e75f1", GitTreeState:"clean", BuildDate:"2021-11-17T15:48:33Z", GoVersion:"go1.16.10", Compiler:"gc", Platform:"linux/amd64"}
Error from server (NotFound): the server could not find the requested resource
하지만 ubuntu 배포판 내에서는 정상 호출이 되었다.
E:\dev\kubernetes>wsl
bluesky@blueskyop:/mnt/e/dev/kubernetes$ which kubectl
/mnt/c/Users/bluesky/AppData/Local/Programs/Rancher Desktop/resources/resources/linux/bin/kubectl
bluesky@blueskyop:/mnt/e/dev/kubernetes$ kubectl version
Client Version: version.Info{Major:"1", Minor:"22", GitVersion:"v1.22.4", GitCommit:"b695d79d4f967c403a96986f1750a35eb75e75f1", GitTreeState:"clean", BuildDate:"2021-11-17T15:48:33Z", GoVersion:"go1.16.10", Compiler:"gc", Platform:"linux/amd64"}
Server Version: version.Info{Major:"1", Minor:"21", GitVersion:"v1.21.6+k3s1", GitCommit:"df033fa248bc2c9f636e4c0ff2b782cb8edbbf10", GitTreeState:"clean", BuildDate:"2021-11-04T00:25:14Z", GoVersion:"go1.16.8", Compiler:"gc", Platform:"linux/amd64"}
docker imgae build나 kubectl 사용을 모두 ubuntu 배포판에서 사용하여 정상 동작을 확인하였다.
private docker image registry 사용
여기까지 진행하였으면 이제 public docker image를 사용한 경우 window command로 바로 실행할 수 있게 된다.
하지만 따로 image를 빌드한 경우 기존처럼 로컬 빌드된 이미지를 imagePullPolicy: Never로 설정하여 사용할 수 없기 때문에 별도의 registry를 만들어 등록한 후 해당 이미지를 호출하여 사용해야 한다.
이 경우 docker 명령어를 사용할 수 있는 부분은 ubuntu 배포판뿐이기 때문에 window command가 아닌 ubuntu 배포판으로 들어가 이미지를 빌드, private registry에 배포한 후 kubectl yaml 파일에서 호출해서 사용해야 한다.
private docker image registry를 생성하고 image를 build, push 하는 부분에 대한 자세한 설명은 생략한다.
wsl 배포판 내 volume mount 경로 설정
wsl에서 실행이기 때문에 기존의 windows docker desktop의 volume mount와 path가 달라지게 된다.
#기존의 volume mount
- name: jenkins-home
hostPath:
path: /C/data/jenkins-home
#wsl의 volume mount
- name: jenkins-home
hostPath:
path: /mnt/c/data/jenkins-home
2021/12/16 추가 내용
앞서 글에서 wsl에 ubuntu와 rancher desktop distribution을 설치하고 rancher desktop의 WSL Integration 설정으로 ubuntu distribution에서 docker와 kubectl 명령어를 사용하는 것에 대한 설명을 하였었다.
하지만 반대로 rancher desktop에서 ubuntu에 설치된 docker를 쓰는 방법은 찾지 못하였다.
rancher desktop을 사용하는 경우 nerdctl을 제공하는데 docker 명령어 대신하여 container 실행, image build, push, pull을 할 수 있다.
docker 대신 nerdctl을 사용하면 된다.
https://github.com/containerd/nerdctl
따라서 위에 설명한 내용 중 ubuntu distribution을 설치하는 과정은 모두 생략해도 된다.
다만 maven의 jib build를 사용하는 경우 현재 nerdctl command를 지원하지 않기 때문에 사용이 어려울 것 같다.
https://github.com/GoogleContainerTools/jib/issues/3480
nerdctl외에도 helm, kim, kuberlr도 지원한다.
2022/10/20 추가 내용
바로 위에서 nerdctl 사용에 대해 이야기하였는데 Rancher Desktop에서도 docker 명령어 사용이 가능하다.
아래 글을 참고하면 된다.
2022.10.20 - [Study/Docker & Kubernetes] - Rancher Desktop에서 docker 명령어 사용하기
'Study > Docker & Kubernetes' 카테고리의 다른 글
kubernetes에 Prometheus, Grafana 설치하고 metric 정보 수집해 보기 (1) | 2023.03.15 |
---|---|
kubernetes ConfigMap, Secret 사용해 보기 (0) | 2023.03.11 |
kubernetes PersistentVolume, PersistentVolumeClaim 사용해 보기 (0) | 2023.03.11 |
Rancher Desktop에서 docker 명령어 사용하기 (0) | 2022.10.20 |
로컬 docker-desktop의 kubernetes (k8s)에 elasticsearch, kibana 설치해보기 (0) | 2022.10.08 |
kubernetes kubectl 명령어 모음 (0) | 2021.08.13 |
Dockerfile 명령어 (0) | 2021.07.02 |
개인 공부용 Docker Desktop kubernetes 설정 모음 (0) | 2021.06.02 |
Docker Desktop Community 2.3.0.2 이후 Windows 10 Home 지원 시작 (0) | 2020.05.17 |
window docker desktop 2.3.0.2에서 kubernetes volume mount가 되지 않는 현상 (0) | 2020.05.12 |