EC2 に Docker と Node.js を入れてコンテナを動かしてみた
AWS でコンテナを実行するサービスとして、ECS や EKS があります。
とても便利なサービスですが、今回は勉強のために EC2 に 自分で Docker と Node.js をインストールしてコンテナを動かしてみました。
参考サイト
以下のサイトを参考にしました。
手順概要
- EC2 インスタンス起動
- EC2 インスタンスへ接続して Node.js をインストール
- ディレクトリとファイルの作成
- docker build ~ docker run
- アクセス確認
1. EC2 インスタンス起動
以下の設定で起動しました。
・AMI: Amazon Linux 2
・インスタンスタイプ: t2.micro
・ネットワーク: パブリックサブネット
・セキュリティグループ: 全開放
・IAM ロール: AmazonSSMManagedInstanceCore
ポリシーをアタッチ済み
・ユーザーデータ: 以下のユーザーデータで Docker をインストール
#!/bin/bash
sudo yum update -y
sudo amazon-linux-extras install docker -y
sudo service docker start
本当は Node.js もインストールしたかったのですが、色々試してもうまくいきませんでした。
そのため、Node.js はこの後の手順でインストールします。
2. EC2 インスタンスへ接続して Node.js をインストール
EC2 インスタンス起動後、セッションマネージャーでインスタンスへ接続します。
セッションマネージャーで接続できない場合は、以下のトラブルシューティングをお試しください。
sudo su
Docker がインストールされていることを確認します。
docker -v
インストールされていれば以下のような出力が表示されます。
Docker version 20.10.13, build a224086
続いて、AWS 公式ドキュメント に沿って、Node.js をインストールします。
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.34.0/install.sh | bash
. ~/.nvm/nvm.sh
今回は node のバージョンを指定します。
最新バージョンを指定したら、GLIBC not found
というエラーが発生しました。
このエラーの解決策がバージョンを落とすことだったので、今回は以下のバージョンを指定しています。
nvm install 14.7.0
以下のコマンドが成功すれば、Node.js のインストールは完了です。
node -e "console.log('Running Node.js ' + process.version)"
これで Docker と Node.js をインストールすることができました。
3. ディレクトリとファイルの作成
続いてディレクトリとファイルを作成します。
まずは適当なディレクトリを作成して移動します。
mkdir ec2-nodejs-app
cd ec2-nodejs-app
続いてディレクトリ内で npm init -y
と npm i express
で初期化とモジュールインストールを行います。
npm init -y
npm i express
初期化とモジュールインストール後、以下のファイルを作成します。
nano でも vim でもお好きな方法でファイルを作成してください。
FROM node:8-alpine
RUN mkdir -p /usr/src/app
WORKDIR /usr/src/app
COPY . .
RUN npm install
EXPOSE 3000
CMD [ "node", "server.js" ]
// server.js
const express = require("express");
const app = express();
app.get("/", (req, res) => {
res.send("Welcome from a Node.js app!");
});
app.listen(3000, () => {
console.log("Server is up on 3000");
});
4. docker build ~ docker run
ここからは Docker でコンテナを作成していきます。
ディレクトリ内で docker build
を実行します。
docker build -t ec2-nodejs-app .
docker images
で IMAGE ID を確認し、コピーしておきます。
docker images
今回だと a35444cd4783
がビルドした IMAGE ID です。
REPOSITORY TAG IMAGE ID CREATED SIZE
ec2-nodejs-app latest a35444cd4783 3 seconds ago 75.6MB
node 8-alpine 2b8fcdc6230a 2 years ago 73.5MB
IMAGE ID を指定して、docker run
でコンテナを起動します。
docker run -p 80:3000 a35444cd4783
起動すると、以下のような出力が表示されます。
Server is up on 3000
これでコンテナが起動しました。
5. アクセス確認
最後にアクセスできるか確認してみます。
EC2 コンソールから「パブリック IPv4 アドレス」または「パブリック IPv4 DNS」をコピーしてアクセスします。
アクセスできると以下のようなページが表示されます。
なお、セキュリティグループで HTTP のインバウンドアクセスを解放しておかないとアクセスできませんのでご注意ください。
今回は検証なのでセキュリティグループは全開放です。
これで無事に EC2 に Docker と Node.js を入れてコンテナを動かし、アクセスすることができました。
まとめ
今回は EC2 に Docker と Node.js を入れてコンテナを動かしてみました。
EC2 だと Docker や Node.js を自分でインストールする必要があり、ECS のすばらしさをあらためて実感できました。
また、参考サイトの手順が非常にわかりやすかったことにも感謝しています。
今回の内容が参考になれば幸いです。
Discussion