しばやん雑記

Azure とメイドさんが大好きなフリーランスのプログラマーのブログ

Windows Server 2016 でよく使う Docker コマンド

Docker のコマンドが多くて、すぐに忘れてしまうのと Windows Containers 向けのオプションがあったりするので備忘録的にまとめます。

そういえば MSDN のドキュメントが更新されて Docker のインストールがシンプルになっていました。

PowerShell でコマンドレットをいくつか実行すると入ります。特定バージョン以上の NuGet が必要ですが、コマンドレットの指示に従えばインストールしてくれるみたいです。

Install-Module -Name DockerMsftProvider -Repository PSGallery -Force
Install-Package -Name docker -ProviderName DockerMsftProvider

Restart-Computer -Force

なお、以前のバイナリ配布されていたバージョンと同じっぽいです。

コンテナを実行してログイン

# Windows Server Containers
docker run -it IMAGE (cmd or powershell)

# Hyper-V Containers
docker run -it --isolation=hyperv IMAGE (cmd or powershell)

ログイン後は exit と打てばコンテナから抜けることが出来ます。docker run に --rm オプションを追加しておくと、抜けたタイミングで自動でコンテナが削除されるので便利です。

docker run -it --rm microsoft/windowsservercore cmd

コンテナをバックグラウンドで実行

# Windows Server Containers
docker run -d IMAGE

# Hyper-V Containers
docker run -d --isolation=hyperv IMAGE

コンテナ次第ではすぐに終了してしまうので、終わらせないために適当なコマンドを仕込んでおきます。

# コンテナを終了させないようにする
docker run -d microsoft/windowsservercore cmd /c "ping -t localhost"

コンテナをバックグラウンドで実行(ポート指定)

# Windows Server Containers
docker run -d -p 8080:80 IMAGE

# Hyper-V Containers
docker run -d -p 8080:80 --isolation=hyperv IMAGE

microsoft/iis から派生しているイメージは 80 番ポートを使うようになっています。ホスト側のポート番号は WinNAT の制限で今はあまり意味がないです。

コンテナの IP アドレスを取得

docker inspect -f "{{ .NetworkSettings.Networks.nat.IPAddress }}" CONTAINER_ID

WinNAT の制限でコンテナホストから直接アクセスできないため、IP アドレスを取得します。

実行しているコンテナにログイン

docker exec -it CONTAINER_ID (cmd or powershell)

コンテナを停止

docker stop CONTAINER_ID

全ての起動しているコンテナを停止したい場合には docker ps -q の結果を使います。

docker ps -q | %{ docker stop $_ }

コンテナを削除

docker rm CONTAINER_ID

全てのコンテナを削除したい場合には docker ps -aq の結果を使います。

docker ps -aq | %{ docker rm $_ }

Docker Compose のインストール

PowerShell を使ったインストールでは Docker Compose が入らないので別で入れます。

f:id:shiba-yan:20161129235033p:plain

ワンライナーを実行するだけで、簡単に使えるようになりました。