Windows 10でDockerを使いこなす!導入からトラブル対処までの入門ガイド
Dockerはここ数年、テック業界の大きな波を巧みに乗りこなしてきました。テクノロジー・サービス・ビジネスの絶妙なバランスを保ちながら、「コンテナ」という新時代の潮流を求める多くの開発者に門戸を開いています。今やDockerはコンテナの代名詞となり、近年では企業が強く求めるオーケストレーション機能を提供することで、ビジネスの世界へさらに深く踏み込みました。そして、その次の論理的な一歩こそが「Windows」だったのです。
Windows上でも動作するコンテナ基盤があれば、クラウドやLinuxへの移行が難しい企業やエンタープライズから、より真剣で成熟した注目を集めることができます。こうした背景から、Dockerは現在、Windows Server版とクライアント版の両方でベータ版として提供されています。本記事では、Microsoft環境でDockerを始めるための入門ガイドを紹介します。
最初の一歩:前提条件を確認しよう
始める前に、押さえておきたいポイントが2つあります。
まず第一に、「DockerはDockerである」ということです。フレームワークや基本的な使い方に慣れていれば、必要なのはWindows上でコンテナを動かすことだけです。基本操作に不安がある方は、別途公開しているDocker徹底解説ガイドを参照してください。元々はLinux向けに執筆したものですが、コマンドはそのまま通用します。あわせてsupervisordやネットワーキング関連のチュートリアルも参考になるでしょう。Dockerの最新機能については、改めて別記事で詳しく取り上げる予定です。
第二に、Dockerをシステム上でネイティブに動作させるにはHyper-Vが必要です。つまり、64bit版のWindows 10 ProまたはServerエディションが必須となります。筆者の環境ではHomeエディションしか用意できなかったため、今回は「Docker Toolbox」を使用します。これは、バックグラウンドでヘッドレスのVirtualBoxエンジンを起動することで、ネイティブサポートの制限を回避できるよう設計されたエディションです。
Toolboxのセットアップはとても簡単です。インストールが完了すると、システムメニューにクイックスタート項目が追加され、これを実行すると環境の準備やSSHキーの設定などが自動的に行われます。以前にVagrantをセットアップしたときの作業工程とよく似ているのも、なるほどと納得させられます。
Dockerチームはロゴをはじめとする細部へのこだわりに卓越したセンスを持っています。だからこそ、既存技術を大衆の手に届くものへと変え、いずれ巨額の利益を生む存在になるのでしょう。まさに魔法のようです。
セットアップには多少時間がかかり、I/O負荷も高めです。処理が完了するまで待ちましょう。完了後は専用シェルが起動し、通常のLinuxマシンと同じ要領でDockerコマンドを実行できるようになります。
手動でサービスを設定する場合の注意点とエラー
PowerShellを開いてすぐにDockerコマンドを打ち込みたくなりますが、残念ながらDockerサービスがインストールされていない状態では動作しません。サービス自体のインストールは可能ですが、Windows Serverエディションでない限り、起動に失敗します。以下、その手順と失敗する様子を具体的に見ていきましょう。
コマンドラインを起動したら、まずイメージの取得を試みるのが自然な流れですが、ここで大きなエラーに遭遇します。先述のとおり、原因はDockerサービスがネイティブにインストールされていないことにあります。
PS C:\Users\Roger Bodger> docker pull centos:7
Warning: failed to get default registry endpoint from daemon (An error occurred trying to connect: Get https://%2F%2F.%2Fpipe%2Fdocker_engine/v1.23/info: open //./pipe/docker_engine: The system cannot find the file specified.). Using system default: https://index.docker.io/v1/
An error occurred trying to connect: Post https://%2F%2F.%2Fpipe%2Fdocker_engine/v1.23/images/create?fromImage=centos%3A7: open //./pipe/docker_engine: The system cannot find the file specified.
このエラーメッセージをWeb検索し、デーモンを自分で設定すれば解決できそうに思えます。実際、最後のひと手順を除けば設定作業は可能です。しかし、いざDockerサービスを起動しようとしても失敗します。
PS C:\Program Files\docker> Start-Service docker
Start-Service : Failed to start service 'Docker Engine (docker)'.
At line:1 char:1
+ Start-Service docker
+ ~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : OpenError: (System.ServiceProcess.ServiceController:
SeCommandException
+ FullyQualifiedErrorId : StartServiceFailed,Microsoft.PowerShell.Commands.Star
その理由は非常にシンプルです(イベントログより):
fatal: Error starting daemon: The Windows daemon requires Windows Server 2016 Technical Preview 5 build 14300 or later
Windows 10でDockerを使ってみる
ここからが楽しい本題です。基本的な使い方は、従来のLinux向けチュートリアルで解説した内容とまったく同じです。新版のDockerにはまだレビューしていない追加コマンドや機能も含まれていますが、それ以外は問題なく動作します。チュートリアルに沿って進めれば、ApacheやSSHなどをコンテナ化したインスタンスを数秒で立ち上げることができます。あとは思いのままにコンテナを操作できるでしょう。
まとめ
筆者はWindows移植版に大変満足しています。ネイティブ実装とToolboxの両方が提供されたことで、より多くの人がDockerを試し、学べるようになりました。今回検証したのはToolboxのみですが、宣伝文句どおりに動作したと報告できます。フレームワークは安定して動作し、パフォーマンスも高速で大きなオーバーヘッドもなく、深刻なバグやエラーには一切遭遇しませんでした。
結局のところ、これは私たちがよく知る「いつものDocker」であり、それこそが最大の魅力です。Windows上でもLinuxと同じように動作するなら、OS間を移動しても壊れないクロスプラットフォームアプリケーションの開発にとって、真剣な開発者に大きな動機付けとなるでしょう。とはいえ、これはあくまで理想論かもしれません。世の中のソフトウェアの大半はシングルスレッド前提で設計されており、コンテナという概念が本格的な業務アプリケーションの現実的な選択肢になるまでには、まだ長い道のりがあります。それでも、Dockerチームはこの旅路の確かな推進役であり、Windows 10対応はその長い成功の連鎖におけるまた一つの成果といえるでしょう。筆者は大いに期待しており、今後もさらなる検証を行い、新しいトピックスやチュートリアルをお届けする予定です。それではまた。
それでは、快適なDockerライフを!
-
KVM仮想化入門 ― 徹底解説ガイド
当サイトの仮想化カテゴリーを読んでくださっている方なら、これまでの記事が主にVMwareとVirtualBoxを中心に据え、クラウド関連やイメージのリマスタリングも少し取り上げてきたことをご存じでしょう。しかし、そろそろ新しい分野へ足を踏み入れます。今回から、KVMをテーマにした全く新しいチュートリアルシリーズが正式に始動します。今後はXenなど、ほかにもユニークな仮想化技術を扱う予定ですが、まずはKVMに焦点を絞って解説していきます。 本ガイドでは、Red Hatが開発したKVM(Kernel-based Virtual Machine)について学びます。KVMは、各種商用ソリューションの代
-
Windowsユーザーデータのバックアップ入門 - 手軽にできる暗号化バックアップ作成ガイド
数ヶ月前、Linuxのホームディレクトリをバックアップする方法についての記事を公開しました。データやアプリケーション設定、さらには暗号化まで網羅した内容で、どのLinuxシステムにも搭載されているシンプルなツールだけで実現できるため、いつでもどこでも活用できるものでした。その後、読者の皆さんから「Windows版のチュートリアルも欲しい」というメールやご提案を多数いただきました。当初はコマンドライン中心のガイドとして、Windowsシェルスクリプトを使った内容を考えていましたが、もっとシンプルな形にすることにしました。大多数の方はGUIでWindowsを操作しているため、今回は画面ベースで分か