へっぽこプログラマーの備忘録
プログラムを中心とした個人的なメモ用のブログです。 タイトルは迷走中。
内容の保証はできませんのであしからずご了承ください。
menu
keyboard_arrow_up
Top
search
close
home
ホーム
computer
PC一般
construction
開発環境・ツール
code
プログラミング
home
ホーム
computer
PC一般
construction
開発環境・ツール
code
プログラミング
Home
›
Windows
›
[Docker] Windows コンテナを動かす
2023/11/21
[Docker] Windows コンテナを動かす
update
event_note
label
Docker
label
Windows
Docker Desktop を使わずに、Windows 10 に Docker のバイナリを直接インストールして、Windows コンテナを動かすまでをやってみました。
やり方は以下のドキュメントに記載されていました。 - https://docs.docker.com/engine/install/binaries/#install-server-and-client-binaries-on-windows 記載の通り、これで動かせるようになるのは Windows コンテナのみで、Linux コンテナは動かせません。 Windows 上で Linux コンテナを動かしたい場合は、WSL を使う方法などがあります。 - https://kuttsun.blogspot.com/2022/01/wsl2-ubuntu-docker.html ## 環境 - Windows 10 Pro ## Windows の機能の有効化 コントロールパネルの [Windows の機能の有効化または無効化] より、`コンテナ` にチェックを入れます。 これにチェックが入っていないと Docker コンテナが動きませんでした。
また、Hyper-V の有効化が必要という記事も見かけましたが、私の環境では Hyper-V を有効化しなくても動きました。 Hyper-V については以下を参照してください。 - https://learn.microsoft.com/ja-jp/virtualization/hyper-v-on-windows/reference/hyper-v-requirements ## インストール方法 ### バイナリのダウンロード 以下からインストールしたい Docker のバージョンのバイナリファイルをダウンロードします。 - https://download.docker.com/win/static/stable/x86_64/ 現時点で最新の 24.0.7 をダウンロードしました。 ### ProgramFiles への展開 ダウンロードした zip を ProgramFiles に展開するため、PowerShell を管理者で起動して以下を実行します。 ```sh > Expand-Archive <ダウンロードした zip へのパス> -DestinationPath $Env:ProgramFiles ``` `$Env:ProgramFiles` は環境変数 `ProgramFiles` を表示しており、通常は `C:\Program Files` というパスになります。 以降のコマンドは全て PowerShell で実行します。 ### サービスへの登録 Docker をサービスへ登録します。 ```sh > &$Env:ProgramFiles\Docker\dockerd --register-service ``` `&` は、PowerShell においてコマンドやスクリプトを呼び出す演算子です。 従って、環境変数展開後の `C:\ProgramFiles\Docker\dockerd` という文字列をコマンドとして実行しています。 ### サービスの開始 ```sh > Start-Service docker ``` ### 動作確認 Hello World イメージを動かしてみます。 ```sh > &$Env:ProgramFiles\Docker\docker run hello-world:nanoserver ``` 基本的にはこれで上手くいくはずですが、プロキシ環境下の場合は、後述するプロキシ設定が必要になります。 ## 環境変数へパスを通す 毎回 `&$Env:ProgramFiles\Docker\docker` と打つのは面倒なため、`$env:ProgramFiles\docker\` をPATHに追加します。 ```sh > [Environment]::SetEnvironmentVariable("Path", $env:Path + ";$env:ProgramFiles\docker\", [EnvironmentVariableTarget]::Machine) ``` PowerShell を一度閉じて、再度開きます。 これで以下のように `docker` と打つだけで実行できるようになります。 ```sh > docker run hello-world:nanoserver ``` ## プロキシ設定 プロキシ環境下では、プロキシサーバーの設定を行っていないと Docker イメージを pull できません。 設定方法については以下に記載がありました。 - https://learn.microsoft.com/ja-jp/virtualization/windowscontainers/manage-docker/configure-docker-daemon 環境変数 `HTTP_PROXY` `HTTPS_PROXY` を設定します。 ```sh > [Environment]::SetEnvironmentVariable("HTTP_PROXY", "http://
:
", [EnvironmentVariableTarget]::Machine) ``` 設定後、Docker サービスを再起動します。 ```sh > Restart-Service docker ``` ### docker クライアントのプロキシ設定 Linux では `~/.docker/config.json` に設定しますが、Windows では `%USERPROFILE%\.docker\config.json` に設定します。 以下のように設定しておくことで、Dockerfile のビルドを行う際に `--build-args` などで都度プロキシの設定を行う必要がなくなります。 ``` { "proxies": { "default": { "httpProxy": "http://
:
", "httpsProxy": "http://
:
", "noProxy": "localhost,127.0.0.1,host.docker.internal" } } } ``` もしかしたら、一度 Docker サービスを再起動する必要があるかもしれません。 ## エラーが発生した場合 次のようなエラーが発生した場合、Docker サービスが起動していないか、プロキシにより通信が通っていないかのどちらか可能性が高いです。 ```sh Unable to find image 'hello-world:nanoserver' locally docker: Error response from daemon: Get "https://registry-1.docker.io/v2/": net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers). See 'docker run --help' ``` また、次のようなエラーが発生した場合、[Windows の機能の有効化または無効化] で `コンテナ` にチェックが入っていない可能性があります。 ```sh docker: Error response from daemon: hcs::CreateComputeSystem d5ccfe373c27d9053c87689f60075aed9acdca360d6cd42e1abdc5591bb60cbc: The request is not supported. ``` ## アンインストール サービスから Docker を削除します。 ```sh > &$Env:ProgramFiles\Docker\dockerd --unregister-service ``` これだけではまだ完全にサービスは削除されていないので、一度 OS を再起動します。 その後、docker のフォルダを削除します。 ```sh > Remove-item -Recurse $Env:ProgramFiles\Docker ``` ## アップデート 現在のバージョンをアンインストールし、新しいバージョンをインストールします。 ## 余談:他の Windows コンテナを動かしてみた python3.11 の Windows コンテナを動かしてみました。 python イメージのタグ一覧が以下です。 - https://hub.docker.com/_/python Windows コンテナをベースとしている python3.11 のイメージとして以下の2つがあります。 - 3.11-windowsservercore-ltsc2022 - 3.11-windowsservercore-1809 私の PC では、`3.11-windowsservercore-ltsc2022` は動かず、`3.11-windowsservercore-1809` は動きました。 ベースとしている Windows コンテナの詳細は以下で確認できます。 - https://hub.docker.com/_/microsoft-windows-servercore
## 参考 URL - https://www.ulvaniac.co.jp/2023/09/06/docker-desktop%E3%82%92%E4%BD%BF%E3%82%8F%E3%81%AA%E3%81%84windows%E3%82%B3%E3%83%B3%E3%83%86%E3%83%8A%E3%81%AE%E5%8B%95%E4%BD%9C%E6%96%B9%E6%B3%95/ - https://and-engineer.com/articles/YcGZxhYAACUAbPjg - https://qiita.com/SGTY/items/1126e0b95c35843fd8c5 - https://blog.shibata.tech/entry/2016/08/05/233212 - https://learn.microsoft.com/ja-jp/virtualization/windowscontainers/manage-docker/configure-docker-daemon
tweet
facebook
Pocket
B!
はてブ
LINE
chevron_left
chevron_right
Translate
Popular Posts
TortoiseGit でコミットメッセージを変更する
image
NO IMAGE
smbclient で session setup failed: NT_STATUS_LOGON_FAILURE が表示される
Docker for Windows の設定
image
NO IMAGE
TortoiseSVN ロック状態のチェック
image
NO IMAGE
マージ元ブランチとマージ先ブランチ
image
NO IMAGE
Visual Studio で文字がにじむ(ぼやける)
TortoiseGit でブランチ間の差分を見る
image
NO IMAGE
AsciidocFX をビルドする
image
NO IMAGE
PowerShellでブレークポイントが設定できない場合
[Python] 文字列の判定で、None と空文字を同時に判定する
Labels
.NET Core
31
.NET Framework
17
.NET Standard
2
AdminLTE
1
AI
1
Apache
3
AppVeyor
2
AsciiDoc
7
ASP.NET Core
55
Atom
4
AWS
5
AWS Cloud9
4
blockdiag
1
Blogger
13
Bootstrap
3
C/C++
6
C#
106
CentOS
3
Chrome
1
Chronograf
3
chrony
1
Codecov
1
CSS
1
Docker
82
DokuWiki
4
Doxygen
1
draw.io
1
EasyTag
1
Electron
1
Electron.NET
2
Entity Framework Core
9
Excel
2
FFmpeg
3
Firefox
6
Flask
1
Git
19
GitBook
4
GitBucket
7
GitHub
7
GitLab
39
Go
1
Google
1
Google Cloud Platform
1
Grafana
13
GStreamer
2
HTML
5
IIS
8
InfluxDB
14
JavaScript
15
Jekyll
3
Jenkins
7
Linux
34
Log4View
1
MahApps.Metro
3
MaterialDesignInXamlToolkit
1
MkDocs
2
MongoDB
5
MVC
1
MVVM
6
nginx
3
NLog
3
Node.js
8
npm
1
NVIDIA
3
onvif
1
OpenAPI
2
OpenCV
4
OpenSSL
3
OpenVINO
2
ownCloud
2
pandas
1
Pine Script
1
PlantUML
5
Portainer
3
PowerShell
8
Prism
2
PySide
19
Python
88
PyTorch
1
RabbitVCS
1
Razor
3
redis
1
Redmine
33
Redoc
1
remark.js
2
rocketchat
10
Ruby
3
scikit-learn
1
shotcut
1
SignalR
1
Slack
1
Socket.IO
1
SonarQube
5
Sphinx
10
SQL Server
5
SQLite
1
StableDiffusion
2
Subversion
2
Swagger
1
Swarmpit
1
Syslog
3
Telegraf
6
Tesseract
3
TestLink
2
Tomcat
2
TortoiseGit
11
TortoiseSVN
2
Trading View
1
Traefik
3
Travis CI
1
Ubuntu
31
Visual Studio
39
Visual Studio Code
10
VSCode
8
Vue.js
8
Windows
62
Windows 10
5
Windows ADK
1
Windows API
2
Windows Embedded
4
wkhtmltopdf
2
Word
3
WPF
12
WSL
5
WSL2
5
Xamarin
1
xUnit
5
yaml
1
yolo
1
アプリケーション
1
デザインパターン
1
テスト
1
バッチファイル
2
プログラミング
4
ライセンス
1
暗号資産(仮想通貨)
1
英語
2
確定申告
1
機械学習
1
強化学習
1
雑記
1
書籍
1
数学
1
正規表現
1
動画編集
1
Blog Archive
►
2024
(21)
►
12月
(3)
►
9月
(5)
►
8月
(1)
►
7月
(2)
►
6月
(1)
►
4月
(2)
►
3月
(1)
►
2月
(5)
►
1月
(1)
▼
2023
(30)
►
12月
(3)
▼
11月
(5)
[Docker] Windows コンテナを動かす
[Python] Pyinstaller, Nuitka で作成した実行ファイルで GLIBC のエ...
[Docker] docker-compose の --scale でコンテナを複製した際に、コンテ...
[Python] pytest で motor のテストを行う
シェルスクリプトで sudo 権限で実行されているどうかをチェックする
►
10月
(2)
►
9月
(1)
►
8月
(2)
►
7月
(4)
►
6月
(2)
►
5月
(3)
►
4月
(2)
►
3月
(2)
►
2月
(3)
►
1月
(1)
►
2022
(106)
►
12月
(5)
►
11月
(1)
►
10月
(3)
►
9月
(6)
►
8月
(7)
►
7月
(6)
►
6月
(13)
►
5月
(9)
►
4月
(15)
►
3月
(11)
►
2月
(14)
►
1月
(16)
►
2021
(85)
►
12月
(11)
►
11月
(6)
►
10月
(4)
►
9月
(10)
►
8月
(8)
►
7月
(4)
►
6月
(18)
►
5月
(7)
►
4月
(8)
►
3月
(2)
►
2月
(2)
►
1月
(5)
►
2020
(56)
►
12月
(1)
►
11月
(3)
►
10月
(3)
►
9月
(3)
►
8月
(3)
►
7月
(7)
►
6月
(7)
►
5月
(2)
►
4月
(6)
►
3月
(6)
►
2月
(3)
►
1月
(12)
►
2019
(92)
►
12月
(13)
►
11月
(9)
►
10月
(3)
►
9月
(2)
►
8月
(3)
►
7月
(5)
►
6月
(11)
►
5月
(6)
►
4月
(17)
►
3月
(9)
►
2月
(6)
►
1月
(8)
►
2018
(100)
►
12月
(1)
►
11月
(11)
►
10月
(8)
►
9月
(6)
►
8月
(10)
►
7月
(10)
►
6月
(8)
►
5月
(9)
►
4月
(8)
►
3月
(14)
►
2月
(4)
►
1月
(11)
►
2017
(117)
►
12月
(14)
►
11月
(20)
►
10月
(17)
►
9月
(19)
►
8月
(10)
►
7月
(8)
►
6月
(3)
►
5月
(6)
►
4月
(5)
►
3月
(2)
►
2月
(8)
►
1月
(5)
►
2016
(91)
►
12月
(5)
►
11月
(9)
►
10月
(11)
►
9月
(9)
►
8月
(6)
►
7月
(14)
►
6月
(14)
►
5月
(11)
►
4月
(10)
►
3月
(2)
►
2015
(23)
►
12月
(4)
►
11月
(2)
►
10月
(8)
►
9月
(8)
►
7月
(1)
►
2013
(3)
►
11月
(1)
►
9月
(1)
►
7月
(1)
►
2012
(2)
►
7月
(1)
►
6月
(1)
►
2011
(1)
►
9月
(1)
►
2009
(1)
►
7月
(1)
►
2008
(2)
►
11月
(1)
►
7月
(1)
►
2007
(3)
►
10月
(3)