こんにちは。最近負荷テストサービスのサイトをリニューアルしている浅見です。
先日、そのサイトを見ていただいた、AWS社のソリューションアーキテクトの方から、「AWS での分散負荷テスト」ソリューションも使ってみて。というお話をいただきました。
ということで、自社で動かしているJMeterのツールもクラウドネイティブな環境で動かしたいなー、と思い、JMeterを「AWS Fagate」上で動かすべく奮闘中です。
が、しかし、FagateどころかDockerすら使ったことがないので、まずはDockerの全体的なイメージと各コマンドについてまとめてみました。
目次
Dockerの全体的なイメージ
Dockerの全体的なイメージは図のようになりそうです。
ポイントとしてはこんな感じでしょうか。
- イメージを作る方法は3パターン
- リポジトリから取得(pull)
- Dockerfileから作成(build)
- コンテナから作成(commit) - 実際に動かすためには、イメージからコンテナの起動が必要
- 一つのイメージから複数のコンテナを起動することも可能
- コンテナは停止させることができ、状態は保存される
リポジトリに対するコマンド
docker search
リポジトリからイメージを探します。
jmeterに関連するイメージを探します。
# docker search jmeter
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
justb4/jmeter Lightweight Docker image for running the Apa… 54 [OK]
cirit/jmeter Jmeter 2.13 + Debian OS + Java Server JRE 8 29 [OK]
egaillardon/jmeter Docker image for Apache JMeter 10 [OK]
egaillardon/jmeter-plugins Docker image for Apache JMeter and JMeter pl… 8 [OK]
docker pull
リポジトリからイメージを取得します。
centos7のイメージを取得してみます。
# docker pull centos:centos7
centos7: Pulling from library/centos
Digest: sha256:e9ce0b76f29f942502facd849f3e468232492b259b9d9f076f71b392293f1582
Status: Downloaded newer image for centos:centos7
docker.io/library/centos:centos7
docker push
リポジトリへイメージを登録します。
使ったことないので、ヘルプを引用しておきます。
# docker push --help
Usage: docker push [OPTIONS] NAME[:TAG]
Push an image or a repository to a registry
Options:
--disable-content-trust Skip image signing (default true)
イメージに対するコマンド
docker build
Dockerfileからイメージを作成します。
カレントディレクトリのDockerfileをもとに、イメージ名「ptune/jmeter」タグ名を「5.3」で作成します。
# docker build -t ptune/jmeter:5.3 .
docker images
イメージの一覧を表示させます。
作成したイメージの一覧を確認します。
# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
ptune/jmeter 5.3 a262aa8443c4 4 seconds ago 604MB
centos centos7 b5b4d78bc90c 2 months ago 203MB
docker rmi
イメージの削除を行います。
イメージの指定は、「REPOSITORY:TAG」の形式で行います。
# docker rmi ptune/jmeter:5.3
Untagged: ptune/jmeter:5.3
docker run
イメージからコンテナを起動させます。
「jmeter」という名前で、「ptune/jmeter:5.3」のイメージを起動します。また、ローカルの1099番ポート、60000番ポートをコンテナ上のポートに紐づけています。
# docker run -d -it --name jmeter -p 1099:1099 -p 60000:60000 ptune/jmeter:5.3
[root@61933a2b99ce /]#
コンテナ上のコンソールから抜ける場合は、「Ctl+p → Ctl+q」で行います。「Ctl+c」や「exit」で抜けてしまうと、コンテナが停止してしまいます。
コンテナに対するコマンド
docker ps
起動中のコンテナの一覧を表示させます。
先ほど起動したコンテナが表示されます。
# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
61933a2b99ce ptune/jmeter:5.3 "/bin/bash" 2 minutes ago Up 2 minutes 0.0.0.0:1099->1099/tcp, 0.0.0.0:60000->60000/tcp jmeter
「docker ps」のみの場合は、稼働中のコンテナの一覧を表示させます。停止中のコンテナを表示させたい場合は、「docker ps -a」とする必要があります。
docker stop
コンテナを停止させます。
コンテナの指定は、「NAMES」または「CONTAINER ID」で行います。
# docker stop jmeter
docker ps -a
状態にかかわらずすべてのコンテナを表示します。
# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
61933a2b99ce ptune/jmeter:5.3 "/bin/bash" 4 minutes ago Exited (137) About a minute ago jmeter
ちなみに、-aオプションを付けないと起動中のコンテナが存在しないため、何も表示されません。
# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
docker start
コンテナを起動させます。
# docker start jmeter
jmeter
docker restart
コンテナを再起動させます。
# docker restart jmeter
jmeter
docker attach
コンテナへログインします。
docker attach jmeter
[root@61933a2b99ce /]#
コンテナ上のコンソールから抜ける場合は、「Ctl+p → Ctl+q」で行います。「Ctl+c」や「exit」で抜けてしまうと、コンテナが停止してしまいます。
docker logs
コンテナの標準出力内容を出力します。
コンテナログイン時に、「uname -a」を打っていたので、その結果が出力されています。
# docker logs jmeter
[root@61933a2b99ce /]# uname -a
Linux 61933a2b99ce 3.10.0-1127.el7.x86_64 #1 SMP Tue Mar 31 23:36:51 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux
docker inspect
コンテナの状態をjson形式で確認します。
# docker inspect jmeter
[
{
"Id": "61933a2b99cec4cdd2bba789aaacaf132620b4cc139b3d7fc334f8af1fc16ced",
"Created": "2020-07-07T01:24:34.946933217Z",
"Path": "/bin/bash",
"Args": [],
"State": {
"Status": "running",
"Running": true,
"Paused": false,
"Restarting": false,
"OOMKilled": false,
"Dead": false,
"Pid": 3047,
以下省略
「--format」オプションで、特定のもののみ取得することも可能です。
IPアドレスを取得したい場合。
# docker inspect --format='{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' jmeter
172.17.0.2
docker rm
コンテナを削除します。
# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
61933a2b99ce ptune/jmeter:5.3 "/bin/bash" 12 minutes ago Exited (137) 20 seconds ago jmeter
# docker rm jmeter
jmeter
# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
コンテナの削除をする場合は、コンテナを停止させておく必要があります。
docker commit
コンテナからイメージを作成します。
使っていないのでヘルプを引用しておきます。感覚的には、コンテナからイメージ作成するよりも、Dockerfileを修正してイメージ作成したほうが良い気がしますがどうんなんでしょう?
# docker commit --help
Usage: docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
Create a new image from a container's changes
Options:
-a, --author string Author (e.g., "John Hannibal Smith <hannibal@a-team.com>")
-c, --change list Apply Dockerfile instruction to the created image
-m, --message string Commit message
-p, --pause Pause container during commit (default true)
まとめ
はじめてdockerを触ってみて、わからないなりに、全体イメージと主要なコマンドについてまとめてみました。
JMeterスレーブを「AWS Fagate」で運用できるように、少しづつ検証していこうと思います。
お客様の課題ヒアリングと提案活動をメインに行っていましたが、2021年からはマーケティング担当として活動しています。技術ブログはもちろん、様々な形でディーネットの取り組みについて発信していきますので、よろしくお願いします!
LINK
クラウドベリージャム:プロフィールページ