自宅でできる「一人DevOps」その2

docker-logo

こんにちは、クラウドイノベーションセンターの金子です。

この記事は自宅でできる「一人DevOps」その1の続きとなっています。

自動テストサービスTravisCIとGithubを連携させる

ソースコードに変更を加えてリポジトリにプッシュしたら、自動でテストが行われる環境を作りたいと思います。自動テストツールとしてTravisCIというサービスを利用します。TravisCIはGithub上のリポジトリと連携する仕組みがすでに組み込まれているので、非常に簡単に利用できます。

TravisCIにログインし、プロファイルページに移動します。

angular-phonecatリポジトリが表示されているので、以下のように連携を有効にします。

travis-github

続いて、テスト用の設定を行います。以下のリンクにアクセスしてください。Githubアカウント名の箇所はご自身のアカウント名に置き換えてください。

https://travis-ci.org/Githubアカウント名/angular-phonecat/settings

「Environment Variables」の箇所に、テスト実行時に使用する環境変数を設定します。ここでは以下の3つの変数を設定します。

  • DOCKER_USERNAME: Docker ID
  • DOCKER_PASSWORD: Docker IDのパスワード
  • DOCKER_EMAIL: Docker IDに紐付いているEmailアドレス

「Display value in build log」と書いてある箇所はOFFのままにしておいてください。ONにするとパスワードがテスト実行時のログに表示されてしまい危険です。

travis-env-val

環境変数が設定できたら準備は完了です。

TravisCIによる自動テストの仕組み

簡単にTravisCIの仕組みを解説しておきます。TravisCIはGithub上のリポジトリを監視していて、リポジトリに対してソースコードがプッシュされたことを検知すると、自動でテストを行うようになっています。

TravisCI上で行うテストの設定は、リポジトリ内の.travis.ymlというファイルに記述します。実際にテストを行っている箇所は18行目と19行目です。それぞれユニットテストとエンドツーエンドテストを行っています。これら二つのテストコマンドをパスすると、after_successという項目内のコマンドが実行されます。ここではDockerHubに対してDockerイメージをプッシュしています。DockerHubに関しては後で触れたいと思います。

Docker Cloud上にアプリケーションをデプロイする

アプリケーションをDocker Cloud上にデプロイします。Docker CloudはシンプルでわかりやすいUIが特徴の、Dockerコンテナ管理サービスです。Docker Cloud自体がコンテナの実行環境を提供するわけではなく、AWSやMicrosoft Azureといったクラウドプロバイダ上の仮想マシン(ノード)に接続し、Docker実行環境の構築、Dockerイメージ管理サービスであるDockerHubとの連携、コンテナの作成や削除、性能監視などを行います。ノード1台までであれば無料で使用することができます。

Docker CloudとAWSを連携させる

AWSにログインし、Identity and Access Management(IAM)サービスの画面に移動します。以下のリンクから飛べます。

https://console.aws.amazon.com/iam

画面左のメニューからユーザーをクリックし、右側に表示されるユーザ一覧から自身のユーザ名をクリックします。

「アクセスキーの作成」というボタンがあるのでクリックすると、アクセスキーが作成され、認証情報が記載されたCSVファイルをダウンロードすることができます。

続いて、Docker Cloudにログインし、以下のアカウントページに移動してください。

https://console.aws.amazon.com/iam

ここではクラウドプロバイダと接続するための認証情報を入力します。Amazon Web Servicesの「Add credentials」ボタンをクリックして、Access Key IDSecret Access Keyを入力してください。Statusが緑色のチェックマークに変われば接続完了です。

ノードの作成

Dockerコンテナを実行するためのノードを作成します。画面左上の「Nodes」タブをクリックし、「Launch new node cluster」ボタンをクリックします。

dockercloud-launch-new-node

ノード作成画面ではNode cluster nameだけ入力し、残りの項目はデフォルトのままにしておいてください。AWS上で必要なネットワークなどの設定は自動で行われます。

dockercloud-create-node-cluster

画面右下の「Launch node cluster」ボタンをクリックすると、ノードの作成が開始されます。ノードの作成は10分前後で完了します。StateがDeployedになっていることを確認してください。

dockercloud-node-deployed

DockerHubにイメージをアップロードする

DockerHubはDockerイメージを保存するためのリポジトリサービスです。Dockerコンテナは、このリポジトリからダウンロードしたイメージから作成されます。Docker CloudははじめからDockerHubと連携されていて、DockerHubからイメージをダウンロードしてDocker Cloud上でコンテナを実行することができます。

まずはDockerHub上にサンプルアプリケーション用のリポジトリを作成します。Docker Cloudの画面左上にある「Repositories」タブをクリックし、「Create new repository」をクリックします。

dockercloud-new-repository

nameの部分にangular-phonecatと入力し、公開範囲をPublicとしてください。Descriptionは空欄で構いません。最後に「Create」ボタンをクリックしてください。

dockercloud-create-repository

リポジトリが作成されました。

dockercloud-repository-created

続いて、イメージを作成し、リポジトリにイメージをアップロードします。この作業はローカルPCにて行います。https://console.aws.amazon.com/iamの手順が完了していることが必要です。

以下のコマンドを実行し、イメージを作成します。ディレクトリパスはご自身の環境に合わせてください。DockerIDの箇所はご自身のIDに置き換えてください。

イメージが作成されたら、イメージをアップロードします。以下のコマンドを実行してください。DockerIDDockerIDPasswordDockerIDEmailとなっている箇所は、ご自身のものに置き換えてください。

以上でイメージのアップロードは完了です。

コンテナの作成

サンプルアプリケーションをデプロイします。画面左上の「Stacks」タブをクリックし、「Create your first stack」ボタンをクリックします。スタック(Stack)とは、複数のコンテナの集まりです。今回はサンプルアプリケーション実行用のコンテナに加え、ロードバランサー用のコンテナも作成します。ロードバランサーコンテナ1つ、アプリケーションコンテナ2つという構成です。

Docker Cloudではスタックの構成を設定ファイルに書くことができます。今回作成するスタックの定義は以下のように書くことができます。

DockerIDとなっている箇所はご自身のIDを記載してください。上記内容をコピーし、スタック作成画面に貼り付けます。

dockercloud-stackfile

最後に、画面下部の「Create and deploy」ボタンをクリックすると、スタックがデプロイされます。

数分でデプロイは完了するはずです。以下の図のようにStatusがRunningとなっていることを確認してください。

dockercloud-stack-running

サンプルアプリケーションにアクセスする

それではデプロイされたアプリケーションにアクセスしてみましょう。画面左上の「Services」タブをクリックし、「lb」のリンクをクリックしてください。

dockercloud-services

続いて、画面中央あたりの「Endpoionts」タブをクリックし、「Service endpoints」と書かれた箇所のURLをブラウザで開いてください(URLの右にあるアイコンをクリックすればリンク先が開きます)。

dockercloud-endpoints

以下の様な画面が表示されたら、「app/」をクリックしてください。

angular-phonecat-appindex

アプリケーションが表示されました。

angular-phonecat

以上で「一人DevOps」環境の構築は完了です。次回はいよいよDevOps体験をしていきます。続きはこちらです。

Pocket

コメント