Docker 백엔드에서 VMware Workstation Player 사용

https://qiita.com/advent-calendar/2020/sgg
이 기사는 SGG(Advent Calendaar) 2020 22일차 기사다.
21일be bound to "꼭~해야 돼" 잖아요.
23일Firebase Authentication 로그인을 G Suit 조직으로 제한

개시하다


올해 상반기에도 Windows 10 Home은 WSL2를 Docker Desktop for Windows의 백엔드로 사용하기 시작했다.Docker를 WSL2에서 실행하려면'Windows 슈퍼서버 플랫폼'을 유효성화해야 하지만 Hyper-V와 마찬가지로 VMware Workstation Player의 VT-x/EPT의 가상화[1] 기능이 적용되면 시작할 수 없습니다[2].따라서 VT-x/EPT의 유효한 가상 머신을 시작하기 위해 Docker Desktop for Windows 백엔드에서 VMware Workstation Player를 사용하고 싶습니다.
サイドチャネルの緩和
仮想 Intel VT-x/EPT
VT-x/EPT 가상화가 활성화되어 있으면 시작할 수 없습니다.

컨디션

  • Windows 10 Home 20H2
  • Docker Desktop for Windows 3.0.0
  • VMware Workstation 16 Player 16.1.0
  • ※ 본문에는 다음과 같이 설정되어 있습니다.적당히 다시 읽으세요.
    항목

    VM용 OS
    ArchLinux
    VM의 NetBIOS 이름
    dockersrv
    Docker의 포트 번호
    2375

    절차.


    1. 초진동기 기능의 무효화


    우선 초진동기 기능을 무효화한다.Hyper-V의 무효화와 같은 명령입니다.
    명령 프롬프트/PowerShell(관리자)
    > bcdedit.exe /set hypervisorlaunchtype off
    
    명령을 실행한 후 PC를 다시 시작합니다.

    2. VM을 사용하여 [VM]Docker 이동


    VMware Workstation Player에서 모바일 Docker의 가상 머신을 만듭니다.리눅스 계열이라면 어떤 발행을 사용하든 변하지 않을 것 같다[3].또한 자세한 OS 설치, Docker 설치 단계는 생략합니다.
    네트워크 어댑터를 브리지로 설정하는 것이 좋습니다[4].

    3. [VM]Docker의 시작 설정 변경


    Windows에서 액세스할 수 있도록 Docker의 서비스 시작 설정(docker.service)을 변경합니다.docker.service 경로는 릴리스에 따라 다릅니다.다음 명령을 사용해도 표시될 수 있습니다. 사용하십시오.
    Shell(root)
    # systemctl show docker | grep ^FragmentPath | sed -e "s/FragmentPath=//"
    
    docker.service
    [Service]
    # ExecStart=で始まる行の、 -H の次の引数を変更します
    # ポート番号は2375とします
    ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 --containerd=/run/containerd/containerd.sock
    # tcp://0.0.0.0:ポート番号
    
    변경 후 Docker를 다시 시작합니다.
    Shell(root)
    # systemctl restart docker
    
    Docker 자동 시작을 설정합니다.
    Shell(root)
    $ systemctl enable docker
    
    Docker의 시작을 확인합니다.
    Shell
    $ docker ps
    CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES
    
    $ docker run hello-world
    Unable to find image 'hello-world:latest' locally
    latest: Pulling from library/hello-world
    0e03bdcc26d7: Pull complete
    Digest: sha256:1a523af650137b8accdaed439c17d684df61ee4d74feac151b5b337bd29e7eec
    Status: Downloaded newer image for hello-world:latest
    
    Hello from Docker!
    This message shows that your installation appears to be working correctly.
    
    To generate this message, Docker took the following steps:
     1. The Docker client contacted the Docker daemon.
     2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
        (amd64)
     3. The Docker daemon created a new container from that image which runs the
        executable that produces the output you are currently reading.
     4. The Docker daemon streamed that output to the Docker client, which sent it
        to your terminal.
    
    To try something more ambitious, you can run an Ubuntu container with:
     $ docker run -it ubuntu bash
    
    Share images, automate workflows, and more with a free Docker ID:
     https://hub.docker.com/
    
    For more examples and ideas, visit:
     https://docs.docker.com/get-started/
    

    4. [VM]NetBIOS 이름 설정


    NetBIOS 이름을 설정하면 가상 시스템의 IP 주소에 신경 쓰지 않고 Docker를 사용할 수 있습니다.
    NetBIOS 이름을 설정하는 대신 IP 주소를 고정하는 경우 이 작업은 필수가 아닙니다.
    삼바를 설치하고 편집/etc/smb.conf(발매에 따라/usr/local/samba/lib/smb.conf.
    smb.conf
    [global]
    # NetBIOS名をdockersrvとしています
    netbios name = dockersrv
    
    변경 후 nmbd를 다시 시작합니다.
    Shell(root)
    # systemctl restart nmb
    

    5. [Windows] 환경 변수의 설정


    DOCKER_HOST=tcp://dockersrv:2375
    # tcp://NetBIOS名もしくはIPアドレス:ポート番号
    
    Docker의 CLI를 가상 시스템에서 실행 중인 서버에서 사용할 수 있도록 이상의 값을 설정합니다.
    명령 프롬프트/PowerShell(관리자)
    > setx.exe DOCKER_HOST tcp://dockersrv:2375
    # システム環境変数として設定する場合は末尾に -m を追加
    

    (6. [Windows] VM이 자동으로 시작되는 설정)


    가상 머신을 Docker 전용 머신으로 만들면 가상 머신은 Windows의 시작에 따라 설정할 수 있어 편리하다.
    지정할 명령행
    "C:\Program Files (x86)\VMware\VMware Player\vmrun.exe" -T player start "vmxファイルのパス" nogui
    
    매개 변수에 지정된 vmx 파일은 가상 머신 설정 > 옵션 탭 > 일반 작업 디렉터리에 저장됩니다.

    확인


    명령 프롬프트/PowerShell
    > docker ps
    CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES
    
    > docker run hello-world
    
    docker run hello-world의 실행 결과
    Hello from Docker!
    This message shows that your installation appears to be working correctly.
    
    To generate this message, Docker took the following steps:
     1. The Docker client contacted the Docker daemon.
     2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
        (amd64)
     3. The Docker daemon created a new container from that image which runs the
        executable that produces the output you are currently reading.
     4. The Docker daemon streamed that output to the Docker client, which sent it
        to your terminal.
    
    To try something more ambitious, you can run an Ubuntu container with:
     $ docker run -it ubuntu bash
    
    Share images, automate workflows, and more with a free Docker ID:
     https://hub.docker.com/
    
    For more examples and ideas, visit:
     https://docs.docker.com/get-started/
    
    가상 머신에서 한 번 실행된 적이 있기 때문에
    Unable to find image 'hello-world:latest' locally
    latest: Pulling from library/hello-world
    0e03bdcc26d7: Pull complete
    Digest: sha256:1a523af650137b8accdaed439c17d684df61ee4d74feac151b5b337bd29e7eec
    Status: Downloaded newer image for hello-world:latest
    
    대화 상자.

    총결산


    지금까지 Docker를 이동하면서 가상 시스템에서 가상 시스템을 이동했습니다.
    가상 머신에서 QEMU와 KVM 등을 조합하려면 반드시 사용 방법을 모색해 보십시오.
    잡담
    이 방법을 모색할 때 나는 내가 왜 VT-x/EPT의 가상화를 효과적으로 해야 하는지 잊어버렸다.
    각주
    가상 시스템에서 Intel의 가상화 기술인 VT-x/EPT를 사용하면 가상 시스템에서 KVM을 사용할 수 있습니다.또한 AMD↩︎
    여러 가상화 소프트웨어가 동시에 VT-x/EPT를 사용할 수 없기 때문이라고 합니다.↩︎
    Docker 전용인 경우 GUI가 없는 배포를 선택하면 CPU/메모리 사용량이 억제됩니다.↩︎
    내 환경에서 NAT를 설정하면 잘 돌아가지 못하는데...↩︎

    좋은 웹페이지 즐겨찾기