はじめに
__Microsoft Azure__の仮想マシンに__docker__の実行環境をセットアップする手順を説明します。
普通にAzureの管理ポータルからLinux仮想マシンを作成してdockerをセットアップしていくこともできますが、
今回はAzureのコマンドラインインターフェースである Xplat-CLIを使います。
Xplat-CLIでは
-
仮想マシンの作成
-
仮想マシン上にdockerをセットアップ
-
仮想マシンのエンドポイント設定(dockerポートの開放)
-
リモート接続用の証明書のセットアップ
までの処理をコマンド一発で実行することができ、簡単にAzure上のdocker環境を手に入れられます。
事前準備
Microsoft Azureを利用するため、以下の2つを取得しておきます。
- Microsoftアカウント
- Azureのサブスクリプション (無償評価版もあります)
クライアント環境 ( CentOS7 )
クライアント環境には、xplat-cli および docker をインストールします。
1. xplat-cli
xplat-cli は node.js で動作するため、まず node.js から導入します。
CentOS 7 では, epel に node.js が入っています。
yum で epel を追加
# yum install epel-release
yum で nodejs, npm をインストール
# yum install nodejs npm
npm で azure-cli をインストール
# npm install -g azure-cli
これでazure
コマンドが使えるようになります
# azure -v
0.8.10
Azureサブスクリプションに接続するために、発行設定ファイル(.publishsettingsファイル)をダウンロードします。
$ azure account download
info: Executing command account download
info: Launching browser to http://go.microsoft.com/fwlink/?LinkId=*****
help: Save the downloaded file, then execute the command
help: account import <file>
info: account download command OK
表示されたリンクにブラウザでアクセスすると、発行設定ファイルをダウンロードできます。
次にダウンロードした発行設定ファイルをインポートします。
$ azure account import path_to_*******-credentials.publishsettings
info: Executing command account import
info: account import command OK
$
以下のコマンドでサブスクリプションが表示されれば準備OKです。
$ azure account list
info: Executing command account list
data: Name Id Current
data: ------------------- ------------------------------------ -------
data: ******************* ************************************ true
info: account list command OK
$
2. docker(クライアント)
今回は Azure上にdocker環境を作るのが目的なので、本来クライアント環境にdockerは不要ですが、クライアント上にもdockerコマンドがあると、Azure上のdockerをリモートで操作できて便利なので導入しておきます。
yum で docker をインストール
CentOS7からはデフォルトでExtrasリポジトリにdockerが含まれています。
# yum install docker
# docker -v
Docker version 0.11.1-dev, build 02d20af/0.11.1
Azure上にDocker導入済み仮想マシンを作成
ここからはいよいよ Azure 上に Docker環境を作成していきます。
とはいえ、実行するコマンドはただ一つ azure vm docker create
だけです。
以下のように様々なオプションが指定できます。
$ azure help vm docker create
info: Executing command help
help: Create a VM
help:
help: Usage: vm docker create [options] <dns-name> <image> <user-name> [password]
help:
help: Options:
help: -h, --help output usage information
help: -v, --verbose use verbose output
help: --json use json output
help: -p, --docker-port [port] Port to use for docker [4243]
help: -C, --docker-cert-dir [dir] Directory containing docker certs [.docker/]
help: -c, --connect connect to existing VMs
help: -l, --location <name> the location
help: -a, --affinity-group <name> the affinity group
help: -u, --blob-url <url> the blob url for OS disk
help: -z, --vm-size <size> the virtual machine size [small]
help: extrasmall, small, medium, large, extralarge, a5, a6, a7, a8, a9
help: -n, --vm-name <name> the virtual machine name
help: -e, --ssh [port] the ssh port to enable [22]
help: -t, --ssh-cert <pem-file|fingerprint> the SSH certificate
help: -P, --no-ssh-password indicates that the password should be removed when using --ssh-cert
help: -w, --virtual-network-name <name> the virtual network name
help: -b, --subnet-names <list> the comma-delimited subnet names
help: -S, --static-ip <ip-address> the static IP address assigned to the virtual machine
help: -R, --reserved-ip <name> the name of the reserved IP address assigned to the virtual machine
help: -A, --availability-set <name> the name of availability set to create or use
help: -s, --subscription <id> the subscription id
help: -d, --custom-data <custom-data-file> CustomData file
$
最低限、決定しておくべき項目は以下の6つです。
設定項目 | 指定値 | |
---|---|---|
FQDN | {hostname}.cloudapp.net | 適当に被らなそうなホスト名をつけます |
ロケーション | Japan East | 近くのDCを選びます |
VMサイズ | ExtraSmall | テストなので一番小さいので |
OS | Ubuntu 14.04 LTS 64bit | dockerをサポートするOSを選びます |
VMイメージ | b39f27a8b8c64d52b05eac6a62ebad85__Ubuntu-14_04-LTS-amd64-server-20140724-en-us-30GB | VMイメージ名は azure vm image list で調べておきます |
アカウント | azureuser | VMのログインアカウント |
仮想マシン作成
上で決定した設定値を元に azure vm docker create
を実行します。
$ azure vm docker create ¥
{hostname} ¥
--location "Japan East" ¥
--vm-size ExtraSmall ¥
b39f27a8b8c64d52b05eac6a62ebad85__Ubuntu-14_04-LTS-amd64-server-20140724-en-us-30GB ¥
azureuser
これだけで、約5分後にはDockerセットアップ済みの仮想マシンがデプロイされ、アクセス可能な状態になります。
ちなみに、dockerに接続するための証明書やエンドポイントは自動的に設定されます。
証明書
クライアントのホームの.docker
ディレクトリに証明書や鍵が格納されます。
$ ls ~/.docker
ca-key.pem ca.pem cert.pem client.csr extfile.cnf key.pem server-cert.pem server-key.pem server.csr
$
エンドポイント
仮想マシンのエンドポイントには自動的にdockerの使用ポートである 4243/tcp が設定されます。
テスト接続
dockerコマンドでAzure上のdockerに接続してみます。
暗号化通信のため必ず--tls
を忘れずに、-H=tcp://
で仮想マシンのFQDN:4243を指定します。
$ docker --tls -H=tcp://{hostname}.cloudapp.net:4243 version
Client version: 0.11.1-dev
Client API version: 1.12
Go version (client): go1.2
Git commit (client): 02d20af/0.11.1
Server version: 1.3.0
Server API version: 1.15
Go version (server): go1.3.3
Git commit (server): c78088f
$
あとは通常のdockerと使い方は同じです。
$ docker --tls -H=tcp://{hostname}:4243 pull centos:latest
centos:latest: The image you are pulling has been verified
511136ea3c5a: Pull complete
5b12ef8fd570: Pull complete
87e5b6b3ccc1: Pull complete
Status: Downloaded newer image for centos:latest
$
$ docker --tls -H=tcp://{hostname}.cloudapp.net:4243 images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
centos latest 87e5b6b3ccc1 2 weeks ago 224 B
$
$ docker --tls -H=tcp://{hostname}.cloudapp.net:4243 run -it centos /bin/bash
bash-4.2# cat /etc/redhat-release
CentOS Linux release 7.0.1406 (Core)
bash-4.2# uname -a
Linux 9c86914f674c 3.13.0-32-generic #57-Ubuntu SMP Tue Jul 15 03:51:08 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux
bash-4.2#
Enjoy your docker life !
おわりに
このところMicrosoftとDockerの動きが活発化してきています。
2014/10/15の両社の発表によると、__Docker Engine for Windows Server__を開発中で、次期Windowsサーバでは、Windowsのコンテナ仮想化が可能になるとのことです。
DockerによってLinuxでは当たり前になりつつあるコンテナ技術ですが、Windowsでも使えるとなれば一気に裾野が広がりそうでますます目が離せませんね。