はじめに
みなさん、コンテナイメージレジストリ使っていますか?
コンテナを管理する際に使うマネージドサービスがコンテナイメージレジストリです。
AWSであれば、Amazon ECR(Amazon Elastic Container Registry )がありますね。
もちろんAlibaba Cloudにも同様のサービスがあります。
それが ACR (Alibaba Cloud Container Registry) です。
今回は、前回の記事で作成したACK(Alibaba Cloud Container Service for Kubernetes)クラスター上に、ACRからコンテナイメージをデプロイしてみます。ACKクラスター上のアプリケーションと、データベースを接続する基本的な構成なので、他のアプリケーションを動かす際にも応用ができきます!
ACK(Alibaba Cloud Container Service for Kubernetes)を使って、Alibaba Cloudでk8sを動かしてみる - Qiita
今回やること
- ACRを作成し、WordPressのコンテナイメージをPushする
- ACRにPushされたWordPressのコンテナイメージを、ACKクラスター上にデプロイする
- データベースとしてApsaraDB RDSを作成し、ACK上のWordPressと接続する
ACRの作成
Container Registryのコンソールを開きます。
Enterprise版、Personal版があります。
今回はPersonal版を使いますので、右側のPersonal Editionをクリックします。

Enterprise版の場合は、Helmチャート(K8s上でアプリケーションを実行するためのリソースが定義されたパッケージ)が使えたりするみたいですね。本番環境で運用する場合はEnterprise、それ以外の場合はPersonal Editionでよさそうです。
それぞれのEditionの違いが説明されます。
Alibaba Cloudはこういった部分のUI/UXがかなり洗練されていますね。
Create ACR Personal Editionをクリックします。

本当にいいんだな?と聞かれるので、チェックを入れてConfirmをクリックします。
大規模かどうかに関わらず、本番ならEnterprise Editionがおすすめのようですね。

次に、Dockerのパスワードを設定します。
Reset Docker Login Passwordをクリックし、パスワードを設定しましょう。
ここで入力したパスワードはACRの操作に必要なので、どこかに控えておいてください。

Namespaceの作成
では、ACRに設定をしていきます。
まずは、Namespaceの作成です。
ここでいうNamespace(=名前空間)は、リポジトリのnamespaceのことです。
例えば、web-appといったコンテナイメージを社内の複数のチームで利用することを考えてみます。
app-a-dev-team、app-b-dev-teamのような形のnamespaceを切って、それぞれのチームごとにリポジトリを持つことで、チームごとに同じ名前のイメージを管理することができます。
app-a-dev-team/web-app、app-b-dev-team/web-appといったように、相互に干渉することなくイメージの管理を行うことができるため、非常に便利です。
画面左のNamespaceをクリックしCreate Namespaceを選択します。
Namespace欄に名前を入力して、Confirmをクリックします。

リポジトリの作成
次はリポジトリの作成です。
画面左からRepositoriesを選択し、Create Repositryを選択します。
Repository Nameに任意の名前を入力します。
Summaryも必須なので、何に使うか簡単に入力しておきましょう。
入力できたらNextを選択します。

外部のリポジトリと連携ができるようですね。
今回は、簡単のためにLocal Repositryを選択します。

ACRにログインする
ではローカルから Alibaba Cloud Docker Registry にログインしてみましょう。
↑の赤枠のコマンドを、ローカルのTerminalなどで実行します。
(メールアドレス部分は、自身のメールアドレスに修正してください)

上記コマンド実行後パスワードの入力が求められるので、ACRの作成時に設定したDockerのパスワードを入力しましょう。
Login Succeededと表示されれば、ログインは完了です。
WordPressのイメージを取得し、ACRにPushする
今回は、ブログソフトウェアのWordPressをACK上にデプロイしていきます。
以下のコマンドで、WordPressの公式Dockerイメージを取得しましょう。
$ docker pull WordPress
次にdocker imagesで、取得済みのDocker Imageの一覧にWordPressがあることを確認しましょう。
$ docker images
$ REPOSITORY TAG IMAGE ID CREATED SIZE
$ WordPress latest 8b105c533d0c 10 days ago 615MB
以下のコマンドを入力し、取得したイメージにタグをつけて、ACRにPushします。
この作業を行うことで、公式から取得したDocker Imageを自分のプライベートなリポジトリに保存することができます。
$ docker tag WordPress registry-intl.ap-northeast-1.aliyuncs.com/acr-sample/acr-sample-repo:WordPress
$ docker push registry-intl.ap-northeast-1.aliyuncs.com/acr-sample/acr-sample-repo:WordPress
では、Pushしたイメージを確認しましょう。
ダッシュボードの左側からTagsを選択します。
すると、Push済みのイメージの一覧が確認できます。
Pushしたイメージの脆弱性スキャンをしてみる
また、右のほうにはSecurity Scanという項目がありますね。
AWSでいうInspectorのような、脆弱性スキャン機能のようです。
試しにクリックしてみましょう。

結果が表示されました、No vulnerabilityということで脆弱性は無いようです。
AWSのECRでも同じようなことができますが、Alibaba CloudはUIが綺麗ですね。

WordPressをデプロイする
すでに作成済みのACKクラスターに対して、デプロイしてみましょう。
ACKのダッシュボード画面を開き、既存のクラスターを選択します。
そして、画面左のDeploymentをクリックし、Create from Imageをクリックします。

Name欄にack-WordPressと入力し、Nextをクリックします。

まずは、デプロイするWordPressイメージを選択します。
Select Imageをクリックしましょう。

Alibaba Cloud Container Registryを選択。
先ほど作成したリポジトリをクリックすると、左上にチェックが入ります。
そのうえで、OKボタンをクリックします。

Image Nameが設定されたことを確認します。
Image Versionは空欄のままで大丈夫です(自動的に最新のバージョンが選択されます)
そして、Set Image Pull Secretをクリックします。

ここでは、ACRからイメージをPullするための認証情報を登録します。
Nameは任意の名前を入力。
UsernameはDockerの認証を行ったメールアドレス、PasswordはACRを作成時にセットしたパスワードです。
設定できたら右下のOKをクリックしてください。

Resource Limitは、アプリケーションのリソース制限です。
CPUは0.5Core、Memoryは512MiBを選択します。
反対に、Requiredは、最低限確保するリソースの量です。
リソース不足でアプリケーションが起動しないといった自体を避けることができます。
CPUは0.25 Core、Memoryは256MiBを選択します。

次にポートの設定を行います。
NameはWordPress、Container Portは80を入力します。
設定ができたら、画面右上のNextをクリックします。

Advanced設定ページに遷移するので、Servicesの隣のCreateをクリックします。
(画面一番下のCreateではないので注意してください)

Type で Server Load Balancer - Public Access - Create SLB Instance を選択します。
Modifyをクリックすることで、SLB Instanceのタイプを変更することができます。今回はデフォルトのslb.s1.smallを選択します。
Port Mappingでは、以下のように設定します。
| 設定項目 | 値 |
|---|---|
| Name | WordPress-svc-port |
| Service Port | 80 |
| Container Port | 80 |
設定ができたら、右下のCreateをクリックします。 |
|
![]() |
Serviceの作成ウインドウが閉じるので、再度画面右下のCreateをクリックします。

アクセスしてみる
では、WordPressにアクセスしてみましょう。
画面左のNetworkをクリックし、Servicesの一覧を表示します。
先ほど作成したack-WordPress-svcのレコードがあることが確認できますね。
External Endpoint欄のIPアドレスが、WordPressのIPアドレスです。
ApsaraDB RDSでWordPress用のデータベースを作成する
ただ、WordPressはデータベースが無いと動きません。
もちろん、コンテナの中にデータベースを立てて動かすこともできるのですが、データの永続性という観点ではデータベースは外出ししたほうが無難です。
そのため、今回はApsaraDB RDSを利用してDBインスタンスを構築し、ACKと連携させてみましょう。
(※ ずっと アスパラ だと勘違いしていた時期があったのですが、 アプサラ ですので皆様はお間違えなきよう…)
DBインスタンスを作成する
まずは、ApsaraDB RDSのコンソールを開きます。
左側のInstancesを選択し、Create Instanceをクリックします。

ApsaraDB RDSの設定画面です。
Billing MethodはPay-as-You-Go、つまり従量課金を選択します。
DB EngineはMySQLの8.0にしました。
EditionはBasicです。

Zoneはコンテナが稼働しているTokyo Zone Aを選択します。
(※ 右上に青く②とバッジが表示されていますが、これは2個のコンテナが動いているよ、と教えてくれているようです。Zoneを選択する際に非常に便利だな〜と驚きました)
Instance Typeは一番小さいものを選択しています。

設定できたら、画面右下のNext:Instance Configurationをクリックします。
時間当たりの料金がここで確認できる仕様は本当に便利ですよね。
Google CloudやAWSも実装してくれたらいいのに…。

次は確認画面なので、問題なければ右下のNext:Confirm Orderをクリックします。

この画面が表示されれば完了です。
ApsaraDB RDSが起動するまで数分待ちましょう。

DBの初期設定を行う
では、データベースの初期設定をしていきます。
ApsaraDB RDSのコンソール画面を開きます。
Instance StatusがRunningになっていれば作成が完了しています。
Instance IDをクリックして設定画面に入りましょう。

DBのアカウント作成
まずはデータベースのアカウント作成です。
画面左からAccountを選択し、Create Accountを選択します。

Database Account欄には任意のユーザー名を入力します。
パスワードはデータベースに接続するためのパスワードです。
入力ができたらOKをクリックします。

databaseの作成
次に、データベースを作成していきます。
あまりデータベースを使われない方だと混乱するかもしれないので補足しますと、ApsaraDB RDSのインスタンスはすでに作成が終わっており、マネージドなMySQL環境を使えるようになっています。この環境の中には、1つのデータベースだけではなく、複数のデータベースを混在させることができるので、今回WordPressが操作する対象のデータベースを今から作成する、というイメージです。
AWSのAmazon RDSだと、DB作成後にデータベースの作成を行うためには、EC2やCloud9などを使ってインスタンスに接続し、SQLコマンドを叩く必要があったので、この機能は非常に便利だな〜と感じます。
では、画面左からDatabaseをクリックしCreate Databaseを選択しましょう。

Database NameにWordPressと入力します。
Supported Character Setはutf-8を選んでください。
そして、右下のCreateを選択します。

接続情報の確認
次に、データベースへの接続情報を確認します。
画面左からDatabase Connectionをクリックし、Internal EndpointのDNS名を控えます。以上で、ApsaraDB RDS側の設定は完了です。

ACK上のWordPressからApsaraDB RDSへ接続する
WordPressの画面に戻りましょう。
日本語を選択し、次へをクリックすると、初期設定画面に入ります。

ここで、WordPressにApsaraDB RDSに接続する方法を教えてあげます。
データベース名はWordPress
ユーザー名はwpuser
パスワードは先ほど作成した任意のパスワード。
データベースのホストは、先ほどコピーしたApsaraDB RDSのDNS名です。
全て入力できたら送信をクリックします。

データベースとの通信が問題なく完了すれば、以下の画面が表示されます。
インストール実行をクリックしてください。

WordPressの設定を行う
次に、WordPressの設定を行います。
サイトのタイトルと、管理者ユーザー名を設定します(任意の名前です)
メールアドレスを入力し、検索エンジンがサイトをインデックスしないようにするにチェックを入れます。これは、テスト用サイトなのでチェックを入れていますが、本番環境で公開する場合はチェックを外しておきましょう。Googleなどのクローラがサイトをインデックスしてくれます。
設定できたらWordPressをインストールをクリックします。

無事インストールできたようです。
では、WordPressの管理画面にログインしてみましょう

先ほど設定したユーザー名(またはメールアドレス)と、パスワードを入力し、ログインをクリックします。

WordPressの管理画面が開きました!
あとは通常のWordPressと同じように管理し、ユーザーに公開することが可能です。

おわりに
今回はACKのクラスター上にWordPressのアプリケーションをデプロイし、データベースは外出しのApsaraDB RDSを使う環境を作成しました。
クラスター上でアプリケーションを動かし、データベースをApsaraDB RDSで稼働させるという構成は、そのまま他のアプリケーションを使うときも同じです。
ぜひ自作のアプリケーションをAlibaba CloudのACK上で動かしてみてください!










