こんにちは!23年度に新卒入社した圡井と申します! 現在、マネージドサービス部(以下、MS部)でOJTをしています。 MS部では、お客様のAWS環境上にある各種リソースを監視・運用する、 MSP(Managed Service Provider)業務を中心に、お客様の支援を行っております。
概要
この記事は、インフラストラクチャのモニタリングを行うことができるプラットフォームであるNewRelicを利用して、Amazon EC2上で動作しているDockerコンテナの監視+アラート設定したという記事です。
対象・目標
MS部では監視プラットフォームの一つとしてNewRelicを利用しており、 OJTの一環としてハンズオンを行いました。 また、当たり前の技術になりつつあるコンテナ技術を 個人的に検証してみたいと思い、結果をハンズオン風にして本記事を執筆しています。
本記事では以下を対象・目標としています。
対象
- Dockerが初めましての方
- NewRelicで監視設定をちょっと触ったことがある方
目標
- Dockerコンテナを起動できるようになる
- NewRelicを使ったオリジナルの監視設定を作成できる
想定するユースケース
想定するユースケースは、
- ある会社では、EC2を利用してWebサービスを提供している。
- そのサービスはDockerコンテナ上のApacheによって稼働している。
- コンテナ数は要求に応じてスケーリングしており、すべてのコンテナが停止した際に通知を受け取りたい。
というものを想定しています。
(ユースケースが実業務とかけ離れているかもしれませんが、温かい目でご覧ください。)
設定手順
監視設定の手順を以下に記述します。
前提
- Dockerを実行させるためのEC2環境
パブリックサブネットにhandson01という名前のEC2を配置 - Dockerパッケージのインストール
yumコマンドによるパッケージインストール - NewRelicのインストール
NewRelicダッシュボードからインストールコマンドを取得し、
エージェントをEC2インスタンスにインストール
上記は割愛して、コンテナの起動とNewRelicの設定から記載します。
Docker
Dockerコンテナを稼働させるためには
- Dockerファイルの作成
- Dockerイメージの作成
- Dockerコンテナの実行
の3つの手順が必要となります。
前提とするディレクトリ構成
今回は以下のようにファイルを配置しています。
またWebServerImage
をカレントディレクトリとしています。
WebServerImage:作業用ディレクトリ ┗━ Dockerfile:コンテナの設計図を記述するファイル ┗━ index.html:コンテナ内にコピーするWebサーバ用index.html
Dockerfile,index.htmlの作成
Dockerfileとは、実行したいコンテナの設計図となる部分です。 後述するDockerイメージの定義を行います。
今回想定するWebサービスはApacheを使って稼働しているので、 以下のようにDockerfileに書き込みます。
# ベースのDockerイメージ FROM amazonlinux:2023 # イメージ作成時に実行されるコマンド # yum updateとapacheインストール RUN yum update -y \ && yum install httpd -y # ポートの開放 EXPOSE 80 # Docker上のディレクトリにローカルファイルをコピー COPY index.html /var/www/html/index.html # コンテナ起動時に実行されるコマンド CMD ["/usr/sbin/httpd", "-DFOREGROUND"]
ローカルのファイルをコンテナ内にコピーしたり、イメージ作成時やコンテナ起動時に自動的にコマンドを実行することができます。
index.htmlは以下のように記述しています。
<html> <body> <h1>RUNNING !!</h1> </body> </html>
Dockerイメージの作成
前手順で作成したDockerfileから、構成要素をまとめてテンプレート化で実行可能な状態にしたDockerイメージを作成します。
以下コマンドでDockerfileからDockerイメージを生成します。
docker build ./ -t my_apache
-t
を指定することで、Dockerイメージに名前を付与することができます。
docker build — Docker-docs-ja 24.0 ドキュメント
それでは、作成できたイメージを確認してみましょう。 以下コマンドで作成したDockerイメージを確認できます。REOISITORYが指定した名前で作成されていることがわかります。
# 作成したDockerイメージを確認するコマンド docker image ls # イメージ一覧 REPOSITORY TAG IMAGE ID CREATED SIZE my_apache latest a0344f6621e2 6 hours ago 259MB
Dockerコンテナの実行
前手順で作成したDockerイメージをコンテナとして実行します。
以下コマンドでDockerイメージを実行します。
docker run -d -p 8080:80 my_apache
-d
を指定することで、コンテナをデタッチドモードで実行できます。デタッチドモードにすることで、バックグラウンドでコンテナが起動するため、ターミナルを引き続き利用できます。
-p 8080:80
を指定することで、コンテナ実行環境の8080番ポートをコンテナ内の80番ポートと紐づけることができます。
docker run — Docker-docs-ja 24.0 ドキュメント
まずは、起動したコンテナの確認をしてみましょう。 以下のコマンドで実行中のコンテナを確認することができます。元としているイメージやコンテナ実行時に動作したコマンド、リッスンしているポートを確認できます。
# 起動中のコンテナを確認するコマンド docker ps # 起動中のコンテナ一覧 CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 0ebed53c22ef my_apache "/usr/sbin/httpd -DF…" 7 hours ago Up 7 hours 0.0.0.0:8080->80/tcp, :::8080->80/tcp boring_bhaskara
docker ps — Docker-docs-ja 24.0 ドキュメント
次に、コンテナによるWebサーバの動作確認をしてみましょう。 以下のように、curlコマンドで確認してみます。作成したindex.htmlがレスポンスとして帰ってきているので、Webサーバとして動作していることがわかります。
# HTTPレスポンスを確認するコマンド curl localhost:8080 # 実際に帰ってきたレスポンス <html> <body> <h1>RUNNING !!</h1> </body> </html>
前半の「概要とDocker設定」部分はここまでです。
後半の「NewRelicの設定とまとめ」部分は【初心者】NewRelicでDockerコンテナの数を監視してみた【2/2:NewRelic設定編】
をご参照ください。
圡井一磨(執筆記事の一覧)
23年度新卒入社しました。最近は自炊にはまっています。アパートのキッチンが狭くて困ってます。