LoginSignup
52

More than 5 years have passed since last update.

AWSの無料枠を使ってEC2インスタンス上にDockerホストを構築する

Last updated at Posted at 2015-12-08

概要

AWSの無料枠、EC2だと一番小さなt2.microだけど、いろいろと試すことが可能です。たとえば、docker-machine経由でDockerホスト化して、様々なDockerコンテナを試してみるとか。

ここでは、AWSの無料枠にDockerホストを立ち上げて、DockerコンテナとしてGlassFishを立ち上げてみます。

以下の、3, 4, 5はオプションです。デフォルトが定義されているはずなので、それが使えます。

手順

  1. AWSのアカウントを取得する
  2. リージョンを決める
  3. Virtual Private Cloud を作成する(オプション)
  4. インターネットゲートウェイを作って、VPCにアタッチする(オプション)
  5. ルートテーブルを修正してインターネットゲートウェイを追加する(オプション)
  6. サブネットを作成する(オプション)
  7. セキュリティブループを作りインバウンドルールを設定する
  8. docker-machineでcentos with dockerのインスタンスを生成する
  9. GlassFishをDockerコンテナとして導入する
  10. 楽しんで! have fun!

1. AWSのアカウントを取得する

こちからどうぞ。
スクリーンショット 2015-12-09 2.18.24.png

クレジットカードを登録するだけです。無料枠を超えたときのためです。AWSコンソールはとってもカスタマー思いなので安心してください。無料枠を超えるようなEC2インスタンスを作ろうとすると、枠超えちゃうけど大丈夫かい?、と聞いてくれます。素晴らしい。

今はなんとクリスマスセール?で$25分もらえちゃいます。いいなぁ。

2. リージョンを決める

無料枠で東京リージョンを使えます。早いです。

でも、ここでは、諸事情により様々なリージョンを使います。
注意すべき点は都度説明します。

3. Virtual Private Cloud を作成する(オプション)

デフォルトのVirtual Private Coludを使わない場合に実施してください。これは、仮想のプライベートなクラウド、です。バプリックなクラウド上に、プライベート空間を作成するってことです。

AWSコンソールから、サービス→VPCと選択します。するとこんな画面が出ます。
スクリーンショット 2015-12-09 2.34.14.png

ウィザードでなく、VPCの作成メニューからやってみましょう。

CIDRが、10.0.0.0/16です。
作るとこんな感じになります。
スクリーンショット 2015-12-09 2.47.52.png

4. インターネットゲートウェイを作って、VPCにアタッチする(オプション)

VPCを作成した場合は必要に応じてインターネットゲートウェイを作ります。インターネットアクセスを可能にするためのゲートウェイを作るということです。

このような感じで作ります。
スクリーンショット 2015-12-09 2.51.44.png

作れたら、それを選択して先ほど作成したVPCにアタッチします。
スクリーンショット 2015-12-09 2.53.42.png

5. ルートテーブルを修正してインターネットゲートウェイを追加する(オプション)

インターネットゲートウェイを作成した場合はルートテーブルに追加してやります。インターネットゲートウェイを作っただけでルートテーブルに追加していない場合は、当然ながらインターネットにアクセスできないVPCになっちゃいます。

やり方は、対象のVPCを選択して、ルートテーブルのリンクをクリックします。
スクリーンショット 2015-12-09 2.56.47.png

こんな感じで追加します。
スクリーンショット 2015-12-09 2.58.14.png

6. サブネットを作成する(オプション)

VPCを作成した場合はサブネットも作成します。

こんな感じでやります。
スクリーンショット 2015-12-09 3.00.08.png

アベイラビリティゾーン違いで複数作るのが基本です。ここではus-west-2aで作ってます。

7. セキュリティブループを作りインバウンドルールを設定する

EC2のコンソールを使います。docker-machineを使う場合は、2376ポートの開放が必要です。

スクリーンショット 2015-12-09 3.08.59.png

8. docker-machineでcentos with dockerのインスタンスを生成する

docker-machineを使います。次のようなスクリプトを実行します。環境に合わせて調整しましょう。

この設定例は、バージニア(us-east-1)向けの設定です。

リージョンの英名?はこちら。AWS リージョンを選択する

docker-machine --debug create \
    --driver amazonec2 \
    --amazonec2-access-key ***** \
    --amazonec2-secret-key ***** \
    --amazonec2-region us-east-1 \
    --amazonec2-ami ami-b57a3ddf \
    --amazonec2-ssh-user ec2-user \
    --amazonec2-instance-type t2.micro \
    --amazonec2-root-size 30 \
    --amazonec2-security-group sample \
    --amazonec2-vpc-id ***** \
    --amazonec2-subnet-id ***** \
    --amazonec2-zone a \
    sample

調整すべき値(amazonec2-xxxx)

パラメータ
access-key 自分のアクセスキーを指定します
secret-key 自分のシークレットキーを指定します
region リージョンを指定します
ami Dockerを含んだイメージを指定します
ssh-user イメージで生成されるインスタンスに接続できるユーザを指定します
instance-type インスタンスタイプを指定します。無料枠がt2.microです
root-size EBSのサイズです
security-group 先ほど作成したセキュリティグループを指定します
vpc-id 先ほど作成したVPCか既存のVPCのIDを指定します
subnet-id 指定したVPCに属するサブネットのIDを指定します
zone 指定したsubnetに対応したアペイラビリティゾーンを指定します

参考:docker Amazon Web Services

2015.12.11追記
未だにうまくいったりいかなかったりがあるようです。上のスクリプトは--debugを指定していますので何が失敗しているかがわかるかも。
ちなみに成功すると最後はこんな感じになります。

・・・
(sample) Calling RPCServerDriver.GetSSHUsername
Using SSH client type: external
Reticulating splines...
(sample) Calling RPCServerDriver.GetConfigRaw
(sample) Calling RPCServerDriver.GetConfigRaw
To see how to connect Docker to this machine, run: docker-machine env sample

通信状況の悪い環境でやると失敗することが多いような気がします。失敗した場合はamiイメージを変えてチャレンジしてみてください。

なお、docker-machine ls してリストアップされるマシン以下のフォルダに格納されます。これが正常ケースです。ssh用の公開鍵/秘密鍵ペアの他に、プライベート認証局の秘密鍵と証明書、サーバーの秘密鍵と証明書、設定ファイルなどがあります。

$ ls -ort ~/.docker/machine/machines/sample
total 72
-rw-------  1 hagi   381 12 10 22:34 id_rsa.pub
-rw-------  1 hagi  1679 12 10 22:34 id_rsa
-rw-r--r--  1 hagi  1123 12 10 22:42 server.pem
-rw-------  1 hagi  1679 12 10 22:42 server-key.pem
-rw-------  1 hagi  1679 12 10 22:42 key.pem
-rw-r--r--  1 hagi  1050 12 10 22:42 cert.pem
-rw-r--r--  1 hagi  1025 12 10 22:42 ca.pem
-rw-------  1 hagi  4213 12 10 22:43 config.json

失敗した場合はファイルが欠損しているようです。たとえば、証明書関連がないとか。
また、docker-machine lsしたときにSTATEがErrorとなるケースがあります。

NAME            ACTIVE   DRIVER       STATE     URL                         SWARM
sample          -        amazonec2    Error

こうなった場合は、
1.証明書などが格納されているフォルダを削除する
2.AWS上のEC2インスタンスの残骸を削除する(あれば)
3 AWS上のキーペアの残骸を削除する(あれば)
などの操作をしてから、あらためてチャレンジしてみてください。

そのあたりの詳細はまた書きます。

9. glassfishをDockerコンテナとして導入する

こちらを参考にして導入しましょう。

10. 楽しんで! have fun!

Docker環境がクラウド上にできました!あとは様々なDockerコンテナをビルドして動かしてみてください!

つぎは、Trend Micro の Deep Security as a service の導入

セキュリティ対策です。AWSなどのクラウド上にサービスを提供する環境を置く際、やっぱりセキュリティは大丈夫なの?という心配が少なくないですよね。従量課金でAWS無料枠のt2.microだと、0.01USD/Hourです。908円/月程度です。(1USD=122円、24H x 31日)

スクリーンショット 2015-10-22 22.34.53.png

参考:http://www.trendmicro.com/cloud-content/us/pdfs/business/datasheets/ds_deep-security-as-a-service.pdf

導入手順はまた今度。

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
52