Windows Server に Docker をインストールする。
Microsoft Docs 参考サイト
Windows のコンテナー 環境をセットアップする
Windows Server 2019 の Docker はデフォルトでプロセス分離で動作するため、Hyper-V は必要ありません。
コンテナー作成時に、--isolation パラメーターで、Hyper-V分離を指定することもできます。その場合は Hyper-V が必要です。
なお、Windows 10 に Docker をインストールするには、当エントリーでは無く、
Windows 10 Docker インストール
を参考にしてください。
目次
- Windowsイメージを動かすために必要なこと
- Windows コンテナーのインストール
- Windows Server 2019 の Docker インストール
- Windowsイメージのpull (Nano Server)
- Docker Compose
- Docker Compose のインストール
- Linuxイメージを動かすために必要なこと
- LinuxKit の インストール (LCOW)
- Experimental 機能を有効にする
- Linuxイメージのpull (Ubuntu 18.04)
Windows コンテナーのインストール
Windows の Docker は、Windows コンテナー の機能に依存しているため、先に Windows コンテナー をインストールします。
役割の機能と追加ウイザードで、機能の選択画面で、Containers を選択しインストールします。
コンテナーのインストールには再起動が必要なので、インストールオプションの確認で、「必要に応じて対象サーバーを自動的に再起動する」にチェックして自動的に再起動させても良いでしょう。
自動的に再起動しない場合の完了画面
手動でPowerShellから再起動させるコマンド
Restart-Computer -Force
再起動されるときに、コンテナーがインストールされます。
Windows Server 2019 の Docker インストール
再起動後、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を入力して続行します。
この説明の通りに、先に NuGet プロバイダー のインストールを済ましておくと、この確認は出ません。
Install-PackageProvider -Name NuGet -MinimumVersion 2.8.5.201 -Force
ここで、インストールされた NuGet プロバイダー のファイルは、
C:\Program Files\PackageManagement\ProviderAssemblies\nuget\2.8.5.208
にあります。
次に 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.
ここで、再度、再起動します。
Restart-Computer -Force
再起動後、docker というサービスが起動しています。表示名は Docker Engine です。
Dockerのファイルは、C:\Program Files\Docker にあります。
システム環境変数の Path には、Dockerのパスが追加されています。
一応、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イメージのpull (Nano Server)
コンテナーにWindowsイメージを取得してみましょう。
Microsoftサイト、docker hubへのリンクあり。
コンテナーの基本イメージ
Windows コンテナーは、ホストOSのバージョンによって、利用できるイメージのバージョンが制限されます。
OSのバージョンは、1809 等のバージョンではなく、システム情報で見えるバージョンです。
例として、以下 Windows Server 2019 Standard 1809 ですが、OSバージョンは 10.0.17763 と確認できます。
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
これで、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 で抜けられます。
上の画面は、nanoserver を抜けた後、この NanoServer を削除しています。
Docker Compose のインストール
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 にコピーします。
ダウンロードしたファイルは、ブロックされているので、許可するのを忘れないでください。
C:\Program Files\Docker にコピー
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
LinuxKit の インストール (LCOW)
GitHub から、LinuxKit の release.zip を取得します。
GitHub linuxkit / lcow
当エントリー投稿時 v4.14.35-v0.3.9 でした。
ダウンロードしたファイルは、ブロックされているので、許可するのを忘れないでください。
C:\Program Files 配下に Linux Containers フォルダを作成し、release.zip の解凍ファイルを置きます。
Experimental 機能を有効にする
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
Linuxイメージのpull (Ubuntu 18.04)
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
Experimental 機能が無効だと、ubuntuのpullができません。以下のようにエラーになります。
18.04: Pulling from library/ubuntu no matching manifest for windows/amd64 10.0.17763 in the manifest list entries
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
ホスト側から、UbuntuのApacheにアクセスできました。
今回の環境はAzureで構築したものでしょうか?
AWSのWindowsServer2019で構築した場合ubuntuのコンテナが起動しませんでした。