こんにちは、サイオステクノロジー 水倉です。
今回は Azure VM で Docker を動かす方法を整理してみたいと思います。
インタフェース | ARM テンプレート利用可否 | |
CUI | Azure CLI | 〇 |
Azure PowerShell | 〇 | |
docker-machine コマンド | × | |
自分で VM に Docker 構築 | × | |
GUI | Azure ポータル | 〇 |
※Docker Container Service はクラスタ前提のためここでは除外しています。
Azure CLI/PowerShell は ARM テンプレートの利用有無にかかわらず、 Azure Docker VM 拡張機能の仕組みで Docker デーモン、Docker クライアント、Docker Compose がインストールされます。Azure ポータルのマーケットプレースでも Canonical + Microsoft 製の「Docker on Ubuntu Server」は VM 拡張機能が使用されています。
(参考) VM 拡張機能は VM デプロイ後のタスクを自動化する仕組みです。詳しくはこちら。
それでは、それぞれの方法を試していきましょう。
Azure CLI編
Azure CLI (ARM テンプレートを使用しない場合)
VM を作るところまではいつも通りのコマンドです。ここでは 2017/02 に GA リリースされた Azure CLI 2.0 を使っていきます。
※コマンドは異なりますが、Azure CLI 1.0 でもできます。
Azure CLI 2.0 はこちらの手順に従ってインストールします。
Windows 環境での Azure CLI はダブルクォートのエスケープが面倒 (JSON パラメータとかツライ・・・) なので Linux 環境をお勧めします。ここでは Bash on Ubuntu on Windows を使用します。
まず、Azure にログインします。
$ az login
標準出力された URL へアクセスし、同じく標準出力された認証コードを使って認証します。
$ To sign in, use a web browser to open the page https://aka.ms/devicelogin and enter the code YOURCODE to authenticate.
使用するサブスクリプションを選択します。
$ az account set --subscription
リソースグループを作成します。
$ az group create --resource-group ymizukura-docker --location japaneast
作成したリソースグループに仮想マシンを作成します。
$ az vm create --resource-group ymizukura-docker \ --name ymizukura-docker \ --image CentOS\ --size Standard_A1 \ --admin-username ymizukura \ --public-ip-address-dns-name ymizukura-docker \ --generate-ssh-keys
ここでは OS イメージは CentOSとし、公開鍵認証のキーペアも生成しています。生成済みの鍵を使用したい場合は –ssh-key-value で鍵値または鍵ファイルのパスを指定することも可能です。
ちなみに –image で指定可能な値は az vm image list で確認可能です。
$ az vm image list -o table You are viewing an offline list of images, use --all to retrieve an up-to-date list Offer Publisher Sku Urn UrnAlias Version ------------- ---------------------- ------------------ -------------------------------------------------------------- ------------------- --------- CentOS OpenLogic 7.3 OpenLogic:CentOS:7.3:latest CentOS latest CoreOS CoreOS Stable CoreOS:CoreOS:Stable:latest CoreOS latest Debian credativ 8 credativ:Debian:8:latest Debian latest openSUSE-Leap SUSE 42.2 SUSE:openSUSE-Leap:42.2:latest openSUSE-Leap latest RHEL RedHat 7.3 RedHat:RHEL:7.3:latest RHEL latest SLES SUSE 12-SP2 SUSE:SLES:12-SP2:latest SLES latest UbuntuServer Canonical 16.04-LTS Canonical:UbuntuServer:16.04-LTS:latest UbuntuLTS latest WindowsServer MicrosoftWindowsServer 2016-Datacenter MicrosoftWindowsServer:WindowsServer:2016-Datacenter:latest Win2016Datacenter latest WindowsServer MicrosoftWindowsServer 2012-R2-Datacenter MicrosoftWindowsServer:WindowsServer:2012-R2-Datacenter:latest Win2012R2Datacenter latest WindowsServer MicrosoftWindowsServer 2012-Datacenter MicrosoftWindowsServer:WindowsServer:2012-Datacenter:latest Win2012Datacenter latest WindowsServer MicrosoftWindowsServer 2008-R2-SP1 MicrosoftWindowsServer:WindowsServer:2008-R2-SP1:latest Win2008R2SP1 latest
下記の鍵ペアが生成されるので、こちらを使って SSH 接続します。
~/.ssh/id_rsa.pub
~/.ssh/id_rsa
–public-ip-address-dns-name で指定した パブリックDNS に –admin-username で指定したユーザで SSH します。
$ ssh -i ~/.ssh/id_rsa ymizukura@ymizukura-docker.japaneast.cloudapp.azure.com
ただ仮想マシンを作って立ち上げただけですので、まだ Docker 先生は不在です。
$ docker info -bash: docker: コマンドが見つかりません
いよいよ仮想マシン拡張機能を使って、Docker デーモン/クライアント、Docker Compose をインストールします。
※仮想マシンへの SSH をログオフして、ローカルで az コマンドを実行してください。
$ az vm extension set \ --resource-group ymizukura-docker \ --vm-name ymizukura-docker \ --name DockerExtension \ --publisher microsoft.Azure.Extensions \ --version 1.1
特に再起動されることもなくインストールされます。Docker がインストールされていることを確認してみましょう。
$ docker info Containers: 0 Running: 0 Paused: 0 Stopped: 0 Images: 0 Server Version: 1.12.6 Storage Driver: overlay Backing Filesystem: extfs Logging Driver: json-file Cgroup Driver: cgroupfs Plugins: Volume: local Network: null host bridge overlay Swarm: inactive Runtimes: runc Default Runtime: runc Security Options: seccomp selinux Kernel Version: 4.13.5-coreos-r2 Operating System: Container Linux by CoreOS 1520.6.0 (Ladybug) OSType: linux Architecture: x86_64 CPUs: 1 Total Memory: 1.639 GiB Name: ymizukura-docker ID: JPWX:KLIV:MTBU:JJ5O:NANO:G75T:NUHN:IQUP:B5TH:Q2S3:73J3:P7G4 Docker Root Dir: /var/lib/docker Debug Mode (client): false Debug Mode (server): false Registry: https://index.docker.io/v1/ Insecure Registries: 127.0.0.0/8
試しに nginx コンテナを起動してみます。仮想マシンのポート 80 をオープンします。
$ az vm open-port --port 80 --resource-group ymizukura-docker --name ymizukura-docker
※この場合、接続元IP制限がかからないため、ご注意ください。セキュリティグループで別途IPを設定してください。CLI でソース IP を指定する方法があったら誰か教えてください。
nginx イメージからコンテナを起動します。
$ docker run -d -p 80:80 --name my-nginx nginx Unable to find image 'nginx:latest' locally latest: Pulling from library/nginx bc95e04b23c0: Pull complete 110767c6efff: Pull complete f081e0c4df75: Pull complete Digest: sha256:004ac1d5e791e705f12a17c80d7bb1e8f7f01aa7dca7deee6e65a03465392072 Status: Downloaded newer image for nginx:latest 7d350e322068242840775e466d68ee31a416da2ca0f9ca4a46e7232a6e570806
Webブラウザからアクセスしてみましょう。
https://ymizukura-docker.japaneast.cloudapp.azure.com/
バッチリ起動してますね。
使い終わったリソースは忘れずに削除しておきましょう。※以降ではリソース削除手順は省略します。
$ az group delete --name ymizukura-docker
ここからは駆け足でいきます。
Azure CLI (ARMテンプレートを使用する場合)
ARM テンプレートを使った場合はシンプルです。リソースグループを作成し、そのリソースグループを指定して ARM テンプレートをデプロイすれば構築完了です。
$ az group create --resource-group ymizukura-docker --location japaneast $ az group deployment create \ --resource-group ymizukura-docker \ --parameters '{"newStorageAccountName": {"value": "ymizukuradockerstorage"}, \ "adminUsername": {"value": "ymizukura"}, \ "adminPassword": {"value": "P@ssw0rd!"}, \ "dnsNameForPublicIP": {"value": "ymizukura-docker"}, \ "vmSize": {"value": "Standard_A1"}}' \ --template-uri https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/docker-simple-on-ubuntu/azuredeploy.json
$ sudo docker info Containers: 0 Running: 0 Paused: 0 Stopped: 0 Images: 0 Server Version: 17.10.0-ce Storage Driver: overlay Backing Filesystem: extfs Supports d_type: true ... 以下略
Azure PowerShell編
Azure PowerShell (ARM テンプレートを使用しない場合)
こちらの手順でAzure PowerShell をインストールします。
PowerShell では下記 リンクのイメージです。CLI に比べるとカッチリやってあげる必要があって、結構重いです。
https://docs.microsoft.com/ja-jp/azure/virtual-machines/scripts/virtual-machines-linux-powershell-sample-create-docker-host
Azure PowerShell (ARM テンプレートを使用する場合)
Azure CLI と同じように、リソースグループを作成して、ARM テンプレートをデプロイします。
> Login-AzureRmAccount > Select-AzureRmSubscription -SubscriptionName > New-AzureRmResourceGroup -Name ymizukura-docker -Location japaneast > New-AzureRmResourceGroupDeployment ` -Name docker-deployment ` -ResourceGroupName ymizukura-docker ` -TemplateUri https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/docker-simple-on-ubuntu/azuredeploy.json
続いて表示されるテンプレートパラメータを入力し、デプロイ完了を待ちます。
コマンド パイプライン位置 1 のコマンドレット New-AzureRmResourceGroupDeployment 次のパラメーターに値を指定してください: (ヘルプを表示するには、「!?」と入力してください。) newStorageAccountName: ymizukuradocker adminUsername: ymizukura adminPassword: **************** dnsNameForPublicIP: ymizukura-docker
$ ssh ymizukura@ymizukura-docker.japaneast.cloudapp.azure.com $ docker info ... 以下略
docker-machine コマンド編
Docker Machine をインストールします。
https://docs.docker.com/machine/install-machine/
–driver (-d) で azure を指定し、Azure ドライバー固有のオプションを指定します。az コマンドとは異なり、リソースグループのロケーションが使用されません。そのため、明示的に –azure-location でロケーションを指定しないとデフォルトの westus にリソースが作成されるのでご注意ください。また、仮想マシンイメージは UrnAlias ではなく、Urn (Publisher:Offer:Sku:Version) 形式で指定する必要があります。この辺りは docker-machine コマンドのドキュメントをご確認ください。
$ az group create --resource-group ymizukura-docker --location japaneast $ docker-machine create -d azure \ --azure-subscription-id \ --azure-resource-group ymizukura-docker \ --azure-location japaneast --azure-image OpenLogic:CentOS:7.3:latest \ --azure-size Standard_A1 \ --azure-ssh-user ymizukura \ --azure-open-port 80 \ ymizukura-docker
※この場合、接続元IP制限がかからないため、ご注意ください。セキュリティグループで別途IPを設定してください。
環境変数を設定して、docker info で接続確認ができます。
$ eval $(docker-machine env ymizukura-docker) $ docker info ... 以下略
VM に自分で Docker 構築編
お好みの OS で VM 作成し、Docker、Docker compose をインストールします。
Docker
https://docs.docker.com/engine/installation/
Docker Compose
https://docs.docker.com/compose/install/
Azure ポータル編
Azure ポータル (ARM テンプレートを使用しない場合)
マーケットプレースから作成できます。
Azure ポータル (ARM テンプレートを使用する場合)
マーケットプレースから「テンプレート」で検索し、「テンプレートからデプロイ」を選択します。
「作成」ボタンを押下します。
独自のテンプレート、あるいは外部テンプレートを指定します。ここでは Azure Quick Start Template から docker-simple-on-ubuntu を指定します。
テンプレートの要求するパラメータを入力し、「購入」ボタンを押下します。
SSH で接続して、docker info すると docker 起動が確認できます。
$ ssh ymizukura@ymizukura-docker.japaneast.cloudapp.azure.com $ docker info ... 以下略
まとめ
Azure VM で Docker を動かす方法を紹介しました。それでは良い Docker ライフを♪