EC2*Amazon Linux*Dockerで爆速インフラ構築 - サーブレットコンテナ(jetty)+MongoDB -

インフラ構築って本当に面倒くさいですよね。

自分はアプリ開発がメインで、サーバ周りには馴染みがないので毎回ひーひー言ってます。

しかし、そんな自分でも簡単にインフラ環境が構築できる時代になったのです!!

そんな、爆速、楽勝なインフラ環境構築の方法をご紹介します。

目次

  1. EC2でインスタンス作成
  2. Dockerのインストール
  3. コンテナの実行

1. EC2でインスタンス作成

もはや定番中の定番ですが、AWSのEC2を利用します。

IaaS素晴らしいです。
オンプレで同じものを用意しようと思ったらどれだけ大変な事か。。。

AMIにはAmazon Linux のルートデバイスタイプ:ebs,仮想化タイプ:hvmのものを選択しました。

特にこだわりはありませんが、OSが他のLinuxになった場合、後続のコマンドが異なる可能性が高いのでお気をつけ下さい。

セキュリティグループを編集し、HTTP通信を全てのIPから許可します。
あとはインスタンスの作成を実行するだけ。

2. Dockerのインストール

Amazon LinuxにDockerをインストールします。

多少コマンドを叩く必要はありますが、とても簡単です。
まず、サーバへのSSH接続を行います。(ホスト環境はMacです)

cd [pemファイルが存在するディレクトリ]
ssh -i [pemファイル名] ec2-user@[ip]

権限でエラーが出る場合はこのコマンドを実行してから、sshをやり直してください。

$ chmod 0600 [pemファイル名]

続いて、サーバの設定を行います。
パッケージをアップデートし、Dockerをインストールして、開始させます。
最後にユーザグループの登録を行う事で、sudoなしでdockerコマンドが利用可能になります。

sudo yum update -y
sudo yum install -y docker
sudo service docker start
sudo usermod -a -G docker ec2-user

一度exitでssh接続を終了し、再度ssh接続を行って下さい。

3. コンテナの実行

DockerHubに既に自前のイメージがアップされている前提で進めます。
(Dockerイメージの作成およびアップは別の記事で紹介予定です)
今回使用するイメージはjettty(サーブレットコンテナ)にwarファイルを加えたものと、MongoDBにデータファイルを加えたものです。

docker login
docker pull [DockerHub id]/[リポジトリ名]:[バージョン]

ログインはプライベートリポジトリでなければ不要です。
以下idとリポジトリにサンプル名を使って説明します。

docker pull sample-id/sample-servlet:latest
docker pull sample-id/sample-mongodb:latest
docker run --name sample-mongo-name -d sample-id/sample-mongodb:latest
docker run --name sample--servlet-name --link sample-mongo-name:mongo -p 80:8080  -d sample-id/sample-servlet:latest

DockerHubからイメージを取得し、コンテナを実行しています。
nameはコンテナの管理を容易にするためのコンテナ名で、linkでサーブレットコンテナとデータベースを繋いでいます。
linkを使うと、コンテナの環境変数にリンク先のプライベートipが書き込まれます。(コンテナはそれぞれプライベートipを保持しています)
厳密には、アプリケーション(サーブレット)が環境変数にアクセスしてDBのipアドレスを取得し、DBへのアクセスを確立しています。
pはポートの連携で、今回はサーバの80ポートとコンテナの8080ポートをひも付けました。(今回使用したコンテナは8080ポートのみ開放されています)

あとはブラウザでipアドレスを指定するだけでサーバ上で起動しているアプリケーションにアクセスできます。

今回はイメージを前もって作成しておきましたが、Volume等を使って、Docker公式イメージでアプリケーションを動かす事も可能です。