概要
Azure のコンテナサービスである Azure Container Service (acs) を使ってみました
acs は AWS や Google のコンテナサービスのように「フルマネージド」なコンテナサービスではありません
簡単に言うとコンテナを動作させることができる環境を簡単に Azure 上にデプロイできるサービスになります
Azure 的にはコンテナテンプレートサービスみたいなニュアンスで呼んでいるようです
環境
- CentOS 7.3
- Docker 1.12.6
- Azure Container Service 2017/02/09 時点
Azure Container Service のデプロイ
Azure ポータルにログインして acs をデプロイしてみます
新規から「Azure Container Service」を選択します
コンテナーという分類の中にあります
まず基本構成を設定します
User Name は好きなものを入力してください
SSH public key は acs 上に作成された VM にログインするマシン上であらかじめ SSH の公開鍵を作成してください
例えば以下のような感じで作成できます
mypassword はあとで使うので覚えておいてください
- ssh-keygen -t rsa -b 2048 -f ~/.ssh/id_rsa -N mypassword
- cat .ssh/id_rsa.pub
表示された id_rsa.pub の情報を貼り付ければ OK です
サブスクリプションは従量にしてリソースグループは今回新規で作成します
好きな名前を入力してください
場所は「東日本」を選択しました
これで次にいきます
Framework configuration は「Swarm」を選択します
Azure Container service settings の「DNS prefix for container service」を決定します
ここはすでに使われているプレフィックスを選択するとエラーになるのでユニークになるようなプレフィックスを入力します
あとは内容を確認して最後に「購入」を選択すれば acs のデプロイが始まります
(この「購入」という表現が何故かボタンを押すのを躊躇させます、、、)
acs には 19 個のリソース (VM やストレージ、LB、IP)が含まれており、これのデプロイ作業が acs をデプロイするということになります
だいたい完了までに 20 - 30 分ほどかかるので待ちましょう
ACS サーバに接続する
作成できたら ACS サーバに接続しましょう
というもの ACS は docker コマンドを直接使って acs 上にコンテナを立ち上げます
(ecs, kubectl, arukas のように専用 CLI を使いません)
でも acs 上の Docker エンドポイントにそのままアクセスするのではなく acs 上に SSH ログインしてポートフォーワードを使うことで localhost にバインドし、そこにアクセスすることで docker コマンドを使えるようにします
SSH のポートフォーワードをやってことがある人はピンと来ると思います
では接続します
先程 ssh-keygen で鍵を作成したマシン上でやりましょう
ssh -L 2375:localhost:2375 -f -N testuser@20170209mgmt.japaneast.cloudapp.azure.com -p 2200
でパスワードは今回の場合は ssh-keygen の時に設定した mypassword になります
特にエラーがでなければ成功です
- netstat -an | grep 2375
- curl http://localhost:2375/images/json
で動作確認してください
curl で空のレスポンスが返ってくれば OK です
Docker コンテナを立ち上げてみる
これで acs に接続できたので、更にそのマシン上で docker コマンドを使って acs 上にコンテナを立ち上げてみます
事前に言っておくべきでしたが、docker コマンドをインストールしておいてください
今回は CentOS7 + docker の構成にしています
- export DOCKER_HOST=:2375
でポートフォーワードした localhost に docker コマンドでアクセスするようにします
今回は普通に nginx のコンテナを立ち上げてみましょう
- docker pull nginx
- docker run -d -p 80:80 nginx
で acs 上にコンテナが立ち上がります
動作確認はコンテナアクセス用のエンドポイントが acs 上に用意されているのでそこにアクセスします
今回の設定であれば
- curl “20170209agents.japaneast.cloudapp.azure.com”
でアクセスできると思います
nginx のホーム画面の HTML が返ってくれば OK です
docker-compose するには
普通に docker-compose.yml があるディレクトリで docker-compose up
すれば良いのですが、一点だけ注意が必要で build ディレクティブが使えません
これは Amazon EC2 Container Service のときも同様で、どうするかというとイメージを事前に Dockerhub で公開する必要があります
そして docker-compose.yml 内の build を image に変更して docker-compose up
すれば起動することができます
Azure Container Service にはレジストリサービスがあるらしいのでそちらに push しても大丈夫だと思いますが
今回はレジストリサービスまで使わなかったので、Dockerhub を使ってみてください
Tips
その他気づいた Tips を紹介します
- swarm-master-lb-xxxxxxxx が docker エンドポイント用の LB、これに紐付いている DNS に docker コマンドでアクセスする
- swarm-agent-lb-xxxxxxxx がコンテナアクセス用の LB、これに紐付いている DNS に立ち上げたコンテナアプリの動作確認をする場合はアクセスする
- acs はマネージドサービスではない、クラスタ内のインスタンスの管理、運用は自分でやる必要がある
- コンテナの自動起動もできない (ecs のサービスの概念的なのはない)
- コンテナがいくつ起動しているなどコンパネで確認することはできない
とかでしょうか
最後に
Azure Container Service を使って Docker コンテナを立ち上げるところまでやってみました
Amazon や Google と違って docker コマンドをそのまま使うので、docker コマンドに慣れている場合は特に問題なく移行できるのは嬉しい点かなと思います
ただ、クラスタの管理やコンテナの管理を自分で行う必要が出てくるのでその点は少し大変かもしれません
逆に Amazon や Google はその辺を考えて作られているので、嬉しい点かなと思います
どちらも一長一短なような気がしますが、そもそもサービスとして目指す方向性が違うので用途によって使い分ける必要はあるかなと思います
参考サイト
- https://docs.microsoft.com/ja-jp/azure/container-service/container-service-connect
- https://docs.microsoft.com/ja-jp/azure/container-service/container-service-enable-public-access
- https://docs.microsoft.com/ja-jp/azure/container-service/container-service-docker-swarm#a-namedeploy-containers-by-using-docker-composeadocker-compose-%E3%82%92%E4%BD%BF%E7%94%A8%E3%81%97%E3%81%A6%E3%82%B3%E3%83%B3%E3%83%86%E3%83%8A%E3%83%BC%E3%82%92%E3%83%87%E3%83%97%E3%83%AD%E3%82%A4%E3%81%99%E3%82%8B
- https://github.com/Azure/acs-engine/blob/master/docs/swarm.md
0 件のコメント:
コメントを投稿