クラウドでコンテナを実行することは、困難で混乱を招く可能性があります。 仮想ネットワークからセキュリティまで、さまざまなクラウドがどのように機能するかを理解し、選択できるオプションは非常にたくさんあります。 オーケストレーターは言うまでもありません。 控えめに言っても、それは学習曲線です。
Docker では、開発者エクスペリエンス (DX) をよりシンプルにしています。 その延長として、開発者が毎日使用するのと同じ愛されているDockerエクスペリエンスを提供し、クラウドと統合したいと考えています。 MicrosoftのAzure ACIは、まさにそれを行うための素晴らしいプラットフォームを提供しました。
このチュートリアルでは、Azure ACI で作成を使用して 1 つのコンテナーと複数のコンテナーを実行する方法について説明します。 Docker コンテキストを設定し、Azure へのログインを簡略化する方法について説明します。 このチュートリアルを終了すると、使い慣れた Docker コマンドを使用して、アプリケーションを独自の Azure ACI アカウントにデプロイできるようになります。
前提 条件
このチュートリアルを完了するには、次のものが必要です。
- 開発用コンピューターにインストールされている Docker です。 以下のリンクから、Docker Desktop Edge バージョン 2.3.3.0 以降をダウンロードしてインストールできます。
- ドッカーハブアカウント。 こちらから無料アカウントを入手してください。
- Azure アカウント。 無料でサインアップしてください。
- 開発用コンピューターに Git がインストールされている。
- ファイルの編集に使用する IDE またはテキスト エディター。 私はVSCodeをお勧めします
ACI でのドッカー コンテナーの実行
Azure ACI との統合は、ローカル コンテナーの操作とよく似ています。 開発チームは開発者エクスペリエンスについて非常に深く考え、ACI を操作するための UX をローカル コンテナーでの作業にできるだけ近づけようとしました。
Azure ACI で単純な Nginx Web サーバーを実行してみましょう。
Azure にログインします。
ACI で Docker イメージを実行するために、マシンに Azure CLI をインストールする必要はありません。 ドッカーがすべてを処理します。
最初に行う必要があるのは、Azureにログインすることです。
$ docker login azure
これにより、Azureにログインできるブラウザウィンドウが開きます。
アカウントを選択してログインします。 ログインしたら、ブラウザウィンドウを閉じることができます。
Azure ACI Context
Dockerにはコンテキストの概念があります。 コンテキストは、Docker コンテナーを実行できる場所と考えることができます。これより少し複雑ですが、これは今のところ十分な説明です。 このチュートリアルでは、ローカル コンテキストと新しい ACI コンテキストを使用します。
まず、ローカル開発マシンに現在どのようなコンテキストがあるかを見てみましょう。 次のコマンドを実行して、コンテキストのリストを表示します。
$ docker context list
NAME TYPE DESCRIPTION DOCKER ENDPOINT KUBERNETES ENDPOINT ORCHESTRATOR
default * moby Current DOCKER_HOST based configuration unix:///var/run/docker.sock https://kubernetes.docker.internal:6443 (default) swarm
別のコンテキストを既に作成しているかどうかに応じて、1 つのコンテキストのみが表示されます。 これは、"moby" というラベルの付いたローカル Docker エンジンを指す既定のコンテキストです。 docker コマンドに使用される現在のコンテキストは、アクティブなコンテキストの名前の横にある "*" で識別できます。
次に、コンテナーを実行できる ACI コンテキストを作成しましょう。 create aci コマンドを使用してコンテキストを作成します。
aci コンテキストを作成するためのヘルプを見てみましょう。
$ docker context create aci --help
Create a context for Azure Container Instances
Usage:
docker context create aci CONTEXT [flags]
Flags:
--description string Description of the context
-h, --help help for aci
--location string Location (default "eastus")
--resource-group string Resource group
--subscription-id string Location
Global Flags:
--config DIRECTORY Location of the client config files DIRECTORY (default "/Users/peter/.docker")
-c, --context string context
-D, --debug enable debug output in the logs
-H, --host string Daemon socket(s) to connect to
ヘルプの [フラグ] セクションの下に、 場所、リソース グループ、 サブスクリプション IDを設定するオプションがあることがわかります。
これらのフラグを create コマンドに渡すことができます。 そうしないと、docker cli は対話モードでこれらの質問をします。 今それをやってみましょう。
$ docker context create aci myaci
cliが最初に尋ねるのは、使用するサブスクリプションです。 1つしかない場合、dockerはそれを使用します。
Using only available subscription : Azure subscription 1 (b3c07e4a-774e-4d8a-b071-xxxxxxxxxxxx)
次に、使用するリソース グループを選択する必要があります。 以前に作成したものを選択するか、[新しいリソース グループの作成] を選択できます。 新しいものを作成することを選択します。
Resource group "c3eea3e7-69d3-4b54-83cb-xxxxxxxxxxxx" (eastus) created
これで、aci コンテキストが設定されました。 コンテキストをリストしましょう。
$ docker context list
作成した ACI コンテキストが表示されます。
ACI でのコンテナの実行
ACI コンテキストを設定したので、クラウドでコンテナーを実行できるようになりました。 コマンドを適用するコンテキストを Docker に指示する方法は 2 つあります。
1 つ目は、 –context フラグを渡すことです。 もう1つは、コンテキストを切り替えることで、後続のすべてのコマンドで使用するコンテキストをDockerに指示することです。 ここでは、–context フラグを使用しましょう。
$ docker --context myaci run -d --name web -p 80:80 nginx
[+] Running 2/2
⠿ web Created
⠿ single--container--aci Done
web
ここでは、Docker が ACI と対話し、「web」という名前のコンテナー インスタンスを作成し、1 つのインスタンスを開始したことがわかります。
Azure ポータルを開き、コンテナー インスタンスに移動します。
psやlogsなど、すでに使い慣れているDockerCLIコマンドを実行することもできます。
コンテキストの切り替え
実行中のコンテナーを見てみましょう。 ただし、その前に、アクティブ コンテキストを上記で設定した ACI コンテキストに切り替えて、すべてのコマンドで –context を入力し続ける必要がないようにしましょう。
$ docker context use myaci
次に、–context フラグを渡さずに ps コマンドを実行してみましょう。
$ docker ps
CONTAINER ID IMAGE COMMAND STATUS
PORTS
web nginx Running 52.224.73.190:80->80/tcp
Dockerにmyaciコンテキストを使用するように指示したので、ローカルマシンではなくAzureアカウントで実行されているコンテナのリストが表示されます。
コンテナが実行されていることを確認しましょう。 上記のps出力からコンテナのIPアドレスをコピーし、ブラウザのアドレスバーに貼り付けます。 あなたは私たちのNginxウェブサーバーが動いているのを見ることができます!
上で述べたように、コンテナのログを確認することもできます。
$ docker logs web
コンテナーを停止して削除するには、次のコマンドを実行します。
$ docker rm web
ブーム!
それは非常に簡単で、統合はスムーズです。 既に使い慣れたいくつかの Docker コマンドといくつかの新しいコマンドを使用して、開発マシンから ACI でコンテナーを非常に迅速かつ簡単に実行できました。
しかし、これで終わりではありません!
Docker Compose
を使用して複数のコンテナを実行することもできます Docker 作成。 ACI 統合により、ACI に対して docker cli から作成コマンドを実行できるようになりました。 次にそれをやってみましょう。
コードリポジトリをフォークする
私はRedisデータベースにタイムスタンプを記録する単純なPythonフラスコアプリケーションを使用しています。 リポジトリをフォークしてから、gitリポジトリをローカルマシンにクローンしましょう。
お気に入りのブラウザを開き、次の場所に移動します https://github.com/pmckeetx/timestamper
ウィンドウの右上隅にある「フォーク」ボタンをクリックします。 これにより、デモリポジトリの「コピー」がGitHubアカウントに作成されます。
フォークされたバージョンのリポジトリで、緑色の [コード] ボタンをクリックし、github の URL をコピーします。
ローカルマシンでターミナルを開き、次のgitコマンドを実行して、リポジトリをローカル開発マシンに複製します。
<<github username>; > を GitHub ユーザー名に置き換えてください。
git clone [email protected]:<<github username>>/timestamper.git
ローカルでビルドして実行する
タイムスタンプ プロジェクトのルート ディレクトリにいることを確認し、次の手順に従ってイメージをビルドし、Docker Compose でアプリケーションを起動します。
まず、Docker ID を docker-compose.yml ファイルのイメージに追加する必要があります。 エディターで docker-compose.yml ファイルを開き、<<username>> を実際の Docker ID に置き換えます。
次に、ローカルのDockerコンテキストを使用していることを確認する必要があります。
$ docker context use default
これで、docker-composeを使用してアプリケーションをビルドして起動できます。
$ docker-compose up --build
Building frontend
Step 1/7 : FROM python:3.7-alpine
---> 6ca3e0b1ab69
Step 2/7 : WORKDIR /app
...
frontend_1 | * Running on http://0.0.0.0:5000/ (Press CTRL+C to quit)
frontend_1 | * Restarting with stat
frontend_1 | * Debugger is active!
frontend_1 | * Debugger PIN: 622-764-646
Docker はタイムスタンプ イメージをビルドし、Redis データベースとタイムスタンプ コンテナーを実行します。
http://localhost:5000 に移動し、タイムスタンプをクリックします。 ボタンを数回押します。
ACI で作成
次に、新しい docker 作成統合を使用して、ACI でアプリケーションを実行してみましょう。
まず、ACI がイメージをプルして実行できるように、イメージを Docker Hub にプッシュする必要があります。 次のコマンドを実行して、イメージを Docker Hub アカウントにプッシュします。
$ docker-compose push
Pushing frontend (pmckee/timestamper:latest)...
The push refers to repository [docker.io/pmckee/timestamper]
6e899582609b: Pushed
...
50644c29ef5a: Layer already exists
latest: digest: sha256:3ce2607f101a381b36beeb0ca1597cce9925d17a0f826cac0f7e0365386a3042 size: 2201
イメージが Hub 上にあるので、compose を使用して ACI でアプリケーションを実行できます。
まず、ACI コンテキストに切り替えましょう。
$ docker context use myaci
コンテキストのリストと使用されているコンテキストを表示するには、list contexts コマンドを実行できることを忘れないでください。
$ docker context list
ACI コンテキストを使用するようになったので、クラウドでアプリケーションを始めましょう。
$ docker compose up
[+] Running 3/3
⠿ timestamper Created
⠿ frontend Done
⠿ backend Done
アプリケーションが稼働していることを確認しましょう。 フロントエンドのIPアドレスを取得するために、実行中のコンテナを一覧表示しましょう。
$ docker ps
CONTAINER ID IMAGE COMMAND STATUS PORTS
timestamper_frontend pmckee/timestamper
Running 40.71.234.128:5000->5000/tcp
timestamper_backend redis:alpine
Running
上記のIPアドレスとポートをコピーして、お気に入りのブラウザに貼り付けます。
Redis コンテナーのログを見てみましょう。
$ docker logs timestamper_backend
1:C 13 Jul 2020 18:21:12.044 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
...
1:M 13 Jul 2020 18:21:12.046 # Server initialized
1:M 13 Jul 2020 18:21:12.047 * Ready to accept connections
はい! これは、ACI で実行されている Redis コンテナーです。かなりかっこいい。
少し遊んだ後、compose down を実行して作成アプリケーションを停止できます。
$ docker compose down
結論
ACI 統合で Compose on Azure を使用して 1 つのコンテナーを実行することも、複数のコンテナーを実行することも、今ではいかに簡単であるかを確認しました。 機能に影響を与えたり提案したりしたい場合は、公開 ロードマップで行うことができます。
Composeと、オープンソースイニシアチブの周りで起こっているすべてのクールなことについてもっと知りたい場合は、チェックアウトしてください 素晴らしい 作曲 とオープンソース の作曲仕様。