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?

【ハンズオン】自作アプリをEC2でコンテナ起動させる方法

Posted at

記事を読んでいただきありがとうございます。
モブエンジニア(@mob-engineer)です。

個人的にDockerをキャッチアップを行っています。
キャッチアップの一環として「自作アプリをEC2でコンテナ起動させる」手順を記事としてアウトプットしたいと思います。

対象読者

  1. Dockerについて学び始めた方
  2. 簡単なハンズオンを触ってDockerについてキャッチアップしたい

自作アプリ

ソースコードは以下GitHubリポジトリに格納済みです。

GitHub

サンプルアプリなのでご自身のGitHubアカウントへForkしてから利用してください。

EC2での作業

あらかじめEC2環境を構築しておいてください。

EC2起動後画面

image.png

インバウンドルールとして80番ポートをあらかじめ開放しておいてください。

image.png

構築後なので、システムアップデートを行っておきましょう。

sudo yum update -y

Amazon Linuxで構築している場合gitがインストールされていないためインストールを行いましょう。

sudo yum install git -y

今回のサンプルアプリではNode.jsを利用しているためnpmもインストールします。

curl -fsSL https://rpm.nodesource.com/setup_18.x | sudo bash -
sudo yum install -y nodejs

インストール後、Dockerのインストール⇒起動設定を行いましょう。

sudo yum install -y docker
sudo systemctl start docker
sudo systemctl enable docker
sudo usermod -a -G docker ec2-user

インストール完了後Docker Composeの設定を行いましょう。

sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose

インストール完了後リポジトリのクローンを行います。

git clone https://github.com/<fork先リポジトリ>/docker_sample.git

docker_sampleディレクトリに移動し依存関係をインストールしましょう

cd docker_sample
npm install

依存関係インストール完了後Dockerイメージをビルドします。

docker build -t your-app-name .

Docker Composeを利用してコンテナ起動を行ってみましょう。

docker-compose up -d

コンテナが起動しているか確認しましょう。

[ec2-user@ip-172-31-33-211 docker_sample]$ sudo docker ps
CONTAINER ID   IMAGE      COMMAND                  CREATED              STATU                                                                                S                        PORTS                                   NAMES
f94d7aff0589   test-app   "docker-entrypoint.s…"   About a minute ago   Up A                                                                                bout a minute (healthy)   0.0.0.0:80->3000/tcp, :::80->3000/tcp   your-app-co                                                                                ntainer

ログ情報も見てみましょう。

[ec2-user@ip-172-31-33-211 docker_sample]$ sudo docker logs your-app-container

> node-task-manager@1.0.0 start
> node app.js

🚀 Server is running on port 3000
📝 Task Manager API is available at http://localhost:3000
❤️  Health check: http://localhost:3000/health
[ec2-user@ip-172-31-33-211 docker_sample]$

リアルタイムログ監視も行えるか確認しましょう。

[ec2-user@ip-172-31-33-211 docker_sample]$ sudo docker logs your-app-container

> node-task-manager@1.0.0 start
> node app.js

🚀 Server is running on port 3000
📝 Task Manager API is available at http://localhost:3000
❤️  Health check: http://localhost:3000/health
[ec2-user@ip-172-31-33-211 docker_sample]$ sudo docker logs -f your-app-container

> node-task-manager@1.0.0 start
> node app.js

🚀 Server is running on port 3000
📝 Task Manager API is available at http://localhost:3000
❤️  Health check: http://localhost:3000/health
Error: [Error: ENOENT: no such file or directory, stat '/app/public/index.html'] {
  errno: -2,
  code: 'ENOENT',
  syscall: 'stat',
  path: '/app/public/index.html',
  expose: false,
  statusCode: 404,
  status: 404
}
Error: [Error: ENOENT: no such file or directory, stat '/app/public/index.html'] {
  errno: -2,
  code: 'ENOENT',
  syscall: 'stat',
  path: '/app/public/index.html',
  expose: false,
  statusCode: 404,
  status: 404
}

404エラーの原因については調査が必要ですが、リアルタイムでログが出ています。

本来index.htmlがpublic上に格納されている必要があります。

publicディレクトリを作成⇒index.htmlを移動する必要があります。
そのうえで、ビルド済みのDockerを再度ビルドする必要があります。
古いコンテナを削除しましょう。

sudo docker stop your-app-container
sudo docker rm your-app-container

再度Dockerイメージをビルドします。

sudo docker build -t test-app .

Dockerコンテナを起動させます。

sudo docker run -d -p 80:3000 --name your-app-container test-app

でブラウザへアクセスしてみましょう。

image.png

無事、自作アプリをコンテナ起動させることが出来ました。

所感

本手順を通じて「Dockerイメージの構築~Dockerイメージの削除~Dockerコンテナの正常性確認」まで行うことが出来ました。そのうえで、今回構築したアプリはあくまでハンズオン用の手順となります。実務で構築する場合、セキュリティ面での考慮・CI/CDを考慮した運用なども求められます。

Docker公式のドキュメントを読んでみることでコンテナへの解像度を高めることが出来ると考えています。(私も継続して読んでいきます)

Dockerドキュメント

ざっくりとした記事ですが最後までお読みいただきありがとうございました。

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?