이번 글에서는 WSL2 Native Docker의 고질적인 Vmmem 램 점유 문제에 대해 Window Docker를 통해 해결하는 방법을 소개한다
나는 개발환경으로 WSL2 (Ubuntu 18.04), WSL2 상에서 Native Docker를 가동해 사용하고 있다.
WSL2 외부 접속 해결 포스트를 쓰며 WSL에 불편함 없이 개발을 하고 있었으나, WSL2 Native Docker가 너무 많은 메모리 할당량을 가지고 있었다
이러한 개발환경에선 흔하게 보이는 태스크 상태이다
스펙이 큰 프로그램을 실행한 게 아니라, 간단한 Spring Boot 서버와 PostgreSQL를 Docker 컨테이너로 가동한 상황이다. 나와 같은 개발환경을 쓰는 많은 사람들은 아래 사진에 대해 매우 공감할 것이다
이러한 문제를 해결하고 싶어, 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로 적용한다
이제 내부에서 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 상의 docker
와 docker-compose
커맨드는 alias 되어 윈도우 환경의 docker.exe
를 실행하게 된다
확인을 위해 작업 중이던 프로젝트 폴더에 들어가, docker-compose up -d
커맨드를 입력하고 docker-compose ps
를 통해 컨테이너 상태를 살펴보겠다
(작업 중인 프로젝트라 실행 오류가 나 Exit이라고 뜰 것이다)
이제 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에서도 컨테이너가 잘 나타나는 것을 확인 할 수 있다
WSL2 Native Docker를 사용할 때보다 점유량이 확연히 줄어든 Vmmem
프로세스와 Docker Desktop
프로세스를 확인할 수 있다
WSL1에서 Docker를 쓰기 위해 이용하던 방식일 수도 있지만, 비교적 더 쾌적한 환경을 맞이할 순 있을 것이다
이것으로 WSL2 + WSL2 Native Docker 환경에서의 Vmmem 프로세스 점유율 문제 해결에 대한 포스트를 마친다.
댓글