LoginSignup
25
26

More than 5 years have passed since last update.

AzureでDockerしよう(準備編)

Last updated at Posted at 2015-09-27

Webサービスといえば今やクラウドが当たり前ですが、フレキシブルにスケールアウトさせたり、ステージング環境からプロダクション環境を構成したりと、Dockerの出番はあちこちにあります。ChefやVagrantでDevOpsを実現する方法が流行っていましたが、これからDocker全盛の時代になっていくでしょう。

DockerはLinuxでしか使えませんが、Windows向きと思われているAzureでもしっかりDocker対応はされています。ただ、まとまった情報や、分かりやすくスタートできそうな手順がなかったので、書き上げておくことにしました。

何はともあれ、まずはVMが必要ですから、LinuxのVMを立てます。

VMの立ち上げ

AzureでVMを立ち上げるのは簡単。Azureポータルからウイザードに従って設定するだけ。
1. AzureポータルにログインしてVMを作成。
2. VMイメージをギャラリーから選ぶ。現時点でDockerに対応されているのは「Linux(Ubuntu 14.04)」イメージ。

証明書を作成する

Dockerをコントロールするのに、サーバ証明書とクライアント証明書が必要になるので、VMが立ち上がったらSSHでログインし、以下の手順で証明書を作成する。
(参考)http://docs.docker.com/articles/https/

OpenSSLのコマンドを使って証明書ファイルを作って行きます。

$ openssl genrsa -aes256 -out ca-key.pem 4096
$ openssl req -new -x509 -days 365 -key ca-key.pem -sha256 -out ca.pem
$ openssl genrsa -out server-key.pem 4096

ホスト名を環境変数にセット(Azure では環境変数$HOSTが空のため)します。
※ ここでわざわざ環境変数にセットしなくても良いんですが、今後このスクリプトを自動化するかも知れないので、念のため。

$ export HOST=docker01-ict.cloudapp.net

ローカルから接続することを考えて、ローカルIPからも接続できるように設定します。(ホスト名がDNSで引けないIPアドレスから接続する場合、IPを指定してやる必要があります。)

$ echo subjectAltName = IP:127.0.0.1 > extfile.cnf
$ openssl req -subj "/CN=$HOST" -sha256 -new -key server-key.pem -out server.csr
$ openssl x509 -req -days 365 -sha256 -in server.csr -CA ca.pem -CAkey ca-key.pem -CAcreateserial -out server-cert.pem -extfile extfile.cnf
$ openssl genrsa -out key.pem 4096
$ openssl req -subj '/CN=client' -new -key key.pem -out client.csr
$ echo extendedKeyUsage = clientAuth > extfile.cnf
$ openssl x509 -req -days 365 -sha256 -in client.csr -CA ca.pem -CAkey ca-key.pem   -CAcreateserial -out cert.pem -extfile extfile.cnf

Base64エンコードしてやらないと Azure が読み込んでくれないので、エンコードしておく。

$ base64 ca.pem > ca64.pem
$ base64 server-cert.pem > server-cert64.pem
$ base64 server-key.pem > server-key64.pem

できあがり。

Azureに食べさせる用の3つと、接続する管理クライアント用の3つを tar で固める。(SCPして取り出すため)

$ tar cvzf forAzure.tar ca64.pem server-cert64.pem server-key64.pem
$ tar cvzf forClient.tar cert.pem client.csr key.pem

この2つの tarボール を、scpで接続するなりしてローカルに持ってきて、解凍しておく。
で、サーバのファイルはセキュリティのためにお掃除しておきましょう。

$ rm -v forAzure.tar forClient.tar
$ rm -v client.csr server.csr
$ chmod -v 0400 ca-key.pem key.pem server-key.pem
$ chmod -v 0444 ca.pem server-cert.pem cert.pem

ここまでできたら、VMにDocker機能をセットアップする。

Docker拡張機能をAzuerポータルからVMにセットアップ

  1. Azureの『新しいポータル』に移動。(古い方のポータルだとDocker拡張機能をインストールするUIがないので注意。)

  2. 仮想マシン(クラシック)⇒ 対象のVMを選択 ⇒ 拡張機能 ⇒「+追加」で「Docker」を選択。

  3. 証明書とキーファイルが要求されるので、ローカルに持ってきて解凍した forAzure.tar の中身をアップロードする。

  4. ポート番号はお好きに設定。

  5. このままだと外部から接続できないままなので、再度、
    仮想マシン(クラシック)⇒ 対象のVMを選択 ⇒ エンドポイント から
    設定したポート番号を登録。

数分待つと、Docker拡張機能のインストールが終わって使えるようになります。

MacからDockerを操作したい

とりあえず、手許のMacから操作してみましょう。
Macでコンソールを開いて操作して下さい。

MacPortが入ってないひとは↓からダウンロードしてきてインストール。(HomeBrewでもいいですが)
https://www.macports.org/install.php

まだ XCode を使ったことない人は、インストール前にライセンス認証が必要。

$ sudo xcodebuild -license

MacPortを使ってローカルのMacに Docker をインストール。

$ sudo port install docker

forClient.tar の中身のクライアント証明書ファイル3つを ~/.docker ディレクトリにコピー
cert.pem client.csr key.pem

Dockerに接続!

ここまで来たらもうDockerをコントロールできるようになっています。
試してみよう。

$ docker --tls -H tcp://{ServerFQDN}:{PortNo} info

{ServerFQDN} には docker.cloudapp.net のような自分のVMのDNS名
{PortNo} には Docker拡張機能 のセットアップ時に設定したポート番号
をそれぞれ入れる。

こんな結果が表示されたらOK。

Containers: 0
Images: 0
Storage Driver: aufs
 Root Dir: /var/lib/docker/aufs
 Backing Filesystem: extfs
 Dirs: 0
 Dirperm1 Supported: true
Execution Driver: native-0.2
Logging Driver: json-file
Kernel Version: 3.19.0-28-generic
Operating System: Ubuntu 14.04.3 LTS
CPUs: 1
Total Memory: 668.6 MiB
Name: docker01
ID: 7W5C:RHS5:AZRQ:Y3DK:HLMC:CRS6:WG2B:WRBH:OKGU:6YKL:MQB3:GOCO
WARNING: No swap limit support

次は Docker を操作して、実際にサービスを立ち上げるところをやってみます。
(続く)

もしよく分からないこととかありましたら、コメントどしどし入れて下さい。
できるだけ回答します。(たぶん。笑)


(参考URL)
https://azure.microsoft.com/ja-jp/documentation/articles/virtual-machines-docker-with-portal/
http://docs.docker.com/articles/https/

25
26
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
25
26