LoginSignup
1
4

More than 1 year has passed since last update.

windows IIS を macOS で立ち上げる

Posted at

はじめに

  • WindowsのWebサーバーであるIISは基本的にはWindowsOS上でしか動作しない
  • docker imageも公式で用意されているが、Docker for macやlinux版では動作しない
  • そのためmac環境では通常だとIISを立ち上げることが難しい
  • 本記事はそんな面倒な制約があるIISをmac上で動かす方法を記述する

環境

  • macOS BigSur ver11.6.5
  • windows server2019 を立てる

概要

  • ホストOS(macOX) -> ゲストOS(VirtualBox-windows server2019) -> ゲストOS上のゲストOS(IIS Docker container)という通信経路
    • localhost:8080 -> localhost:8080(VirtualBox) -> localhost:80(IIS)
  • windows 用 docker image である IIS を vuitual box 上で起動して、ホスト PC からブラウザ経由でアクセスできるまで
  • image tag はwindowsservercore-ltsc2019

流れ

  1. Vagrant と Virtual Box のインストール
  2. Docker machine のインストール
  3. Windows Server 2019 の Docker machine を構築する
  4. VirtualBox で NAT 設定
  5. IIS Docker image を run する
  6. ブラウザから確認

Vagrant と Virtual Box のインストール

  • brew install vagrant virtualbox --cask
  • virtualbox をインストールする時にセキュリティとプライバシーの設定に関する画面がでるので、許可しておく。
    設定画面

Docker machine のインストール

  • 重要 docker machine の最新版をインストールすること

    • fatal error: MSpanList_Insertのようなエラーが発生する可能性がある
  • docker machine git

     curl -L https://github.com/docker/machine/releases/download/v0.16.2/docker-machine-`uname -s`-`uname -m` >/usr/local/bin/docker-machine && \
     chmod +x /usr/local/bin/docker-machine
    

Windows Server 2019 の Docker machine を構築する

  • StefanScherer/windows-docker-machineを利用する

  • 2019-boxを使う

     git clone https://github.com/StefanScherer/windows-docker-machine
     cd windows-docker-machine
     vagrant up 2019-box
    
  • Docker machine の確認

    • vagrant upコマンドが終わったあと、Docker machine ができているかの確認をする
        $ docker-machine ls
    
        NAME       ACTIVE   DRIVER    STATE     URL                        SWARM   DOCKER          ERRORS
        2019-box   -        generic   Running   tcp://192.168.99.90:2376           v18.03.1-ee-3
    
    • 自分は下記のように表示されたが、その後の作業に影響はなかったため、先に進んだ

        NAME       ACTIVE   DRIVER    STATE     URL                        SWARM   DOCKER    ERRORS
        2019-box   *        generic   Running   tcp://192.168.59.90:2376           Unknown   Unable to query docker version: 400 Bad Request: client version 1.15 is too old. Minimum supported API version is 1.24, please upgrade your client to a newer version
      
  • Docker machine の利用

    • docker を virtual box で起動した windows 環境の Docker に切り替える

          $ eval $(docker-machine env 2019-box)
      
    • 切り替わっているかの確認

      • windows docker machine

            $ docker version
            Client:
             Cloud integration: 1.0.17
             Version:           20.10.8
             API version:       1.41
             Go version:        go1.16.6
             Git commit:        3967b7d
             Built:             Fri Jul 30 19:55:20 2021
             OS/Arch:           darwin/amd64
             Context:           default
             Experimental:      true
        
            Server: Docker Engine - Community
             Engine:
              Version:          20.10.6
              API version:      1.41 (minimum version 1.24)
              Go version:       go1.13.15
              Git commit:       8728dd2
              Built:            Fri Apr  9 22:45:40 2021
              OS/Arch:          windows/amd64
              Experimental:     false
        
      • windows/amd64になっていることが確認できる

        • コマンドを打ったターミナルでのみ切り替わっている状態
  • Docker machine を戻す

    • macos 上の docker machine に戻したい時

           $ eval $(docker-machine env --unset)
      
    • 切り替わっているかの確認

      • macos docker machine

            Client:
             Cloud integration: 1.0.17
             Version:           20.10.8
             API version:       1.41
             Go version:        go1.16.6
             Git commit:        3967b7d
             Built:             Fri Jul 30 19:55:20 2021
             OS/Arch:           darwin/amd64
             Context:           default
             Experimental:      true
        
              Server: Docker Engine - Community
               Engine:
                Version:          20.10.8
                API version:      1.41 (minimum version 1.12)
                Go version:       go1.16.6
                Git commit:       75249d8
                Built:            Fri Jul 30 19:52:31 2021
                OS/Arch:          linux/amd64
                Experimental:     false
               containerd:
                Version:          1.4.9
                GitCommit:        e25210fe30a0a703442421b0f60afac609f950a3
               runc:
                Version:          1.0.1
                GitCommit:        v1.0.1-0-g4144b63
               docker-init:
                Version:          0.19.0
                GitCommit:        de40ad0
        
      • linux/amd64になっていることが確認できる

VirtualBox で NAT 設定

  • 2019-boxの NAT 設定を行い、ホスト OS と VirtualBox 間を通信できるようにしておく

  • virtualbox のウィンドウを開く

    • brew で install したのでアプリは開ける状態になっている
      launchpad
  • マネージャーで2019-boxが実行中であることが確認できる
    manager

  • 設定->ネットワーク->高度からポートフォワーディングのボタンをクリック
    network

  • http tcp localhost 8080の設定を追加する(他の設定はデフォルトで設定されていた)
    portfoward

IIS Docker image を run する

  • Windows IISイメージを run する

  • タグはwindowsservercore-ltsc2019

    • windows docker machine
          docker run --entrypoint powershell -it -p 8080:80 mcr.microsoft.com/windows/servercore/iis:windowsservercore-ltsc2019
      

ブラウザから確認

  • ブラウザからhttp://localhost:8080でアクセスすると、IIS の初期画面が表示される
    初期画面

その他

  • IIS のデフォルト画面の場所はC:\inetpub\wwwroot\iisstart.htm
  • virtualbox をシャットダウン
    • macos docker machine
          vagrant halt
      
  • IIS 上に資材のデプロイ
    • windows docker machine
        docker cp ./ [container name]:"C:\inetpub\wwwroot"
      

トラブルシュート

ブラウザから IIS にアクセスできない

  • 各階層それぞれで IIS に繋がるか確認していく
    • IIS docker 上で Web サーバが立ち上がっているか
      • docker container の中に入る
        • windows docker machine
              docker exec -it powershell [container name]
          
      • リクエストを叩く
            Invoke-WebRequest http://localhost:80 -UseBasicParsing
        
    • Virtual box 上で IIS docker container に繋がるか確認していく
      • virtual box のマネージャーを開き、表示をクリックして画面を立ち上げる
        画面

            curl localhost:8080
        

参考文献

1
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
4