본문 바로가기
기타/Windows

[Windows] WSL 2 Ubuntu에 Docker 설치하기

by A6K 2022. 3. 2.

윈도우로 개발 환경을 옮기면서 도커 환경을 새롭게 구축해야 했다. 윈도우용 도커 환경을 구축해도 되겠지만 편하게 사용하던 리눅스 환경의 도커를 데스크탑에서도 사용하고 싶어 WSL에 도커를 설치해보기로 했다.

일단 WSL 2로 설치하거나 업그레이드를 했다. (링크 : [Windows] WSL 2로 업그레이드 하기)

우분투 설치

찾아본 방법은 WSL 우분투에 도커를 설치하는 방법이다. CentOS 환경도 사용하고 있지만 일단은 Ubuntu 이미지를 받아서 설치했다. cmd 혹은 powershell에서 "wsl --install -d ubuntu"를 실행해 우분투를 설치하자.

PS C:\Users\USER> wsl --install -d ubuntu

WSL 우분투를 실행하고 패키지 업데이트와 업그레이드를 해두자.

$ sudo apt-get update
$ sudo apt-get upgrade

Genie 설치

WSL 우분투에서는 systemd, systemctl을 지원하지 않는다. 도커를 설치할 때 systemctl 명령이 지원되면 기존에 있는 설치 문서를 그대로 따라하면서 도커를 설치할 수 있어 편하다.

Genie는 WSL에서 systemd를 사용할 수 있게 해주는 오픈소스 프로젝트다. (링크 : Genie 깃허브) 우분투에서 Genie를 설치하는 가이드가 gist에 공개되어 있다. 이를 따라하면 된다. (링크 : WSL Ubuntu에 Genie 설치 가이드) 이 포스트에서도 따라하면서 정리를 해두겠다.

우선 install-sg.sh 파일을 다운로드해서 '/tmp/install-sg.sh' 파일로 복사하자. Genie를 설치하는 명령어들이 담긴 스크립트 파일이다. 

$ cd /tmp
$ wget --content-disposition \\
  "<https://gist.githubusercontent.com/djfdyuruiry/6720faa3f9fc59bfdf6284ee1f41f950/raw/952347f805045ba0e6ef7868b18f4a9a8dd2e47a/install-sg.sh>"

install-sg.sh 파일을 실행하기 위해 퍼미션을 변경한다. 

$ chmod +x /tmp/install-sg.sh

받아둔 스크립트를 실행하고, 성공적으로 실행이 완료되면 삭제한다. 이제 genie의 데비안 패키지 파일을 다운로드하고 실행해서 설치하는 과정이 진행된다.

$ /tmp/install-sg.sh && rm /tmp/install-sg.sh

설치가 완료되면 WSL 우분투 터미널을 종료하고, Powershell에서 'wsl --shutdown'을 실행한다.

PS C:\Users\USER> wsl --shutdown

이후 genie가 설치되어 systemd가 활성화되어 있는 터미널르 WSL을 실행해준다. Powershell에서 'wsl genie -s' 명령을 실행해준다. 이 때, 아까 설치한 Ubuntu가 기본 리눅스로 설정되어 있는지 확인하자.

PS C:\Users\USER> wsl genie -s

실행하면 "Waiting systemd...!!!!!!!"가 출력되면서 뭔가를 기다린다. 정상적으로 로딩되는 경우도 있지만 안타깝게도 다음 에러를 만나게 되었다.

C:\\Users\\USER>wsl genie -s
Waiting for systemd....!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

Timed out waiting for systemd to enter running state.
This may indicate a systemd configuration error.
Attempting to continue.
Failed units will now be displayed (systemctl list-units --failed):
  UNIT                       LOAD   ACTIVE SUB    DESCRIPTION
● systemd-remount-fs.service loaded failed failed Remount Root and Kernel File Systems
● multipathd.socket          loaded failed failed multipathd control socket

LOAD   = Reflects whether the unit definition was properly loaded.
ACTIVE = The high-level unit activation state, i.e. generalization of SUB.
SUB    = The low-level unit activation state, values depend on unit type.

2 loaded units listed.

서비스 두개가 구동이 실패하는데, 당장 도커 설치에 필요가 없어보이므로 서비스를 꺼주자. "sudo systemctl mask multipathd.socket"과 "sudo systemctl mask systemd-remout-fs.service"를 실행한다.

$ sudo systemctl mask multipathd.socket
$ sudo systemctl mask systemd-remout-fs.service

이제 systemctl 명령을 사용할 수 있는 우분투 환경이 만들어졌다.

도커 설치

위에서 설정한 우분투 터미널에서 도커를 설치해보자.

우선 필요한 패키지들을 설치한다.

$ sudo apt-get update
$ sudo apt-get install \\
    ca-certificates \\
    curl \\
    gnupg \\
    lsb-release

그리고 도커의 공식 GPG 키를 추가하고 저장소를 추가한다.

$ 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

정상적으로 설치가 되었다면 헬로월드 컨테이너를 구동해보자.

$ sudo docker run hello-world

WSL 우분투 리눅스에 도커가 설치되었다.

댓글