Windows Server Docker インストール

2020-11-16 | コメント(1)

Windows Server に Docker をインストールする。

Microsoft Docs 参考サイト
Windows のコンテナー 環境をセットアップする

Windows Server 2019 の Docker はデフォルトでプロセス分離で動作するため、Hyper-V は必要ありません。

コンテナー作成時に、--isolation パラメーターで、Hyper-V分離を指定することもできます。その場合は Hyper-V が必要です。

なお、Windows 10 に Docker をインストールするには、当エントリーでは無く、
Windows 10 Docker インストール
を参考にしてください。

Windows の Docker は、Windows コンテナー の機能に依存しているため、先に Windows コンテナー をインストールします。

役割の機能と追加ウイザードで、機能の選択画面で、Containers を選択しインストールします。

Windows Server 2019 機能の選択 Containers

コンテナーのインストールには再起動が必要なので、インストールオプションの確認で、「必要に応じて対象サーバーを自動的に再起動する」にチェックして自動的に再起動させても良いでしょう。

自動的に再起動しない場合の完了画面

Windows Server 2019 機能の選択 Containers 完了

手動でPowerShellから再起動させるコマンド

Restart-Computer -Force

再起動されるときに、コンテナーがインストールされます。

再起動後、PowerShell ギャラリーからDocker用のマニフェストを更新します。

PowerShellで次のコマンドを実行。

PS C:\Users\Administrator> Install-Module -Name DockerMsftProvider -Repository PSGallery -Force

すると次の確認が来ます。

続行するには NuGet プロバイダーが必要です
PowerShellGet で NuGet ベースのリポジトリを操作するには、'2.8.5.201' 以降のバージョンの NuGet
プロバイダーが必要です。NuGet プロバイダーは 'C:\Program Files\PackageManagement\ProviderAssemblies' または
'C:\Users\Administrator\AppData\Local\PackageManagement\ProviderAssemblies'
に配置する必要があります。'Install-PackageProvider -Name NuGet -MinimumVersion 2.8.5.201 -Force' を実行して NuGet
プロバイダーをインストールすることもできます。今すぐ PowerShellGet で NuGet
プロバイダーをインストールしてインポートしますか?
[Y] はい(Y)  [N] いいえ(N)  [S] 中断(S)  [?] ヘルプ (既定値は "Y"):

Yを入力して続行します。

Install-Module -Name DockerMsftProvider -Repository PSGallery -Force

この説明の通りに、先に NuGet プロバイダー のインストールを済ましておくと、この確認は出ません。

Install-PackageProvider -Name NuGet -MinimumVersion 2.8.5.201 -Force

ここで、インストールされた NuGet プロバイダー のファイルは、
C:\Program Files\PackageManagement\ProviderAssemblies\nuget\2.8.5.208
にあります。

Microsoft.PackageManagement.NuGetProvider.dll

次に Docker をインストール

PS C:\Users\Administrator> Install-Package -Name docker -ProviderName DockerMsftProvider

次の質問が来ます。

パッケージは、信頼済みとマークされていないパッケージ ソースから取得されています。
'DockerDefault' からソフトウェアをアンインストールしますか?
[Y] はい(Y)  [A] すべて続行(A)  [N] いいえ(N)  [L] すべて無視(L)  [S] 中断(S)  [?] ヘルプ (既定値は "N"):

Aを入力して続行します。

インストール完了時に結果が表示されます。バージョンも表示されているのが確認できます。

Name                           Version          Source           Summary
----                           -------          ------           -------
Docker                         19.03.12         DockerDefault    Contains Docker EE for use with Windows Server.

Install-Package -Name docker -ProviderName DockerMsftProvider

ここで、再度、再起動します。

Restart-Computer -Force

再起動後、docker というサービスが起動しています。表示名は Docker Engine です。

Windows Server 2019 サービス Docker Engine

Windows Server 2019 サービス Docker Engine プロパティ

Dockerのファイルは、C:\Program Files\Docker にあります。

Windows Server 2019 Docker ファイル

システム環境変数の Path には、Dockerのパスが追加されています。

Windows Server 2019 Docker用環境変数

Windows Server 2019 Docker用path

一応、dockerのインストール自体はこれで完了です。(Linuxを動かすには、まだですが)

Docker のバージョンを確認してみましょう。

バージョン確認のコマンドは docker version です。

PS C:\Users\Administrator> docker version
Client: Docker Engine - Enterprise
 Version:           19.03.12
 API version:       1.40
 Go version:        go1.13.13
 Git commit:        4306744
 Built:             08/05/2020 19:27:53
 OS/Arch:           windows/amd64
 Experimental:      false

Server: Docker Engine - Enterprise
 Engine:
  Version:          19.03.12
  API version:      1.40 (minimum version 1.24)
  Go version:       go1.13.13
  Git commit:       f295753ffd
  Built:            08/05/2020 19:26:41
  OS/Arch:          windows/amd64
  Experimental:     false
PS C:\Users\Administrator>

インストール時にも表示されましたが、Docker のバージョンは 19.03.12 でした。

コンテナーにWindowsイメージを取得してみましょう。

Microsoftサイト、docker hubへのリンクあり。
コンテナーの基本イメージ

Windows コンテナーは、ホストOSのバージョンによって、利用できるイメージのバージョンが制限されます。

OSのバージョンは、1809 等のバージョンではなく、システム情報で見えるバージョンです。

例として、以下 Windows Server 2019 Standard 1809 ですが、OSバージョンは 10.0.17763 と確認できます。

Windows Server 2019 システム情報 バージョン

Docker Hub の Windows Images 一覧で、OsVersion という列がありますが、この場合、ここが 10.0.17763 までのものが利用できるということになります。

nanoserver なら 1809
servercore なら ltsc2019
という具合です。

つまり、ホストOSが最上位のバージョンであれば、(その時点での)全てのバージョンのイメージを利用できるとも言えます。

試しに、NanoServer 1809 を pullしてみます。

docker pull mcr.microsoft.com/windows/nanoserver:1809

PS C:\Users\Administrator> docker pull mcr.microsoft.com/windows/nanoserver:1809
1809: Pulling from windows/nanoserver
ecf9bb62dc6e: Pull complete
Digest: sha256:e55f24fbbb1b1cd831977136169971bfacb34a6490a60c68f2eddf82659c099f
Status: Downloaded newer image for mcr.microsoft.com/windows/nanoserver:1809
mcr.microsoft.com/windows/nanoserver:1809

イメージ一覧

PS C:\Users\Administrator> docker images
REPOSITORY                             TAG                 IMAGE ID            CREATED             SIZE
mcr.microsoft.com/windows/nanoserver   1809                9e0259a60cc3        4 weeks ago         251MB

docker pull NanoServer:1809

これで、NanoServerのイメージ元が準備できたことになります。

pullしたファイルはどこにあるか?

Windowsイメージは、C:\ProgramData\docker\windowsfilter\ の配下にあるみたいです。

だからと言って、ここのファイルは触らないほうが良いです。

このNanoServerを実行し、cmd に入ってみます。

PS C:\Users\Administrator> docker run -it mcr.microsoft.com/windows/nanoserver:1809 cmd.exe

コンソールがクリアされて、新規の NanoServer が立ち上がり cmd で入力待ちになります。

dir でファイル一覧を見ても、ホストPCとは違うことが判ります。

nanoserver からは、exit で抜けられます。

docker pull NanoServer:1809

上の画面は、nanoserver を抜けた後、この NanoServer を削除しています。

Windows Server 2019 の Docker には、Docker Compose が入っていないので、
GitHub から最新(Latest release) の docker-compose-Windows-x86_64.exe を取得します。

GitHub Docker Compose

ダウンロードした、docker-compose-Windows-x86_64.exe を docker-compose.exe にリネームして、C:\Program Files\Docker にコピーします。

ファイルのブロック

ダウンロードしたファイルは、ブロックされているので、許可するのを忘れないでください。

docker-compose.exe にリネーム

C:\Program Files\Docker にコピー

Docker Compose の配置

Docker Compose のバージョンは、docker-compose version で確認できます。

PS C:\Users\Administrator> docker-compose version
docker-compose version 1.27.4, build 40524192
docker-py version: 4.3.1
CPython version: 3.7.4
OpenSSL version: OpenSSL 1.1.1c  28 May 2019

Docker Compose のバージョン

GitHub から、LinuxKit の release.zip を取得します。

GitHub linuxkit / lcow

当エントリー投稿時 v4.14.35-v0.3.9 でした。

ファイルのブロック

ダウンロードしたファイルは、ブロックされているので、許可するのを忘れないでください。

C:\Program Files 配下に Linux Containers フォルダを作成し、release.zip の解凍ファイルを置きます。

LinuxKit の配置

Experimental 機能を有効にするため、C:\ProgramData\docker\config フォルダに、daemon.json テキストファイルを作成します。

C:\ProgramData は隠しフォルダなので、隠しファイル/隠しフォルダを表示にして確認してください。

daemon.json には以下の内容を記述します。

{
    "experimental": true
}

設定を反映させるため、PCを再起動します。Dockerサービスの再起動でも良いです。

Restart-Computer -Force
# または
Restart-Service docker

再起動後、docker version を確認すると、Experimental が有効になっていることが確認できます。

PS C:\Users\Administrator> docker version
Client: Docker Engine - Enterprise
 Version:           19.03.12
 API version:       1.40
 Go version:        go1.13.13
 Git commit:        4306744
 Built:             08/05/2020 19:27:53
 OS/Arch:           windows/amd64
 Experimental:      false

Server: Docker Engine - Enterprise
 Engine:
  Version:          19.03.12
  API version:      1.40 (minimum version 1.24)
  Go version:       go1.13.13
  Git commit:       f295753ffd
  Built:            08/05/2020 19:26:41
  OS/Arch:          windows/amd64
  Experimental:     true

Docker Experimental 有効

Linuxイメージを取得してみましょう。Ubuntu 18.04 を取得してみます。

Docker Official Images, Ubuntu Tag
Ubuntu

docker pull ubuntu:18.04

PS C:\Users\Administrator> docker pull ubuntu:18.04
18.04: Pulling from library/ubuntu
171857c49d0f: Pull complete
419640447d26: Pull complete
61e52f862619: Pull complete
Digest: sha256:646942475da61b4ce9cc5b3fadb42642ea90e5d0de46111458e100ff2c7031e6
Status: Downloaded newer image for ubuntu:18.04
docker.io/library/ubuntu:18.04

Docker Ubuntu Pull

Experimental 機能が無効だと、ubuntuのpullができません。以下のようにエラーになります。

18.04: Pulling from library/ubuntu
no matching manifest for windows/amd64 10.0.17763 in the manifest list entries

Docker Ubuntu Pull エラー

docker images

PS C:\Users\Administrator> docker images
REPOSITORY                             TAG                 IMAGE ID            CREATED             SIZE
ubuntu                                 18.04               56def654ec22        2 weeks ago         72.9MB
mcr.microsoft.com/windows/nanoserver   1809                9e0259a60cc3        5 weeks ago         251MB

Ubuntu 18.04 は、たったの 72.9MB しかありません。ダウンロードも軽量です。

Ubuntu を起動して、Apacheを動かしてみます。

Ubuntu 起動

docker run -it -d -p 8080:80 -p 8443:443 ubuntu:18.04

Ubuntu 内 bash

apt update
apt upgrade

apt install apache2 -y

a2enmod ssl
a2ensite default-ssl

service apache2 restart

Docker Ubuntu Apache 実行

ホスト側から、UbuntuのApacheにアクセスできました。

カテゴリ:

コメント(1)

今回の環境はAzureで構築したものでしょうか?
AWSのWindowsServer2019で構築した場合ubuntuのコンテナが起動しませんでした。

コメントする

※HTMLタグは使えません

Author

あきちゃん

主に、.NETでWebシステムの設計と開発をしています。
(茨城県在住, 都内勤務)
プロフィール