Windows 10 도커 설치 과정 (2022 ver)

Page content

개요

Step 1. WSL2 설치 과정

  • Windows PowerShell 관리자로 실행 후 다음 명령어 입력
$ dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
$ dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
$ wsl --set-default-version 2
WSL 2와의 주요 차이점에 대한 자세한 내용은 https://aka.ms/wsl2를 참조하세요

Step 2l Docker Desktop 설치

  1. 다음 페이지로 이동해서 Docker Desktop for Windows를 다운로드 받습니다.

Untitled

  1. 다운로드 받은 Docker Desktop Installer.exe 를 실행하면 사용자 계정 컨트롤이 나타남. 설치를 진행하려면 ’예’를 클릭함.

  2. 설치 중간에 Configuration이 나타납니다. 둘 다 체크하고 설치를 진행함. (첫 번째 옵션은 WSL 관련, 2번째 옵션은 바탕화면에 아이콘 추가할지 여부).

Untitled

  1. Docker Desktop 설치 진행.

Untitled

  1. 설치가 끝나면 Installation succeeded 메시지가 나타남. 시스템 상태에 따라서 재시작이나 로그아웃을 해야하는 경우도 있다. Close 버튼을 클릭해 인스톨러를 종료함.
  • 재 접속 시, 아래 화면에서 약관 동의하면 끝.

Untitled

  1. 시스템에 WSL2가 활성화되어있다면 Docker는 기본적으로 WSL2를 백엔드로 Docker Engine을 실행함. 초기 셋업에는 몇 분 정도의 시간이 걸림. 성공적으로 Docker가 실행되면 Tutorial이 나타남.

Untitled

  1. 로그인 하면, 아래와 같은 화면이 나옴. Proceed to Docker Desktop 실행하면 종료

Untitled

  1. 도커 컨테이너 실행 시작 후, 오른쪽 상단 설정창을 클릭한다.

Untitled

  1. 다음으로 WSL2 설정이 잘되어있는지 확인하고 WSL 통합 설정을 진행함. Docker 아이콘에서 오른쪽 버튼을 눌러 Settings를 선택함. 먼저 General 설정에서 ’Use the WSL 2 based engine’에 체크가 되어있는지 확인함. 미리 체크가 되어있을 텐데, 혹시 되어있지 않다면 체크하고 오른쪽 아래의 Apply & Restart 버튼을 클릭함.

Untitled

  1. 다음으로 왼쪽 사이드바에서 Resource > WSL Integration 메뉴로 이동함. ’Enable Integration with my default WSL distro’에 체크되어있는지 확인함. 체크가 되어있지 않을 텐데 체크하고 오른쪽 아래의 Apply & Restart 버튼을 클릭해주면 도커 엔진이 재실행됨.

Untitled

  • 도커 설치는 완료 됨

Step 3. Docker 설치 확인 및 간단한 nginx 서버 예제 실행

  • PowerShell 탭을 하나 열고 wsl명령어로 Docker 전용 머신이 실행중인 것을 확인할 수 있다.
PS C:\WINDOWS\system32> wsl -l -v
  NAME                   STATE           VERSION
* docker-desktop         Running         2
  docker-desktop-data    Running         2
  • wsl로 docker-desktop 리눅스에 명령어를 실행해볼 수 있습니다. docker-desktop은 BusyBox 기반의 경량 리눅스인 것을 확인해볼 수 있습니다.
PS C:\WINDOWS\system32> wsl -d docker-desktop busybox
BusyBox v1.29.3 (2019-01-24 07:45:07 UTC) multi-call binary.
BusyBox is copyrighted by many authors between 1998-2015.
Licensed under GPLv2. See source distribution for detailed
copyright notices.
.
.
.
  • docker version 명령으로 Docker 서버와 클라이언트 정보를 확인해봅니다.
PS C:\WINDOWS\system32> docker version
Client:
 Cloud integration: v1.0.22
 Version:           20.10.13
 API version:       1.41
 Go version:        go1.16.15
 Git commit:        a224086
 Built:             Thu Mar 10 14:13:04 2022
 OS/Arch:           windows/amd64
 Context:           default
 Experimental:      true

Server: Docker Desktop 4.6.1 (76265)
 Engine:
  Version:          20.10.13
  API version:      1.41 (minimum version 1.12)
  Go version:       go1.16.15
  Git commit:       906f57f
  Built:            Thu Mar 10 14:06:05 2022
  OS/Arch:          linux/amd64
  Experimental:     false
 containerd:
  Version:          1.5.10
  GitCommit:        2a1d4dbdb2a1030dc5b01e96fb110a9d9f150ecc
 runc:
  Version:          1.0.3
  GitCommit:        v1.0.3-0-gf46b6ba
 docker-init:
  Version:          0.19.0
  GitCommit:        de40ad0
  • docker로 실행중인 컨테이너 확인
PS C:\WINDOWS\system32> docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES
  • 이번에는 ngix 서버 활성화를 해본다.
$ docker run -p 4567:80 -d nginx:latest
Unable to find image 'nginx:latest' locally
latest: Pulling from library/nginx
c229119241af: Pull complete                                                                                             2215908dc0a2: Pull complete                                                                                             08c3cb2073f1: Pull complete                                                                                             18f38162c0ce: Pull complete                                                                                             10e2168f148a: Pull complete                                                                                             c4ffe9532b5f: Pull complete                                                                                             Digest: sha256:2275af0f20d71b293916f1958f8497f987b8d8fd8113df54635f2a5915002bf1
Status: Downloaded newer image for nginx:latest
cd56760cf433cc797a6c43c544fe52493daccc06b4c30842a98ef6ec3665bf10
  • 다시 docker로 실행중인 컨테이너 확인을 한다.
PS C:\WINDOWS\system32> docker ps
CONTAINER ID   IMAGE          COMMAND                  CREATED          STATUS          PORTS                  NAMES
cd56760cf433   nginx:latest   "/docker-entrypoint.…"   36 seconds ago   Up 31 seconds   0.0.0.0:4567->80/tcp   tender_benz

Untitled

  • 이번에는 실행중인 컨테이너를 삭제한다.
PS C:\WINDOWS\system32> docker rm -f cd56760cf433
cd56760cf433
PS C:\WINDOWS\system32> docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES

Step 4. 그외 추가 설치

  • WSL2에서는 다양한 리눅스 배포판을 사용할 수 있습니다. 여기서는 가장 많이 사용되는 리눅스 배포판인 Ubuntu를 설치해보겠습니다(Ubuntu는 무료로 사용할 수 있지만, 리눅스 배포판에 따라서 유료인 경우도 있습니다). 맨 앞의 패키지를 선택하고 상세 페이지에서 설치를 진행합니다.

Untitled

  • Windows Ternminal 설치

Untitled

  • UNIX 계정 및 Password를 설정한다.

Untitled

Installing, this may take a few minutes...
Please create a default UNIX user account. The username does not need to match your Windows username.
For more information visit: https://aka.ms/wslusers
Enter new UNIX username: human
New password:
Retype new password:
passwd: password updated successfully
Installation successful!
To run a command as administrator (user "root"), use "sudo <command>".
See "man sudo_root" for details.

Welcome to Ubuntu 20.04.4 LTS (GNU/Linux 5.10.16.3-microsoft-standard-WSL2 x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/advantage

  System information as of Tue Apr  5 17:16:59 KST 2022

  System load:  0.71               Processes:             8
  Usage of /:   0.5% of 250.98GB   Users logged in:       0
  Memory usage: 5%                 IPv4 address for eth0: 172.17.187.7
  Swap usage:   0%

1 update can be applied immediately.
To see these additional updates run: apt list --upgradable

The list of available updates is more than a week old.
To check for new updates run: sudo apt update

This message is shown once a day. To disable it please create the
/home/human/.hushlogin file.
  • ID : human / PW: 1234
  • 다시 터미널을 실행해주세요(이 때는 관리자 모드를 사용하지 않아도 됩니다). 이제 WSL을 관리하기 위한 wsl명령어를 사용할 수 있습니다. wsl -l -v로 현재 설치된 리눅스를 확인해봅니다.
  • WSL 제대로 실행되었는지 확인하는 코드
PS C:\WINDOWS\system32> wsl -l -v
  NAME                   STATE           VERSION
* docker-desktop         Running         2
  Ubuntu                 Running         2
  docker-desktop-data    Running         2

앞의 *는 디폴트 머신을 의미합니다. 여기서 버전 컬럼은 WSL의 버전을 의미합니다. 2가 출력된다면 그대로 사용하면 됩니다. 만약 버전이 1이라고 나온다면 다음 명령을 실행해줍니다.

$ wsl --set-version Ubuntu 2
변환이 진행 중입니다.   정도 걸릴  있습니다...
WSL 2와의 주요 차이점에 대한 자세한 내용은 https://aka.ms/wsl2를 참조하세요
변환이 완료되었습니다.

실행 후 ’변환이 완료되었습니다’라는 출력 결과를 꼭 확인해주세요. 다시 wsl -l -v  명령어로 확인해봅니다. 변환이 잘 되었는지 확인해보겠습니다.

WSL 에러 대처법

  • 자료 1 : https://docs.microsoft.com/en-us/windows/wsl/install-manual#step-3—enable-virtual-machine-feature
  • Error when trying to upgrade: Invalid command line option: wsl --set-version Ubuntu 2
    • Ensure that you have the Windows Subsystem for Linux enabled, and that you’re using Windows Build version 18362 or higher. To enable WSL run this command in a PowerShell prompt with admin privileges: Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux.
  • 가상화 설치 필요 시
$ systeminfo
.
.
.
Hyper-V 요구 사항:       VM 모니터 모드 확장: 
                         펌웨어에 가상화 사용: 아니요
                          번째 수준 주소 변환: 
                         데이터 실행 방지 사용 가능: