6
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Bash on Ubuntu on Windowsからdocker-machineにTLSで接続する(Hyper-V使用)

Last updated at Posted at 2017-08-28

#Bash on Ubuntu on Windowsでdockerをhttpソケットを開けながらセキュアに利用したい
Bash on Ubuntu on Windows上でdockerを使いたくても現状ではクライアントしか動きません。
そのためdockerのサーバーはBash on Ubuntu on Windowsではなくホストの方で動かす必要があります。
Docker for Windowsにはhttpソケットを開けるオプションが存在します。

0822.png
Docker for WindowsのタスクトレイからSettingsを開くとGeneralに、

  • Expose daemon on tcp:localhost:2375 without TLS

とありますが、この機能は文字通りTLSを使わずに2375を待ち受けるためセキュアではありません。
何らかの理由(例えばファイヤーウォールのルールの設定権がない)から、生のhttpソケットを公開したくない場合があります。
Windowsコンテナの場合はdaemon.jsonを編集することによって、設定を変更することが可能ですが、Linuxコンテナの場合、TLSで待ち受ける機能(待受ポートの設定とかも)が正常に働きません。

上記のリンクではWindowsコンテナについてMS公式のドキュメントですが、同じことをLinuxコンテナに作用させるとクラッシュします。(Version 17.07.0-ce-rc3-win23 (13024)で確認)
これとか、これを見る限りLinuxコンテナを公開する場合はdocker-machineを使ってね、のような感じみたいです。
そのため、docker-machineを利用してBash on Ubuntu on Windows(BoW)からTLSを使ってhttpソケットにアクセスさせます。

##前提として
Bash on Ubuntu on Windows(BoW)とdocker-machine、Hyper-Vが使えることとします。
BoW上でDockerクライアントを入れておきます。
私の環境では、Docker for Windowsを入れたらdocker-machineも入ったのでそれを利用しています。
docker-machineで使う仮想スイッチは予めHyper-Vの管理コンソールかpowershellで作成しておきます。
このとき仮想スイッチは「外部ネットワーク」で、対象となるNICを選択し、「 □管理オペレーティングシステムに~」のチェックを入れます。多分内部的にはブリッジのような感じになってます。
作成したスイッチの名前は後で使うので覚えておきます。
私の環境ではうまく動きませんが、動く方はWindowsNATで構成してもいいと思います。
0828.png

そして、先ほど作ったスイッチを使うため、引数で先ほどのスイッチを指定してください。
私は「bridge」という名前で作成したため、以下のようになります。
Hyper-Vを使用するため、driverでhypervを、マシン名をtestVMにしています。

docker-machine create --driver hyperv  --hyperv-virtual-switch 作成したHyper-Vのスイッチ名(私の環境だとbridge) 作成するマシン名

管理者権限で起動されたpowershell上で実行すると指定したマシン名で作成されます。
作成が終わったら、同じくpowershell上で以下のコマンドを叩いてください。

docker-machine env 作成したマシン名

実行するとbashで追加すべき環境変数が表示されます。
そのうち、

  • DOCKER_TLS_VERIFY
  • DOCKER_HOST
  • DOCKER_CERT_PATH
  • DOCKER_MACHINE_NAME

をBoWのbashなりzshの環境変数に追加しましょう。私の環境ではzshで読み込んでexportしてます。
この時注意するべきなのが、DOCKER_CERT_PATHは、BoW上では/mnt/c/をつけて、その上で、パスを\から/に書き換えてください。
例:DOCKER_CERT_PATH="/mnt/c/Users/ユーザー名/.docker/machine/machines/testVM/"
BoW上で、

docker version

を叩いて、server側の情報が表示されたら成功です。

6
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?