BLOGAzureブログ

ビルドからデプロイまで、Azureがあればコンテナを気軽にいじれます

2024.10.01

クラウドサーバーご検討中の方必見 お役立ち資料一覧

皆さまこんにちは、SB C&Sの八釼(やつるぎ)です。
コンテナ型の仮想化技術が注目されてから久しいですね。軽量で可搬性にも優れるコンテナは大変ありがたいですよね。

さて、まずはコンテナを動かして理解を深めたいとか業務における簡単な検証をやってみたいという場合に、もろもろ操作するためのUIであるとかコンテナエンジンなどが必要になりますね。まずは検討するべき選択肢としてはDocker Desktopのようなツールをご自身の端末にインストールすることになると思います。

ただ、所属する組織のポリシーであるとかライセンス費用であるとか、スペックの問題(ツールによっては結構重たい)などなどによってこのようなツールがインストールもしくは利用できないこともあるのではないでしょうか?

そんな時はぜひAzureを使ってみてください。
「単純にAzure VMで検証環境を構築するってオチじゃないの?」
と思われた方、ご安心くださいそうではございません。そして断然簡単かつ手間のかからない方法です。

0.環境準備

Azure Cloud Shell

できる限り手軽にしたいのでAzure portal(ブラウザ)からAzure Cloud Shellを起動します。実際にはこれを使えるようにするためには若干の設定というか準備が必要なのですが、すぐに終わる上に非常に簡単なので割愛します。シェル環境はBashを選択しました。

AzureCloudShell.png

必要ファイルの作成

ホームディレクトリに(必ずしもこのようにする必要はありませんが)以下の構成でディレクトリを一つとファイルを二つ作成します。

                        
                            .  
                            ├── src
                            │    └── index.html
                            └── Dockerfile                           
                        
                    

Webサイトのトップページのファイル作成

今回デプロイするコンテナにポート80番でアクセスするとHello World!と表示するようにしたいのでindex.htmlというファイルを作成します。ちなみに、このファイルには以下のようにコードを記述しました。

                        
                            <h1>Hello World!</h1>
                        
                    
コンテナイメージ作成のための定義ファイル作成

Dockerfileという名前の定義ファイルを作成します。記述内容は以下の通りです。今回はnginxを用いた超簡易なWebサーバーコンテナを起動させることにしました。コンテナイメージ作成(build)時に事前に作成したindex.htmlが/usr/share/nginx/htmlにコピーされて配置されるように記述します。

                    
                        FROM    nginx:latest
                        COPY    ./src/index.html /usr/share/nginx/html
                        EXPOSE  80
                    
                

Azure Container Registry(ACR)インスタンスのデプロイ

諸般の事情によりDocker Hubのリポジトリにイメージがアップロードできないということがあるかと思いますし、Azureでアプリ開発するのであればACRを用いる方が統制が効きやすく色々と都合が良い場合が多いので、まずはそのリソースをデプロイします。GUIからでもCUIからでも、はたまたBicepコードからでも良いです。ご自身のご都合の良い方法にて実施していただければと思いますが、私の場合過去に作成したコードがあって楽なのでこれを活用しました。

【関連記事】Azure OpenAI ServiceリソースデプロイをBicepモジュールでやってみよう

なお、本番運用にはセキュリティの観点からこの方法でレジストリ認証を行わないと思いますが、今回はお手軽検証環境ですのでレジストリの管理者アカウントを用いて認証することにします。そのためこれを有効化しました。

                    
                        $ az acr update -n acrypzm3qbq7ni5i --admin-enabled true
                    
                

また、後の工程で必要となるので、管理者アカウントのユーザー名とパスワードを事前に取得して控えておきます。

                    
                        $ az acr credential show --name acrypzm3qbq7ni5i
                        {
                            "passwords": [
                              {
                                "name": "password",
                                "value": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
                              },
                              {
                                "name": "password2",
                                "value": "oooooooooooooooooooooooooooooooooooooooooooooooooooo"
                              }
                            ],
                            "username": "acrypzm3qbq7ni5i"
                          }
                    
                

1. コンテナ作成のためのテンプレート作成

事前に作成したDockerfileを基にビルドを実行します。つまりdocker buildコマンドに相当するAzure CLIコマンドを用います。ホームディレクトリにDockerfileが配置されているので、ここで以下のコマンドを実行します。成功するとリポジトリが作成されイメージもpushされた状態になります。

                
                $ az acr build --registry acrypzm3qbq7ni5i --image helloacrtasks:v1 .
                
            

2. コンテナをデプロイ

ビルド(プッシュ)したイメージを使用してコンテナを作成し起動させるため、以下のaz containerコマンドを実行します。docker runに相当するコマンドを打ったと考えて頂いて差し支えありません。

                
                    $ az container create --resource-group licensecounter-blog-acr-rg \
                    --name acrypzm3qbq7ni5i \
                    --image acrypzm3qbq7ni5i.azurecr.io/helloacrtasks:v1 \
                    --registry-login-server acrypzm3qbq7ni5i.azurecr.io \
                    --ip-address Public --location japaneast \
                    --registry-username acrypzm3qbq7ni5i \
                    --registry-password xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
                
            

ちなみに、az containerコマンドはAzure Container Instances(ACI)の管理に用いるものです。本サービスの詳細については以下の公式ドキュメントをご確認ください。


公式ドキュメント | Azure Container Instances とは

3. デプロイされたコンテナにアクセスして色々と確認

HTTP でアクセス

今回作成したコンテナインスタンスにはパブリックIPを割り当てましたので、まずはIPアドレスを確認します。

                    
                        $ az container show --resource-group licensecounter-blog-acr-rg \
                        --name acrypzm3qbq7ni5i \
                        --query ipAddress.ip \
                        --output table

                        Result
                        -------------
                        4.189.199.149
                    
                

では、これにWebブラウザにてアクセスしてみます。


HelloWorld.png

はい、想定通りの表示ですね。問題なくコンテナが作成され起動していることが確認できました。

シェルに接続

起動したコンテナにはシェルを起動して接続もできます。ちなみに、今回ビルドしたベースイメージはDebian系のLinuxディストリビューションです。

では、以下のaz container execコマンドを実行しBashを起動して接続してみます。docker execに相当するコマンドを打ったと考えて頂いて差し支えありません。

                    
                        $ az container exec \
                        --resource-group licensecounter-blog-acr-rg \
                        --name acrypzm3qbq7ni5i \
                        --exec-command /bin/bash

                        root@SandboxHost-638585015028685282:/#
                    
                

rootユーザーにてログインできました。せっかくなので何かコマンドを打ってみます。Debian系であることが確認できましたね。

                    
                        root@SandboxHost-638585015028685282:/# cat /etc/os-release 
                        PRETTY_NAME="Debian GNU/Linux 12 (bookworm)"
                        NAME="Debian GNU/Linux"
                        VERSION_ID="12"
                        VERSION="12 (bookworm)"
                        VERSION_CODENAME=bookworm
                        ID=debian
                        HOME_URL="https://www.debian.org/"
                        SUPPORT_URL="https://www.debian.org/support"
                        BUG_REPORT_URL=https://bugs.debian.org/
                    
                

せっかくなので、コンテナイメージ作成時に指定したファイルがちゃんとコピーされたかも確認してみます。Webブラウザにて確認はできていますが、違う角度から。当然ではありますが問題ないですね。

                    
                        root@SandboxHost-638585015028685282:/# ls /usr/share/nginx/html
                            50x.html  index.html

                        root@SandboxHost-638585015028685282:/# cat /usr/share/nginx/html/index.html 
                        <h1>Hello World!</h1>
                    
                

4. 最後に

ACIについて今回は単一のコンテナを扱いましたが、現実的にコンテナを活用する場合にはコンテナグループという単位で複数のコンテナをまとめて取り扱うことになるかと思います。加えてコンテナをデプロイするサービスについてもACIは一例であり、AKSやWeb App (for Containers)などなど他にも色々あります。


【関連記事】Azure Kubernetes ServicesをAzureリソースの視点で見てみよう


Azureにはコンテナに関連するサービスが多くあり、適切な選択が難しいかもしれません。その他にも色々とお困りごとが出てくるかもしれませんが、その際にはぜひとも法人でのAzure導入前の相談窓口であるAzure相談センターまでお気軽にお問い合わせいただけますと幸いです。弊社では、ユーザー様のご状況やご要望を踏まえて最適な形でのAzureの導入のご支援を提供しており、Azure に精通したスタッフが丁寧にご回答させていただきます。また皆様のAzureを前提とするコンテナアプリケーション開発の一助となるべく尽力いたします。

  • 【 著者紹介 】
    八釼 友輔 - Azure エヴァンジェリスト
    SB C&S株式会社 ICT事業本部 クラウド・ソフトウェア推進本部
    クラウド・ソフトウェア戦略企画部 1課
yyatsurugi-image-v3.png

Azureの導入や運用に関するお悩みは SoftBankグループのSB C&Sにご相談ください

SoftBankグループのSB C&Sは、さまざまな分野のエキスパート企業との協力なパートナーシップによって、多岐にわたるAzure関連ソリューションをご提供しています。

「Azureのサービスを提供している企業が多すぎて、どの企業が自社にベストか分からない」
「Azure導入のメリット・デメリットを知りたい」
「Azureがどういう課題を解決してくれるのか知りたい」
など、Azureに関するお悩みならお気軽にお問い合わせください。
中立的な立場で、貴社に最適なソリューションをご提案いたします。

クラウドサーバーご検討中の方必見
お役立ち資料一覧

クラウドサーバーご検討中の方必見 お役立ち資料一覧
  • クラウドサーバーの導入を検討しているがオンプレミスとどう違うのか
  • AWSとAzureの違いについて知りたい
  • そもそもAzureについて基礎から知りたい
  • 今、話題の「WVD」って何?

そのようなお悩みはありませんか?
Azure相談センターでは、上記のようなお悩みを解決する
ダウンロード資料を豊富にご用意しています。
是非、ご覧ください。

Azureの導入・運用に役立つ資料を
無料でダウンロードしていただけますDOWNLOAD

オンプレミスからクラウドへの移行を検討している方のために、安心・スムーズな移行を実現する方法を解説し、
運用コストの削減に有効な「リザーブドインスタンス」もご紹介するホワイトペーパーです。

Azureのことなら、
SB C&Sにご相談を!

導入から活用まで専門スタッフが回答いたします。
お気軽にお問い合わせください。