
나의 노트북은 윈도우 OS 기반의 LG gram 노트북이다.
추후 가벼운 프로젝트를 한 개 진행하려고 하는데 그때는 로컬이 아닌 linux 기반의 OS 위에 웹 애플리케이션을 배포하려고 한다.
OS는 레드햇 엔터프라이즈 리눅스에서 파생된 리눅스의 배포판 중 하나인 CentOS 7버전을 선택하였다.
윈도우에서 CentOS를 사용하고 또 도커를 올려서 어색하지만 실제 CentOS에서 도커 엔진을 사용하는 것처럼 공부할 겸 세팅 해보기로 하였다.
1. WSL 설치
WSL이란 window subsystem for linux이다.
1-1. WSL 설치 전 환경 확인
WSL을 설치하기 위해서는 Windows 버전이 20H1, 빌드 18362 이상 되어야 한다.
윈도우 버전은 window + R 키를 누르고 winver을 입력하면 확인할 수 있다.

1-2. WSL 구동 환경 세팅
설치 환경을 확인했다면 윈도우 커맨드 창을 관리자 권한으로 실행하여 아래 명령어들을 입력한다.
명령어1: 윈도우에서 WSL 기능을 사용할 수 있게 설정하는 명령어
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
명령어2: 윈도우에서 가상머신(VM) 기능을 사용하도록 설정하는 명령어
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
위 2개의 명령어 실행 후 PC를 재부팅 해야 한다.
1-3. WSL2 Linux 커널 업데이트
아래 링크에 접속하여 linux 커널 업데이트 패키지를 설치한다.
참고로 윈도우 64bit OS 전용이고 Next, Finish 버튼만 클릭해서 진행하면 된다.
https://wslstorestorage.blob.core.windows.net/wslblob/wsl_update_x64.msi
1-4. WSL1에서 WSL2로 버전 업그레이드
다시 윈도우 커맨드 창을 띄우고 아래 명령어를 입력한다.
아래 명령어를 입력하기 전 WSL1, 2버전의 차이점을 알아보는 것을 권장하며 wsl --set-default-version 1 명령을 사용하여WSL2에서 WSL1로 설치 또는 다운그레이드도 가능하다.
wsl --set-default-version 2
여기까지 진행하였으면 윈도우에 WSL2 설치가 완료된 것이다.
2. CentOS 7 버전 설치
CentOS는 레드햇 엔터프라이즈 리눅스에서 파생된 리눅스의 배포판 중 하나이다.
2-1. CentOS 7 배포판 파일 다운로드
아래 링크에서 CentOS 7 압축 파일(.zip)을 다운로드 받고 압축 해제 후 CentOS7.exe를 관리자 권한으로 실행시킨다.
https://github.com/mishamosher/CentOS-WSL/releases/tag/7.9-2009
그러면 윈도우 커맨드 창에 Installing... 이라고 문구가 나오고 설치가 완료될 것이다.
이후 설치가 완료 되었으면 CentOS7.exe를 종료하고 다시 관리자 권한으로 실행한다.
( 윈도우 커맨드에서 wslconfig /l을 입력하여 설치가 잘 되었는지 확인 가능하다.)

만약 CentOS7.exe 파일을 관리자 권한으로 다시 실행했는데 CentOS의 터미널이 정상적으로 나타나지 않거나 터미널이 나타난 후 종료된다면 윈도우 커맨드에서 아래 명령어를 사용하여 삭제 후 다시 설치하면 된다.
:::설치된 Linux 배포판 삭제
wslconfig /u CentOS7
2-2. CentOS 7 패키지 업데이트
CentOS 패키지를 업데이트 하기 위해 아래 명령어를 입력한다.
::업데이트 가능한 패키지(저장소 및 라이브러리) 목록 조회 후 업데이트
yum update
yum이란 Yellodog Update Modified의 약자로 레드햇 계열의 리눅스 배포판에서 사용하는 프로그램(패키지) 설치 관리 도구이다.
설치가 완료되면 아래와 같은 화면이 나타난다.

여기까지 진행하였으면 CentOS 설치가 완료된 것이다.
3. Docker 설치
3-1. Docker 다운로드
아래 링크로 접속하여 Docker Desktop for Windows를 다운로드 받는다.
https://www.docker.com/products/docker-desktop
다운로드 받은 파일을 실행하고 설치 중간에 WSL2에 필요한 Windows 구성요소 설치 체크박스는 반드시 체크해야 한다.
3-2. Docker 실행 및 로그인
Docker Desktop을 실행하여 회원가입 후 로그인 한다.
로그인 후 CentOS 터미널에서 아래 명령어를 입력하여 마찬가지로 로그인 한다.
이때 Docker Desktop은 반드시 실행되어 있어야 한다.
docker login
4. Maria DB 설치 후 연동
4-1. maria db 이미지 다운로드
CentOS 터미널에서 도커 로그인 후 아래 명령어를 입력한다.
docker search mariadb // maria db 이미지 검색
docker pull mariadb // maria db 이미지 내려받기
docker images // 내려받은 이미지 목록 확인


해당 이미지를 내려 받으면 docker desktop에 내려받은 이미지가 생성된다.

4-2. maria db 컨테이너 실행
maria db 이미지 생성 후 아래의 컨테이너 실행 명령어를 입력하여 컨테이너를 실행한다.
// container 실행
docker run --name mariadb_23306 -p 23306:23306 -e MARIADB_ROOT_PASSWORD=root -d mariadb:latest
// 프로세스 확인
docker ps -a
[ 옵션설명 ]
--name mariadb_23306: 컨테이너 이름을 mariadb_23306으로 지정
-d: 컨테이너를 백그라운드로 실행
-p 23306:23306: 호스트와 컨테이너 간의 포트를 연결, 호스트에서 23306 포트 접속 시 컨테이너 23306 포트로 포워딩 됨
-e: 환경변수 설정
MARIA_ROOT_PASSWORD: 컨테이너 내 환경변수 설정, root 계정의 패스워드를 root로 설정
mariadb:latest: 다운받은 이미지명
해당 명령어를 입력했으면 docker desktop에 컨테이너가 생성되고 실행중인 것을 확인할 수 있다.

4-3. mariadb 컨테이너 및 db 접속
아래 명령어 입력하여 mariadb 컨테이너에 접속한다.
docker exec -i -t mariadb_23306 /bin/bash // /bin/bash: 컨테이너의 bash 쉘 실행
다음으로 아래 명령어를 입력하여 db에 접속한다.
mariadb -u root -p
여기까지 진행하였으면 DB 컨테이너를 올린 것이고 나는 다음으로 DBMS 툴인 Dbeaver로 Maria DB에 접속해보려고 한다.
db 툴로 접속하기 전 나는 basic이라는 database를 하나 생성하였다.
5. Maria와 DBMS Tool(Dbeaver) 연결
Dbeaver에서 데이터베이스를 연결하기 위해 MariaDB를 선택하고

maria db 접속 정보를 입력한 후 좌측 아래에 있는 Test Connection을 클릭한다.

만약 아래와 같은 오류가 발생한다면 docker에 올린 maria db의 global port가 설정되지 않은 것이다.

해당 오류는 docker exec -i -t mariadb_23306 /bin/bash 명령어를 입력하여 도커 쉘(maria db 컨테이너)에 접속한 후 /etc/mysql/my.cnf 파일에 port = 23306을 추가해주면 된다.
나는 my.cnf 파일을 수정하려고 vi 명령어를 사용했지만 command not found가 나타나서 아래 명령어를 실행하여 해결했다.
apt-get update
apt-get install vim
위 명령어 실행 후 vi 명령어를 실행하여 port = 23306을 입력한다.

이렇게 my.cnf 파일을 수정하고 다시 DBeaver에서 Test Connection 버튼을 클릭하면 아래와 같이 연결에 성공 되었다고 나타난다.

여기까지 윈도우 서브 시스템인 WSL2에 CentOS 7을 설치하고 CentOS에 도커를 설치하여 maria db 컨테이너를 실행하고 DBMS Tool에서 maria db에 접속하는 것까지... 작업을 해보았다.
!!!!!! 주의 !!!!!!!
그런데 작업관리자를 열어보니 Vmmem 프로세스가 띄워져 있었고 메모리가 많이 소모되고 있었다.
(가상머신 메모리의 약자이지 않을까 싶은데...)

WSL이 활성화 되어 있어 그런 것으로 확인되었고 아래 명령어를 사용하여 WSL을 종료할 수 있었다.
// wsl 모두 종료
wsl --shutdown
// wsl 목록 조회
wsl -l -v
// 특정 wsl 종료
wsl -t wsl이름
ex) wsl -t CentOS7

근본적으로 WSL을 사용할 때마다 메모리가 과할 정도로 사용되는 게 이상해서 관련 자료를 찾아보던 중 WSL 내 linux에서 메모리를 마음대로... 사용하지 않게 최대 사용가능한 메모리를 설정하는 방법이 존재하였다.
나의 노트북은 램이 8GB 밖에 안돼서 4GB로 설정했다.
(나중에 8GB 램 추가해야지...)
'C:\Users\사용자명' 로컬 디렉토리에 .wslconfig 파일을 만들고 아래 내용을 기재하면 된다.
[wsl2]
memory=4GB
swap=0
하마터면 메모리가 낭비되는 것을 모르고 컴퓨터를 계속 사용할 뻔 했다.
추후 웹 애플리케이션까지 올려보자.

Reference
https://velog.io/@coderaccoon/WSL-Linux-Docker-1
https://learn.microsoft.com/ko-kr/windows/wsl/install
https://jibinary.tistory.com/28

나의 노트북은 윈도우 OS 기반의 LG gram 노트북이다.
추후 가벼운 프로젝트를 한 개 진행하려고 하는데 그때는 로컬이 아닌 linux 기반의 OS 위에 웹 애플리케이션을 배포하려고 한다.
OS는 레드햇 엔터프라이즈 리눅스에서 파생된 리눅스의 배포판 중 하나인 CentOS 7버전을 선택하였다.
윈도우에서 CentOS를 사용하고 또 도커를 올려서 어색하지만 실제 CentOS에서 도커 엔진을 사용하는 것처럼 공부할 겸 세팅 해보기로 하였다.
1. WSL 설치
WSL이란 window subsystem for linux이다.
1-1. WSL 설치 전 환경 확인
WSL을 설치하기 위해서는 Windows 버전이 20H1, 빌드 18362 이상 되어야 한다.
윈도우 버전은 window + R 키를 누르고 winver을 입력하면 확인할 수 있다.

1-2. WSL 구동 환경 세팅
설치 환경을 확인했다면 윈도우 커맨드 창을 관리자 권한으로 실행하여 아래 명령어들을 입력한다.
명령어1: 윈도우에서 WSL 기능을 사용할 수 있게 설정하는 명령어
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
명령어2: 윈도우에서 가상머신(VM) 기능을 사용하도록 설정하는 명령어
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
위 2개의 명령어 실행 후 PC를 재부팅 해야 한다.
1-3. WSL2 Linux 커널 업데이트
아래 링크에 접속하여 linux 커널 업데이트 패키지를 설치한다.
참고로 윈도우 64bit OS 전용이고 Next, Finish 버튼만 클릭해서 진행하면 된다.
https://wslstorestorage.blob.core.windows.net/wslblob/wsl_update_x64.msi
1-4. WSL1에서 WSL2로 버전 업그레이드
다시 윈도우 커맨드 창을 띄우고 아래 명령어를 입력한다.
아래 명령어를 입력하기 전 WSL1, 2버전의 차이점을 알아보는 것을 권장하며 wsl --set-default-version 1 명령을 사용하여WSL2에서 WSL1로 설치 또는 다운그레이드도 가능하다.
wsl --set-default-version 2
여기까지 진행하였으면 윈도우에 WSL2 설치가 완료된 것이다.
2. CentOS 7 버전 설치
CentOS는 레드햇 엔터프라이즈 리눅스에서 파생된 리눅스의 배포판 중 하나이다.
2-1. CentOS 7 배포판 파일 다운로드
아래 링크에서 CentOS 7 압축 파일(.zip)을 다운로드 받고 압축 해제 후 CentOS7.exe를 관리자 권한으로 실행시킨다.
https://github.com/mishamosher/CentOS-WSL/releases/tag/7.9-2009
그러면 윈도우 커맨드 창에 Installing... 이라고 문구가 나오고 설치가 완료될 것이다.
이후 설치가 완료 되었으면 CentOS7.exe를 종료하고 다시 관리자 권한으로 실행한다.
( 윈도우 커맨드에서 wslconfig /l을 입력하여 설치가 잘 되었는지 확인 가능하다.)

만약 CentOS7.exe 파일을 관리자 권한으로 다시 실행했는데 CentOS의 터미널이 정상적으로 나타나지 않거나 터미널이 나타난 후 종료된다면 윈도우 커맨드에서 아래 명령어를 사용하여 삭제 후 다시 설치하면 된다.
:::설치된 Linux 배포판 삭제
wslconfig /u CentOS7
2-2. CentOS 7 패키지 업데이트
CentOS 패키지를 업데이트 하기 위해 아래 명령어를 입력한다.
::업데이트 가능한 패키지(저장소 및 라이브러리) 목록 조회 후 업데이트
yum update
yum이란 Yellodog Update Modified의 약자로 레드햇 계열의 리눅스 배포판에서 사용하는 프로그램(패키지) 설치 관리 도구이다.
설치가 완료되면 아래와 같은 화면이 나타난다.

여기까지 진행하였으면 CentOS 설치가 완료된 것이다.
3. Docker 설치
3-1. Docker 다운로드
아래 링크로 접속하여 Docker Desktop for Windows를 다운로드 받는다.
https://www.docker.com/products/docker-desktop
다운로드 받은 파일을 실행하고 설치 중간에 WSL2에 필요한 Windows 구성요소 설치 체크박스는 반드시 체크해야 한다.
3-2. Docker 실행 및 로그인
Docker Desktop을 실행하여 회원가입 후 로그인 한다.
로그인 후 CentOS 터미널에서 아래 명령어를 입력하여 마찬가지로 로그인 한다.
이때 Docker Desktop은 반드시 실행되어 있어야 한다.
docker login
4. Maria DB 설치 후 연동
4-1. maria db 이미지 다운로드
CentOS 터미널에서 도커 로그인 후 아래 명령어를 입력한다.
docker search mariadb // maria db 이미지 검색
docker pull mariadb // maria db 이미지 내려받기
docker images // 내려받은 이미지 목록 확인


해당 이미지를 내려 받으면 docker desktop에 내려받은 이미지가 생성된다.

4-2. maria db 컨테이너 실행
maria db 이미지 생성 후 아래의 컨테이너 실행 명령어를 입력하여 컨테이너를 실행한다.
// container 실행
docker run --name mariadb_23306 -p 23306:23306 -e MARIADB_ROOT_PASSWORD=root -d mariadb:latest
// 프로세스 확인
docker ps -a
[ 옵션설명 ]
--name mariadb_23306: 컨테이너 이름을 mariadb_23306으로 지정
-d: 컨테이너를 백그라운드로 실행
-p 23306:23306: 호스트와 컨테이너 간의 포트를 연결, 호스트에서 23306 포트 접속 시 컨테이너 23306 포트로 포워딩 됨
-e: 환경변수 설정
MARIA_ROOT_PASSWORD: 컨테이너 내 환경변수 설정, root 계정의 패스워드를 root로 설정
mariadb:latest: 다운받은 이미지명
해당 명령어를 입력했으면 docker desktop에 컨테이너가 생성되고 실행중인 것을 확인할 수 있다.

4-3. mariadb 컨테이너 및 db 접속
아래 명령어 입력하여 mariadb 컨테이너에 접속한다.
docker exec -i -t mariadb_23306 /bin/bash // /bin/bash: 컨테이너의 bash 쉘 실행
다음으로 아래 명령어를 입력하여 db에 접속한다.
mariadb -u root -p
여기까지 진행하였으면 DB 컨테이너를 올린 것이고 나는 다음으로 DBMS 툴인 Dbeaver로 Maria DB에 접속해보려고 한다.
db 툴로 접속하기 전 나는 basic이라는 database를 하나 생성하였다.
5. Maria와 DBMS Tool(Dbeaver) 연결
Dbeaver에서 데이터베이스를 연결하기 위해 MariaDB를 선택하고

maria db 접속 정보를 입력한 후 좌측 아래에 있는 Test Connection을 클릭한다.

만약 아래와 같은 오류가 발생한다면 docker에 올린 maria db의 global port가 설정되지 않은 것이다.

해당 오류는 docker exec -i -t mariadb_23306 /bin/bash 명령어를 입력하여 도커 쉘(maria db 컨테이너)에 접속한 후 /etc/mysql/my.cnf 파일에 port = 23306을 추가해주면 된다.
나는 my.cnf 파일을 수정하려고 vi 명령어를 사용했지만 command not found가 나타나서 아래 명령어를 실행하여 해결했다.
apt-get update
apt-get install vim
위 명령어 실행 후 vi 명령어를 실행하여 port = 23306을 입력한다.

이렇게 my.cnf 파일을 수정하고 다시 DBeaver에서 Test Connection 버튼을 클릭하면 아래와 같이 연결에 성공 되었다고 나타난다.

여기까지 윈도우 서브 시스템인 WSL2에 CentOS 7을 설치하고 CentOS에 도커를 설치하여 maria db 컨테이너를 실행하고 DBMS Tool에서 maria db에 접속하는 것까지... 작업을 해보았다.
!!!!!! 주의 !!!!!!!
그런데 작업관리자를 열어보니 Vmmem 프로세스가 띄워져 있었고 메모리가 많이 소모되고 있었다.
(가상머신 메모리의 약자이지 않을까 싶은데...)

WSL이 활성화 되어 있어 그런 것으로 확인되었고 아래 명령어를 사용하여 WSL을 종료할 수 있었다.
// wsl 모두 종료
wsl --shutdown
// wsl 목록 조회
wsl -l -v
// 특정 wsl 종료
wsl -t wsl이름
ex) wsl -t CentOS7

근본적으로 WSL을 사용할 때마다 메모리가 과할 정도로 사용되는 게 이상해서 관련 자료를 찾아보던 중 WSL 내 linux에서 메모리를 마음대로... 사용하지 않게 최대 사용가능한 메모리를 설정하는 방법이 존재하였다.
나의 노트북은 램이 8GB 밖에 안돼서 4GB로 설정했다.
(나중에 8GB 램 추가해야지...)
'C:\Users\사용자명' 로컬 디렉토리에 .wslconfig 파일을 만들고 아래 내용을 기재하면 된다.
[wsl2]
memory=4GB
swap=0
하마터면 메모리가 낭비되는 것을 모르고 컴퓨터를 계속 사용할 뻔 했다.
추후 웹 애플리케이션까지 올려보자.

Reference
https://velog.io/@coderaccoon/WSL-Linux-Docker-1
https://learn.microsoft.com/ko-kr/windows/wsl/install
https://jibinary.tistory.com/28