Windocks-Docker APIサポートを備えたWindows Server 2012 R2上のSQL Serverおよび.NETコンテナー





こんにちは、Habrの親愛なる読者。 今日は、同名の会社の製品であるWindocksについてお話します。Windocksは、 Windowsの最初のDockerエンジンとしての地位を確立しています。 Microsoftのお客様は、Docker コンテナーのネイティブサポートを備えたWindows Server 2016(執筆時点ではTechnical Preview 5が利用可能)の新しいバージョンのWindows Serverを期待していますが、windocksの作成者は、現在の世代のWindowsサーバーシステムにdockerコンテナーを提供しようとしました。



それでは、Windocksとは正確には何ですか? 要するに、これは既存のdockerデーモンの移植バージョンとUhuru Softwareの オープンソースコンテナープロジェクトの混合です。 ここでは、Windocksの機能と開発者が直面した課題について読むことができます



この資料のフレームワーク内で、windocksの使用がlinux元のデーモンの使用と根本的に異なること、windocksの現在の制限は何か、開発およびテストプロセスでツールを実装する価値があるかどうかを理解しようとします。



現在利用可能なもの



執筆時点では、windocksは次のOSをサポートしています。





これらのオペレーティングシステムでは、イメージからコンテナを作成できます。





Windows Server 2012でVPSにウィンドックを展開する



最近では、 Windocksがコミュニティエディションのリリースを発表しました。これにより、無料で製品の機能を知ることができます。 このバージョンを展開します。 私たちは、サイト上のフォームを介してリクエストを送信します 。 すぐに答えが出て、すぐにリンクが表示されます。



Windocksを展開するための環境として、2x2.6 GHz、2 GB RAM、20 GB HDD / Windows Server 2012 R2の構成のVPSを使用します。 VPSでSQL Serverコンテナーを使用するには、SQL Serverをインストールする必要があります。 windocks自体をインストールしてからインストールします。 インストールプロセス中に追加の設定は必要ありません。



ホストとクライアント用の証明書とキー生成して双方向認証を構成し、それらにウィンドックを提供します。

server-key.pem -> C:\Users\Administrator\.docker\key.pem server-cert.pem -> C:\Users\Administrator\.docker\cert.pem ca.pem -> C:\Users\Administrator\.docker\ca.pem
      
      







ここで、windocksを実行します(startコマンドは、Linuxのdockerデーモンの場合と少し異なります)。

 docker -H tcp://WINDOCKS_IP:2376 -dD --tlsverify=true
      
      







起動ログには、次が表示されます。

 time="2016-06-30T14:32:06.901345300+03:00" level=info msg="Daemon has completed initialization"
      
      





目的のIPアドレスに対して、ファイアウォールのTCPポート2376への着信接続を許可することを忘れないでください。



標準のdockerクライアントを使用して接続します



タイトルでご想像のとおり、Windocksはdocker RESTful apiをサポートしています。 これは、 標準のdocker consoleクライアントを使用して操作できることを意味します。 ただし、現時点では、windocksはすべてのコマンドをサポートしているわけではなく、一部のみをサポートしています DockerFileは、限られたコマンドセット(FROM、ADD、COPY、ADDDB、MOUNTDB)もサポートしています。 ここで比較するためのコマンドの完全なリストを見つけることができます。



通常のdockerホストと同じ方法でwindocksに接続します(クライアントで作業するために、コマンドエイリアスを作成することをお勧めします。Windowsでは、DOSKEYなどを使用してこれを行うことができます)。

 docker.exe --tlsverify --tlscacert=ca.pem --tlscert=cert.pem --tlskey=key.pem -H=WINDOCKS_IP:2376 version
      
      







結果は次のようになります。

 Client version: 1.7.0 Client API version: 1.19 Go version (client): go1.4.2 Git commit (client): 0baf609 OS/Arch (client): windows/amd64 Server version: $VERSION Server API version: 1.19 Go version (server): go1.5.1 Git commit (server): $GITCOMMIT OS/Arch (server): windows/amd64
      
      







Windocksで.NETアプリケーションを起動する



Windocksには独自の画像のローカルレジストリがあり、コミュニティにはデフォルトで2つの画像が含まれています:dotnetとmssql。 その内容は、次のコマンドを実行することで取得できます(証明書を使用した認証用のパラメーターを持つエイリアスを既に作成していると思われます)。

 docker images
      
      







結果:





そのため、dotnet-4.5とmssql-2014の2つの基本的なイメージを使用できます。 Windocksと一緒に、 その機能を示すサンプルのセットがあります。



この記事では、サンプルtestMountDbおよびtestDotnetを調べます。 最初は、mssql-2014イメージに基づいて作成されたコンテナーにテストアプリケーションのベースをマウントします。 2番目-別のコンテナで作業中にこのベースを使用します。 それらをクライアントOSにコピーして、標準クライアントを使用して作業を直接実行します。



testMountDbサンプルからコンテナを収集して実行してみましょう。

 docker build testMountDb
      
      







次のものが得られます。

 Sending build context to Docker daemon 2.048 kB Sending build context to Docker daemon Step 0 : FROM mssql-2014 Step 1 : MOUNTDB customers C:\dcr\mountDbExample\customerdata.mdf ContainerId = c4d6e4f7bdc9cfc4c8b62b09572b255f43b56716d862b28e291e7af86e08bc3f & ContainerPort = 10001 & ContainerUserName = prison_oo_aqRdapH & ContainerPassword = Pr!5n5A39SvNRo & MSSQLPort = 10001 & MSSQLServerUserName = sa & MSSQLServer SaPassword = Pr!54q0flmqoM1 & DockerFile output: & Line 2- Mounted DB: customers, C:\ dcr \mountDbExample\customerdata.mdf
      
      







ここから、接続文字列のweb.cfgで使用するMSSQLServerUserNameとSaPasswordが必要になります。

作成されたコンテナを実行します。

 docker start c4d
      
      







testDotnetサンプルからコンテナを収集して実行します(すべて同じです)。

 docker build testDotnet
      
      







結果:

 SECURITY WARNING: You are building a Docker image from Windows against a Linux Docker host. All files and directories added to build context will have '-rwxr-xr-x' permissions. It is recommended to double check and reset permissions for sensitive files and directories. Sending build context to Docker daemon 20.99 kB Sending build context to Docker daemon Step 0 : FROM dotnet-4.5 Step 1 : COPY web.config app-root\\runtime\\repo Step 2 : COPY default.aspx app-root\\runtime\\repo Step 3 : COPY default.aspx.cs app-root\\runtime\\repo Step 4 : COPY main.css app-root\\runtime\\repo Step 5 : COPY windockslogo.png app-root\\runtime\\repo Step 6 : COPY testrun.bat . Step 7 : RUN cmd.exe /C .\testrun.bat ContainerId = 3b8cefeef04d3ac5010fa8e37b04ce42aa207359e4848581222d521839ea7a04 & ContainerPort = 10003 & ContainerUserName = prison_oo_P4yo5gA & ContainerPassword = Pr!5c6g8mVfQq7 & DOTNETPort = 10003 & DockerFile output: PS docker start 3b8
      
      







ブラウザで開く
 http://WINDOCKS_IP:10003
      
      



すべてが正しく行われた場合、次のように表示されます。





次の手順を実行して、アプリケーションイメージをwindocksレジストリに保存します。

 docker commit a29 windocks_dotnet_demo_v1
      
      







そして、更新された画像のリストを取得します。

 docker images
      
      











他のユーザーがwindocks_dotnet_demo_v1イメージを使用できるようになりました



結論



私たちの意見では、windocksはLinuxのdockerデーモンと比較してかなり制限されているという事実(記事の冒頭でその制限が示されていたもの)にもかかわらず、SQL Serverおよび。 また、小規模なチームでASP.NET 4.5 / MSSQLアプリケーションを開発およびテストするために非常に快適に使用できますが、このツールはまだ実稼働で使用するには若すぎて、Windows Server 2016のリリース後に無関係になる可能性があります。



All Articles