【初心者向け】 Azure VM で Docker を動かす方法まとめ

docker-on-azure

こんにちは、サイオステクノロジー 水倉です。

今回は 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ブラウザからアクセスしてみましょう。
http://ymizukura-docker.japaneast.cloudapp.azure.com/

バッチリ起動してますね。

nginx-index

使い終わったリソースは忘れずに削除しておきましょう。※以降ではリソース削除手順は省略します。

$ 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 テンプレートを使用しない場合)

マーケットプレースから作成できます。

marketplace-docker-image

Azure ポータル (ARM テンプレートを使用する場合)

マーケットプレースから「テンプレート」で検索し、「テンプレートからデプロイ」を選択します。

marketplace-deploy-template1

「作成」ボタンを押下します。

marketplace-deploy-template2

独自のテンプレート、あるいは外部テンプレートを指定します。ここでは Azure Quick Start Template から docker-simple-on-ubuntu を指定します。

select-quick-start-template

テンプレートの要求するパラメータを入力し、「購入」ボタンを押下します。

set-template-parameters

SSH で接続して、docker info すると docker 起動が確認できます。

$ ssh ymizukura@ymizukura-docker.japaneast.cloudapp.azure.com
$ docker info
... 以下略

まとめ

Azure VM で Docker を動かす方法を紹介しました。それでは良い Docker ライフを♪

Be the first to comment

コメント投稿

Your email address will not be published.


*