본문 바로가기
카테고리 없음

WSL2 Native Docker Vmmem의 미친 점유율 해결하기

by 노아론 2020. 9. 7.

이번 글에서는 WSL2 Native Docker의 고질적인 Vmmem 램 점유 문제에 대해 Window Docker를 통해 해결하는 방법을 소개한다

나는 개발환경으로 WSL2 (Ubuntu 18.04), WSL2 상에서 Native Docker를 가동해 사용하고 있다.

WSL2 외부 접속 해결 포스트를 쓰며 WSL에 불편함 없이 개발을 하고 있었으나, WSL2 Native Docker가 너무 많은 메모리 할당량을 가지고 있었다

 

이러한 개발환경에선 흔하게 보이는 태스크 상태이다

스펙이 큰 프로그램을 실행한 게 아니라, 간단한 Spring Boot 서버와 PostgreSQL를 Docker 컨테이너로 가동한 상황이다. 나와 같은 개발환경을 쓰는 많은 사람들은 아래 사진에 대해 매우 공감할 것이다

vmmem

 

이러한 문제를 해결하고 싶어, Github WSL 레포지토리의 Issue #4166을 참고하였고

C:\Users\{유저네임}\.wslconfig 파일을 아래처럼 수정하였다

[wsl2]
memory=2GB
swap=0
localhostForwarding=true

메모리가 최대 2GB로 설정되어 윈도우 상에선 어느정도 지연 현상이 해결되었지만, WSL2 환경 내에서는 콘솔 출력 조차 기다릴 정도로 지연현상이 심하였다.

Docker를 사용했다고 하지만, 메모리 사용량이 2GB로 부족하진 않을 상황이었다

WSL2 Native Docker를 종료하고 나니 WSL2의 점유량은 대략 200MB 정도로 감소한 것을 보았고 WSL2 Native Docker를 잠시 떠나 비교적 안정적인 윈도우 환경의 Docker를 사용하기로 했다

 

윈도우 Docker 설치는 Docker Desktop for Windows를 참고하여 설치하면 된다.

그리고 docker Desktop을 실행하여 Settings에서 설정해줄 부분이 있다.

Settings > General에 들어가 Expose daemon on tcp://localhost:2375 without TLS를 enable로 적용한다

 

image

 

이제 내부에서 tcp://localhost:2375 를 통해 윈도우 상의 Docker를 사용할 수 있다

그럼 이제 WSL2에서 바로 docker ps를 실행하면 어떻게 될까?

roharon % docker ps
Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?

 

윈도우의 Docker에 아무런 연결이 되지 않은 상태다. 따라서 docker daemon을 찾을 수 없다고 나온다

이제 윈도우 Docker 위치를 WSL2의 환경변수 PATH에 지정할 것이다.

아래 커맨드를 입력하여 설정해보자

export PATH="$HOME/bin:$HOME/.local/bin:$PATH"
export PATH="$PATH:/mnt/c/Program\ Files/Docker/Docker/resources/bin"
alias docker=docker.exe
alias docker-compose=docker-compose.exe

 

WSL 상의 dockerdocker-compose 커맨드는 alias 되어 윈도우 환경의 docker.exe를 실행하게 된다

확인을 위해 작업 중이던 프로젝트 폴더에 들어가, docker-compose up -d 커맨드를 입력하고 docker-compose ps를 통해 컨테이너 상태를 살펴보겠다

(작업 중인 프로젝트라 실행 오류가 나 Exit이라고 뜰 것이다)

image

 

이제 docker-compose가 동작하는 것을 확인하였다. (docker ps를 대신하여도 무방하다)

alias로 별칭을 지정하였기에 터미널을 종료하고 실행하면 다시 지정을 해야 한다

매번 번거로울 테니 터미널이 실행되면 바로 설정되도록 자신이 사용하는 쉘 (~/.bashrc ~/.zshrc 등)에서 지정을 해주자

echo "export DOCKER_HOST='tcp://0.0.0.0:2375'" >> ~/.bashrc
echo "alias docker=docker.exe" >> ~/.bashrc
echo "alias docker-compose=docker-compose.exe" >> ~/.bashrc
# zsh를 쓰면 ~/.zshrc 로 변경하면 된다
roharon % docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS
NAMES

 

이제 터미널을 다시 시작하여도 잘 동작하는 것을 볼 수 있다

 

윈도우의 docker Desktop에서도 컨테이너가 잘 나타나는 것을 확인 할 수 있다

 

 

image

 

WSL2 Native Docker를 사용할 때보다 점유량이 확연히 줄어든 Vmmem 프로세스와 Docker Desktop프로세스를 확인할 수 있다

 

WSL1에서 Docker를 쓰기 위해 이용하던 방식일 수도 있지만, 비교적 더 쾌적한 환경을 맞이할 순 있을 것이다

이것으로 WSL2 + WSL2 Native Docker 환경에서의 Vmmem 프로세스 점유율 문제 해결에 대한 포스트를 마친다.

댓글