Deep Insider の Tutor コーナー
>>  Deep Insider は本サイトからスピンオフした姉妹サイトです。よろしく! 
WindowsユーザーのためのDockerコンテナー入門【Azure活用編】(1)

WindowsユーザーのためのDockerコンテナー入門【Azure活用編】(1)

Dockerとは? Dockerホストの作成から、Dockerコンテナーのロードまで

2016年9月28日

Dockerの概要やそれが必要な理由、仮想マシンとの違いを解説。初めてDockerを使うWindowsユーザーに向けて、AzureにDockerホストを作成してSSH接続し、Dockerコンテナーを起動・停止する方法を説明する。

アバナード 旭 哲男
  • このエントリーをはてなブックマークに追加

Dockerとは? それが必要な理由、仮想マシンとの違い

 システム開発のライフサイクルの中で見過ごされやすいタスクに、「環境の整備」があると筆者は考えている。

 熟練の開発者であれば、自分がこれから設計・開発・テストするための環境整備の方法を頭に思い描き、かつ整備することができると思うが、チームに参画するメンバー全てが一様に整備できるかというと、実際にはそんなことはなく、できるメンバーが付きっきりで、環境を構築することが多いのではないだろうか。または開発メンバーによるテストも完了し、運用環境へのデプロイ作業を運用メンバーに依頼したが、システムが正しく作動せず、結局、開発メンバーがデプロイ作業を実施するなどして、お互いに不信感を持ってしまうということが発生していないだろうか。

 これらの問題が発生する原因の一つに、環境整備には属人的な側面が多大にあることが挙げられる。たとえ完璧な環境整備マニュアルを作成したとしても、実際には「予想外のことが起きて環境整備が完了しない」「環境差異が発生してシステムが動かない」といった問題が発生して、分かる人間が都度対応せざるを得ないということがよくあるし、そもそも完璧なマニュアルを作ること自体が至難の業である。

 では、こういった問題を回避して、環境をより簡単に整備するにはどうしたらよいだろうか。

 その一つの回答として、環境を丸ごと取っておき、それを必要に応じて使用する方法が考えられる。「環境を丸ごとコピーする」という考え方自体は昔からあるものである。具体的には、仮想マシンを活用すれば仮想マシンごと丸ごとコピーして、データセンターのホストや、クラウドサービスにデプロイできるのはご存じのとおりである。

 Dockerもまた、同じ考え方をベースにしたテクノロジである。具体的には、環境を丸ごとDockerコンテナーとして管理することができ、DockerコンテナーをコピーしてDockerホストにデプロイできる。

 では、Dockerコンテナーと仮想マシンは何が違うのか。

 一つには、Dockerコンテナーは「必要最小限の要素で構成された軽量のイメージであり、より少ないリソースで稼働できる」ことが挙げられる(一方の仮想マシンであれば、フルサイズのOSイメージ&リソースが必要となってしまう)。これ以外にもDockerには、「コンテナーをスタックする」「コンテナーをリポジトリで管理する」といった、カスタマイズやデプロイに特化した機能があり、CI(継続的インテグレーション)を実現するための重要なテクノロジとしても注目されている。

 そんなDockerだが「自分にはハードルが高い」と感じている人もいるかもしれない。確かに登場した当初は、Dockerを使うためにLinuxの知識が不可欠であった。しかし現在では、Azureなどのクラウド環境を活用することで、より容易にDockerを使えるようになっている。そこで本稿では、(熟練のLinuxユーザーではない)一般的なWindowsユーザーがAzureを活用してDockerホストを作成し、Dockerコンテナーをロードするまでの手順を説明する。Dockerを使ってみたいけど「Linuxは苦手」と二の足を踏んでいた人は、ぜひ本稿を参考にDockerにチャレンジしてみてほしい。

 なお本稿では、手を動かしながらDockerを習得することを重視しており、Dockerのシステムアーキテクチャについては触れていない。DockerホストおよびDockerコンテナーの詳細については、英語になるが「What is Docker」を参照されたい。

前準備(Windowsユーザー向け)

 本稿では、DockerホストとしてAzure上のLinuxの仮想マシンを使用する*1。Linuxではあるが、ほとんどの設定をWindowsのコマンドから実行できるため、Linuxの知見がなくても問題ない。

  • *1 Windows Server 2016ではDockerホストの機能が提供される予定だが、執筆時点ではDockerホストとしてWindows Server 2016を選択できないため、ここではLinuxを選択している。Windows Server 2016でのDocker利用については、Windows Server 2016の正式リリース後にあらためて説明する。

 Dockerホストを構築する前に、以下の準備が必要である。

  • Microsoft Azureアカウント: アカウントのアクティベーションについては、Azure公式サイトの「無料の Azure アカウントを今すぐ作成しましょう」を参照のこと。
  • クライアントPC: 本稿ではWindows 10で操作しているが、Windows7/8/8.1でも動作可能。
  • インターネット接続環境: 各種ツールをインストールしたり、Dockerコンテナーを操作したりするためにインターネットへの接続環境が必要である。プロキシ経由での接続については本稿では扱わない。

 なお、作業を進める中で、シェルを頻繁に変更する。本連載の中で表1に示す表記が出てきたときは、それぞれシェルを使い分けていることに注意してほしい。

記載例 シェル 起動方法
PS> PowerShell [スタート]ボタンをクリック→“PowerShell”を入力して検索→[Windows PowerShell]アイコンを右クリックして[管理者として実行]
CMD> コマンドプロンプト [スタート]ボタン→“CMD”を検索→[コマンド プロンプト]アイコンを右クリックして[管理者として実行]
SSH> PuTTY SSHセッション PowerShellまたはコマンドプロンプトから“putty”を入力して起動
表1 各種シェルを示す記載例

 WindowsからDockerホスト/コンテナーを操作するためには、基本的に以下のツールのセットアップが必要である。

  1. Chocolatey(パッケージ管理ツール)
  2. Node.js/npm(JavaScript実行環境)
  3. Azure-CLI(Azure管理ツール)
  4. Dockerクライアント(Docker操作ツール)
  5. PuTTY(SSHクライアント)

 以下、順を追ってそれぞれのセットアップ方法を説明する。

1. Chocolateyのインストール

 本稿では、各種ツールのインストールをWindows向けパッケージ管理ツール「Chocolatey」で行う。

 そのChocolateyをインストールする前に、PowerShellの実行ポリシーが“Remote Signed”以上であることを確認しておこう(リスト1)。もし、“Restricted”や“Undefined”だった場合には“Remote Signed”変更すること。

PowerShell
# 実行ポリシーの確認
PS> Get-ExecutionPolicy
# 実行ポリシーの設定
PS> Set-ExecutionPolicy RemoteSigned
リスト1 PowerShell実行ポリシーの確認・設定

以下、PS>CMD>プロンプトを意味している。実際の入力に当たってはPS>より後の部分を入力すること。また、以降で説明する各種インストール用コマンドによって「スクリプトを実行するかどうか」などを英語で聞かれる場合があるが、そういった問いには英語の文章を理解したうえでYesを入力して処理を進めてほしい。

 実行ポリシーが“Remote Signed”以上であることを確認したら、Chocolateyをインストールする(リスト2)。

PowerShell
# Chocolateyのインストール
PS> iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1')) 
# Chocolateyの動作確認
PS> choco
リスト2 Chocolateyのインストール

2. Node.js/nmpのインストール

 Azureの各種サービスを操作できるコマンドライン・インターフェース「Azure-CLI」を動作させるための実行環境として、Node.jsおよびnpmをインストールする(リスト3)。すでにMicrosoft Web PIなどでインストール済みであれば次のステップへ(インストール済みかどうかは、リスト4のようにnpmとコマンドを打てば確認できる)。

PowerShell
# Node.jsのインストール
PS> choco install nodejs
# npmのインストール
PS> choco install npm
リスト3 Node.js/nmpのインストール

 ここでのnpmの動作確認は、PowerShellではなく、コマンドプロンプトを新たに立ち上げてから実行していることに注意(リスト4)。リスト3のPowerShell上で作業を継続したい場合には、PATH環境変数にNode.jsやnpmのパスを反映させるために、一度、PowerShellを起動し直す必要がある。

CMD
# npmの動作確認
CMD> npm
リスト4  Node.js/nmpのインストール

3. Azure-CLIのインストール

 Azureの管理ツール「Azure-CLI」をインストールする(リスト5)。Azure Dockerホストを作成するためには、Azure-CLIが必須である。

CMD
# Azure-CLIのインストール
CMD> npm install -g azure-cli
# azure-cliの動作確認
CMD> azure help
リスト5 Azure-CLIのインストール

 PowerShellでもazureコマンドが使えるように、いったんここでPowerShellも立ち上げ直しておこう。

4. Dockerクライアントのインストール

 DockerコンテナーをクライアントPCから操作する場合には、Dockerクライアントのインストールが必要である(リスト6)。DockerホストにアクセスしてそこからDockerコンテナーを直接操作する場合はインストール不要だが、クライアントPCから遠隔操作する必要性が発生したときに備えて、ここでインストールしておくことを推奨する。

PowerShell
# Dockerクライアントのインストール
PS> choco install docker
# Dockerクライアントの動作確認
PS> docker help
リスト6 Dockerクライアントのインストール

5. PuTTYのインストール

 Dockerホストに接続するために、SSHクライアントが必要となる。というのも、Dockerホスト上でのストレージデバイスのマウントや、Dockerコンテナー用のディレクトリの作成などは、Dockerクライアントからは操作できないので、SSHクライアントを使ってDockerホストに接続して実施する必要があるからだ。

 そこで本稿では、Windowsで人気があり無料のSSHクライアント「PuTTY」をインストールして(リスト7)、使用する。

PowerShell
# PuTTYのインストール
PS> choco install putty
# PuTTYの動作確認
PS> putty
リスト7 PuTTYのインストール

【補足】OpenSSLのインストール

 最後に念のため、Dockerホストを作成する際のコマンド内で使われるOpenSSLがWindows環境にインストールされているかを確認しておこう。これには、PS> opensslコマンドを実行できるかを試せばよい(実行中止するにはqなどを入力する)。

 インストールされていない場合は、

から、[Setup]ファイルをダウンロード・実行してインストールするか、[Zip]ファイルをダウンロード・展開して任意のディレクトリに配置したうえで、下記の環境変数に対してOpenSSLのパスを設定すればよい(環境変数の設定方法は、こちらの記事の手順を参考にされたい)。

  • PATH\binフォルダーパス(例:「C:\Program Files (x86)\GnuWin32\bin」)
  • OPENSSL_CONF\share\openssl.cnfファイルパス(例:「C:\Program Files (x86)\GnuWin32\share\openssl.cnf」)

 以上で前準備は完了である。

Dockerホスト(Linux仮想マシン)の作成

 各種ツールのインストールができたら、Docker環境を構築する。

 Dockerを使用するためには、Dockerホストを用意しなければならない。そのDockerホストとして、現時点のAzureではLinux仮想マシンを使用できる。仮想マシンの作成には、Azure-CLIを使用すればよい。

 以下、Azure-CLIを使ったDockerホスト(Linux仮想マシン)の作成方法を、順を追って説明する。ただし、Azure-CLIのバージョンによっては作業手順が変更になる可能性もあるので注意してほしい(本稿ではバージョン「0.10.4」を使用している)。

サービス管理(ASM)モードの有効化

 なお、詳しくは次回以降であらためて説明するが、Azure-CLIにはクラシックな「サービス管理(ASM)モード」と新しい「リソースマネージャー(ARM)モード」の2つのモードが存在する。今回はASMモードを使用するが、Azure-CLIのデフォルトはARMモードになっているので、ここで、

  PS> azure config mode asm

というコマンドを実行して、モードを切り替えてほしい(ちなみに戻すには「asm」を「arm」に変えてコマンドを実行すればよい)。

Azureへのログイン

 まず初めに、Azure-CLIでAzureにログインをする。

 これには図1のように、CMD> azure loginコマンドを実行し、出力されたURL(この例では「https://aka.ms/devicelogin」)と認証コード(この例では「GY8ZVGHR4」)を確認する。

図1 Azureへのログイン

 先ほど出力されたURLを任意のブラウザーで開き、あとは図2の手順でAzureにログインする。

Azureへのデバイスのログイン(1):ログインページ表示の認証

任意のブラウザーで開くと、このような画面になるので、先ほどの認証コードを入力する

Azureへのデバイスのログイン(2):Azure-CLIに対するアクセス許可

認証コードが正しい場合、「端末(=デバイス)上のアプリケーション(Azure-CLI:Microsoft Azure Cross-platform Command Line Interface)からのアクセスを許容するかどうか」を質問されるので、(問題なければ)[続行]ボタンを押す

Azureへのデバイスのログイン(3):MicrosoftアカウントによるAzureへのログイン

Azureの認証アカウントを選択する

Azureへのデバイスのログイン(4):Azure-CLIのログイン完了

認証が成功すると、このような画面になる

図2 Azureへのデバイスのログイン手順

 以上でAzure-CLIでのAzureログインは完了だ。最後に、ブラウザーを閉じ、そのログイン結果を確認しておこう。先ほど実行開始したazure loginコマンドが終了して、図3のようにlogin command OKと表示されていれば成功である。

図3 Azureへのログイン結果の確認

AzureでVMイメージの選択

 次に、Dockerホストを作成するための「仮想マシンのOSイメージ」(以下、VMイメージ)を選択する。

 これには、PS> azure vm image listコマンド(ASMモード)を実行してVMイメージを列挙し、その中から選択対象(本稿ではUbuntu 14_04*2のVMイメージの名称(図4の例では赤枠部分)をメモすればよい。なお図4の例では、このコマンドに続けて | select-string Ubuntu-14_04_5を追加指定することで、列挙する項目を絞っているので注意してほしい。

  • *2 ここでは、Ubuntu 14を選択したが、CentOSやDebianも選択可能である。なお、マイクロソフトのAzure関連ブログ記事ではUbuntuで説明されていることが多いため、特段の要件がなければUbuntuを選択するのがよいだろう。
図4 AzureでVMイメージの選択

 また、図4の後半に示したように、azure vm image show <VMイメージの名称>コマンドを実行することで、仮想マシンの詳細を知ることができる。

AzureでDockerホストの作成

 いよいよDockerホストを作成する。

 本稿では、Dockerコンテナーをロードできるまでを説明するだけなので細かな構成(=azure vm docker createコマンドの各種オプション)は指定せず、デフォルト構成のままホストを作成する。

CMD
# Azure Dockerホスト作成コマンド(ASMモード)
CMD> azure vm docker create -e 22 -l "<場所>" <新規ホスト名> "<VMイメージの名称>" [仮想マシンの管理ユーザー名] [管理ユーザーのパスワード]
リスト8 Azureイメージギャラリーを利用したDockerホストの作成

-eはオプションで、この例ではSSHポートの22番(デフォルト値)を指定している。それ以外は、実質上必須のコマンドライン引数となる。
[仮想マシンの管理ユーザー名]と、[管理ユーザーのパスワード]は、省略可能なオプションではあるが、省略した場合にはコマンド実行後に入力が促される。セキュリティを強化する意味で、コマンド履歴にパスワードを残したくないといった場合には入力しなくてもよい。
どのようなオプションがあるかはazure vm docker create --helpを実行して自分で確かめてほしい。

 リスト8の<……>で示している箇所は、本稿では以下のように設定した。なお、<新規ホスト名>は、各読者独自のものを指定する必要があるので注意してほしい。

パラメーター
場所 Japan East
新規ホスト名 BldinsDcrHst
VMイメージの名称 b39f27a8b8c64d52b05eac6a62ebad85__Ubuntu-14_04_5-LTS-amd64-server-20160830-en-us-30GB
管理ユーザー名 builder
パスワード Bu!lder123
表2 本稿におけるazure vm docker createコマンドの引数指定

このとおりに指定するとazure vm docker create -e 22 -l "Japan East" BldinsDcrHst-ChangeHere "b39f27a8b8c64d52b05eac6a62ebad85__Ubuntu-14_04_5-LTS-amd64-server-20160830-en-us-30GB" builder Bu!lder123というコマンド実行になる。

 4~5分程度でVMイメージが生成される。

図5 AzureでDockerホストの作成

 ちなみに、実際にDockerを活用するためには、今回のようなデフォルト構成のままではなく、どのようなDockerコンテナーをロードするのか、各コンテナーはどのくらいのCPUリソース、メモリを消費するのかを見極めたうえで、Dockerホストのスペックを決める必要がある。例えば一般的なWebアプリケーション環境を構築するのであれば、「Webサーバー」「アプリケーションサーバー」「データベース」の3つのコンテナーをDockerホストにロードするのが一般的だろう。そういった複数のコンテナーを組み合わせて環境を構築する手順については、第3回で解説する予定である。

Dockerホストの確認

 念のため、ホストが生成されたかどうかを確認しておこう。

 これには、azure vm listコマンドでホスト名が表示されているか確認し、azure vm showコマンドで仮想マシンの状態を確認する(リスト9、図6)。表示された[DNS Name]はメモしておく。

CMD
# Azure VMの一覧取得(ASMモード)
CMD> azure vm list
# VMの詳細
CMD> azure vm show BldinsDcrHst
リスト9  Dockerホストの確認(ASMモード)
図6 Azure上のDockerホストの確認

Dockerホストへの接続と、SSH暗号化キーの作成

 続いて、Azure Dockerホストにログインできるか確認する。

 PuTTYを起動(=puttyコマンドを実行)し、図7のように接続先情報を設定する。[Host Name (or IP address)]欄に先ほどメモした[DNS Name]の値(本稿の例では「bldinsdcrhst.cloudapp.net」)を入力、[Saved Sessions]欄に任意の接続名(この例では「docker」)を入力して、[Save]ボタンを押下する。

[PuTTY configuration]ウィンドウで接続先情報を設定
図7 [PuTTY configuration]ウィンドウで接続先情報を設定

 [Open]ボタンを押すと、仮想マシンに接続する。その際、Dockerホスト作成時に指定した管理ユーザー名(本稿の例では「builder」)とパスワード(本稿の例では「Bu!lder123」)を入力してログインする必要がある。ログインが成功して接続できると、図8のようになる。

図8 PuTTYによるAzure Dockerホストへのログイン

 この仮想マシンは、初めからDockerホストとして構成されており、追加パッケージをインストールすることなく、Dockerコマンドを実行可能である。試しにリスト10のコマンドを実行することで、Dockerの環境情報を取得し、ログアウトしてみよう。

SSH
# Docker環境情報の確認
SSH> docker info
# 仮想マシンからログアウト
SSH> exit
リスト10 仮想マシン上でのDockerコマンドの実行

 このままでも運用は可能だが、認証がパスワードだけというのは心細い。セキュリティを強化するために、以下の手順に従い、SSHキーペアを生成する。

CMD
CMD> puttygen
リスト11 [PuTTY Key Generator]を起動するためのコマンドを実行
PuTTY SSH keygen
図9 [PuTT Key Generator]ウィンドウを使ってSSHキーペアを生成

 図9の[Generate]ボタンを押下し、上部の[Key]領域が図10のような画面になるまでマウスを動かす。生成されたキーペアはそれぞれ後の認証で使用するので、[key passphrase](開錠のためのパスワード)欄に任意の値を入力し(確認用の[Confirm passphrase]欄にも同じ値を入力)、[Save public key]ボタンと[Save private key]ボタンを押下して、SSH公開キー(=公開鍵)と秘密キー(=秘密鍵)のファイルとして保存すること。

[PuTTY Key Generator]ウィンドウを使ってSSHキーペアの2つのファイルを保存
図10 [PuTTY Key Generator]ウィンドウを使ってSSHキーペアの2つのファイルを保存

 次に、Azureポータルにアクセスし、図11のようにして、作成した仮想マシンを選択し、ブレード内の左側にあるメニューから[パスワードのリセット]を選択、[ユーザー名]に管理ユーザー名(本稿の例では「builder」)、[認証の種類]として「SSH 公開キー」を選択し、puttygenで生成されたSSH公開キーを入力する。

図11 Azureポータルで仮想マシンのパスワードを「SSH 公開キー」にリセット

 上部の[保存]ボタンを押して、仮想マシンのパスワードがリセットされたら、PuTTYの接続設定を修正する。具体的にはputtyコマンドを実行してPuTTYを起動し、図7に示したような接続先情報の設定画面が表示されたら、前回保存した接続名(本稿の例では「docker」)を[Saved Sessions]欄で選択して[Load]ボタンをクリックしてロードしたうえで、左側の[Category]ツリーから[Connection]-[SSH]-[Auth]を選択し、右側の設定領域の一番下にある[Private key file for authentication]欄に、puttygenで生成した秘密キーのファイルパスを指定する(図12)。

[PuTTY configuration]ウィンドウで「SSH 秘密キー」ファイルパスを指定
図12 [PuTTY configuration]ウィンドウで「SSH 秘密キー」ファイルパスを指定

 SSH秘密キーを指定し終わったら、再度、[Category]ツリーのルートにある[Session]を選択して[Save]ボタンを押下して保存し、[Open]ボタンを押下してAzure Dockerホストへログインしてみよう。ログイン時に秘密キーに対するパスワードを聞いてくるので、puttygenでキーペアを生成したときに入力したパスワードを入力するとログインできる(図13)。

図13 PuTTYログイン時のSSHキーペアによる認証

 ここで生成した、キーファイルとパスワードは大切に保管しなければならない。これらがないと、ログインできなくなってしまうため、キーファイルを削除またはパスワードを忘れた場合には、もう一度、SSHキーペアの作成と、仮想マシンのパスワードリセットが必要になる。逆にいえば、秘密キーファイルとパスワードがあれば、仮想マシンにアクセスできるので、秘密キーファイルを外部から参照できるようなところに置いてはいけない。

Dockerコンテナーの起動

 次にDockerコンテナーを起動する。今回は、Dockerコンテナーとしてnginxコンテナーを起動する。

 Dockerコンテナー起動時のシステム構成のイメージは図14のようになる。Azure Dockerホストを作成すると、「Azureクラウドサービス」「Azureストレージ」「Azure仮想マシン」の2つのリソースが動的に割り当てられる。仮想マシンには、OSとしてUbuntuがロードされ、Dockerホストが起動される。さらに、Dockerホストに対して、Dockerコンテナーの起動命令を出すことで、Dockerコンテナーの読み込みと起動が行われる。

Dockerコンテナー起動時のシステム構成のイメージ
図14 Dockerコンテナー起動時のシステム構成のイメージ

 まずは、SSHでDockerホストにアクセスし、次にリスト12のコマンドを実行して、Dockerのリポジトリ「Docker Hub」から取得できる「nginx」コンテナーを検索する。

SSH
# Dockerリポジトリで「nginx」コンテナーを検索する
SSH> docker search nginx
リスト12 Dockerのリポジトリから「nginx」コンテナーを検索

 これにより、nginxコンテナーのイメージがいくつか見つかる(図15)。[OFFICIAL]列が「OK」となっているものが、Docker公式のnginxのイメージであり、今回取得する対象のイメージである(その他のイメージは、第三者がDocker Hubで公開しているイメージである。それぞれ個別のカスタマイズがされており、Docker Hubにアクセスすることでその詳細を知ることができる)。

図15 Docker Hubから取得できる「nginx」コンテナーを検索した結果

 次に、Dockerコンテナーを起動する。リスト13に示すようにdocker runコマンドを実行すると、nginxコンテナーイメージを取得し、nginxコンテナーが起動される。

SSH
# Dockerコンテナーの起動例
SSH> docker run -d -p 8080:80 --name some-nginx nginx
リスト13 Dockerコンテナーの起動

 起動に当たっては、以下のオプションを付与した。

オプション 意味
-d サービスとして起動
-p ホストポート:コンテナーのポート コンテナーの指定ポートをホストのポートにマップする。このオプションを付与しないと、Dockerホストの外から参照できない
--name 起動したコンテナーに名前を付ける。このオプションを付けないと、コンテナーを管理するときにコンテナーの見分けがつかない
表3 Dockerコンテナー起動コマンドのオプション

 続けて、docker psコマンドを実行すると、起動中のDockerコンテナーの一覧を確認できる(リスト14)。

SSH
# 起動中のDockerコンテナーの一覧
SSH> docker ps
リスト14 Dockerコンテナーの一覧表示

 リスト13とリスト14の結果は、次の画面のようになる。

図16 Dockerコンテナーを起動し、コンテナーの一覧を表示した結果

 起動したnginxにアクセスするためには、Dockerホストのポート8080を開通させる必要がある(=Endpoint登録)。Dockerホストを作成したPCからazure vm endpoint createコマンドを実行する(リスト15、図17)。

CMD
# Dockerホストのポート8080を開通する(ASMモード)
CMD> azure vm endpoint create BldinsDcrHst 8080
# Dockerホストの開通しているポートの一覧を確認する
CMD> azure vm endpoint list BldinsDcrHst
リスト15 Dockerホストのポート8080を開通し、ポートの一覧を表示する
図17 Dockerホストのポート8080を開通し、ポートの一覧を表示した結果

 ポート開通後は、ポート8080のURL(本稿の例では「http://bldinsdcrhst.cloudapp.net:8080/」)にブラウザーでアクセス可能になる。

図18 ポート開通後のnginxコンテナーにブラウザーアクセス

 ポート開通後は図19のようなシステム構成になる。

ポート開通後のシステム構成のイメージ
図19 ポート開通後のシステム構成のイメージ

 ここで注意してほしいのは、Dockerコンテナーのポート「80」をDockerホストのポート「8080」にマップしなければ、外部から接続できないことだ。これに関するポイントを、以下に箇条書きでまとめておこう。

  • Dockerコンテナーは起動されると、コンテナー間での通信のための仮想ネットワークに参加するが、そのままではDockerホストの外部から、仮想ネットワークにアクセスすることはできない
  • 外部からアクセス可能な条件は、「コンテナーが、任意のポートをExposeし」、かつ「コンテナー起動時にDockerホストのポートにマップ」することが必要である
  • さらに、インターネット経由でAzure仮想マシンにアクセスするためには、仮想マシンのEndpoint登録が必要になる

Dockerコンテナーの停止

 最後にDockerコンテナーをクライアントPCから管理する方法を兼ねて、コンテナーを停止させる方法を説明する。

 クライアントPC上のDockerクライアントを使ってリモートからDockerホストを操作することで、Dockerコンテナーを管理できる。Azure-CLIを使って、Dockerホストを作成した場合、DockerクライアントとDockerホスト間でSSL通信を行い、Dockerホストをリモートから直接管理できるように構成される。コンテナーを停止させる場合も同じで、その際のシステム構成は図20のイメージとなる。

Docker停止時のシステム構成のイメージ
図20 Docker停止時のシステム構成のイメージ

 実際に、Dockerホストで稼働中のコンテナーを確認するため、クライアントPC側でdocker psコマンドを実行し、先に起動したnginxコンテナーを停止するために、docker stopコマンドを実行してみる(リスト16、図21)。

CMD
# リモートのDockerホストの実行中のコンテナーを確認する
CMD> docker --tlsverify -H tcp://<対象のDockerホスト>:2376 ps
# Dockerコンテナーを停止させる
CMD> docker --tlsverify -H tcp://<対象のDockerホスト>:2376 stop <コンテナー名>
# 停止したか確認する
CMD> docker --tlsverify -H tcp://<対象のDockerホスト>:2376 ps
リスト16 クライアントPCからDockerコンテナーを確認・停止・確認する

Dockerコンテナーを止めるためには、Dockerコンテナーの名前を使用する(今回の例では「some-nginx」)。もし、Dockerコンテナーを起動するときに名前を付け忘れた場合は、CONTAINER IDを指定することでも操作できるのだが、コマンドからは対象のコンテナーなのかが判別できないことがあるため、注意が必要である。

図21 クライアントPCからDockerコンテナーを確認・停止・確認した結果

 Dockerコンテナーを削除しても、仮想マシンが稼働している間は課金されてしまう。節約のため、Dockerコンテナーの操作が終わったら仮想マシンを停止させておこう(リスト17、図22)。

CMD
# Dockerホストを停止させる(ASMモード)
CMD> azure vm shutdown BldinsDcrHst
# 停止したかを確認する
CMD> azure vm list
リスト17 Azure-CLIでDockerホストを停止させて状況を確認する
図22 Azure-CLIでDockerホストを停止させて状況を確認した結果

最後に

 Azureクラウド環境にDockerホストを作成し、Dockerコンテナーを起動、最後にDockerクライアントを使ってDockerコンテナーの停止までと、Dockerの一通りの操作がWindows+Azureクラウドの組み合わせで実施できることを解説した。今回は、コンテナーを単独で動かすところまでしか紹介できていないが、実際のDockerの活用シーンとしてはWeb-App-DBのそれぞれにコンテナーを用意し、個別に、またはまとめて、コンテナーを起動・停止することが求められてくる。

 次回は、分散キーストアである、Cassandraのコンテナーを使い、複数コンテナーの起動、コンテナー間の通信、複数のDockerホストをまたがったDockerコンテナーのロードについて解説する予定である。

WindowsユーザーのためのDockerコンテナー入門【Azure活用編】(1)
1. 【現在、表示中】≫ Dockerとは? Dockerホストの作成から、Dockerコンテナーのロードまで

Dockerの概要やそれが必要な理由、仮想マシンとの違いを解説。初めてDockerを使うWindowsユーザーに向けて、AzureにDockerホストを作成してSSH接続し、Dockerコンテナーを起動・停止する方法を説明する。

WindowsユーザーのためのDockerコンテナー入門【Azure活用編】(1)
2. Dockerコンテナーの起動・停止と、Cassandraのコンテナーへのcqlsh接続&CQL実行

Dockerコンテナーの基本的な使い方(起動・停止)を一通り説明。また、Cassandraのコンテナーにcqlshで接続してCQL文によりテーブル作成やレコード追加を行う手順を解説する。

WindowsユーザーのためのDockerコンテナー入門【Azure活用編】(1)
3. Dockerコンテナーへのストレージのマッピングと、複数コンテナーのロード(単一ホスト)

実運用で必要となる「ストレージのマッピング」(Dockerホストのストレージを利用/Azure File Storageを利用)を解説。さらに、単一のホストに複数のCassandra DockerコンテナーをロードしてCassandraクラスターを構築する方法を説明する。

WindowsユーザーのためのDockerコンテナー入門【Azure活用編】(1)
4. Azure Container Service+Docker Swarmで、複数Dockerホストから成るクラスターの構築

Azure Container ServiceでDocker Swarmを使い、複数のDockerホスト上にCassandraコンテナーをロードする手順を説明する。

サイトからのお知らせ

Twitterでつぶやこう!