비밀번호 관리도구인 Vaultwarden과 전자책 서버인 Calibre, PDF 파일 변환 및 추출, 편집 도구인 Stirling PDF를 설치 Portainer와 Reverse Proxy인 Caddy를 사용해 혼자만 사용할 수 있는 유틸리티 서버를 구축한 다음으로 한 작업은 직접 코딩한 WordPress 블로그의 방문자 분석 사이트를 일반 웹사이트에서 Docker와 Portainer를 사용해 컨테이너로 포팅하는 작업이었다. 사실 이 작업이 제일 오래 걸리고 힘들었다.
그 다음 문제는 개발환경의 문제였다. 리눅스에 Apache와 Php를 설치해 코딩할 땐 테스트 환경 구축이 쉬웠다. 하지만 컨테이너로 옮기고 나서는 테스트도 동일한 컨테이너 환경에서 하는 것이 필요하기 때문이다.
Windows 11의 WSL2와 Docker 환경 구축
고민고민하다 결정하고 실행한 것은 바로 Windows 11에서 지원하는 WSL2에 Ubuntu 24.04 + Docker 환경이다. 구축 순서는 다음과 같다.
- Windows 11의 WSL2를 활성화 한다.
- WSL2에 Ubuntu 24.04를 설치한다.
- 커맨드 라인에서 Docker를 설치하지 않고 Windows11에 Docker Desktop을 설치하고 실행한다.
- 운영환경과 동일한 Portainer 설치한다.
이 순서대로 진행하면 어렵지 않게 Oracle Cloud의 운영환경과 동일한 개발환경을 PC에 설치할 수 있었다.
그런데 다 구축하고 나서 맘에 들지 않는 부분이 발견되었다. 바로 WSL2의 Ubuntu 24.04와 Docker Desktop이 설치된 가상 디스크 파일이 C: 드라이브에 위치한다는 것이었다. 개인적으로는 G: 드라이브를 자동 무결성 검사와 데이터 스크러빙을 지원하는 개발자 드라이브(ReFS)로 사용하고 있기 때문에 코딩하는 소스코드와 개발관련 데이터들을 이곳에 보관하고 있다. 그래서 WSL2와 Docker Desktop의 VHDX 파일을 G: 드라이브로 옮기기로 했다.
Docker Desktop의 VHDX 경로 변경
Docker Desktop은 참 특이하다. 도커 데스크탑을 실행한 다음에는 Ubuntu 리눅스에 접속해서 docker 명령을 실행면 docker 명령이 잘 실행되지만 도커 데스크탑을 중지하면 docker 명령을 찾을 수 없다고 나온다. 처음에는 “뭐지???” 싶었는데 알고 보니 도커와 관련된 명령은 물론 설치된 이미지와 컨테이너 등을 별도의 VHDX에 설치하고 도커 데스크탑이 실행되면 WSL2의 리눅스에 해당 VHDX를 마운트하는 형태로 지원되고 있었다.
어쨌든 이 도커 데스크탑의 VHDX를 C: 드라이브에서 다른 드라이브로 이동시키기 위해서는 먼저 도커 데스트탑을 완전하게 중지시켜야 한다.
먼저 실행중인 컨테이너를 중지시킨다. 아래에는 운영환경과 동일하게 Reverse Proxy인 Caddy와 wordpress-log 컨테이너 그리고 portainer 컨테이너가 있는데 모두 중지한다. 조금이라도 더 안전하게 작업하기 위함이다. 오른쪽 방향 삼각형이 보이면 중지된 것이다.

다음은 도커 데스크탑 자체를 중지시킨다. 도커 데스크탑 자체를 중지해야 Ubuntu Linux에 마운트 되어 있던 도커 데스크탑의 VHDX가 Ubuntu의 VHDX의 모든 연결이 끊어진다.
그런데 문제는 도커 데스크탑을 실행하면 WSL2의 우분투 리눅스와 도커 데스크탑이 모두 자동으로 실행된다. 그래서 찾은 방법이 WSL Tray Monitor라는 앱을 설치하고 이 Tray Monitor에서 도커 데스크탑을 중지하는 것이다.

WSL Tray Monitor를 설치하면 현재 설치되어 있는 WSL2의 우분투 리눅스와 도커 데스크탑을 앞의 화면처럼 찾아준다. 작은 펭귄 아이콘을 더블클릭하면 리눅스의 콘솔(Shell)창을 실행시켜주고 한번 클릭하면 WSL에서 설치된 리눅스 가상머신들을 보여준다. 이 창에서 “docker-desktop” 을 선택하고 “Stop” 버튼을 누르면 도커 데스크탑이 중지된다. 단, 도커 데스크탑 프로그램을 실행한 상태여야 한다. 그래야 다음과 같은 화면을 볼 수 있다.

“Quit” 버튼을 눌러 도커 데스크탑을 다시 실행하겠느냐 묻는 알람창을 종료한다.

이제 Browse 버튼을 눌러 원하는 경로를 선택하고 “Apply” 버튼을 누르면 모든 파일들이 이동된다.

이동 후 Docker Desktop 프로그램을 종료하고 Windows를 한번 리부팅하면 된다.
그런데 여기서 조금 이상한 점을 발견했다. 이 “Disk image location”으로 이동되는 것은 Docker Desktop의 모든 것이 이동되는게 아니라 추가적인 설정 등이 반영된 디스크 이미지만 이동되는 것으로 보인다. 도커 데스크탑의 VHDX 이미지 경로에는 main과 disk 두 개의 디렉토리가 있는데 disk는 이동되지만 main은 이동되지 않는다는 점이다.
이미지 경로를 이동하고 도커 데스크탑을 다시 실행하면 에러가 발생하기도 하는데 distro를 복구하겠느냐는 창이 표시되고 복구를 선택하면 이 main 디렉토리와 그 아래에 ext4.vhdx가 다시 생성된다. 이후에는 문제없이 실행된다.
다음은 WSL2에 설치된 Ubuntu 리눅스의 VM 디스크 이미지를 이동할 차례다.
WSL2의 리눅스 디스크 이미지 경로 변경
이 작업은 GUI에서는 불가능하며 Windows의 Power Shell을 실행하여 명령행으로 이동하는 것이 가장 간편하다.

먼저 Windows 터미널을 실행한다. 만약 터미널 프로그램이 설치되어 있지 않다면 마이크로소프트 스토어에서 “Windows Terminal”을 검색하여 설치하면 된다. WSL과 파워쉘을 종종 사용하게 된다면 필수적인 프로그램이다.
단, 실행할 때는 터미널 프로그램 아이콘에서 마우스 우클릭을 통해 “관리자 권한으로 실행” 해야 한다. 그리고 다음과 같이 “Windows PowerShell”을 실행한다.

다음과 같이 “wsl -l -v” 명령을 실행해 WSL에 설치된 가상머신 목록을 확인한다. 그리고 Version도 확인한다. 버전은 “2”로 표시되어야 한다.

만약 이동하고자 하는 WSL2 가상머신의 STATE가 “Stopped”가 아니라면 “wsl –shutdown” 명령으로 가상머신을 모두 종료하면 된다.
그리고 다음 명령으로 이동하고자 하는 가상머신을 백업(내보내기)한다.
wsl --export [WSL가상머신이름] [백업경로및파일명]

백업경로는 미리 만들어두어야 하고 위에서는 이동할 경로에 백업파일을 생성했다. 확장자는 .tar다”
백업이 완료되면 기존의 가상머신을 삭제한다. 명령어는 unregister로 등록을 취소한다는 의미인데 실제로는 삭제도 이루어진다.
wsl --unregister [가상머신이름]

다음 순서는 동일한 이름으로 백업받은 가상 머신을 등록해주는 것이다.
wsl --import [가상머신이름] [가상머신디스크경로] [가상머신백업파일경로및이름]

등록이 완료되면 가상머신의 VM DISK 이미지 경로가 변경 완료된 것이다.
#WSL2 #docker-desktop #VHDX경로변경
답글 남기기