1. 도커와의 호환을 위해 wsl2로 리눅스 설치
다음 명령어로 새 Linux 배포판이 설치될 때 기본 버전을 WSL 2로 설정
wsl --set-default-version 2
리눅스 설치는 wsl2 ) wsl 설치, 실행, 종료, 배포판 삭제 (tistory.com) 참조
2. WSL2에 도커 엔진 설치
2가지 방법이 있다.
첫 번째는 curl를 통한 쉘 스크립트로 설치하는 것이다.
$ curl -sSL get.docker.com | sh
아래와 같은 내용이 출력된 후 20초 후에 sudo 명령이 실행되는데 wsl 접속 후 한 번도 sudo명령을 실행하지 않았으며 비밀번호를 물어볼 것이다.
# Executing docker install script, commit: 4f282167c425347a931ccfd95cc91fab041d414f
WSL DETECTED: We recommend using Docker Desktop for Windows.
Please get Docker Desktop from https://www.docker.com/products/docker-desktop
You may press Ctrl+C now to abort this script.
+ sleep 20
두 번째는 repository를 이용하여 설치하는 방법인데, 먼저 repository를 설정해야 한다.
일단 apt 패키지 색인을 업데이트하고 apt가 HTTPS를 통해 repository를 사용할 수 있도록 패키지를 설치한다.
$ sudo apt-get update
$ sudo apt-get install \
ca-certificates \
curl \
gnupg \
lsb-release
그리고 Docker의 GPG key를 추가한다.
$ sudo mkdir -m 0755 -p /etc/apt/keyrings
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
마지막으로 다음 명령을 사용하여 repository를 설정한다.
$ echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
이제 repository를 이용하여 Docker를 설치한다.
# ubuntu
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
도커가 잘 설치됐는지 확인하려면
$ docker --version
3. 도커 그룹에 사용자 추가
sudo usermod -aG docker {유저명}
4. Windows에 도커 클라이언트 설치
https://download.docker.com/win/static/stable/x86_64/
위 주소에서 wsl에 설치된 도커 엔진과 같은 버전의 도커 클라이언트를 다운로드한다.
압축을 해체하고 환경변수 설정 창에서 PATH 환경 변수에 docker.exe 파일이 있는 경로를 추가하고,
새로 만들기로 DOCKER_HOST라는 변수 이름으로 변수 값 tcp://localhost:2375를 추가한다.
cmd 또는 powershell에서 다음 명령어를 통해 환경변수가 적용되었는지 확인가능하다.
> docker
> echo %DOCKER_HOST%
환경변수가 적용이 안 되었다면 프롬프트를 재시작하거나 choco가 설치되어 있는 경우 refreshenv 명령을 사용하거나 컴퓨터를 재시작하여야 한다.
5. Windows 도커 클라이언트와 WSL2 도커 데몬 연결
> wsl hostname -I
# 도커 데몬이 설치된 wsl이 기본값이 아닐 경우
> wsl -d <배포명> hostname -I
위의 명령어로 wsl의 ip를 확인한다.
Netsh 인터페이스 포트 프락시 설정을 하기 위해서 관리자 권한으로 cmd 또는 powershell를 열고 다음 명령을 실행한다.
> netsh interface portproxy add v4tov4 listenport=2375 connectport=2375 connectaddress={wsl의 ip}
잘 설정되었는지 확인하려면 다음 명령을 실행한다.
> netsh interface portproxy show all
다음 명령어를 사용하여 wsl에 도커 데몬을 백그라운드로 실행한다.
> wsl sudo nohup dockerd -H tcp://{wsl_ip}
도커 데몬이 프로세스로 돌기 위한 웜업 시간이 10~30초가량 필요하다.
웜업 시간 대기 후에 다음 명령어를 실행하여 잘 연결되었는지 확인 가능하다.
> docker ps
P.S-1. docker-compose 설치
PowerShell에서 다음 명령어를 실행한다.
# GitHub에는 TLS1.2가 필요합니다.
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
Start-BitsTransfer -Source "https://github.com/docker/compose/releases/download/v2.16.0/docker-compose-Windows-x86_64.exe" -Destination {docker.exe 파일이 있는 경로}\docker-compose.exe
다른 버전의 compose를 설치하려면 v2.16.0 대신에 사용하려는 compose 버전으로 대체하면 된다.
다음 명령어로 설치된 것을 확인할 수 있다.
> docker-compose --version
P.S-2. 간편 설정
1. Windows 시작 시 자동으로 도커 데몬 연결하게 만들기 위한 스크립트 작성 및 작업 스케줄러 설정
- 스크립트 작성
for /f "tokens=1" %%a in ('wsl sh -c "hostname -I"') do set wsl_ip=%%a
netsh interface portproxy add v4tov4 listenport=2375 connectport=2375 connectaddress=%wsl_ip%
wsl -d Ubuntu -u root -e nohup sh -c "dockerd -H tcp://%wsl_ip% &" < nul > nul 2>&1
위의 3줄이 스크립트 내용 전부이다. 메모장 등을 이용하여 적당한 파일명으로 확장자 bat 파일을 생성한다.
- 작업 스케줄러 설정
스케줄러 관리를 편하게 하기 위해 작업 > 새 폴더를 사용하여 폴더를 생성하여 작업을 만드는 것을 추천한다.
설정은 링크를 참조
2. wsl에서 docker 편하게 쓰기 (DOCKER_HOST 환경변수 설정)
이 설정을 하지 않을 경우 wsl에서 docker deamon을 쓰기 위해서는 매번 -H tcp://{wsl의 ip}를 옵션을 주어야 한다. 따라서 wsl의 .profile에 다음 내용을 추가하여 wsl 접속 시 자동으로 DOCKER_HOST를 변수에 넣게 한다.
$ vi ~/.profile
## .profile 내용 생략 ##
# set DOCKER_HOST for docker default context
wsl_ip=$(ip addr show eth0 | grep -oP "(?<=inet\s)\d+(\.\d+){3}")
export DOCKER_HOST=tcp://$wsl_ip:2375
재접속하지 않고 쉘에 적용하려면 다음 명령어를 실행한다.
$ . ~/.profile
이제 도커를 학습하러 가보자. 도커 가이드로 Go~
Windows 도커 클라이언트 문제점...
bind mount 시 docker deamon에 경로가 제대로 전달되지 않음. (powershell "$(pwd)"로 연결하거나 docker-compose.yml에 상대경로 사용 시 경로를 찾지 못함.)
=> wsl 쉘에서 직접 명령어 실행해야 함.
참고 : https://netmarble.engineering/docker-on-wsl2-without-docker-desktop/
'Docker' 카테고리의 다른 글
wsl2 ) Vmmen 메모리 과다 사용 문제 (0) | 2022.05.16 |
---|---|
wsl2 ) wsl 설치, 실행, 종료, 배포판 삭제 (0) | 2022.05.16 |
댓글