概要
Windows Server ではクライアントOSである Windows 10 などのように Docker CE のインストーラーからインストールして利用することができません。インストール自体は問題なくできますが docker の起動時にエラーが発生して正しく動作しません。
Windows Server で docker を動かすためには Docker EE
を利用する必要がありますが、いくつか手順が必要なため本記事にまとめておきます。
前提条件
Windows Server, version 1709 以降または Windows Server 2019 が必要です。
手順
(1) Hyper-V のインストール
PowerShell コマンドから Hyper-V をインストールします。
インストールに成功すると Success
が True
となります。
> PowerShell Install-WindowsFeature hyper-v
Success Restart Needed Exit Code Feature Result
------- -------------- --------- --------------
True Yes SuccessRest... {Hyper-V}
警告: インストール処理を完了するには、このサーバーを再起動する必要があります。
(2) コンテナーのインストール
Windows のコンテナー機能をインストールします。
Hyper-V と同じようにインストールに成功すると Success
が True
となります。
> PowerShell Install-WindowsFeature containers
Success Restart Needed Exit Code Feature Result
------- -------------- --------- --------------
True Yes SuccessRest... {コンテナー}
警告: インストール処理を完了するには、このサーバーを再起動する必要があります。
(3) マシンの再起動
インストール処理を完了させるため PowerShell コマンドからマシンを再起動します。
> PowerShell Restart-Computer -Force
(4) プロバイダーのインストール
Docker EE をインストールするためのプロバイダーをインストールします。
インストールの確認が表示されたら y
キーを入力します。
> PowerShell 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
(5) Docker EE のインストール
Docker EE をインストールします。
インストールの確認が表示されたら y
キーを入力します。
> PowerShell Install-Package -Name Docker -ProviderName DockerMsftProvider -Force
パッケージは、信頼済みとマークされていないパッケージ ソースから取得されています。
'DockerDefault' からソフトウェアをアンインストールしますか?
[Y] はい(Y) [A] すべて続行(A) [N] いいえ(N) [L] すべて無視(L) [S] 中断(S) [?] ヘルプ (既定値は "N"): y
Name Version Source Summary
---- ------- ------ -------
Docker 18.09.0 DockerDefault Contains Docker EE for use with Windows Server.
(6) LinuxKit のインストール
Docker EE のインストールは完了していますが docker で Linux コンテナを動かしたい場合は LinuxKit のインストールも行う必要があります。
LinuxKit から release.zip
をダウンロードし、以下のフォルダを作成して中身を展開します。
C:\Program Files\Linux Containers
(7) Docker Compose のインストール
Docker CE には Docker Compose が付属していましたが、Docker EE には付属していないので手動でインストールします。
Docker Compose から docker-compose-Windows-x86_64.exe
をダウンロードし、ファイル名を docker-compose.exe
へ変更してから以下のように配置します。
C:\Program Files\Docker\docker-compose.exe
(8) マシンの再起動
PowerShell コマンドからマシンを再起動します。
> PowerShell Restart-Computer -Force
(9) Experimental 機能の有効化
Linux コンテナのサポートは現時点では Experimental 扱いなので、デーモン設定ファイルから Experimental 機能の有効化を行います。
以下のファイルを新規作成します。
C:\ProgramData\docker\config\daemon.json
ファイルの内容は以下のように記載して上書き保存します。
{
"experimental": true
}
(10) マシンの再起動
デーモン設定ファイルを読み込ませるため PowerShell コマンドからマシンを再起動します。
> PowerShell Restart-Computer -Force
以上で Docker EE が利用可能となります。
動作確認
(1) Docker EE のバージョンの表示
docker version
コマンドを実行してバージョンが表示されることを確認します。
Server 側の Experimental
が true
となっていることも確認します。
> docker version
Client:
Version: 18.09.0
API version: 1.39
Go version: go1.10.3
Git commit: 33a45cd0a2
Built: unknown-buildtime
OS/Arch: windows/amd64
Experimental: false
Server:
Engine:
Version: 18.09.0
API version: 1.39 (minimum version 1.24)
Go version: go1.10.3
Git commit: 33a45cd0a2
Built: 11/07/2018 00:24:12
OS/Arch: windows/amd64
Experimental: true
(2) Docker Compose のバージョンの表示
docker-compose version
コマンドを実行してバージョンが表示されることを確認します。
> docker-compose version
docker-compose version 1.23.2, build 1110ad01
docker-py version: 3.6.0
CPython version: 3.6.6
OpenSSL version: OpenSSL 1.0.2o 27 Mar 2018
(3) Linux コンテナの動作確認
Docker EE で Linux コンテナが動作することを確認します。
まずは Alpine Linux のイメージを pull します。
> docker pull alpine
Using default tag: latest
latest: Pulling from library/alpine
cd784148e348: Pull complete
Digest: sha256:46e71df1e5191ab8b8034c5189e325258ec44ea739bba1e5645cff83c9048ff1
Status: Downloaded newer image for alpine:latest
イメージの一覧を確認します。
> docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
alpine latest 3f53bb00af94 2 weeks ago 6.82MB
コンテナを生成して Alpine Linux に入れることを確認します。
> docker run --rm -it alpine /bin/ash
/ #
Docker EE のバージョンアップ
はじめにプロバイダーを更新します。
> PowerShell Update-Module DockerMsftProvider
Docker EE を任意のバージョンへバージョンアップします。
以下のコマンドでは 19.03
へバージョンアップします。
> PowerShell Install-Package -Name docker -ProviderName DockerMsftProvider -RequiredVersion 19.03 -Update -Force