1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Alibaba Cloud Container Registry Serviceを使用したコンテナ化されたイメージの構築と展開

Posted at

このチュートリアルでは、Alibaba Cloud Container Registryサービスを使用してコンテナ化されたイメージを構築し、デプロイします。

本ブログは英語版からの翻訳です。オリジナルはこちらからご確認いただけます。一部機械翻訳を使用しております。翻訳の間違いがありましたら、ご指摘いただけると幸いです。

#Alibaba Cloud Container Registryとは?

Alibaba Cloud Container Registry(ACR)は、コンテナイメージを構築して保存し、Dockerイメージを配布できるようにするスケーラブルなサーバーアプリケーションです。ACRを使用すると、保存されたイメージを完全に制御することができます。ACRには、GitHub、Bitbucket、自作のGitLabとの統合など、多くの機能があります。また、コンパイル後に新しいイメージを自動的にビルドし、ソースコードからアプリケーションまでテストすることもできます。

#ステップ1:Alibaba Cloud Container Registryを有効化する

アリババクラウドのアカウントを設定する必要があります。アカウントをお持ちでない場合は、アカウントにサインアップして、40以上の製品を無料でお試しいただけます。詳しくはこちらのチュートリアルをお読みください。
最初に行う必要があるのは、Alibaba Cloud Container Registryを有効化することです。製品ページに移動し、Get it Freeをクリックします。
Container Registry Consoleに移動し、サービスを設定してデプロイすることができます。

#ステップ2:アリババクラウドコンテナレジストリの設定
ネームスペースの作成

ネームスペースはリポジトリの集合体、リポジトリはイメージの集合体です。私は、アプリケーションごとに1つのネームスペースを作成し、サービスイメージごとに1つのリポジトリを作成することをお勧めします。

image.png

ネームスペースを作成したら、設定でパブリックリードかプライベートかを設定します。

ローカルリポジトリの作成とアップロード

リポジトリ(repo)とは、イメージを集めたものです。1つのサービスのイメージの全バージョンを1つのリポジトリに集めることをお勧めします。Create Repoをクリックし、ページ内の情報を記入します。Local Repositoryを選択します。しばらくすると、独自のリポジトリURLを持つ新しいリポジトリが作成されます。画像一覧ページに表示されています。

これで、ローカルで作成した画像をこのリポジトリにアップロードすることができます。

image.png

#ステップ3:Dockerクライアントでコンテナレジストリに接続する
Dockerクライアントから任意のコンテナレジストリに接続するためには、まずACRコンソールでDockerのログインパスワードを設定する必要があります。このパスワードを使ってDockerクライアントからレジストリにログインします。

image.png

次に、イメージ一覧ページで、接続したいリポジトリの前にあるAdminをクリックします。ここには、Dockerクライアントがリポジトリにアクセスできるようにするために必要な情報やコマンドが記載されています。リポジトリのイメージ名、イメージタイプ、インターネットアドレス、イントラネットアドレスが表示されます。インターネットアドレスは、世界中のどこからでもリポジトリにアクセスできるようにするためのものです。Alibaba Cloudコンテナクラスタでリポジトリを使用する場合は、インターネットアドレスを使用した方がはるかに高速になるので、インターネットアドレスを使用した方が良いでしょう。

ログインコマンド、プッシュコマンド、プルコマンドをコピーします。後で必要になります。

image.png

ローカルマシンでDockerクライアントを起動します。Dockerクライアントのインストール方法はdocker.ioを参照してください。MACの場合はdocker.appを起動してDockerクライアントを起動します。

Dockerクライアントのユーザーとしてログイン

docker login --username=random_name@163.com registry-intl.ap-southeast-1.aliyuncs.com

注: random_name は実際のユーザー名に置き換えてください。

パスワードを入力してエンターキーを押すと、ログイン成功のメッセージが表示されます。この時点で認証され、Alibaba Cloud Container Registryに接続されています。

image.png

#ステップ4: ローカルにイメージを構築し、ACRにプッシュ
Dockerfileを書いてイメージを構築してみましょう。以下はサンプルのDockerfileです。

######################
# This is the first image for the static site.
#####################
FROM nginx
#A name can be given to a new build stage by adding AS name to the FROM instruction.
#ARG VERSION=0.0.0
LABEL NAME = static-Nginx-image 
START_TIME = 2018.03.10 
FOR="Alibaba Community" 
AUTHOR = "Fouad"
LABEL DESCRIPTION = "This image is built for static site on DOCKER"
LABEL VERSION = 0.0.0
#RUN mkdir -p /var/www/
ADD /public /usr/share/nginx/html/
EXPOSE 80
RUN service nginx restart</code></pre>

Run the Docker build command to build the image. In order to later push the image to the repository, you need to tag the new image with the registry: 

<pre><code>docker build -t registry-intl-internal.ap-southeast-1.aliyuncs.com/fouad-space/ati-image .

image.png

ビルドが完了すると、すでにリポジトリ名がタグ付けされています。コマンドを使うと新しい画像が入っているのがわかります。

Docker image ls

image.png

コマンドで画像をACRリポジトリにプッシュします。

docker push registry-intl.ap-southeast-1.aliyuncs.com/fouad-space/ati-image:latest

image.png

イメージが正常にプッシュされたことを確認するには、Container Registryコンソールで確認します。リポジトリ名の前にある Admin をクリックし、Image version をクリックします。

image.png

画像をプルしてコンテナを作成します。docker pullコマンドを実行します。

docker pull registry-intl.ap-southeast-1.aliyuncs.com/fouad-space/ati-image:latest

image.png

すでにローカルコンピュータに画像を引っ張ってきているので、「画像は最新のものです」というメッセージが表示されています。

この画像を使って新しいコンテナを作成します。

docker run -ti -p 80:80 registry-intl.ap-southeast-1.aliyuncs.com/fouad-space/ati-image bash

image.png

#ステップ 5: GitHub を使ったイメージレポの構築
Alibaba Cloud Container Registryを使用すると、クラウド上でイメージをビルドするだけでなく、レジストリに直接プッシュすることもできます。これに加えて、Container Repositoryは、コードが変更されたときにビルドを自動的にトリガーする機能をサポートしています。

ビルド設定で**「コード変更時にイメージを自動的に作成する(Automatically create an image when the code changes)」**を選択すると、コードを送信した後にイメージを自動的にビルドすることができ、手動でビルドをトリガーする必要が無くなります。これにより、手作業を省くことができ、イメージを常に最新の状態に保つことができます。

GitHubのレポを作成し、Dockerファイルをレポにアップロードします。

image.png

その後、コンテナレジストリコンソールに戻り、レポを作成します。GitHubのレポパスを選択し、リポジトリ作成の手順を完了します。

image.png

リポジトリが作成されたら、Image Listに移動し、レポ名のAdminをクリックし、Buildをクリックし、最後にBuild Nowをクリックします。

メニューにビルドの進捗状況が表示され、ビルドプロセスの完全なログが表示されます。

image.png

ビルドログも全て見ることができます。きちんとしていると思いませんか?

image.png

ビルドが完了したら、イメージをデプロイする準備ができています。これをローカルのDockerエンジンに引っ張ったり、Alibaba Cloud Container Serviceにこのイメージをデプロイしたりすることができます。

#ステップ6: Webhookトリガーの作成

Webhookはトリガーの一種です。これを設定すると、イメージがビルドされたときに通知をプッシュしてくれるので、継続的なインテグレーションパイプラインを設定することができます。
これはどのように動作するのでしょうか? Webhook に Container Service のトリガーを設定したとします。イメージがビルドされたり、リビルドされたりすると、コンテナサービス内のアプリケーションが自動的にトリガーされて、最新のイメージを引っ張ってきて再デプロイされます。

Webhookを作成するには、まずコンテナサービスにアクセスして、アプリケーションのWeb URLを取得する必要があります。

image.png

ここで、この URL を使用してフックを設定します。コンテナレジストリのイメージが更新されるたびに、このアプリケーションは新しいイメージで再デプロイされます。間違った設定をするとアプリケーション全体がダウンしてしまう可能性がありますので、十分に注意してください。しかし、コンテナサービスではロールバックが可能なので、大きな心配はありません。

image.png

#概要
今回の記事では、以下のことを学んだはずです。

  • Alibaba Cloud Container Registryサービスとは何か、どのように実装することができるか。
  • Dockerイメージをホストするためのネームスペースとリポジトリを作成する方法。
  • ローカルにDockerイメージを構築してACRにプッシュする方法。
  • DockerイメージをACRから引っ張ってきて、それを使って新しいスコテナーをインスタンス化する方法。
  • GitHubソースコードを使ってコンテナレジストリにイメージをビルドする方法。
  • 最新のイメージのプルリクエストを自動的にトリガーしてサービスを再デプロイする方法。

アリババクラウドは日本に2つのデータセンターを有し、世界で60を超えるアベラビリティーゾーンを有するアジア太平洋地域No.1(2019ガートナー)のクラウドインフラ事業者です。
アリババクラウドの詳細は、こちらからご覧ください。
アリババクラウドジャパン公式ページ

1
0
0

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
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?