WSL2, Docker Desktop

ν™νƒœν™”Β·2023λ…„ 9μ›” 27일

πŸ˜€ WSL2

WSL2λŠ” Windows 운영 체제 μœ„μ—μ„œ μ‹€ν–‰λ˜λŠ” 가상 ν™˜κ²½μ„ μ œκ³΅ν•˜λŠ” κΈ°μˆ μ΄λ‹€
가상 ν™˜κ²½ λ‚΄μ—μ„œ λ¦¬λˆ…μŠ€ 컀널이 λ™μž‘ν•˜κ³  λ¦¬λˆ…μŠ€ 배포판 (예: Ubuntu, Debian, CentOS λ“±)을
μ‹€ν–‰ν•  수 μžˆλ„λ‘ ν•΄μ€€λ‹€

WSL2λŠ” Windows와 Linux μ‚¬μ΄μ˜ ν˜Έν™˜μ„±μ„ μ œκ³΅ν•˜κΈ° μœ„ν•œ Windows의 μ„œλΈŒμ‹œμŠ€ν…œ κΈ°μˆ μ΄λ‹€
이λ₯Ό 톡해 Windows μ»΄ν“¨ν„°μ—μ„œ λ¦¬λˆ…μŠ€ ν”„λ‘œκ·Έλž¨κ³Ό λͺ…령을 μ‹€ν–‰ν•  수 있으며
λ¦¬λˆ…μŠ€μ™€ Windows κ°„μ˜ 파일 κ³΅μœ μ™€ 톡합이 κ°€λŠ₯ν•˜λ‹€

WSL2λ₯Ό μ‚¬μš©ν•˜λ©΄ λ¦¬λˆ…μŠ€ λͺ…령을 μ‹€ν–‰ν•˜κ³  λ¦¬λˆ…μŠ€ 개발 ν™˜κ²½μ„ ꡬ좕할 수 있으며
λ™μ‹œμ— Windows 운영 μ²΄μ œμ—μ„œ Windows μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ μ‹€ν–‰ν•  수 μžˆλ‹€

πŸ˜€ Docker Desktop

Docker Desktop은 Windows ν™˜κ²½μ—μ„œ Linux μ»¨ν…Œμ΄λ„ˆλ₯Ό μ‹€ν–‰ν•˜κΈ° μœ„ν•΄
WSL2 λ˜λŠ” Hyper-V κΈ°μˆ μ„ μ‚¬μš©ν•œλ‹€!!

πŸ˜€ vmmem.exe

Windows 운영 체제의 ν•˜μ΄νΌλ°”μ΄μ € 가상 λ¨Έμ‹  λͺ¨λ‹ˆν„°
(Hypervisor Virtual Machine Monitor)
의 ν”„λ‘œμ„ΈμŠ€ 쀑 ν•˜λ‚˜

❓ WSL2λ₯Ό μ„€μΉ˜ν•œ 경우

WSL2λ₯Ό μ‚¬μš©ν•˜λ©΄ Windows와 Linux 사이에 더 효율적인 μžμ› κ³΅μœ κ°€ κ°€λŠ₯ν•˜κ²Œ λ˜μ–΄
λ³„λ„μ˜ 가상 머신을 μƒμ„±ν•˜μ§€ μ•Šκ³ λ„ Docker μ—”μ§„κ³Ό μ»¨ν…Œμ΄λ„ˆλ₯Ό 직접 μ‹€ν–‰ν•  수 있게 됨!!

  • WSL2 가상 머신은 ν•˜μ΄νΌλ°”μ΄μ €(Hyper-V) κΈ°μˆ μ„ μ‚¬μš©ν•˜μ—¬ κ°€μƒν™”λœλ‹€
  • vmmem.exeλŠ” WSL2 가상 λ¨Έμ‹ μ˜ 싀행을 κ΄€λ¦¬ν•˜κ³  λ¦¬λˆ…μŠ€ 컀널을 μ‹€ν–‰ν•˜λŠ” μ—­ν• 
  • WSL2λ₯Ό 톡해 Windows μ‹œμŠ€ν…œμ—μ„œ λ¦¬λˆ…μŠ€ μ• ν”Œλ¦¬μΌ€μ΄μ…˜ 및 도ꡬλ₯Ό μ‹€ν–‰ν•  수 μžˆλ‹€
  • vmmem.exeλŠ” μ΄λŸ¬ν•œ WSL2 가상 머신을 μ œμ–΄ν•˜κ³  관리
  • Docker Desktopκ³Ό ν•¨κ»˜ μ‚¬μš©λ  λ•Œ vmmem.exeλŠ” WSL2 λ‚΄μ—μ„œ λ¦¬λˆ…μŠ€ μ»¨ν…Œμ΄λ„ˆ 싀행을 지원

❓ WSL2λ₯Ό μ„€μΉ˜ν•˜μ§€ μ•Šμ€ 경우

  • Docker Desktop은 Hyper-V 가상 λ¨Έμ‹ (MobyLinuxVM λ˜λŠ” DockerDesktopVM)을 μ‚¬μš©ν•˜μ—¬
    λ¦¬λˆ…μŠ€ μ»¨ν…Œμ΄λ„ˆλ₯Ό μ‹€ν–‰ν•˜κ³  관리
  • vmmem.exeλŠ” 도컀와 κ΄€λ ¨λœ 역할을 μˆ˜ν–‰
  • vmmem.exeλŠ” μ΄λŸ¬ν•œ Hyper-V 가상 λ¨Έμ‹ μ˜ λ©”λͺ¨λ¦¬ 관리와 λ¦¬μ†ŒμŠ€ 할당을 μ²˜λ¦¬ν•˜λ©°
    Docker Desktopκ³Ό ν•¨κ»˜ λ¦¬λˆ…μŠ€ μ»¨ν…Œμ΄λ„ˆ 싀행을 지원

μš”μ•½

WSL2λ₯Ό μ„€μΉ˜ν•œ 경우 Docker Desktop이 ν†΅ν•©λ˜μ–΄ λ¦¬λˆ…μŠ€ μ»¨ν…Œμ΄λ„ˆλ₯Ό μ‹€ν–‰ν•  λ•Œ
WSL2λ₯Ό μ‚¬μš©ν•˜μ§€λ§Œ λ©”λͺ¨λ¦¬ 관리와 λ¦¬μ†ŒμŠ€ ν• λ‹Ήμ˜ 일뢀 μž‘μ—…μ€ μ—¬μ „νžˆ
Hyper-V 와 vmmem.exeκ°€ λ‹΄λ‹Ή

WSL2λ₯Ό λ―Έμ„€μΉ˜ν•œ 경우 Docker Desktop은 Hyper-V 가상 머신을 μ‚¬μš©ν•˜μ—¬
λ¦¬λˆ…μŠ€ μ»¨ν…Œμ΄λ„ˆλ₯Ό μ‹€ν–‰ν•˜κ³  vmmem.exe ν”„λ‘œμ„ΈμŠ€κ°€ ν•΄λ‹Ή Hyper-V 가상 λ¨Έμ‹ μ˜
λ©”λͺ¨λ¦¬ 관리와 λ¦¬μ†ŒμŠ€ 할당을 λ‹΄λ‹Ήν•©λ‹ˆλ‹€.

docker desktop을 μ‹€ν–‰ν•˜λ©΄ vmmem이 λ©”λͺ¨λ¦¬λ₯Ό λ¬΄μ§€ν•˜κ²Œ μž‘μ•„λ¨ΉλŠ”λ‹€
wsl2 λ©”λͺ¨λ¦¬ 자체λ₯Ό μ œν•œν•˜λ©΄ λœλ‹€
νŒŒμΌνƒμƒ‰κΈ°μ— %USERPROFILE% λ₯Ό 타고 λ“€μ–΄κ°€ .wslconfig μ΄λ¦„μ˜ νŒŒμΌμ„ λ§Œλ“€κ³ 
λ©”λͺ¨μž₯으둜 μ—΄μ–΄μ„œ

memory=2GB 			# WSL2 VM에 ν• λ‹Ήν•  λ©”λͺ¨λ¦¬ 
swap=0 				# WSL2 VM에 μΆ”κ°€ν•  μŠ€μ™‘ 곡간(μŠ€μ™‘ 파일 μ—†μŒμ˜ 경우 0) 
localhostForwarding=true

πŸŒ€ Windows Containers

이 μ˜΅μ…˜μ€ 일뢀 λ²„μ „μ˜ Docker Desktopμ—μ„œ 제곡되며 이 λͺ¨λ“œμ—μ„œλŠ” Linux 컀널 λŒ€μ‹ 
Windows NT 컀널 μœ„μ—μ„œ 직접 μ»¨ν…Œμ΄λ„ˆλ₯Ό μ‹€ν–‰ν•œλ‹€ λ”°λΌμ„œ Linux 컀널과 ν˜Έν™˜λ˜μ§€ μ•ŠλŠ” Windows μ „μš© μ• ν”Œλ¦¬μΌ€μ΄μ…˜λ“€λ„ 도컀 μ»¨ν…Œμ΄λ„ˆ λ‚΄μ—μ„œ μ‹€ν–‰ν•  수 μžˆλ‹€

🌈 λ‚΄ 컴퓨터에 wsl2κ°€ μ„€μΉ˜λ˜μ–΄ μžˆλŠ”μ§€ ν™•μΈν•˜λŠ” 방법

wsl --list --verbose μž…λ ₯ν•˜λ©΄ μ•„λž˜μ™€ 같이 λ‚˜μ˜¨λ‹€

  NAME                   STATE           VERSION
* Ubuntu                 Running         2
  docker-desktop-data    Running         2
  docker-desktop         Running         2
  • Ubuntu Linux 배포판이 WSL 2 μƒμ—μ„œ μ‹€ν–‰ 쀑~
    Running μƒνƒœλ‘œ ν‘œμ‹œλ˜μ–΄ μžˆμœΌλ―€λ‘œ ν˜„μž¬ μ‹€ν–‰ 쀑인 것을 λ‚˜νƒ€λƒ…λ‹ˆλ‹€.

  • docker-desktop-data
    Docker Desktop κ΄€λ ¨ 데이터λ₯Ό μ €μž₯ν•˜κΈ° μœ„ν•œ WSL 2 가상 λ¨Έμ‹ !
    Docker Desktopκ³Ό ν•¨κ»˜ μ„€μΉ˜λ˜μ–΄ Docker μ»¨ν…Œμ΄λ„ˆ 및 κ΄€λ ¨ 데이터λ₯Ό μ €μž₯ν•˜λŠ” 역할을 ν•œλ‹€

  • docker-desktop
    Docker Desktop μžμ²΄κ°€ WSL2λ₯Ό μ‚¬μš©ν•˜μ—¬ μ‹€ν–‰λœλ‹€
    Docker Desktop은 μ»¨ν…Œμ΄λ„ˆ 관리 및 싀행을 μœ„ν•œ 도ꡬ이닀

Window λͺ…λ Ήν”„λ‘¬ν”„νŠΈ, νŒŒμ›Œμ‰˜

docker info μ—”μ§„ 정보
docker -v 도컀 버전

이미지 관리

docker pull IMAGE_NAME:TAG		 	  Docker ν—ˆλΈŒ λ˜λŠ” 이미지 μ €μž₯μ†Œμ—μ„œ 이미지λ₯Ό κ°€μ Έμ˜΄
docker images 						  둜컬 이미지 λͺ©λ‘μ„ ν‘œμ‹œ
docker rmi IMAGE_NAME:TAG 			  둜컬 이미지λ₯Ό μ‚­μ œ
docker build .            			  ν˜„μž¬ λ””λ ‰ν„°λ¦¬μ˜ Dockerfile을 μ΄μš©ν•˜μ—¬ μƒˆλ‘œμš΄ 이미지λ₯Ό λΉŒλ“œ 
						  			  (-t μ˜΅μ…˜μ„ μ΄μš©ν•΄ νƒœκ·Έ 이름 μ§€μ • κ°€λŠ₯)

μ»¨ν…Œμ΄λ„ˆ 관리

docker run IMAGE_NAME:TAG				νŠΉμ • μ΄λ―Έμ§€λ‘œ μƒˆλ‘œμš΄ μ»¨ν…Œμ΄λ„ˆλ₯Ό μƒμ„±ν•˜κ³  μ‹€ν–‰
										μ˜΅μ…˜ μΆ”κ°€ κ°€λŠ₯ 
                                        -d (detached mode), -p (port mapping), -v (volume mapping) 
docker ps 								μ‹€ν–‰ 쀑인 μ»¨ν…Œμ΄λ„ˆ λͺ©λ‘μ„ ν‘œμ‹œ
docker ps -a 							λͺ¨λ“  μ»¨ν…Œμ΄λ„ˆ λͺ©λ‘μ„ ν‘œμ‹œ
docker start CONTAINER_ID 				μ»¨ν…Œμ΄λ„ˆ μ‹œμž‘ 
docker stop CONTAINER_ID 				μ»¨ν…Œμ΄λ„ˆ μ •μ§€
docker restart CONTAINER_ID				μ»¨ν…Œμ΄λ„ˆ μž¬μ‹œμž‘
docker rm CONTAINER_ID                  μ»¨ν…Œμ΄λ„ˆ μ‚­μ œ
docker exec -it CONTAINER_ID COMMAND	μ‹€ν–‰ 쀑인 μ»¨ν…Œμ΄λ„ˆ λ‚΄λΆ€μ—μ„œ λͺ…령을 μ‹€ν–‰
docker inspect							μ»¨ν…Œμ΄λ„ˆ 상세 정보 확인

Docker Compose

docker-compose up						Docker Composeλ₯Ό μ‚¬μš©ν•˜μ—¬ 닀쀑 μ»¨ν…Œμ΄λ„ˆ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ μ‹€ν–‰
docker-compose down						Docker Compose둜 μ‹€ν–‰ 쀑인 μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ μ€‘μ§€ν•˜κ³  μ»¨ν…Œμ΄λ„ˆλ₯Ό 제거

둜그 및 μƒνƒœ 확인

docker logs CONTAINER_ID: μ»¨ν…Œμ΄λ„ˆ 둜그λ₯Ό ν‘œμ‹œν•©λ‹ˆλ‹€.
docker stats CONTAINER_ID: μ»¨ν…Œμ΄λ„ˆμ˜ λ¦¬μ†ŒμŠ€ μ‚¬μš©λŸ‰ 및 μƒνƒœλ₯Ό μ‹€μ‹œκ°„μœΌλ‘œ ν‘œμ‹œν•©λ‹ˆλ‹€.

λ„€νŠΈμ›Œν¬:


docker network ls: Docker λ„€νŠΈμ›Œν¬ λͺ©λ‘μ„ ν‘œμ‹œν•©λ‹ˆλ‹€.
docker network inspect NETWORK_NAME: λ„€νŠΈμ›Œν¬ 상세 정보λ₯Ό ν‘œμ‹œν•©λ‹ˆλ‹€.
profile
μš°μ–΄μ–΄μ•„μ•„μ•™

0개의 λŒ“κΈ€