Windows10 Update가 왔으므로 WSL2에서 Ubuntu 20.04 LTS를 시작하고 Docker 설치

소개



오늘 2020년 05월 28일에 Windows10 2004 May 2020 Update가 정식으로 온 것 같네요😊

최근 PC를 구입해, Linux를 듀얼 부트로 인스톨 하려고 생각하고 있었습니다만, WSL2가 곧 온다고 하기 때문에 기다리고 있었습니다.

이번 Windows Update 에서 WSL2 를 사용할 수 있게 된다는 것이었기 때문에, 「Ubuntu 20.04 LTS」를 WSL2 로 움직여, Docker 를 인스톨 해 동작 확인까지 실시하고 싶습니다 🙆‍♀️

Windows10 2004 May 2020 업데이트



좀 더 기다리면 Windows Update의 갱신 확인에도 나올 것이라고 생각합니다만, 이번은 Windows 10 다운로드 사이트에서 갱신하고 있습니다.



WSL2 설치



Windows PowerShell을 관리자 권한으로 실행합니다.

Linux용 Windows 서브시스템 및 가상 머신 플랫폼 사용


dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart

WSL 2 Linux 커널 업데이트



WSL 2 Linux 커널 업데이트
에서 최신 WSL2 Linux 커널 업데이트 패키지 다운로드 및 설치

WSL 기본값을 WSL2로 설정


wsl --set-default-version 2

Ubuntu 20.04 LTS 다운로드



Microsoft Store에서 linux를 검색하고 "Ubuntu 20.04 LTS"를 설치합니다.



버전 확인


wsl --list --verbose

버전이 2이면 OK

Ubuntu 20.04 LTS 시작





기동하면 이 화면이 나오므로 유저를 등록하면 완료입니다.

Docker 설치



우분투에 도커 설치
를 참고하면서 설치해 봅니다.

우선 최신으로


sudo apt update
sudo apt upgrade -y

전제 소프트웨어 설치


sudo apt install -y apt-transport-https ca-certificates curl software-properties-common

docker 공식 GPG 공개 키 설치


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

apt 리포지토리 설정


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

docker 및 docker-compose 설치


sudo apt install -y docker-ce docker-compose

그러면 GRUB install devices 확인 화면이 나왔습니다.


Vagrant 환경에서 Ubuntu를 업그레이드 할 때 발생하는 GRUB 문의
확인해 보았지만 문제가없는 것 같습니다.

예를 선택하여 설치가 완료되었습니다.

docker daemon 시작


sudo service docker start

docker 그룹에 추가


sudo usermod -aG docker $USER

그룹 반영을 위해 한 번 다시 시작합니다.

시작 확인


$ docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
t

docker ps에서 위와 같이 오류가 없으면 설치가 완료됩니다.

동작 확인을 시도합니다.



여기는 실제로하지 않아도 괜찮습니다.

이전 Docker Desktop for Windows에서 Rocket.Chat을 움직이면 MongoDB가 움직이지 않아 오류가 있었으므로 Rocket.Chat에서 확인하고 싶습니다.
mkdir -p docker/rocketchat
cd docker/rocketchat/
curl -L https://raw.githubusercontent.com/RocketChat/Rocket.Chat/develop/docker-compose.yml -o docker-compose.yml

docker-compose.yml의 내용 확인

docker-compose.yml
version: '2'

services:
  rocketchat:
    image: rocketchat/rocket.chat:latest
    command: >
      bash -c
        "for i in `seq 1 30`; do
          node main.js &&
          s=$$? && break || s=$$?;
          echo \"Tried $$i times. Waiting 5 secs...\";
          sleep 5;
        done; (exit $$s)"
    restart: unless-stopped
    volumes:
      - ./uploads:/app/uploads
    environment:
      - PORT=3000
      - ROOT_URL=http://localhost:3000
      - MONGO_URL=mongodb://mongo:27017/rocketchat
      - MONGO_OPLOG_URL=mongodb://mongo:27017/local
      - MAIL_URL=smtp://smtp.email
#       - HTTP_PROXY=http://proxy.domain.com
#       - HTTPS_PROXY=http://proxy.domain.com
    depends_on:
      - mongo
    ports:
      - 3000:3000
    labels:
      - "traefik.backend=rocketchat"
      - "traefik.frontend.rule=Host: your.domain.tld"

  mongo:
    image: mongo:4.0
    restart: unless-stopped
    volumes:
     - ./data/db:/data/db
     #- ./data/dump:/dump
    command: mongod --smallfiles --oplogSize 128 --replSet rs0 --storageEngine=mmapv1
    labels:
      - "traefik.enable=false"

  # this container's job is just run the command to initialize the replica set.
  # it will run the command and remove himself (it will not stay running)
  mongo-init-replica:
    image: mongo:4.0
    command: >
      bash -c
        "for i in `seq 1 30`; do
          mongo mongo/rocketchat --eval \"
            rs.initiate({
              _id: 'rs0',
              members: [ { _id: 0, host: 'localhost:27017' } ]})\" &&
          s=$$? && break || s=$$?;
          echo \"Tried $$i times. Waiting 5 secs...\";
          sleep 5;
        done; (exit $$s)"
    depends_on:
      - mongo

  # hubot, the popular chatbot (add the bot user first and change the password before starting this image)
  hubot:
    image: rocketchat/hubot-rocketchat:latest
    restart: unless-stopped
    environment:
      - ROCKETCHAT_URL=rocketchat:3000
      - ROCKETCHAT_ROOM=GENERAL
      - ROCKETCHAT_USER=bot
      - ROCKETCHAT_PASSWORD=botpassword
      - BOT_NAME=bot
  # you can add more scripts as you'd like here, they need to be installable by npm
      - EXTERNAL_SCRIPTS=hubot-help,hubot-seen,hubot-links,hubot-diagnostics
    depends_on:
      - rocketchat
    labels:
      - "traefik.enable=false"
    volumes:
      - ./scripts:/home/hubot/scripts
  # this is used to expose the hubot port for notifications on the host on port 3001, e.g. for hubot-jenkins-notifier
    ports:
      - 3001:8080

  #traefik:
  #  image: traefik:latest
  #  restart: unless-stopped
  #  command: >
  #    traefik
  #     --docker
  #     --acme=true
  #     --acme.domains='your.domain.tld'
  #     --acme.email='[email protected]'
  #     --acme.entrypoint=https
  #     --acme.storagefile=acme.json
  #     --defaultentrypoints=http
  #     --defaultentrypoints=https
  #     --entryPoints='Name:http Address::80 Redirect.EntryPoint:https'
  #     --entryPoints='Name:https Address::443 TLS.Certificates:'
  #  ports:
  #    - 80:80
  #    - 443:443
  #  volumes:
  #    - /var/run/docker.sock:/var/run/docker.sock

그대로 실행해 보겠습니다.
docker-compose up -d

http://localhost:3000/
에서 확인


움직였습니다! !

요약



WSL2로 문제없이 Docker가 움직일 수 있을 것 같네요.

MongoDB가 언제부터 할 수 있게 되었는지는 잘 모르겠지만, 일단 움직여서 좋았습니다 😊

Docker Desktop for Windows 라고 docker-compose.yml 에 쓰는 패스를 c:\등과 Windows 형식의 절대 패스로 쓰지 않으면 안 되었습니다만, WSL2 상에서 움직이면 Linux 처럼 쓸 수 있어 상대 패스도 갈 수 있으므로 , 정의 파일을 나눌 필요가 없어졌군요.

"Windws 키"+ "."
로 이모티콘이 칠 수 있게 된 것도 조금 재미있네요 🤣🤣🤣

좋은 웹페이지 즐겨찾기