윈도우 홈에디션, WSL2에서 도커 사용하기

결론: 사용하지 말자

아래 내용은 작성하다 말았다. 도커 레지스트리에 push가 안된다

Ubuntu를 선택해서 설치했더니 2020년 8월 2일기준 Ubuntu 20.04 버전이 설치되었다.

$  lsb_release -a

No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 20.04 LTS
Release:        20.04
Codename:       focal

기존 도커 설치 제거

https://blog.naver.com/PostView.nhn?blogId=ilikebigmac&logNo=222007741507

$  sudo apt-get remove docker docker-engine docker.io

필수 유틸리티 추가

$  sudo apt-get update

$  sudo apt-get install \
    apt-transport-https \
    ca-certificates \
    curl \
    software-properties-common

도커 GPG 키 등록

도커 이미지를 만든 사람의 퍼블릭키를 신뢰하는 키로 등록하는 과정이다. 신뢰를 해야 리눅스에 도커를 설치를 할 수 있다.

$  curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

Trouble shooting

나의 경우는 apt-key add에서 아래와 같은 에러가 발생했다.

gpg: can't connect to the agent: IPC connect call failed
$  sudo apt-get remove gpg
$  sudo apt-get install gnupg1
$  curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
$  sudo apt-get remove gnupg1

# software-properties-common에 gnupg2가 포함되어 있다.
$  sudo apt-get install software-properties-common

docker-ce 설치

$  sudo add-apt-repository \
 "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
 $(lsb_release -cs) \
 stable"
$  sudo apt-get update
$  sudo apt-get install docker-ce

사용자 추가

사용자를 docker 그룹에 추가한다.

$  sudo usermod -aG docker $USER

도커 버전 확인

$  docker version
Client: Docker Engine - Community
 Version:           19.03.12
 API version:       1.40
 Go version:        go1.13.10
 Git commit:        48a66213fe
 Built:             Mon Jun 22 15:45:44 2020
 OS/Arch:           linux/amd64
 Experimental:      false

도커 머신

윈도우 홈에디션 사용자는 도커를 사용하기 위해 도커 툴박스를 설치한다.

도커 머신을 어떤 목적으로 사용하는가?

도커 머신 설치

아래 링크에 윈도우, 리눅스, 맥에서 각각 설치하는 방법이 나온다. https://docs.docker.com/machine/install-machine/

WSL 환경이므로 리눅스 설치 방법을 따른다. 2020년 8월2일 현재 최신 버전은 0.16.2

$  base=https://github.com/docker/machine/releases/download/v0.16.2 &&
  curl -L $base/docker-machine-$(uname -s)-$(uname -m) >/tmp/docker-machine &&
  sudo mv /tmp/docker-machine /usr/local/bin/docker-machine &&
  chmod +x /usr/local/bin/docker-machine

도커 머신 생성

아래의 IP주소는 개발 서버 IP주소이다. 그리고 개발서버 도커 유저의 authorized_keys에 나의 공개키가 등록되어 있어야 한다.

$  docker-machine create \
   --driver generic \
   --generic-ip-address=192.168.114.60 \
   --generic-ssh-key ~/.ssh/id_rsa \
   --generic-ssh-user app  \
   server60

아래 명령은 도커 머신의 목록을 확인한다. server60의 ACTIVE가 -로 표시되는데, 나의 WSL과 연결되면 * 표시로 바뀐다.

$  docker-machine ls

NAME       ACTIVE   DRIVER    STATE     URL                         SWARM   DOCKER      ERRORS
server60   -        generic   Running   tcp://192.168.114.60:2376           v19.03.12

bash completion 스크립트 설치

# 아래와 같이 임시 스크립트를 만들고
$  cat a.sh
base=https://raw.githubusercontent.com/docker/machine/v0.16.2
for i in docker-machine-prompt.bash docker-machine-wrapper.bash docker-machine.bash
do
sudo wget "$base/contrib/completion/bash/${i}" -P /etc/bash_completion.d
done

# sudo 실행
$  sudo sh a.sh

docker-machine env 사용법

$  docker-machine env server60
export DOCKER_TLS_VERIFY="1"
export DOCKER_HOST="tcp://192.168.114.60:2376"
export DOCKER_CERT_PATH="/home/jjfive/.docker/machine/machines/server60"
export DOCKER_MACHINE_NAME="server60"
# Run this command to configure your shell:
# eval $(docker-machine env server60)

# 쉘에 적용하려면 eval 명령을 사용
$  eval $(docker-machine env server60)

$ docker-machine ls

NAME       ACTIVE   DRIVER    STATE     URL                         SWARM   DOCKER      ERRORS
server60   *        generic   Running   tcp://192.168.114.60:2376           v19.03.12
# 윈도우의 WSL에서 실행
$ docker run hello-world

server60 호스트에서 도커 이미지 목록을 조회하면 hello-world 이미지가 있다.

# server60에서 실행
$  docker image ls hello-world

REPOSITORY          TAG                 IMAGE ID
hello-world         latest              bf756fb1ae65

사설 도커 레지스트리에 업로드

docker 이미지를 만들었으면 이제 사설 도커 레지스트리에 업로드 해야 한다. 아무나 업로드 하면 안되므로, 로그인을 해야 한다.

$  docker tag hello-world hub.jjfive.net/pub/hello-world

사설 도커 레지스트리에 로그인

아래 명령으로 로그인을 할 수 있다. 하지만 실패한다.

$  docker login hub.jjfive.net
Username: jjfive
Password:
Error response from daemon: login attempt to https://hub.jjfive.net/v2/ failed with status: 404 Not Found

pass 명령을 이용

$  sudo apt install pass

Gpg2는 동작을 않해

$  gpg1 --gen-key

pub   2048R/9F1EB336 2020-08-02
      Key fingerprint = 6FDB E4E5 D763 35D9 8F5A  402A 91DB 58E0 9F1E B336
uid                  jjfive <ohlab.kr@gmail.com>
sub   2048R/5898E1A1 2020-08-02
$  pass init 9F1EB336

mkdir: created directory '/home/jjfive/.password-store/'
Password store initialized for 9F1EB336

도커 로그인과 pass 연동

$  pass insert docker-credential-helpers/docker-pass-initialized-check
$  docker-credential-pass list

정말 더러버서 못쓰겠다. 윈도우 Pro를 사던지 해야지